use bevy::prelude::*; use bevy_egui::{egui, EguiContext}; use crate::*; pub fn action_bar_sys( mut egui_ctx: ResMut, mut state: ResMut, colors: Res, ) { egui::Window::new("buttons_float") .default_pos((20.0, 20.0)) .title_bar(false) .resizable(false) .show(egui_ctx.ctx_mut(), |ui| { ui.horizontal(|hui| { let m = hui.button(egui::RichText::new("M").color(state.current_action_color(&colors, Action::Modify))) .on_hover_text("Modify"); if m.clicked() { state.current_action = Action::Modify; } let r = hui.button(egui::RichText::new("R").color(state.current_action_color(&colors, Action::Rotate))) .on_hover_text("Rotate"); if r.clicked() { state.current_action = Action::Rotate; } let c = hui.button(egui::RichText::new("C").color(state.current_action_color(&colors, Action::Create))) .on_hover_text("Create"); if c.clicked() { state.current_action = Action::Create; } let d = hui.button(egui::RichText::new("D").color(state.current_action_color(&colors, Action::Delete))) .on_hover_text("Delete"); if d.clicked() { state.current_action = Action::Delete; } hui.label(" | "); if hui.button(" I ").on_hover_text("Import Image").clicked() { println!("Importing Images is still not supported!"); } hui.label(": :"); }); if state.current_action == Action::Create { ui.horizontal(|hui| { let tri = hui.button(egui::RichText::new("Tri").color(state.create_shape_color(&colors, CreateShape::Triangle))) .on_hover_text("Triangle - from 3 edges"); if tri.clicked() { state.create_shape = CreateShape::Triangle; } let squ = hui.button(egui::RichText::new("Squ").color(state.create_shape_color(&colors, CreateShape::Square))) .on_hover_text("Square - from 2 opposing edges"); if squ.clicked() { state.create_shape = CreateShape::Square; } let cir = hui.button(egui::RichText::new("Cir").color(state.create_shape_color(&colors, CreateShape::Circle))) .on_hover_text("Circle - center point and radius"); if cir.clicked() { state.create_shape = CreateShape::Circle; } // let cap = hui.button(egui::RichText::new("Cap").color(state.create_shape_color(&colors, CreateShape::Capsule))) // .on_hover_text("Capsule - from 2 center points and a radius"); // if cap.clicked() { // state.create_shape = CreateShape::Capsule; // } }); } }); } pub fn shape_tree_sys( mut egui_ctx: ResMut, shapes: Query<&ShapeData>, mut transforms: Query<&mut Transform>, ) { if !shapes.is_empty() { egui::Window::new("Shape Tree") .default_pos((10.0, 100.0)) .title_bar(true) .resizable(false) .show(egui_ctx.ctx_mut(), |ui| { for sd in shapes.iter() { ui.collapsing(format!("{:?}", sd.shape), |ui| { if let Ok(mut t) = transforms.get_mut(sd.main_shape) { ui.horizontal(|hui| { hui.label("Translation:"); hui.add(egui::DragValue::new(&mut t.translation.x)); hui.add(egui::DragValue::new(&mut t.translation.y)); }); ui.horizontal(|hui| { hui.label("Rotation:"); let mut rot = t.rotation.to_euler(EulerRot::XYZ).2.to_degrees(); if hui.add(egui::DragValue::new(&mut rot).suffix("°")).changed() { t.rotation = Quat::from_rotation_z(rot.to_radians()); } }); } }); } }); } }