diff --git a/src/bin/minedmap/tile_renderer.rs b/src/bin/minedmap/tile_renderer.rs index 2dcdedd..fed99bb 100644 --- a/src/bin/minedmap/tile_renderer.rs +++ b/src/bin/minedmap/tile_renderer.rs @@ -8,7 +8,7 @@ use num_integer::div_mod_floor; use minedmap::{ io::{fs, storage}, - resource::{block_color, Biome}, + resource::{block_color, needs_biome, Biome}, types::*, }; @@ -85,8 +85,14 @@ impl<'a> TileRenderer<'a> { ) -> Option<[u8; 4]> { let block = chunk.blocks[block_coords]?; let depth = chunk.depths[block_coords]?; + + if !needs_biome(block) { + return Some(block_color(block, None, depth.0 as f32)); + } + let biome = chunk.biomes[block_coords].as_ref()?; - Some(block_color(block, biome, depth.0 as f32)) + + Some(block_color(block, Some(biome), depth.0 as f32)) } fn render_chunk( diff --git a/src/resource/block_color.rs b/src/resource/block_color.rs index c239d96..0b6e935 100644 --- a/src/resource/block_color.rs +++ b/src/resource/block_color.rs @@ -72,16 +72,24 @@ impl BiomeExt for Biome { const BIRCH_COLOR: Vec3 = Vec3::new(0.502, 0.655, 0.333); // == color_vec(Color([128, 167, 85])) const EVERGREEN_COLOR: Vec3 = Vec3::new(0.380, 0.600, 0.380); // == color_vec(Color([97, 153, 97])) -pub fn block_color(block: BlockType, biome: &Biome, depth: f32) -> [u8; 4] { +pub fn needs_biome(block: BlockType) -> bool { use super::BlockFlag::*; + block.is(Grass) || block.is(Foliage) || block.is(Water) +} + +pub fn block_color(block: BlockType, biome: Option<&Biome>, depth: f32) -> [u8; 4] { + use super::BlockFlag::*; + + let get_biome = || biome.expect("needs biome to determine block color"); + let mut color = color_vec_unscaled(block.color); if block.is(Grass) { - color *= biome.grass_color(depth); + color *= get_biome().grass_color(depth); } if block.is(Foliage) { - color *= biome.foliage_color(depth); + color *= get_biome().foliage_color(depth); } if block.is(Birch) { color *= BIRCH_COLOR; @@ -90,7 +98,7 @@ pub fn block_color(block: BlockType, biome: &Biome, depth: f32) -> [u8; 4] { color *= EVERGREEN_COLOR; } if block.is(Water) { - color *= biome.water_color(); + color *= get_biome().water_color(); } color *= 0.5 + 0.005 * depth; diff --git a/src/resource/mod.rs b/src/resource/mod.rs index 7095f68..921fdc2 100644 --- a/src/resource/mod.rs +++ b/src/resource/mod.rs @@ -91,7 +91,7 @@ impl BlockTypes { } pub use biomes::{Biome, BiomeGrassColorModifier}; -pub use block_color::block_color; +pub use block_color::{block_color, needs_biome}; #[derive(Debug)] pub struct BiomeTypes {