diff options
Diffstat (limited to 'src/engine/geometry.rs')
-rw-r--r-- | src/engine/geometry.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/engine/geometry.rs b/src/engine/geometry.rs index 44ce9fe..22b56f0 100644 --- a/src/engine/geometry.rs +++ b/src/engine/geometry.rs @@ -31,6 +31,34 @@ impl Point { pub fn wrapping_move_right(&mut self) { self.x = self.x.wrapping_add(1); } + + pub fn to_bitfield(&self, width: u8) -> (u64, u64) { + if self.x >= width { + let index = self.y * width + self.x - width; + (0, 1 << index) + } else { + let index = self.y * width + self.x; + (1 << index, 0) + } + } + + pub fn to_left_bitfield(&self, width: u8) -> u64 { + if self.x >= width { + 0 + } else { + let index = self.y * width + self.x; + 1 << index + } + } + + pub fn to_right_bitfield(&self, width: u8) -> u64 { + if self.x < width { + 0 + } else { + let index = self.y * width + self.x - width; + 1 << index + } + } } use std::cmp::Ord; |