Store cardinal direction on player.
This commit is contained in:
parent
12b7ecd2ea
commit
42513e7912
|
@ -174,26 +174,31 @@ fn movement_controls<S, A: 'static>(
|
|||
}
|
||||
}
|
||||
|
||||
fn speak_direction(
|
||||
mut tts: ResMut<Tts>,
|
||||
mut cache: Local<HashMap<Entity, CardinalDirection>>,
|
||||
player: Query<(Entity, &Player, &Transform), Changed<Transform>>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
if let Ok((entity, _, transform)) = player.single() {
|
||||
fn update_direction(
|
||||
mut commands: Commands,
|
||||
query: Query<
|
||||
(Entity, &Transform, Option<&CardinalDirection>),
|
||||
(With<Player>, Changed<Transform>),
|
||||
>,
|
||||
) {
|
||||
for (entity, transform, direction) in query.iter() {
|
||||
let forward = transform.local_x();
|
||||
let yaw = Angle::Radians(forward.y.atan2(forward.x));
|
||||
if let Some(old_direction) = cache.get(&entity) {
|
||||
let old_direction = *old_direction;
|
||||
let direction: CardinalDirection = yaw.into();
|
||||
if old_direction != direction {
|
||||
let direction: String = direction.into();
|
||||
let new_direction: CardinalDirection = yaw.into();
|
||||
if direction != Some(&new_direction) {
|
||||
commands.entity(entity).insert(new_direction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn speak_direction(
|
||||
mut tts: ResMut<Tts>,
|
||||
player: Query<&CardinalDirection, (With<Player>, Changed<CardinalDirection>)>,
|
||||
) -> Result<(), Box<dyn Error>> {
|
||||
if let Ok(direction) = player.single() {
|
||||
let direction: String = (*direction).into();
|
||||
tts.speak(direction, true)?;
|
||||
}
|
||||
cache.insert(entity, direction);
|
||||
} else {
|
||||
cache.insert(entity, yaw.into());
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
@ -258,6 +263,7 @@ where
|
|||
app.register_type::<MaxSpeed>()
|
||||
.register_type::<RotationSpeed>()
|
||||
.register_type::<Sprinting>()
|
||||
.add_system(update_direction.system())
|
||||
.add_system(speak_direction.system().chain(error_handler.system()));
|
||||
if config.movement_control_states.is_empty() {
|
||||
app.add_system(movement_controls::<S, A>.system());
|
||||
|
|
Loading…
Reference in New Issue
Block a user