use crate::app_state::overworld::OverworldState;
use crate::app_state::overworld::character::components::PlayerControlled;
use crate::core::basic_components::{Direction, Facing};
use crate::core::input::Action;
use bevy::prelude::{Query, Res, State, With};
use leafwing_input_manager::action_state::ActionState;
pub(crate) fn player_direction_control_system(
mut query: Query<(&mut Facing, &ActionState<Action>), With<PlayerControlled>>,
overworld_state: Res<State<OverworldState>>,
) {
match *overworld_state.get() {
OverworldState::Normal | OverworldState::Chase => {}
_ => return,
}
for (mut facing, action_state) in query.iter_mut() {
let up_pressed = action_state.pressed(&Action::Up);
let down_pressed = action_state.pressed(&Action::Down);
let left_pressed = action_state.pressed(&Action::Left);
let right_pressed = action_state.pressed(&Action::Right);
if up_pressed && !down_pressed {
facing.value = Direction::Up;
} else if down_pressed && !up_pressed {
facing.value = Direction::Down;
} else if left_pressed && !right_pressed {
facing.value = Direction::Left;
} else if right_pressed && !left_pressed {
facing.value = Direction::Right;
}
}
}