diff --git a/src/camera.rs b/src/camera.rs index dfd144b..e0bc50c 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -264,6 +264,7 @@ pub fn handle_input( mut settings: ResMut, mut mapcam: ResMut, mut ew_sfx: EventWriter, + mut ew_updateoverlays: EventWriter, ) { if keyboard_input.just_pressed(settings.key_camera) { settings.third_person ^= true; @@ -271,6 +272,7 @@ pub fn handle_input( if keyboard_input.just_pressed(settings.key_map) { settings.map_active ^= true; *mapcam = MapCam::default(); + ew_updateoverlays.send(hud::UpdateOverlayVisibility); } if keyboard_input.just_pressed(settings.key_rotation_stabilizer) { ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Click)); diff --git a/src/commands.rs b/src/commands.rs index c70d5e4..6478e31 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -694,7 +694,7 @@ fn spawn_entities( if state.is_point_of_interest { commands.spawn(( - hud::IsPointOfInterestMarker(actor_entity), + hud::PointOfInterestMarker(actor_entity), world::DespawnOnPlayerDeath, hud::ToggleableHudElement, SceneBundle { diff --git a/src/hud.rs b/src/hud.rs index ab09e09..75fad02 100644 --- a/src/hud.rs +++ b/src/hud.rs @@ -39,6 +39,7 @@ impl Plugin for HudPlugin { handle_target_event, )); app.add_systems(PostUpdate, ( + update_overlay_visibility, update_ar_overlays .after(world::position_to_transform) .in_set(sync::SyncSet::PositionToTransform), @@ -60,20 +61,23 @@ impl Plugin for HudPlugin { app.insert_resource(FPSUpdateTimer( Timer::from_seconds(HUD_REFRESH_TIME, TimerMode::Repeating))); app.add_event::(); + app.add_event::(); } } #[derive(Event)] pub struct TargetEvent(pub Option); +#[derive(Event)] pub struct UpdateOverlayVisibility; #[derive(Component)] struct NodeHud; #[derive(Component)] struct NodeConsole; #[derive(Component)] struct NodeChoiceText; #[derive(Component)] struct NodeCurrentChatLine; #[derive(Component)] struct Reticule; #[derive(Component)] pub struct ToggleableHudElement; +#[derive(Component)] pub struct ToggleableHudMapElement; #[derive(Component)] struct OnlyHideWhenTogglingHud; #[derive(Component)] struct Selectagon; #[derive(Component)] pub struct IsTargeted; -#[derive(Component)] pub struct IsPointOfInterestMarker(pub Entity); +#[derive(Component)] pub struct PointOfInterestMarker(pub Entity); #[derive(Resource)] pub struct AugmentedRealityState { @@ -644,6 +648,7 @@ fn handle_input( mut ew_sfx: EventWriter, mut ew_togglemusic: EventWriter, mut ew_target: EventWriter, + mut ew_updateoverlays: EventWriter, mut ambient_light: ResMut, q_objects: Query<(Entity, &Transform), (With, Without, Without, Without)>, q_camera: Query<&Transform, With>, @@ -654,21 +659,12 @@ fn handle_input( } } if keyboard_input.just_pressed(settings.key_togglehud) { + ew_updateoverlays.send(UpdateOverlayVisibility); + settings.hud_active ^= true; if settings.hud_active { - for (mut hudelement_visibility, _) in q_hud.iter_mut() { - *hudelement_visibility = Visibility::Hidden; - } - settings.hud_active = false; - ambient_light.brightness = AMBIENT_LIGHT; - } - else { - for (mut hudelement_visibility, only_hide) in q_hud.iter_mut() { - if only_hide.is_none() { - *hudelement_visibility = Visibility::Inherited; - } - } - settings.hud_active = true; ambient_light.brightness = AMBIENT_LIGHT_AR; + } else { + ambient_light.brightness = AMBIENT_LIGHT; } ew_sfx.send(audio::PlaySfxEvent(audio::Sfx::Switch)); ew_togglemusic.send(audio::ToggleMusicEvent()); @@ -786,12 +782,12 @@ fn update_ar_overlays ( } fn update_poi_overlays ( - mut q_marker: Query<(&mut Transform, &IsPointOfInterestMarker)>, - q_parent: Query<&Transform, Without>, - q_camera: Query<&Transform, (With, Without)>, + mut q_marker: Query<(&mut Transform, &PointOfInterestMarker)>, + q_parent: Query<&Transform, Without>, + q_camera: Query<&Transform, (With, Without)>, settings: ResMut, ) { - if !settings.hud_active || q_camera.is_empty() { + if !settings.hud_active || !settings.map_active || q_camera.is_empty() { return; } let camera_trans = q_camera.get_single().unwrap(); @@ -810,3 +806,25 @@ fn update_poi_overlays ( } } } + +fn update_overlay_visibility( + mut q_marker: Query<&mut Visibility, With>, + mut q_hudelement: Query<&mut Visibility, (With, Without)>, + er_target: EventReader, + settings: Res, +) { + if er_target.is_empty() { + return; + } + let check = {|check: bool| + if check { Visibility::Inherited } else { Visibility::Hidden } + }; + let show_poi = check(settings.hud_active && settings.map_active); + let show_hud = check(settings.hud_active); + for mut vis in &mut q_marker { + *vis = show_poi; + } + for mut vis in &mut q_hudelement { + *vis = show_hud; + } +}