Prevented shrooms spawning in water

This commit is contained in:
Joshua Barretto 2021-07-20 21:22:42 +01:00
parent 2ce88ac398
commit a5309e1036

View File

@ -653,6 +653,7 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
cavern_avg_top, cavern_avg_top,
floor, floor,
stalagtite, stalagtite,
cavern_avg_bottom as i32 + 16, // Water level
) )
}; };
@ -670,10 +671,11 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
let mushroom = if let Some(mushroom) = let mushroom = if let Some(mushroom) =
mushroom_cache.entry(wpos2d).or_insert_with(|| { mushroom_cache.entry(wpos2d).or_insert_with(|| {
let mut rng = RandomPerm::new(seed); let mut rng = RandomPerm::new(seed);
let (cavern_bottom, cavern_top, _, _, floor, _) = cavern_at(wpos2d); let (cavern_bottom, cavern_top, _, _, floor, _, water_level) = cavern_at(wpos2d);
if rng.gen_bool(0.1) && cavern_top - cavern_bottom > 32 { let pos = wpos2d.with_z(cavern_bottom + floor);
if rng.gen_bool(0.15) && cavern_top - cavern_bottom > 32 && pos.z as i32 > water_level - 2 {
Some(Mushroom { Some(Mushroom {
pos: wpos2d.with_z(cavern_bottom + floor), pos,
stalk: 12.0 + rng.gen::<f32>().powf(2.0) * 35.0, stalk: 12.0 + rng.gen::<f32>().powf(2.0) * 35.0,
head_color: Rgb::new( head_color: Rgb::new(
50, 50,
@ -760,7 +762,7 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
return; return;
} }
let (cavern_bottom, cavern_top, cavern_avg_bottom, cavern_avg_top, floor, stalagtite) = let (cavern_bottom, cavern_top, cavern_avg_bottom, cavern_avg_top, floor, stalagtite, water_level) =
cavern_at(wpos2d); cavern_at(wpos2d);
let mini_stalagtite = info let mini_stalagtite = info
@ -841,8 +843,6 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
} }
}; };
let water_level = cavern_avg_bottom as i32 + 16;
let cavern_top = cavern_top as i32; let cavern_top = cavern_top as i32;
let mut last_kind = BlockKind::Rock; let mut last_kind = BlockKind::Rock;
for z in cavern_bottom - 1..cavern_top { for z in cavern_bottom - 1..cavern_top {
@ -894,25 +894,23 @@ pub fn apply_caverns_to<R: Rng>(canvas: &mut Canvas, dynamic_rng: &mut R) {
Block::air(SpriteKind::CavernLillypadBlue) Block::air(SpriteKind::CavernLillypadBlue)
} else if z == cavern_bottom + floor && dynamic_rng.gen_bool(Lerp::lerp(0.0, 0.5, plant_factor)) && last_kind == BlockKind::Grass { } else if z == cavern_bottom + floor && dynamic_rng.gen_bool(Lerp::lerp(0.0, 0.5, plant_factor)) && last_kind == BlockKind::Grass {
Block::air( Block::air(
*if dynamic_rng.gen_bool(0.9) { *if dynamic_rng.gen_bool(0.9) { // High density
&[ &[
CavernGrassBlueShort, CavernGrassBlueShort,
CavernGrassBlueMedium, CavernGrassBlueMedium,
CavernGrassBlueLong, CavernGrassBlueLong,
] as &[_] ] as &[_]
} else { } else if dynamic_rng.gen_bool(0.5) { // Medium density
&[ &[
CaveMushroom, CaveMushroom,
] as &[_]
} else { // Low density
&[
LeafyPlant, LeafyPlant,
Fern, Fern,
Reed,
Pyrebloom, Pyrebloom,
Moonbell, Moonbell,
Welwitch, Welwitch,
LargeGrass,
LongGrass,
MediumGrass,
ShortGrass,
GrassBlue, GrassBlue,
] as &[_] ] as &[_]
} }