diff -r 859a41b137d4 -r abb42ba345b6 rust/landgen/src/outline_template.rs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rust/landgen/src/outline_template.rs Fri Nov 02 09:45:54 2018 +0100 @@ -0,0 +1,75 @@ +use integral_geometry::{Point, Rect, Size}; + + +pub struct OutlineTemplate { + pub islands: Vec>, + pub fill_points: Vec, + pub size: Size, + pub can_flip: bool, + pub can_invert: bool, + pub can_mirror: bool, + pub is_negative: bool, +} + +impl OutlineTemplate { + pub fn new(size: Size) -> Self { + OutlineTemplate { + size, + islands: Vec::new(), + fill_points: Vec::new(), + can_flip: false, + can_invert: false, + can_mirror: false, + is_negative: false, + } + } + + pub fn flippable(self) -> Self { + Self { + can_flip: true, + ..self + } + } + + pub fn mirrorable(self) -> Self { + Self { + can_mirror: true, + ..self + } + } + + pub fn invertable(self) -> Self { + Self { + can_invert: true, + ..self + } + } + + pub fn negative(self) -> Self { + Self { + is_negative: true, + ..self + } + } + + pub fn with_fill_points(self, fill_points: Vec) -> Self { + Self { + fill_points, + ..self + } + } + + pub fn with_islands(self, islands: Vec>) -> Self { + Self { islands, ..self } + } + + pub fn add_fill_points(mut self, points: &[Point]) -> Self { + self.fill_points.extend_from_slice(points); + self + } + + pub fn add_island(mut self, island: &[Rect]) -> Self { + self.islands.push(island.into()); + self + } +}