honeycomb_render/options/
tab.rs

1use bevy::prelude::*;
2use bevy_mod_picking::picking_core::PickingPluginsSettings;
3use bevy_mod_picking::selection::SelectionPluginSettings;
4use egui_dock::egui;
5
6use crate::resources::{
7    BetaRenderColor, BetaWidth, DartHeadMul, DartRenderColor, DartShrink, DartWidth,
8    EdgeRenderColor, EdgeWidth, FaceRenderColor, FaceShrink, VertexRenderColor, VertexWidth,
9    VolumeRenderColor, VolumeShrink,
10};
11
12// --- main function
13
14/// rendering options drawing function.
15pub fn draw_options(ui: &mut egui::Ui, world: &mut World) {
16    draw_map_options(ui, world);
17
18    ui.separator(); // ---
19
20    draw_picking_options(ui, world);
21}
22
23// --- map options
24
25macro_rules! opt_rendercol {
26    ($ui: ident, $world: ident, $param: ident) => {{
27        let mut rendercol = $world.resource_mut::<$param>();
28        $ui.checkbox(&mut rendercol.0, "");
29        $ui.add_enabled_ui(rendercol.0, |ui| draw_color_picker(ui, &mut rendercol.1));
30    }};
31}
32
33macro_rules! opt_dragvalue {
34    ($ui: ident, $world: ident, $param: ident) => {{
35        let mut val = $world.resource_mut::<$param>();
36        $ui.add(egui::DragValue::new(&mut val.0).speed(0.01));
37    }};
38}
39
40fn draw_map_options(ui: &mut egui::Ui, world: &mut World) {
41    ui.label(egui::RichText::new("Map Rendering").size(15.));
42    ui.separator(); // ---
43
44    egui::Grid::new("map_opt_grid")
45        .num_columns(6)
46        .show(ui, |ui| {
47            // column names
48            ui.label(egui::RichText::new("Object"));
49            ui.label(egui::RichText::new("Render"));
50            ui.label(egui::RichText::new("Color"));
51            ui.label(egui::RichText::new("Shrink"));
52            ui.label(egui::RichText::new("Width"));
53            ui.label(egui::RichText::new("Head Factor"));
54            ui.end_row();
55            // darts
56            ui.label("Darts");
57            opt_rendercol!(ui, world, DartRenderColor);
58            opt_dragvalue!(ui, world, DartShrink);
59            opt_dragvalue!(ui, world, DartWidth);
60            opt_dragvalue!(ui, world, DartHeadMul);
61            ui.end_row();
62            // betas
63            ui.label("Beta Functions");
64            opt_rendercol!(ui, world, BetaRenderColor);
65            ui.label("");
66            opt_dragvalue!(ui, world, BetaWidth);
67            ui.end_row();
68            // vertices
69            ui.label("Vertices");
70            opt_rendercol!(ui, world, VertexRenderColor);
71            ui.label("");
72            opt_dragvalue!(ui, world, VertexWidth);
73            ui.end_row();
74            // edges
75            ui.label("Edges");
76            opt_rendercol!(ui, world, EdgeRenderColor);
77            ui.label("");
78            opt_dragvalue!(ui, world, EdgeWidth);
79            ui.end_row();
80            // faces
81            ui.label("Faces");
82            opt_rendercol!(ui, world, FaceRenderColor);
83            opt_dragvalue!(ui, world, FaceShrink);
84            ui.end_row();
85            // faces
86            ui.label("Volumes");
87            opt_rendercol!(ui, world, VolumeRenderColor);
88            opt_dragvalue!(ui, world, VolumeShrink);
89            ui.end_row();
90        });
91}
92
93fn draw_color_picker(ui: &mut egui::Ui, color: &mut egui::Color32) {
94    // create intermediate variable
95    let mut egui_color =
96        egui::Color32::from_rgba_premultiplied(color.r(), color.g(), color.b(), color.a());
97    // insert the color picker
98    let color_picker = egui::color_picker::color_edit_button_srgba(
99        ui,
100        &mut egui_color,
101        egui::color_picker::Alpha::Opaque,
102    );
103    // update the original color variable
104    if color_picker.changed() {
105        *color = egui::Color32::from_rgba_premultiplied(
106            egui_color.r(),
107            egui_color.g(),
108            egui_color.b(),
109            egui_color.a(),
110        );
111    }
112}
113
114// --- picking options
115
116fn draw_picking_options(ui: &mut egui::Ui, world: &mut World) {
117    ui.label(egui::RichText::new("Picking").size(15.));
118    ui.separator(); // ---
119
120    egui::Grid::new("pick_opt_grid")
121        .num_columns(2)
122        .show(ui, |ui| {
123            ui.label("Enable");
124            {
125                let mut picking_params = world.resource_mut::<PickingPluginsSettings>();
126                ui.checkbox(&mut picking_params.is_enabled, "");
127            }
128            ui.end_row();
129            ui.label("Click nothing deselect all");
130            {
131                let mut picking_params = world.resource_mut::<SelectionPluginSettings>();
132                ui.checkbox(&mut picking_params.click_nothing_deselect_all, "");
133            }
134        });
135}