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, )>, encounter_state: Res<EncounterState>, ) { 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 => {} } } }