Newer
Older
use std::ops::SubAssign;
use bevy::math::Vec3Swizzles;
use bevy::prelude::*;
use crate::world::encounters::EncounterState;
use crate::world::towns::{CurrentResidence, TravelPath, TravelTarget};
use crate::world::PathingResult;
pub fn tick_travelling_merchant(
mut commands: Commands,
time: Res<Time>,
mut merchant_query: Query<(
Entity,
&mut Transform,
&mut TravelPath,
&mut TravelTarget,
&mut CurrentResidence,
)>,
if encounter_state.is_in_encounter() {
return;
}
let delta = time.delta_seconds();
for (entity, mut transform, mut path, mut target, mut residence) in &mut merchant_query {
let step = path.get_step(transform.translation.xy(), 16.0) * delta;
transform.translation.sub_assign(step.extend(0.0));
match path.check_position(transform.translation.xy()) {
PathingResult::PathComplete => {
commands
.entity(entity)
.remove::<(TravelPath, TravelTarget)>();
*residence = CurrentResidence::RestingAt(target.0.clone());
}
PathingResult::NextNode => {
path.increment_indexes();
}
PathingResult::Travelling => {}
}
}
}