summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-07-17 01:25:02 +0200
committerHampusM <hampus@hampusmat.com>2026-07-17 01:25:02 +0200
commit649d4d4ab2f54ca12f75d2cba50e1adef2350dbe (patch)
treeb7f5a7a7f207509ebb3b8c12c24083082f0777ad /src/main.rs
parent7b25df4c4dc3ead44dc02015fcc46c1ccb283b8e (diff)
feat: use dear imgui extension & world UI view
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs65
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(())
+}