use std::{collections::HashMap, error::Error, fmt::Debug, hash::Hash, marker::PhantomData}; 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, } fn movement_controls( mut commands: Commands, config: Res>, input: Res>, time: Res