summaryrefslogtreecommitdiff
path: root/src/ui.rs
blob: 9c8f6c30f5c615148fb1689477bdccecd703d493 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
use egui::{Color32, Stroke, Ui, epaint::CircleShape};

use crate::{Config, Diagnostics, Input, camera::Camera, sim::materials::MaterialId};

pub fn draw_egui<'a>(
    ui: &mut Ui,
    config: &mut Config,
    camera: &mut Camera,
    diagnostics: &Diagnostics,
    input: &Input,
) {
    puffin::profile_function!();
    ui.heading("Config");
    ui.add(egui::Slider::new(&mut config.brush_radius, 1..=100).text("Brush radius"));

    let material = config.brush_material.def();

    // material combobox
    egui::ComboBox::from_label("Select a material")
        .selected_text(format!(
            "Material: [{}, d={}]",
            material.name, material.density,
        ))
        .icon(move |ui, rect, _, _| {
            ui.painter().add(egui::Shape::Circle(CircleShape {
                center: rect.center(),
                radius: rect.width() / 2.5,
                stroke: Stroke::NONE,
                fill: Color32::from_rgb(material.color.0, material.color.1, material.color.2),
            }));
        })
        .show_ui(ui, |ui| {
            for material_id in MaterialId::ALL {
                ui.selectable_value(
                    &mut config.brush_material,
                    material_id,
                    material_id.def().name,
                );
            }
        });

    ui.add(egui::Slider::new(&mut config.fps, 1..=1000).text("Max FPS"));
    ui.checkbox(&mut config.show_ticks, "Visualize ticks");
    ui.label(format!("Real FPS: {}", diagnostics.fps));
    ui.heading("Camera");
    ui.add(egui::Slider::new(&mut camera.zoom, 0.0..=10.0).text("Zoom"));
    ui.add(egui::Slider::new(&mut camera.x, -1000.0..=1000.0).text("X"));
    ui.add(egui::Slider::new(&mut camera.y, -1000.0..=1000.0).text("Y"));
    ui.heading("Input");

    input.last_mouse_pos_on_screen.map(|p| {
        ui.label(format!(
            "Mouse: x,y=({x}, {y}), lmb_pressed={lmb}",
            x = p.0,
            y = p.1,
            lmb = input.is_lmb_pressed
        ))
    });

    input
        .last_mouse_pos_on_board
        .map(|p| ui.label(format!("Mouse (board): x,y=({x}, {y})", x = p.0, y = p.1,)));

    input
        .last_mouse_pos_on_board
        .map(|p| ui.label(format!("Mouse (chunk): x,y=({x}, {y})", x = p.0, y = p.1,)));
}