66 lines
1.5 KiB
Rust
66 lines
1.5 KiB
Rust
|
|
||
|
#[derive(Debug, Clone, Copy)]
|
||
|
pub enum Terrain {
|
||
|
DeepOcean,
|
||
|
Ocean,
|
||
|
Beach,
|
||
|
Flats,
|
||
|
Hills,
|
||
|
Mountains,
|
||
|
HighMountains,
|
||
|
}
|
||
|
|
||
|
pub struct World {
|
||
|
pub map: Vec<Vec<Terrain>>,
|
||
|
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],
|
||
|
}
|
||
|
}
|
||
|
}
|