diff options
| author | HampusM <hampus@hampusmat.com> | 2026-07-17 01:25:02 +0200 |
|---|---|---|
| committer | HampusM <hampus@hampusmat.com> | 2026-07-17 01:25:02 +0200 |
| commit | 649d4d4ab2f54ca12f75d2cba50e1adef2350dbe (patch) | |
| tree | b7f5a7a7f207509ebb3b8c12c24083082f0777ad /src | |
| parent | 7b25df4c4dc3ead44dc02015fcc46c1ccb283b8e (diff) | |
feat: use dear imgui extension & world UI view
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 65 |
1 files changed, 64 insertions, 1 deletions
diff --git a/src/main.rs b/src/main.rs index de3e835..e6ba5b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,14 +8,23 @@ use engine::camera::fly::{ Fly as FlyCamera, Options as FlyCameraOptions, }; -use engine::camera::{Active as ActiveCamera, Camera}; +use engine::camera::{ + Active as ActiveCamera, + Camera, + Controllable as ControllableCamera, +}; use engine::color::Color; use engine::data_types::dimens::Dimens3; use engine::ecs::actions::Actions; use engine::ecs::error::Context as _; use engine::ecs::phase::START as START_PHASE; +use engine::ecs::query::term::With; use engine::ecs::sole::Single; +use engine::ecs::system::initializable::Initializable; +use engine::ecs::system::Into; +use engine::ecs::Query; use engine::image::{Format as ImageFormat, Image}; +use engine::input::keyboard::Keyboard; use engine::input::Extension as InputExtension; use engine::lighting::{AttenuationParams, GlobalLight, PointLight}; use engine::material::{Flags as MaterialFlags, Material}; @@ -30,11 +39,17 @@ use engine::rendering::{ TargetWindow as RenderingTargetWindow, }; use engine::transform::WorldPosition; +use engine::ui::dear_imgui::{ + Context as DearImguiContext, + Extension as DearImguiExtension, + TargetWindow as DearImguiTargetWindow, +}; use engine::vector::Vec3; use engine::windowing::window::{ CreationAttributes as WindowCreationAttributes, CursorGrabMode as WindowCursorGrabMode, Icon as WindowIcon, + Window, }; use engine::{Engine, Error as EngineError}; use tracing::level_filters::LevelFilter; @@ -70,6 +85,7 @@ fn main() -> Result<(), EngineError> .with_extension(FlyCameraExtension(FlyCameraOptions { mouse_sensitivity: 0.2, })) + .with_extension(DearImguiExtension::default()) .with_extension(Application) .start(); @@ -85,6 +101,15 @@ impl engine::ecs::extension::Extension for Application let _ = collector.add_sole(GlobalLight::default()); collector.add_system(*START_PHASE, init); + + collector.add_system(*engine::ecs::phase::UPDATE, toggle_ui); + + collector.add_system( + *engine::ecs::phase::UPDATE, + engine::ui::view::world::show + .into_system() + .initialize((engine::ui::view::world::State::default(),)), + ); } } @@ -107,6 +132,7 @@ fn init(mut assets: Single<Assets>, mut actions: Actions) -> Result<(), EngineEr .with_cursor_visible(false) .with_cursor_grab_mode(WindowCursorGrabMode::Locked), RenderingTargetWindow, + DearImguiTargetWindow, ), ); @@ -199,3 +225,40 @@ fn configure_logging() -> Result<(), EngineError> Ok(()) } + +fn toggle_ui( + window_query: Query<(&mut Window,), (With<DearImguiTargetWindow>,)>, + camera_query: Query<(&mut ControllableCamera,), (With<Camera>, With<ActiveCamera>)>, + mut dear_imgui_context: Single<DearImguiContext>, + keyboard: Single<Keyboard>, +) -> Result<(), EngineError> +{ + let dear_imgui_context = dear_imgui_context.get_mut()?; + let keyboard = keyboard.get()?; + + let Some((mut window,)) = window_query.iter().next() else { + return Ok(()); + }; + + let Some((mut controllable_camera,)) = camera_query.iter().next() else { + return Ok(()); + }; + + if keyboard.just_pressed(engine::input::keyboard::Key::Escape) { + if dear_imgui_context.enabled { + dear_imgui_context.enabled = false; + window.cursor_visible = false; + window.cursor_grab_mode = WindowCursorGrabMode::Locked; + controllable_camera.control_enabled = true; + } else { + dear_imgui_context.enabled = true; + window.cursor_visible = true; + window.cursor_grab_mode = WindowCursorGrabMode::None; + controllable_camera.control_enabled = false; + } + + window.set_changed(); + } + + Ok(()) +} |
