|
|
@ -1,22 +1,23 @@ |
|
|
|
pub struct Behaviour { |
|
|
|
pub moves: Vec<(i8, i8)>, //this is a placeholder
|
|
|
|
pub dirs: [u8; 4], // up right down left
|
|
|
|
pub dirs: Vec<(i8, i8)>, // up right down left
|
|
|
|
} |
|
|
|
|
|
|
|
impl Behaviour { |
|
|
|
pub fn new(m: Vec<(i8, i8)>, d: [u8; 4]) -> Behaviour { |
|
|
|
pub fn new(m: Vec<(i8, i8)>, d: Vec<(i8, i8)>) -> Behaviour { |
|
|
|
Behaviour { moves: m, dirs: d } |
|
|
|
} |
|
|
|
|
|
|
|
pub fn validate_dest(&self, origin: (u8, u8), destination: (u8, u8)) -> bool { |
|
|
|
// original plan was to use match but i felt for loops would work better since we dont yet know the extent of moves vector
|
|
|
|
//println!("origin: ({}, {}), destination: ({}, {})", origin.0, origin.1, destination.0, destination.1);
|
|
|
|
// println!("origin: ({}, {}), destination: ({}, {})", origin.0, origin.1, destination.0, destination.1);
|
|
|
|
for moveset in self.moves.iter() { |
|
|
|
for dir in self.dirs.iter() { |
|
|
|
// mind blanking need to add something to confirm which direction we are iterating through
|
|
|
|
// println!("Permissible: ({}, {})", (origin.0 as i8) + dir.0 * moveset.0,(origin.1 as i8) - dir.1 * moveset.1);
|
|
|
|
if ( |
|
|
|
((origin.0 as i8) + (*dir as i8) * moveset.0) as u8, |
|
|
|
((origin.1 as i8) - (*dir as i8) * moveset.1) as u8, |
|
|
|
((origin.0 as i8) + dir.0 * moveset.0) as u8, |
|
|
|
((origin.1 as i8) - dir.1 * moveset.1) as u8, |
|
|
|
) == destination |
|
|
|
{ |
|
|
|
return true; |
|
|
|