summaryrefslogtreecommitdiff
path: root/src/pos.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/pos.rs')
-rw-r--r--src/pos.rs45
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])
+ }
+}