use std::{collections::HashMap, error::Error, fmt::Debug, hash::Hash}; use bevy::prelude::*; use bevy_input_actionmap::InputMap; use bevy_tts::Tts; use derive_more::{Deref, DerefMut}; use crate::{ core::{Angle, CardinalDirection, Coordinates, Player, PointLike}, error::error_handler, exploration::{ExplorationFocused, Exploring}, map::{ITileType, Map}, pathfinding::Destination, }; #[derive(Clone, Copy, Debug, Default, Reflect)] #[reflect(Component)] pub struct BlocksMotion; #[derive(Clone, Debug, Default, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct CollisionsMonitored(pub Vec); #[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, Default, Reflect)] #[reflect(Component)] pub struct MonitorsCollisions; #[derive(Clone, Debug, Default, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct MotionBlocked(pub Vec); #[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; #[derive(Clone, Copy, Debug, Default, Deref, DerefMut, Reflect)] #[reflect(Component)] pub struct Velocity(pub Vec2); #[derive(Clone, Copy, Debug)] pub struct Collision { pub entity: Entity, pub coordinates: (f32, f32), pub index: usize, } pub const ACTION_FORWARD: &str = "forward"; pub const ACTION_BACKWARD: &str = "backward"; pub const ACTION_LEFT: &str = "left"; pub const ACTION_RIGHT: &str = "right"; pub const ACTION_ROTATE_LEFT: &str = "ROTATE_LEFT"; pub const ACTION_ROTATE_RIGHT: &str = "ROTATE_RIGHT"; pub const ACTION_SPRINT: &str = "SPRINT"; fn movement_controls( mut commands: Commands, input: Res>, time: Res