Set elapsed time of sound icons to their duration on visibility gain so they begin playing immediately.
This commit is contained in:
parent
828a0ca0b3
commit
a1edab98f9
|
@ -9,7 +9,7 @@ use crate::{
|
||||||
commands::RunIfExistsExt,
|
commands::RunIfExistsExt,
|
||||||
core::Player,
|
core::Player,
|
||||||
exploration::ExplorationFocused,
|
exploration::ExplorationFocused,
|
||||||
visibility::{Visible, VisibleEntities},
|
visibility::{VisibilityChanged, Visible, VisibleEntities},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Component, Clone, Debug)]
|
#[derive(Component, Clone, Debug)]
|
||||||
|
@ -242,6 +242,38 @@ fn exploration_focus_removed(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn reset_timer_on_visibility_gain(
|
||||||
|
mut events: EventReader<VisibilityChanged>,
|
||||||
|
player: Query<Entity, With<Player>>,
|
||||||
|
mut icons: Query<&mut SoundIcon>,
|
||||||
|
children: Query<&Children>,
|
||||||
|
) {
|
||||||
|
for event in events.iter() {
|
||||||
|
if let VisibilityChanged::Gained { viewer, viewed } = event {
|
||||||
|
if player.get(*viewer).is_ok() {
|
||||||
|
let mut targets = vec![];
|
||||||
|
if icons.get(*viewed).is_ok() {
|
||||||
|
targets.push(viewed);
|
||||||
|
}
|
||||||
|
if let Ok(children) = children.get(*viewed) {
|
||||||
|
for child in children.iter() {
|
||||||
|
if icons.get(*child).is_ok() {
|
||||||
|
targets.push(&*child);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for icon in targets.iter_mut() {
|
||||||
|
if let Ok(mut icon) = icons.get_mut(**icon) {
|
||||||
|
if let Some(timer) = icon.interval.as_mut() {
|
||||||
|
timer.set_elapsed(timer.duration());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default)]
|
#[derive(Clone, Debug, Default)]
|
||||||
pub struct SoundIconConfig<S> {
|
pub struct SoundIconConfig<S> {
|
||||||
pub states: Vec<S>,
|
pub states: Vec<S>,
|
||||||
|
@ -273,6 +305,7 @@ where
|
||||||
.add_system_to_stage(
|
.add_system_to_stage(
|
||||||
CoreStage::PostUpdate,
|
CoreStage::PostUpdate,
|
||||||
exploration_focus_removed.after(exploration_focus_changed),
|
exploration_focus_removed.after(exploration_focus_changed),
|
||||||
);
|
)
|
||||||
|
.add_system_to_stage(CoreStage::PostUpdate, reset_timer_on_visibility_gain);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user