veloren/common/src/comp/controller.rs

79 lines
1.7 KiB
Rust
Raw Normal View History

use specs::{Component, FlaggedStorage};
use specs_idvs::IDVStorage;
use sphynx::Uid;
2019-07-29 19:54:58 +00:00
use vek::*;
2019-06-09 14:20:20 +00:00
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub enum ControlEvent {
Mount(Uid),
Unmount,
InventoryManip(InventoryManip),
//Respawn,
}
2019-06-09 14:20:20 +00:00
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct ControllerInputs {
pub primary: bool,
pub secondary: bool,
pub sit: bool,
2019-06-09 14:20:20 +00:00
pub jump: bool,
2019-06-11 04:08:55 +00:00
pub roll: bool,
pub glide: bool,
pub climb: bool,
pub climb_down: bool,
pub wall_leap: bool,
2019-06-09 14:20:20 +00:00
pub respawn: bool,
pub move_dir: Vec2<f32>,
pub look_dir: Vec3<f32>,
}
#[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
pub struct Controller {
pub inputs: ControllerInputs,
pub events: Vec<ControlEvent>,
}
impl Controller {
pub fn reset(&mut self) {
*self = Self::default();
}
pub fn clear_events(&mut self) {
self.events.clear();
}
pub fn push_event(&mut self, event: ControlEvent) {
self.events.push(event);
}
2019-06-09 14:20:20 +00:00
}
impl Component for Controller {
type Storage = FlaggedStorage<Self, IDVStorage<Self>>;
2019-06-09 14:20:20 +00:00
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub enum MountState {
Unmounted,
MountedBy(Uid),
}
impl Component for MountState {
type Storage = FlaggedStorage<Self, IDVStorage<Self>>;
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct Mounting(pub Uid);
impl Component for Mounting {
type Storage = FlaggedStorage<Self, IDVStorage<Self>>;
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub enum InventoryManip {
Pickup(Uid),
Collect(Vec3<i32>),
Use(usize),
Swap(usize, usize),
Drop(usize),
}