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
|
use egui::{Color32, Stroke, Ui, epaint::CircleShape};
use crate::{Camera, Config, Diagnostics, Input, 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.use_threading, "Use multithreading");
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.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,)));
}
|