From 1450d7967288b34c19afc77b8d0246ae878b5d1e Mon Sep 17 00:00:00 2001 From: Monty Marz <m.marzouq@gmx.de> Date: Mon, 10 Aug 2020 09:57:01 +0200 Subject: [PATCH] added grass sprites --- .../voxel/sprite/grass/grass_snow_0.vox | Bin 0 -> 55651 bytes .../voxel/sprite/grass/grass_snow_1.vox | Bin 0 -> 55663 bytes .../voxel/sprite/grass/grass_snow_2.vox | Bin 0 -> 55663 bytes .../voxel/sprite/grass/grass_snow_3.vox | Bin 0 -> 55643 bytes .../voxel/sprite/grass/grass_snow_4.vox | Bin 0 -> 55679 bytes .../voxel/sprite/grass/grass_snow_5.vox | Bin 0 -> 55767 bytes .../voxel/sprite/grass/grass_snow_6.vox | Bin 0 -> 55823 bytes .../voxel/sprite/grass/grass_snow_7.vox | Bin 0 -> 55787 bytes .../voxel/sprite/grass/grass_snow_8.vox | Bin 0 -> 55791 bytes .../voxel/sprite/grass/grass_snow_9.vox | Bin 0 -> 55787 bytes common/src/terrain/block.rs | 9 +- voxygen/src/scene/terrain.rs | 88 +++++++- world/src/layer/mod.rs | 209 +++++++++++------- 13 files changed, 223 insertions(+), 83 deletions(-) create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_0.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_1.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_2.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_3.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_4.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_5.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_6.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_7.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_8.vox create mode 100644 assets/voxygen/voxel/sprite/grass/grass_snow_9.vox diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_0.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_0.vox new file mode 100644 index 0000000000000000000000000000000000000000..8b38be6b1cd8099b87dca7c876bdb1e2f5841e53 GIT binary patch literal 55651 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 CFpiJ_ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_1.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_1.vox new file mode 100644 index 0000000000000000000000000000000000000000..75403d9adb77059d36e27f0a98eb372d1b9781f8 GIT binary patch literal 55663 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 AaR2}S literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_2.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_2.vox new file mode 100644 index 0000000000000000000000000000000000000000..33fa19e11128da0e6387f809022b3191932de0d5 GIT binary patch literal 55663 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_3.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_3.vox new file mode 100644 index 0000000000000000000000000000000000000000..5c74f6f593263f5fd28fcc27ae0584f37e44fd78 GIT binary patch literal 55643 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_4.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_4.vox new file mode 100644 index 0000000000000000000000000000000000000000..3179fd185bb78707f1fad77dbf4392370c3ec4da GIT binary patch literal 55679 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 KqFWXvD1QS0PL*u{ literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_5.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_5.vox new file mode 100644 index 0000000000000000000000000000000000000000..f375db3c4218e721c0bbc2c455ac3ff51c276ba8 GIT binary patch literal 55767 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_6.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_6.vox new file mode 100644 index 0000000000000000000000000000000000000000..6806bd1cdf841f2f97853e88969a0c406fbd10d4 GIT binary patch literal 55823 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 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_7.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_7.vox new file mode 100644 index 0000000000000000000000000000000000000000..39618b57e8d0a41db14aedae4b594db4d88b2cc2 GIT binary patch literal 55787 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 FPXLEju_*um literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_8.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_8.vox new file mode 100644 index 0000000000000000000000000000000000000000..bdcfc73399f7bd637cdf1ed6a470f65484bff03d GIT binary patch literal 55791 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 YOXP6GOkPQ<lTN7*uAFm&fD+RG0Vyi6vj6}9 literal 0 HcmV?d00001 diff --git a/assets/voxygen/voxel/sprite/grass/grass_snow_9.vox b/assets/voxygen/voxel/sprite/grass/grass_snow_9.vox new file mode 100644 index 0000000000000000000000000000000000000000..a042764d2515d8a591698843f4025949ab1f4c8f GIT binary patch literal 55787 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 K&hdQ;FrNe3y0G~G literal 0 HcmV?d00001 diff --git a/common/src/terrain/block.rs b/common/src/terrain/block.rs index 39e940448b..ad2c551ffc 100644 --- a/common/src/terrain/block.rs +++ b/common/src/terrain/block.rs @@ -90,6 +90,7 @@ pub enum BlockKind { ShinyGem, DropGate, DropGateBottom, + GrassSnow, } impl fmt::Display for BlockKind { @@ -195,6 +196,7 @@ impl BlockKind { BlockKind::ShinyGem => true, BlockKind::DropGate => false, BlockKind::DropGateBottom => false, + BlockKind::GrassSnow => true, _ => false, } } @@ -294,6 +296,7 @@ impl BlockKind { BlockKind::ShinyGem => false, BlockKind::DropGate => false, BlockKind::DropGateBottom => false, + BlockKind::GrassSnow => false, _ => true, } } @@ -370,13 +373,14 @@ impl BlockKind { BlockKind::ShinyGem => false, BlockKind::DropGate => true, BlockKind::DropGateBottom => false, + BlockKind::GrassSnow => false, _ => true, } } pub fn is_explodable(&self) -> bool { match self { - BlockKind::Leaves | BlockKind::Grass | BlockKind::Rock => true, + BlockKind::Leaves | BlockKind::Grass | BlockKind::Rock | BlockKind::GrassSnow => true, _ => false, } } @@ -494,10 +498,9 @@ impl Block { | BlockKind::WardrobeSingle | BlockKind::WardrobeDouble | BlockKind::Pot - | BlockKind::DropGate + | BlockKind::DropGate | BlockKind::DropGateBottom | BlockKind::Door => Some(self.color[0] & 0b111), - _ => None, } } diff --git a/voxygen/src/scene/terrain.rs b/voxygen/src/scene/terrain.rs index 5f18cd4880..52438575bd 100644 --- a/voxygen/src/scene/terrain.rs +++ b/voxygen/src/scene/terrain.rs @@ -19,8 +19,8 @@ use crossbeam::channel; use dot_vox::DotVoxData; use hashbrown::HashMap; use std::{f32, fmt::Debug, i32, marker::PhantomData, time::Duration}; -use treeculler::{BVol, Frustum, AABB}; use tracing::warn; +use treeculler::{BVol, Frustum, AABB}; use vek::*; struct TerrainChunkData { @@ -359,6 +359,10 @@ fn sprite_config_for(kind: BlockKind) -> Option<SpriteConfig> { variations: 1, wind_sway: 0.0, }), + BlockKind::GrassSnow => Some(SpriteConfig { + variations: 10, + wind_sway: 0.2, + }), _ => None, } } @@ -2759,6 +2763,87 @@ impl<V: RectRasterableVol> Terrain<V> { Vec3::one(), ), ), + // Snow covered Grass + ( + (BlockKind::GrassSnow, 0), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_0", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 1), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_1", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 2), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_2", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 3), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_3", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 4), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_4", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 5), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_5", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 6), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_6", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 7), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_7", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 8), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_8", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), + ( + (BlockKind::GrassSnow, 9), + make_models( + "voxygen.voxel.sprite.grass.grass_snow_9", + Vec3::new(-2.5, -2.5, 0.0), + Vec3::one(), + ), + ), ] .into_iter() .collect(), @@ -3142,7 +3227,6 @@ impl<V: RectRasterableVol> Terrain<V> { let dist_sqrd = Vec2::from(focus_pos).distance_squared(chunk_center); if dist_sqrd < sprite_render_distance.powf(2.0) { for (kind, instances) in &chunk.sprite_instances { - if let Some(models) = self.sprite_models.get(&kind) { renderer.render_sprites( if dist_sqrd < sprite_high_detail_distance.powf(2.0) { diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs index 7cd5ceb449..6d989cb4f6 100644 --- a/world/src/layer/mod.rs +++ b/world/src/layer/mod.rs @@ -1,26 +1,27 @@ use crate::{ column::ColumnSample, - util::{RandomField, Sampler}, sim::SimChunk, + util::{RandomField, Sampler}, Index, }; use common::{ - assets, - comp, + assets, comp, + generation::{ChunkSupplement, EntityInfo}, lottery::Lottery, terrain::{Block, BlockKind}, vol::{BaseVol, ReadVol, RectSizedVol, Vox, WriteVol}, - generation::{ChunkSupplement, EntityInfo}, }; use noise::NoiseFn; +use rand::prelude::*; use std::{ f32, ops::{Mul, Sub}, }; use vek::*; -use rand::prelude::*; -fn close(x: f32, tgt: f32, falloff: f32) -> f32 { (1.0 - (x - tgt).abs() / falloff).max(0.0).powf(0.5) } +fn close(x: f32, tgt: f32, falloff: f32) -> f32 { + (1.0 - (x - tgt).abs() / falloff).max(0.0).powf(0.5) +} pub fn apply_scatter_to<'a>( wpos2d: Vec2<i32>, @@ -32,11 +33,50 @@ pub fn apply_scatter_to<'a>( use BlockKind::*; let scatter: &[(_, fn(&SimChunk) -> (f32, Option<(f32, f32)>))] = &[ // (density, Option<(wavelen, threshold)>) - (BlueFlower, |c| (close(c.temp, -0.3, 0.7).min(close(c.humidity, 0.6, 0.35)) * 0.05, Some((48.0, 0.6)))), - (PinkFlower, |c| (close(c.temp, 0.15, 0.5).min(close(c.humidity, 0.6, 0.35)) * 0.05, Some((48.0, 0.6)))), - (DeadBush, |c| (close(c.temp, 0.8, 0.3).min(close(c.humidity, 0.0, 0.4)) * 0.015, None)), + (BlueFlower, |c| { + ( + close(c.temp, -0.3, 0.7).min(close(c.humidity, 0.6, 0.35)) * 0.05, + Some((48.0, 0.6)), + ) + }), + (PinkFlower, |c| { + ( + close(c.temp, 0.15, 0.5).min(close(c.humidity, 0.6, 0.35)) * 0.05, + Some((48.0, 0.6)), + ) + }), + (DeadBush, |c| { + ( + close(c.temp, 0.8, 0.3).min(close(c.humidity, 0.0, 0.4)) * 0.015, + None, + ) + }), (Twigs, |c| ((c.tree_density - 0.5).max(0.0) * 0.0025, None)), (Stones, |c| ((c.rockiness - 0.5).max(0.0) * 0.005, None)), + (ShortGrass, |c| { + ( + close(c.temp, 0.3, 0.4).min(close(c.humidity, 0.6, 0.35)) * 0.05, + Some((48.0, 0.4)), + ) + }), + (MediumGrass, |c| { + ( + close(c.temp, 0.0, 0.6).min(close(c.humidity, 0.6, 0.35)) * 0.05, + Some((48.0, 0.2)), + ) + }), + (LongGrass, |c| { + ( + close(c.temp, 0.4, 0.4).min(close(c.humidity, 0.8, 0.2)) * 0.05, + Some((48.0, 0.1)), + ) + }), + (GrassSnow, |c| { + ( + close(c.temp, -0.4, 0.4).min(close(c.rockiness, 0.0, 0.5)), + Some((48.0, 0.6)), + ) + }), ]; for y in 0..vol.size_xy().y as i32 { @@ -52,29 +92,38 @@ pub fn apply_scatter_to<'a>( continue; }; - let bk = scatter - .iter() - .enumerate() - .find_map(|(i, (bk, f))| { - let (density, patch) = f(chunk); - if density <= 0.0 || patch.map(|(wavelen, threshold)| index - .noise - .scatter_nz - .get(wpos2d.map(|e| e as f64 / wavelen as f64 + i as f64 * 43.0).into_array()) < threshold as f64) + let bk = scatter.iter().enumerate().find_map(|(i, (bk, f))| { + let (density, patch) = f(chunk); + if density <= 0.0 + || patch + .map(|(wavelen, threshold)| { + index.noise.scatter_nz.get( + wpos2d + .map(|e| e as f64 / wavelen as f64 + i as f64 * 43.0) + .into_array(), + ) < threshold as f64 + }) .unwrap_or(false) - || !RandomField::new(i as u32).chance(Vec3::new(wpos2d.x, wpos2d.y, 0), density) - { - None - } else { - Some(*bk) - } - }); + || !RandomField::new(i as u32).chance(Vec3::new(wpos2d.x, wpos2d.y, 0), density) + { + None + } else { + Some(*bk) + } + }); if let Some(bk) = bk { let mut z = col_sample.alt as i32 - 4; for _ in 0..8 { - if vol.get(Vec3::new(offs.x, offs.y, z)).map(|b| !b.is_solid()).unwrap_or(true) { - let _ = vol.set(Vec3::new(offs.x, offs.y, z), Block::new(bk, Rgb::broadcast(0))); + if vol + .get(Vec3::new(offs.x, offs.y, z)) + .map(|b| !b.is_solid()) + .unwrap_or(true) + { + let _ = vol.set( + Vec3::new(offs.x, offs.y, z), + Block::new(bk, Rgb::broadcast(0)), + ); break; } z += 1; @@ -295,57 +344,61 @@ pub fn apply_caves_supplement<'a>( if RandomField::new(index.seed).chance(wpos2d.into(), 0.00005) && cave_base < surface_z as i32 - 40 { - let entity = EntityInfo::at(Vec3::new(wpos2d.x as f32, wpos2d.y as f32, cave_base as f32)) - .with_alignment(comp::Alignment::Enemy) - .with_body(match rng.gen_range(0, 6) { - 0 => { - let species = match rng.gen_range(0, 2) { - 0 => comp::quadruped_small::Species::Truffler, - _ => comp::quadruped_small::Species::Hyena, - }; - comp::quadruped_small::Body::random_with(rng, &species).into() - }, - 1 => { - let species = match rng.gen_range(0, 3) { - 0 => comp::quadruped_medium::Species::Tarasque, - 1 => comp::quadruped_medium::Species::Frostfang, - _ => comp::quadruped_medium::Species::Bonerattler, - }; - comp::quadruped_medium::Body::random_with(rng, &species).into() - }, - 2 => { - let species = match rng.gen_range(0, 3) { - 0 => comp::quadruped_low::Species::Maneater, - 1 => comp::quadruped_low::Species::Rocksnapper, - _ => comp::quadruped_low::Species::Salamander, - }; - comp::quadruped_low::Body::random_with(rng, &species).into() - }, - 3 => { - let species = match rng.gen_range(0, 3) { - 0 => comp::critter::Species::Fungome, - 1 => comp::critter::Species::Axolotl, - _ => comp::critter::Species::Rat, - }; - comp::critter::Body::random_with(rng, &species).into() - }, - 4 => { - let species = match rng.gen_range(0, 1) { - _ => comp::golem::Species::StoneGolem, - }; - comp::golem::Body::random_with(rng, &species).into() - }, - _ => { - let species = match rng.gen_range(0, 4) { - 0 => comp::biped_large::Species::Ogre, - 1 => comp::biped_large::Species::Cyclops, - 2 => comp::biped_large::Species::Wendigo, - _ => comp::biped_large::Species::Troll, - }; - comp::biped_large::Body::random_with(rng, &species).into() - }, - }) - .with_automatic_name(); + let entity = EntityInfo::at(Vec3::new( + wpos2d.x as f32, + wpos2d.y as f32, + cave_base as f32, + )) + .with_alignment(comp::Alignment::Enemy) + .with_body(match rng.gen_range(0, 6) { + 0 => { + let species = match rng.gen_range(0, 2) { + 0 => comp::quadruped_small::Species::Truffler, + _ => comp::quadruped_small::Species::Hyena, + }; + comp::quadruped_small::Body::random_with(rng, &species).into() + }, + 1 => { + let species = match rng.gen_range(0, 3) { + 0 => comp::quadruped_medium::Species::Tarasque, + 1 => comp::quadruped_medium::Species::Frostfang, + _ => comp::quadruped_medium::Species::Bonerattler, + }; + comp::quadruped_medium::Body::random_with(rng, &species).into() + }, + 2 => { + let species = match rng.gen_range(0, 3) { + 0 => comp::quadruped_low::Species::Maneater, + 1 => comp::quadruped_low::Species::Rocksnapper, + _ => comp::quadruped_low::Species::Salamander, + }; + comp::quadruped_low::Body::random_with(rng, &species).into() + }, + 3 => { + let species = match rng.gen_range(0, 3) { + 0 => comp::critter::Species::Fungome, + 1 => comp::critter::Species::Axolotl, + _ => comp::critter::Species::Rat, + }; + comp::critter::Body::random_with(rng, &species).into() + }, + 4 => { + let species = match rng.gen_range(0, 1) { + _ => comp::golem::Species::StoneGolem, + }; + comp::golem::Body::random_with(rng, &species).into() + }, + _ => { + let species = match rng.gen_range(0, 4) { + 0 => comp::biped_large::Species::Ogre, + 1 => comp::biped_large::Species::Cyclops, + 2 => comp::biped_large::Species::Wendigo, + _ => comp::biped_large::Species::Troll, + }; + comp::biped_large::Body::random_with(rng, &species).into() + }, + }) + .with_automatic_name(); supplement.add_entity(entity); }