From 255c26470267217cc1740058c3ee643e3c9d3024 Mon Sep 17 00:00:00 2001 From: extrawurst Date: Fri, 21 Mar 2025 13:25:28 +0100 Subject: [PATCH] camera ui --- assets/ui/camera.png | Bin 0 -> 27533 bytes src/camera.rs | 63 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 assets/ui/camera.png diff --git a/assets/ui/camera.png b/assets/ui/camera.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa8c5a895015ab6ed05790bb682007af8377190 GIT binary patch literal 27533 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 literal 0 HcmV?d00001 diff --git a/src/camera.rs b/src/camera.rs index 103ebf4..4ad8fff 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -17,8 +17,12 @@ pub struct CameraRotation(pub f32); #[reflect(Resource)] pub struct CameraState { pub cutscene: bool, + pub look_around: bool, } +#[derive(Component, Reflect, Debug, Default)] +struct CameraUi; + #[derive(Component, Reflect, Debug)] #[reflect(Component)] pub struct MainCamera { @@ -40,7 +44,16 @@ pub fn plugin(app: &mut App) { app.init_resource::(); app.add_systems(Startup, startup); - app.add_systems(Update, (update, rotate_view_keyboard, rotate_view_gamepad)); + app.add_systems( + Update, + ( + update, + update_ui, + update_look_around, + rotate_view_keyboard, + rotate_view_gamepad, + ), + ); } fn startup(mut commands: Commands) { @@ -51,6 +64,54 @@ fn startup(mut commands: Commands) { )); } +fn update_look_around(controls: Res, mut cam_state: ResMut) { + let look_around = + controls.keyboard_state.view_mode || controls.gamepad_state.map_or(false, |g| g.view_mode); + + if look_around != cam_state.look_around { + cam_state.look_around = look_around; + } +} + +fn update_ui( + mut commands: Commands, + cam_state: Res, + asset_server: Res, + query: Query>, +) { + if cam_state.is_changed() { + let show_ui = cam_state.look_around || cam_state.cutscene; + + if show_ui { + let image = asset_server.load("ui/camera.png"); + + commands + .spawn(( + CameraUi, + Node { + margin: UiRect::top(Val::Px(20.)) + .with_left(Val::Auto) + .with_right(Val::Auto), + justify_content: JustifyContent::Center, + ..default() + }, + )) + .with_child(( + Node { + display: Display::Block, + position_type: PositionType::Absolute, + ..default() + }, + ImageNode::new(image), + )); + } else { + for entity in query.iter() { + commands.entity(entity).despawn_recursive(); + } + } + } +} + fn update( mut cam: Query< (&MainCamera, &mut Transform, &CameraRotation),