#[derive(Debug, Clone, Copy)] pub enum Terrain { DeepOcean, Ocean, Beach, Flats, Hills, Mountains, HighMountains, } pub struct World { pub map: Vec>, pub size: usize, } impl World { pub fn new(size: usize) -> World { let mut map = Vec::new(); for _ in 0..size { let mut row = Vec::new(); for _ in 0..size { row.push(Terrain::DeepOcean); } map.push(row); } World { map: map, size: size, } } } impl Terrain { pub fn from_height(height: f64) -> Terrain { if height < -2000.0 { Terrain::DeepOcean } else if height < 0.0 { Terrain::Ocean } else if height < 50.0 { Terrain::Beach } else if height < 1000.0 { Terrain::Flats } else if height < 2000.0 { Terrain::Hills } else if height < 3500.0 { Terrain::Mountains } else { Terrain::HighMountains } } pub fn to_color(self) -> [u8; 3] { match self { Terrain::DeepOcean => [20, 60, 255], Terrain::Ocean => [20, 120, 255], Terrain::Beach => [255, 255, 100], Terrain::Flats => [0, 204, 0], Terrain::Hills => [102, 153, 0], Terrain::Mountains => [153, 153, 102], Terrain::HighMountains => [230, 230, 230], } } }