honeycomb_render/inspector/
tab.rs

1use bevy::prelude::*;
2use bevy::utils::HashSet;
3use bevy_egui::egui;
4
5use crate::capture::ecs_data::{DartBody, DartId, EdgeId, FaceId, VertexId};
6use crate::components::{Beta, Edge, Face, Vertex, Volume};
7
8/// Inspection panel drawing function.
9pub fn draw_inspected_data(
10    ui: &mut egui::Ui,
11    world: &mut World,
12    selected_entities: &HashSet<Entity>,
13) {
14    ui.label(egui::RichText::new("Selected Components").size(15.));
15
16    if selected_entities.is_empty() {
17        ui.separator();
18    }
19
20    for entity in selected_entities {
21        ui.separator();
22        if world.get::<DartBody>(*entity).is_some() {
23            let Some(id) = world.get::<DartId>(*entity) else {
24                unreachable!()
25            };
26            ui.label(format!("Dart #{}", id.0));
27            let Some(vid) = world.get::<VertexId>(*entity) else {
28                unreachable!();
29            };
30            let Some(eid) = world.get::<EdgeId>(*entity) else {
31                unreachable!();
32            };
33            let Some(fid) = world.get::<FaceId>(*entity) else {
34                unreachable!();
35            };
36            egui::Grid::new(format!("dart #{}", id.0)) // need a unique id
37                .num_columns(4)
38                .show(ui, |ui| {
39                    ui.label("i-cells");
40                    ui.label("Vertex");
41                    ui.label("Edge");
42                    ui.label("Face");
43                    ui.end_row();
44                    ui.label("IDs");
45                    ui.label(format!("{}", vid.0));
46                    ui.label(format!("{}", eid.0));
47                    ui.label(format!("{}", fid.0));
48                });
49        } else if world.get::<Beta>(*entity).is_some() {
50            ui.label("Beta");
51        } else if world.get::<Vertex>(*entity).is_some() {
52            let Some(id) = world.get::<VertexId>(*entity) else {
53                unreachable!()
54            };
55            ui.label(format!("Vertex #{}", id.0));
56        } else if world.get::<Edge>(*entity).is_some() {
57            let Some(id) = world.get::<EdgeId>(*entity) else {
58                unreachable!()
59            };
60            ui.label(format!("Edge #{}", id.0));
61        } else if world.get::<Face>(*entity).is_some() {
62            ui.label("Face");
63        } else if world.get::<Volume>(*entity).is_some() {
64            ui.label("Volume");
65        }
66    }
67}