use std::{collections::HashMap, error::Error, fmt::Debug, hash::Hash, marker::PhantomData}; use bevy::prelude::*; use bevy_input_actionmap::InputMap; use bevy_rapier2d::{na::UnitComplex, prelude::*}; use bevy_tts::Tts; use derive_more::{Deref, DerefMut}; use crate::{ core::{Angle, CardinalDirection, Player}, error::error_handler, exploration::{ExplorationFocused, Exploring}, pathfinding::Destination, }; #[derive(Clone, Copy, Debug, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct MaxSpeed(pub f32); impl Default for MaxSpeed { fn default() -> Self { MaxSpeed(2.) } } #[derive(Clone, Copy, Debug, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct RotationSpeed(pub Angle); impl Default for RotationSpeed { fn default() -> Self { Self(Angle::Radians(0.)) } } #[derive(Clone, Copy, Debug, Default, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct Speed(pub f32); #[derive(Clone, Copy, Debug, Default, Reflect)] #[reflect(Component)] pub struct Sprinting; fn movement_controls( mut commands: Commands, config: Res>, input: Res>, time: Res