use crate::{sync::Uid, util::Dir}; use specs::{Component, FlaggedStorage, NullStorage}; use specs_idvs::IDVStorage; use vek::*; // Position #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Pos(pub Vec3); impl Component for Pos { type Storage = IDVStorage; } // Velocity #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Vel(pub Vec3); impl Component for Vel { type Storage = IDVStorage; } // Orientation #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Ori(pub Dir); impl Component for Ori { type Storage = IDVStorage; } // Scale #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Scale(pub f32); impl Component for Scale { type Storage = FlaggedStorage>; } // Mass #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Mass(pub f32); impl Component for Mass { type Storage = FlaggedStorage>; } // Mass #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)] pub enum Collider { Box { radius: f32, z_min: f32, z_max: f32, }, Point, } impl Component for Collider { type Storage = FlaggedStorage>; } #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Gravity(pub f32); impl Component for Gravity { type Storage = FlaggedStorage>; } #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct Sticky; impl Component for Sticky { type Storage = FlaggedStorage>; } // PhysicsState #[derive(Copy, Clone, Default, Debug, PartialEq, Serialize, Deserialize)] pub struct PhysicsState { pub on_ground: bool, pub on_ceiling: bool, pub on_wall: Option>, pub touch_entity: Option, pub in_fluid: bool, } impl Component for PhysicsState { type Storage = FlaggedStorage>; } // ForceUpdate #[derive(Copy, Clone, Debug, Default, PartialEq, Serialize, Deserialize)] pub struct ForceUpdate; impl Component for ForceUpdate { type Storage = NullStorage; }