use blue_engine_egui::{egui, EmbeddedRender};
use blue_engine::{header::Engine, primitive_shapes::cube};
fn main() {
let mut engine = Engine::new().expect("win");
cube("cube", &mut engine.renderer, &mut engine.objects).expect("Couldn't create the cube");
let mut gui_context =
blue_engine_egui::EGUI::new(&engine.event_loop, &mut engine.renderer, &engine.window);
let mut custom_rendering = {
let mut object = engine.objects.get_mut("cube").unwrap();
object.is_visible = false;
EmbeddedRender::new(&mut object, &mut engine.renderer, &mut gui_context.renderer).unwrap()
};
engine.plugins.push(Box::new(gui_context));
let mut color = [1f32, 1f32, 1f32, 1f32];
let radius = 5f32;
let start = std::time::SystemTime::now();
engine
.update_loop(move |renderer, window, objects, _, camera, plugins| {
let egui_plugin = plugins[0]
.downcast_mut::<blue_engine_egui::EGUI>()
.expect("Plugin not found");
let cube = objects.get_mut("cube").unwrap();
let camera_data = camera.update_view_projection_and_return(renderer).unwrap();
custom_rendering.prepare(cube, renderer, &mut egui_plugin.renderer, camera_data);
egui_plugin.ui(
|ctx| {
egui::Window::new("title").resizable(true).show(ctx, |ui| {
egui::Frame::canvas(ui.style()).show(ui, |ui| {
custom_rendering.paint(ui);
});
ui.allocate_space(ui.available_size());
});
egui::Window::new("Pick Color")
.resizable(true)
.show(ctx, |ui| {
ui.horizontal(|ui| {
ui.label("Pick a color");
ui.color_edit_button_rgba_unmultiplied(&mut color);
});
});
},
&window,
);
cube.set_uniform_color(color[0], color[1], color[2], color[3])
.unwrap();
let camx = start.elapsed().unwrap().as_secs_f32().sin() * radius;
let camy = start.elapsed().unwrap().as_secs_f32().sin() * radius;
let camz = start.elapsed().unwrap().as_secs_f32().cos() * radius;
camera
.set_position(camx, camy, camz)
.expect("Couldn't update the camera eye");
})
.expect("Error during update loop");
}