Compare commits
2 Commits
1837591ba5
...
43b163fbd9
Author | SHA1 | Date | |
---|---|---|---|
43b163fbd9 | |||
0a38e65d26 |
11
src/core.rs
11
src/core.rs
|
@ -479,6 +479,17 @@ impl From<&dyn PointLike> for (i32, i32) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait TransformExt {
|
||||||
|
fn yaw(&self) -> Angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TransformExt for Transform {
|
||||||
|
fn yaw(&self) -> Angle {
|
||||||
|
let forward = self.right();
|
||||||
|
Angle::Radians(forward.y.atan2(forward.x))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub trait GlobalTransformExt {
|
pub trait GlobalTransformExt {
|
||||||
fn yaw(&self) -> Angle;
|
fn yaw(&self) -> Angle;
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ struct SnapTimer(Timer);
|
||||||
|
|
||||||
impl Default for SnapTimer {
|
impl Default for SnapTimer {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self(Timer::from_seconds(0.25, false))
|
Self(Timer::from_seconds(0.2, false))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,8 +171,9 @@ fn snap(
|
||||||
>,
|
>,
|
||||||
) -> Result<(), Box<dyn Error>> {
|
) -> Result<(), Box<dyn Error>> {
|
||||||
for (entity, actions, mut transform, mut velocity, direction) in query.iter_mut() {
|
for (entity, actions, mut transform, mut velocity, direction) in query.iter_mut() {
|
||||||
if actions.just_pressed(NavigationAction::SnapLeft) {
|
if snap_timers.contains_key(&entity) {
|
||||||
println!("snap left");
|
continue;
|
||||||
|
} else if actions.pressed(NavigationAction::SnapLeft) {
|
||||||
snap_timers.insert(entity, SnapTimer::default());
|
snap_timers.insert(entity, SnapTimer::default());
|
||||||
transform.rotation = Quat::from_rotation_z(match direction {
|
transform.rotation = Quat::from_rotation_z(match direction {
|
||||||
CardinalDirection::North => PI,
|
CardinalDirection::North => PI,
|
||||||
|
@ -181,9 +182,7 @@ fn snap(
|
||||||
CardinalDirection::West => -PI / 2.,
|
CardinalDirection::West => -PI / 2.,
|
||||||
});
|
});
|
||||||
velocity.angvel = 0.;
|
velocity.angvel = 0.;
|
||||||
}
|
} else if actions.pressed(NavigationAction::SnapRight) {
|
||||||
if actions.just_pressed(NavigationAction::SnapRight) {
|
|
||||||
println!("Snap right");
|
|
||||||
snap_timers.insert(entity, SnapTimer::default());
|
snap_timers.insert(entity, SnapTimer::default());
|
||||||
transform.rotation = Quat::from_rotation_z(match direction {
|
transform.rotation = Quat::from_rotation_z(match direction {
|
||||||
CardinalDirection::North => 0.,
|
CardinalDirection::North => 0.,
|
||||||
|
@ -192,18 +191,15 @@ fn snap(
|
||||||
CardinalDirection::West => PI / 2.,
|
CardinalDirection::West => PI / 2.,
|
||||||
});
|
});
|
||||||
velocity.angvel = 0.;
|
velocity.angvel = 0.;
|
||||||
}
|
} else if actions.pressed(NavigationAction::SnapReverse) {
|
||||||
if actions.just_pressed(NavigationAction::SnapCardinal) {
|
|
||||||
snap_timers.insert(entity, SnapTimer::default());
|
snap_timers.insert(entity, SnapTimer::default());
|
||||||
|
transform.rotate(Quat::from_rotation_z(PI));
|
||||||
|
velocity.angvel = 0.;
|
||||||
|
} else if actions.pressed(NavigationAction::SnapCardinal) {
|
||||||
let yaw: Angle = direction.into();
|
let yaw: Angle = direction.into();
|
||||||
let yaw = yaw.radians();
|
let yaw = yaw.radians();
|
||||||
transform.rotation = Quat::from_rotation_z(yaw);
|
transform.rotation = Quat::from_rotation_z(yaw);
|
||||||
velocity.angvel = 0.;
|
|
||||||
tts.speak(direction.to_string(), true)?;
|
tts.speak(direction.to_string(), true)?;
|
||||||
}
|
|
||||||
if actions.just_pressed(NavigationAction::SnapReverse) {
|
|
||||||
snap_timers.insert(entity, SnapTimer::default());
|
|
||||||
transform.rotate(Quat::from_rotation_z(PI));
|
|
||||||
velocity.angvel = 0.;
|
velocity.angvel = 0.;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -237,13 +233,19 @@ fn update_direction(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove_direction(mut commands: Commands, removed: RemovedComponents<Transform>) {
|
fn remove_direction(
|
||||||
|
mut commands: Commands,
|
||||||
|
removed: RemovedComponents<Transform>,
|
||||||
|
directions: Query<&CardinalDirection>,
|
||||||
|
) {
|
||||||
for entity in removed.iter() {
|
for entity in removed.iter() {
|
||||||
|
if directions.contains(entity) {
|
||||||
commands.run_if_exists(entity, |mut entity| {
|
commands.run_if_exists(entity, |mut entity| {
|
||||||
entity.remove::<CardinalDirection>();
|
entity.remove::<CardinalDirection>();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn speak_direction(
|
fn speak_direction(
|
||||||
mut tts: ResMut<Tts>,
|
mut tts: ResMut<Tts>,
|
||||||
|
|
Loading…
Reference in New Issue
Block a user