From 286be37225b5de1fb438db0a4029fd391b35c13e Mon Sep 17 00:00:00 2001 From: troido Date: Wed, 29 Jan 2020 22:53:06 +0100 Subject: players can no longer walk through walls --- src/components.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/components.rs') diff --git a/src/components.rs b/src/components.rs index 07de1d5..c72ba61 100644 --- a/src/components.rs +++ b/src/components.rs @@ -1,10 +1,13 @@ +use std::ops; + use specs::{ VecStorage, Component }; use super::controls::Control; +use super::util::clamp; #[derive(Component, Debug, Hash, PartialEq, Eq, Clone, Copy)] @@ -14,6 +17,31 @@ pub struct Position { pub y: i32 } +impl ops::Add for Position { + type Output = Position; + + fn add(self, other: Position) -> Position { + Position { + x: self.x + other.x, + y: self.y + other.y + } + } +} + +impl Position { + + pub fn new(x: i32, y: i32) -> Position { + Position {x, y} + } + + pub fn clamp(self, smaller: Position, larger: Position) -> Position { + Position { + x: clamp(self.x, smaller.x, larger.x), + y: clamp(self.y, smaller.y, larger.y) + } + } +} + #[derive(Component, Debug, Clone)] #[storage(VecStorage)] pub struct Visible { @@ -24,3 +52,7 @@ pub struct Visible { #[derive(Component, Debug)] #[storage(VecStorage)] pub struct Controller(pub Control); + +#[derive(Component, Debug)] +#[storage(VecStorage)] +pub struct Blocking; -- cgit