use blue_engine_imgui::{imgui as gui, Gui};
use blue_engine::{
header::{Engine, ObjectSettings, WindowDescriptor},
primitive_shapes::triangle,
};
struct MyGUI {
color: [f32; 4],
}
impl Gui for MyGUI {
fn update(
&mut self,
_window: &blue_engine::Window,
_renderer: &mut blue_engine::Renderer,
objects: &mut std::collections::HashMap<&'static str, blue_engine::Object>,
_camera: &mut blue_engine::Camera,
_input: &blue_engine::InputHelper,
_plugin_data_storage: &mut std::collections::HashMap<&'static str, Box<dyn std::any::Any>>,
ui: &gui::Ui,
) {
gui::Window::new("Control Triangle")
.resizable(false)
.build(&ui, || {
gui::ColorEdit::new(
"Pick a color",
gui::EditableColor::Float4(&mut self.color),
)
.inputs(false)
.alpha(true)
.alpha_bar(true)
.build(&ui);
});
objects
.get_mut("triangle")
.unwrap()
.set_uniform_color(self.color[0], self.color[1], self.color[2], self.color[3])
.unwrap();
}
}
fn main() {
let mut engine = Engine::new(WindowDescriptor::default()).expect("win");
triangle("triangle", ObjectSettings::default(), &mut engine).unwrap();
let my_gui = MyGUI {
color: [1f32, 1f32, 1f32, 1f32],
};
let gui_context =
blue_engine_imgui::ImGUI::new(&engine.window, &mut engine.renderer, Box::new(my_gui));
engine.plugins.push(Box::new(gui_context));
engine
.update_loop(move |_, _, _, _, _, _| {})
.expect("Error during update loop");
}