diff options
Diffstat (limited to 'src/pos.rs')
| -rw-r--r-- | src/pos.rs | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/pos.rs b/src/pos.rs new file mode 100644 index 0000000..df63570 --- /dev/null +++ b/src/pos.rs @@ -0,0 +1,45 @@ + + + +use std::ops::Add; +use serde_json::{Value, json}; +use specs::{Component, VecStorage}; +use super::util::{clamp, ToJson}; + +#[derive(Component, Debug, Hash, PartialEq, Eq, Clone, Copy)] +#[storage(VecStorage)] +pub struct Pos { + pub x: i32, + pub y: i32 +} + +impl Pos { + + pub fn new(x: i32, y: i32) -> Pos { + Pos {x, y} + } + + pub fn clamp(self, smaller: Pos, larger: Pos) -> Pos { + Pos { + x: clamp(self.x, smaller.x, larger.x), + y: clamp(self.y, smaller.y, larger.y) + } + } +} + +impl Add<Pos> for Pos { + type Output = Pos; + + fn add(self, other: Pos) -> Pos { + Pos { + x: self.x + other.x, + y: self.y + other.y + } + } +} + +impl ToJson for Pos { + fn to_json(&self) -> Value { + json!([self.x, self.y]) + } +} |
