mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'lilypads' into 'master'
Jungles and Rivers update See merge request veloren/veloren!2978
This commit is contained in:
commit
9866befac4
BIN
assets/voxygen/voxel/sprite/flowers/jungle_flower_red-0.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/jungle_flower_red-0.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/flowers/jungle_flower_red-1.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/flowers/jungle_flower_red-1.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/junglefern/1.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/junglefern/1.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/junglefern/2.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/junglefern/2.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/junglefern/3.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/junglefern/3.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/junglefern/4.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/junglefern/4.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-0.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-0.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-1.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-1.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-2.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-2.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-3.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-3.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-4.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-4.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-5.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/jungleredgrass/jungle_grass_red-5.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-0.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-0.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-1.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-1.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-2.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-2.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-3.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-3.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-4.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/leafy_plant/jungle_plant-4.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-1.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-1.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-2.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-2.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-3.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-3.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-4.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-4.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-5.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-5.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-6.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-6.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-7.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-7.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-8.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-8.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-9.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-lilypad-9.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-1.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-1.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-2.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-2.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-3.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-3.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-4.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-4.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-5.vox
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/voxel/sprite/lillypads/temperate-reeds-5.vox
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/reed/reed-0.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/reed/reed-0.vox
(Stored with Git LFS)
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/reed/reed-1.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/reed/reed-1.vox
(Stored with Git LFS)
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/reed/reed-2.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/reed/reed-2.vox
(Stored with Git LFS)
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/reed/reed-3.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/reed/reed-3.vox
(Stored with Git LFS)
Binary file not shown.
BIN
assets/voxygen/voxel/sprite/reed/reed-4.vox
(Stored with Git LFS)
BIN
assets/voxygen/voxel/sprite/reed/reed-4.vox
(Stored with Git LFS)
Binary file not shown.
@ -260,6 +260,16 @@ RedFlower: Some((
|
|||||||
offset: (-3.5, -3.5, 0.0),
|
offset: (-3.5, -3.5, 0.0),
|
||||||
lod_axes: (1.0, 1.0, 1.0),
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.flowers.jungle_flower_red-0",
|
||||||
|
offset: (-7.5, -7.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.flowers.jungle_flower_red-1",
|
||||||
|
offset: (-7.5, -7.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
wind_sway: 0.1,
|
wind_sway: 0.1,
|
||||||
)),
|
)),
|
||||||
@ -444,6 +454,41 @@ LargeGrass: Some((
|
|||||||
],
|
],
|
||||||
wind_sway: 0.5,
|
wind_sway: 0.5,
|
||||||
)),
|
)),
|
||||||
|
JungleRedGrass: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-0",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-1",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-2",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-3",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-4",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.jungleredgrass.jungle_grass_red-5",
|
||||||
|
offset: (-5.5, -5.5, 0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.1,
|
||||||
|
)),
|
||||||
// Fruit
|
// Fruit
|
||||||
Apple: Some((
|
Apple: Some((
|
||||||
variations: [
|
variations: [
|
||||||
@ -946,6 +991,36 @@ LeafyPlant: Some((
|
|||||||
],
|
],
|
||||||
wind_sway: 0.4,
|
wind_sway: 0.4,
|
||||||
)),
|
)),
|
||||||
|
JungleLeafyPlant: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-0",
|
||||||
|
offset: (-5.5, -1.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-1",
|
||||||
|
offset: (-6.5, -2.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-2",
|
||||||
|
offset: (-6.5, -2.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-3",
|
||||||
|
offset: (-7.5, -2.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.leafy_plant.jungle_plant-4",
|
||||||
|
offset: (-7.5, -5.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.4,
|
||||||
|
)),
|
||||||
// Ferns
|
// Ferns
|
||||||
Fern: Some((
|
Fern: Some((
|
||||||
variations: [
|
variations: [
|
||||||
@ -1017,6 +1092,31 @@ Fern: Some((
|
|||||||
],
|
],
|
||||||
wind_sway: 0.4,
|
wind_sway: 0.4,
|
||||||
)),
|
)),
|
||||||
|
JungleFern: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.junglefern.1",
|
||||||
|
offset: (-9.5, -9.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.junglefern.2",
|
||||||
|
offset: (-7.5, -3.5, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.junglefern.3",
|
||||||
|
offset: (-8.0, -8.0, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.junglefern.4",
|
||||||
|
offset: (-6.0, -6.0, -0.0),
|
||||||
|
lod_axes: (1.0, 1.0, 1.0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.4,
|
||||||
|
)),
|
||||||
// Savanna Flora
|
// Savanna Flora
|
||||||
SavannaGrass: Some((
|
SavannaGrass: Some((
|
||||||
variations: [
|
variations: [
|
||||||
@ -2222,6 +2322,31 @@ Reed: Some((
|
|||||||
offset: (-5.5, -5.5, 0.0),
|
offset: (-5.5, -5.5, 0.0),
|
||||||
lod_axes: (0.0, 0.0, 0.5),
|
lod_axes: (0.0, 0.0, 0.5),
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-reeds-1",
|
||||||
|
offset: (-4.5, -4.0, 0.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.5),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-reeds-2",
|
||||||
|
offset: (-4.5, -4.5, 0.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.5),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-reeds-3",
|
||||||
|
offset: (-4.5, -4.0, 0.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.5),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-reeds-4",
|
||||||
|
offset: (-4.5, -4.5, 0.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.5),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-reeds-5",
|
||||||
|
offset: (-4.0, -4.5, 0.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.5),
|
||||||
|
),
|
||||||
],
|
],
|
||||||
wind_sway: 0.3,
|
wind_sway: 0.3,
|
||||||
)),
|
)),
|
||||||
@ -3482,4 +3607,55 @@ CavernMycelBlue: Some((
|
|||||||
],
|
],
|
||||||
wind_sway: 0.1,
|
wind_sway: 0.1,
|
||||||
)),
|
)),
|
||||||
|
// LillyPads on rivers
|
||||||
|
LillyPads: Some((
|
||||||
|
variations: [
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-1",
|
||||||
|
offset: (-4.5, -4.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-2",
|
||||||
|
offset: (-4.5, -4.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-3",
|
||||||
|
offset: (-5.5, -5.0, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-4",
|
||||||
|
offset: (-5.5, -5.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-5",
|
||||||
|
offset: (-5.5, -5.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-6",
|
||||||
|
offset: (-5.5, -5.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-7",
|
||||||
|
offset: (-5.5, -5.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-8",
|
||||||
|
offset: (-4.5, -4.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
(
|
||||||
|
model: "voxygen.voxel.sprite.lillypads.temperate-lilypad-9",
|
||||||
|
offset: (-4.5, -4.5, -18.0),
|
||||||
|
lod_axes: (0.0, 0.0, 0.0),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
wind_sway: 0.6,
|
||||||
|
)),
|
||||||
)
|
)
|
||||||
|
@ -183,6 +183,10 @@ make_case_elim!(
|
|||||||
CavernLillypadBlue = 0x9C,
|
CavernLillypadBlue = 0x9C,
|
||||||
CavernMycelBlue = 0x9D,
|
CavernMycelBlue = 0x9D,
|
||||||
DismantlingBench = 0x9E,
|
DismantlingBench = 0x9E,
|
||||||
|
JungleFern = 0x9F,
|
||||||
|
LillyPads = 0xA0,
|
||||||
|
JungleLeafyPlant = 0xA1,
|
||||||
|
JungleRedGrass = 0xA2,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -271,6 +275,7 @@ impl SpriteKind {
|
|||||||
| SpriteKind::Silver
|
| SpriteKind::Silver
|
||||||
| SpriteKind::Gold => 0.6,
|
| SpriteKind::Gold => 0.6,
|
||||||
SpriteKind::EnsnaringVines | SpriteKind::CavernLillypadBlue => 0.1,
|
SpriteKind::EnsnaringVines | SpriteKind::CavernLillypadBlue => 0.1,
|
||||||
|
SpriteKind::LillyPads => 0.1,
|
||||||
_ => return None,
|
_ => return None,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::{column::ColumnSample, sim::SimChunk, Canvas, CONFIG};
|
use crate::{column::ColumnSample, sim::SimChunk, Canvas, CONFIG};
|
||||||
use common::terrain::SpriteKind;
|
use common::terrain::{Block, SpriteKind};
|
||||||
use noise::NoiseFn;
|
use noise::NoiseFn;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use std::f32;
|
use std::f32;
|
||||||
@ -13,17 +13,24 @@ const MUSH_FACT: f32 = 1.0e-4; // To balance things around the mushroom spawning
|
|||||||
const GRASS_FACT: f32 = 1.0e-3; // To balance things around the grass spawning rate
|
const GRASS_FACT: f32 = 1.0e-3; // To balance things around the grass spawning rate
|
||||||
const DEPTH_WATER_NORM: f32 = 15.0; // Water depth at which regular underwater sprites start spawning
|
const DEPTH_WATER_NORM: f32 = 15.0; // Water depth at which regular underwater sprites start spawning
|
||||||
pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
||||||
|
enum WaterMode {
|
||||||
|
Underwater,
|
||||||
|
Floating,
|
||||||
|
Ground,
|
||||||
|
}
|
||||||
|
use WaterMode::*;
|
||||||
|
|
||||||
use SpriteKind::*;
|
use SpriteKind::*;
|
||||||
#[allow(clippy::type_complexity)]
|
#[allow(clippy::type_complexity)]
|
||||||
// TODO: Add back all sprites we had before
|
// TODO: Add back all sprites we had before
|
||||||
let scatter: &[(
|
let scatter: &[(
|
||||||
_,
|
_,
|
||||||
bool,
|
WaterMode,
|
||||||
fn(&SimChunk, &ColumnSample) -> (f32, Option<(f32, f32, f32)>),
|
fn(&SimChunk, &ColumnSample) -> (f32, Option<(f32, f32, f32)>),
|
||||||
)] = &[
|
)] = &[
|
||||||
// (density, Option<(base_density_proportion, wavelen, threshold)>)
|
// (density, Option<(base_density_proportion, wavelen, threshold)>)
|
||||||
// Flowers
|
// Flowers
|
||||||
(BlueFlower, false, |_, col| {
|
(BlueFlower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.7).min(close(
|
close(col.temp, CONFIG.temperate_temp, 0.7).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -35,7 +42,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 256.0, 0.25)),
|
Some((0.0, 256.0, 0.25)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(PinkFlower, false, |_, col| {
|
(PinkFlower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* col.tree_density
|
* col.tree_density
|
||||||
@ -44,7 +51,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 100.0, 0.1)),
|
Some((0.0, 100.0, 0.1)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(PurpleFlower, false, |_, col| {
|
(PurpleFlower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.7).min(close(
|
close(col.temp, CONFIG.temperate_temp, 0.7).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -56,7 +63,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 100.0, 0.1)),
|
Some((0.0, 100.0, 0.1)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(RedFlower, false, |_, col| {
|
(RedFlower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.tropical_temp, 0.7).min(close(
|
close(col.temp, CONFIG.tropical_temp, 0.7).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -68,7 +75,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 100.0, 0.1)),
|
Some((0.0, 100.0, 0.1)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(WhiteFlower, false, |_, col| {
|
(WhiteFlower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* col.tree_density
|
* col.tree_density
|
||||||
@ -77,7 +84,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 100.0, 0.1)),
|
Some((0.0, 100.0, 0.1)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(YellowFlower, false, |_, col| {
|
(YellowFlower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* col.tree_density
|
* col.tree_density
|
||||||
@ -86,7 +93,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 100.0, 0.1)),
|
Some((0.0, 100.0, 0.1)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Cotton, false, |_, col| {
|
(Cotton, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.7).min(close(
|
close(col.temp, CONFIG.temperate_temp, 0.7).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -98,7 +105,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 256.0, 0.25)),
|
Some((0.0, 256.0, 0.25)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Sunflower, false, |_, col| {
|
(Sunflower, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* col.tree_density
|
* col.tree_density
|
||||||
@ -107,7 +114,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 100.0, 0.15)),
|
Some((0.0, 100.0, 0.15)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(WildFlax, false, |_, col| {
|
(WildFlax, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.0, 0.7).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* col.tree_density
|
* col.tree_density
|
||||||
@ -117,7 +124,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Herbs and Spices
|
// Herbs and Spices
|
||||||
(LingonBerry, false, |_, col| {
|
(LingonBerry, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.5))
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.5))
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -125,7 +132,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(LeafyPlant, false, |_, col| {
|
(LeafyPlant, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.3))
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.3))
|
||||||
* GRASS_FACT
|
* GRASS_FACT
|
||||||
@ -133,7 +140,15 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Fern, false, |_, col| {
|
(JungleLeafyPlant, Ground, |_, col| {
|
||||||
|
(
|
||||||
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
|
* GRASS_FACT
|
||||||
|
* 32.0,
|
||||||
|
Some((0.15, 64.0, 0.2)),
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
(Fern, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.forest_hum, 0.5))
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.forest_hum, 0.5))
|
||||||
* GRASS_FACT
|
* GRASS_FACT
|
||||||
@ -141,7 +156,16 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 64.0, 0.2)),
|
Some((0.0, 64.0, 0.2)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Blueberry, false, |_, col| {
|
(JungleFern, Ground, |_, col| {
|
||||||
|
(
|
||||||
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
|
* col.tree_density
|
||||||
|
* MUSH_FACT
|
||||||
|
* 200.0,
|
||||||
|
Some((0.0, 84.0, 0.35)),
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
(Blueberry, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.5).min(close(
|
close(col.temp, CONFIG.temperate_temp, 0.5).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -152,7 +176,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Pumpkin, false, |_, col| {
|
(Pumpkin, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.5).min(close(
|
close(col.temp, CONFIG.temperate_temp, 0.5).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -165,23 +189,23 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
}),
|
}),
|
||||||
// Collectable Objects
|
// Collectable Objects
|
||||||
// Only spawn twigs in temperate forests
|
// Only spawn twigs in temperate forests
|
||||||
(Twigs, false, |_, col| {
|
(Twigs, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
(col.tree_density * 1.25 - 0.25).powf(0.5).max(0.0) * 0.75e-3,
|
(col.tree_density * 1.25 - 0.25).powf(0.5).max(0.0) * 0.75e-3,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Stones, false, |chunk, _| {
|
(Stones, Ground, |chunk, _| {
|
||||||
((chunk.rockiness - 0.5).max(0.025) * 1.0e-3, None)
|
((chunk.rockiness - 0.5).max(0.025) * 1.0e-3, None)
|
||||||
}),
|
}),
|
||||||
(Copper, false, |chunk, _| {
|
(Copper, Ground, |chunk, _| {
|
||||||
((chunk.rockiness - 0.5).max(0.0) * 1.5e-3, None)
|
((chunk.rockiness - 0.5).max(0.0) * 1.5e-3, None)
|
||||||
}),
|
}),
|
||||||
(Tin, false, |chunk, _| {
|
(Tin, Ground, |chunk, _| {
|
||||||
((chunk.rockiness - 0.5).max(0.0) * 1.5e-3, None)
|
((chunk.rockiness - 0.5).max(0.0) * 1.5e-3, None)
|
||||||
}),
|
}),
|
||||||
// Don't spawn Mushrooms in snowy regions
|
// Don't spawn Mushrooms in snowy regions
|
||||||
(Mushroom, false, |_, col| {
|
(Mushroom, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.forest_hum, 0.35))
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.forest_hum, 0.35))
|
||||||
* MUSH_FACT,
|
* MUSH_FACT,
|
||||||
@ -189,7 +213,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Grass
|
// Grass
|
||||||
(ShortGrass, false, |_, col| {
|
(ShortGrass, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.2, 0.75).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.2, 0.75).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* GRASS_FACT
|
* GRASS_FACT
|
||||||
@ -197,7 +221,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.3, 64.0, 0.3)),
|
Some((0.3, 64.0, 0.3)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(MediumGrass, false, |_, col| {
|
(MediumGrass, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
* GRASS_FACT
|
* GRASS_FACT
|
||||||
@ -205,7 +229,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.3, 64.0, 0.3)),
|
Some((0.3, 64.0, 0.3)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(LongGrass, false, |_, col| {
|
(LongGrass, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.3, 0.35).min(close(col.humidity, CONFIG.jungle_hum, 0.3))
|
close(col.temp, 0.3, 0.35).min(close(col.humidity, CONFIG.jungle_hum, 0.3))
|
||||||
* GRASS_FACT
|
* GRASS_FACT
|
||||||
@ -213,8 +237,17 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.1, 48.0, 0.3)),
|
Some((0.1, 48.0, 0.3)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
|
(JungleRedGrass, Ground, |_, col| {
|
||||||
|
(
|
||||||
|
close(col.temp, 0.3, 0.4).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
|
* col.tree_density
|
||||||
|
* MUSH_FACT
|
||||||
|
* 350.0,
|
||||||
|
Some((0.0, 128.0, 0.25)),
|
||||||
|
)
|
||||||
|
}),
|
||||||
// Jungle Sprites
|
// Jungle Sprites
|
||||||
// (LongGrass, false, |c, col| {
|
// (LongGrass, Ground, |c, col| {
|
||||||
// (
|
// (
|
||||||
// close(col.temp, CONFIG.tropical_temp, 0.4).min(close(
|
// close(col.temp, CONFIG.tropical_temp, 0.4).min(close(
|
||||||
// col.humidity,
|
// col.humidity,
|
||||||
@ -224,7 +257,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
// Some((0.0, 60.0, 5.0)),
|
// Some((0.0, 60.0, 5.0)),
|
||||||
// )
|
// )
|
||||||
// }),
|
// }),
|
||||||
/*(WheatGreen, false, |c, col| {
|
/*(WheatGreen, Ground, |c, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 0.4, 0.2).min(close(col.humidity, CONFIG.forest_hum, 0.1))
|
close(col.temp, 0.4, 0.2).min(close(col.humidity, CONFIG.forest_hum, 0.1))
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -232,7 +265,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),*/
|
}),*/
|
||||||
(GrassSnow, false, |_, col| {
|
(GrassSnow, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.snow_temp - 0.2, 0.4).min(close(
|
close(col.temp, CONFIG.snow_temp - 0.2, 0.4).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -243,7 +276,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.0, 48.0, 0.2)),
|
Some((0.0, 48.0, 0.2)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Moonbell, false, |_, col| {
|
(Moonbell, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.snow_temp - 0.2, 0.4).min(close(
|
close(col.temp, CONFIG.snow_temp - 0.2, 0.4).min(close(
|
||||||
col.humidity,
|
col.humidity,
|
||||||
@ -254,7 +287,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Savanna Plants
|
// Savanna Plants
|
||||||
(SavannaGrass, false, |_, col| {
|
(SavannaGrass, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
||||||
@ -264,7 +297,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.15, 64.0, 0.2)),
|
Some((0.15, 64.0, 0.2)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(TallSavannaGrass, false, |_, col| {
|
(TallSavannaGrass, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
||||||
@ -274,7 +307,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.1, 48.0, 0.2)),
|
Some((0.1, 48.0, 0.2)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(RedSavannaGrass, false, |_, col| {
|
(RedSavannaGrass, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
||||||
@ -284,7 +317,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
Some((0.15, 48.0, 0.25)),
|
Some((0.15, 48.0, 0.25)),
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(SavannaBush, false, |_, col| {
|
(SavannaBush, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
{
|
{
|
||||||
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
let savanna = close(col.temp, 1.0, 0.4) * close(col.humidity, 0.2, 0.25);
|
||||||
@ -295,61 +328,50 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Desert Plants
|
// Desert Plants
|
||||||
(DeadBush, false, |_, col| {
|
(DeadBush, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.95).min(close(col.humidity, 0.0, 0.3)) * MUSH_FACT * 7.5,
|
close(col.temp, 1.0, 0.95).min(close(col.humidity, 0.0, 0.3)) * MUSH_FACT * 7.5,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Pyrebloom, false, |_, col| {
|
(Pyrebloom, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.95).min(close(col.humidity, 0.0, 0.3)) * MUSH_FACT * 0.35,
|
close(col.temp, 1.0, 0.95).min(close(col.humidity, 0.0, 0.3)) * MUSH_FACT * 0.35,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(LargeCactus, false, |_, col| {
|
(LargeCactus, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 1.5,
|
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 1.5,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(RoundCactus, false, |_, col| {
|
(RoundCactus, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(ShortCactus, false, |_, col| {
|
(ShortCactus, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(MedFlatCactus, false, |_, col| {
|
(MedFlatCactus, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(ShortFlatCactus, false, |_, col| {
|
(ShortFlatCactus, Ground, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
close(col.temp, 1.0, 0.25).min(close(col.humidity, 0.0, 0.1)) * MUSH_FACT * 2.5,
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Reed, false, |_, col| {
|
|
||||||
(
|
|
||||||
close(col.humidity, CONFIG.jungle_hum, 0.9)
|
|
||||||
* col
|
|
||||||
.water_dist
|
|
||||||
.map(|wd| Lerp::lerp(0.2, 0.0, (wd / 8.0).clamped(0.0, 1.0)))
|
|
||||||
.unwrap_or(0.0)
|
|
||||||
* ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0),
|
|
||||||
Some((0.2, 128.0, 0.5)),
|
|
||||||
)
|
|
||||||
}),
|
|
||||||
// Underwater chests
|
// Underwater chests
|
||||||
(ChestBuried, true, |_, col| {
|
(ChestBuried, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
MUSH_FACT
|
MUSH_FACT
|
||||||
* 1.0e-6
|
* 1.0e-6
|
||||||
@ -362,7 +384,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Underwater mud piles
|
// Underwater mud piles
|
||||||
(Mud, true, |_, col| {
|
(Mud, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
MUSH_FACT
|
MUSH_FACT
|
||||||
* 1.0e-3
|
* 1.0e-3
|
||||||
@ -375,7 +397,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Underwater grass
|
// Underwater grass
|
||||||
(GrassBlue, true, |_, col| {
|
(GrassBlue, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
MUSH_FACT
|
MUSH_FACT
|
||||||
* 250.0
|
* 250.0
|
||||||
@ -388,7 +410,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// seagrass
|
// seagrass
|
||||||
(Seagrass, true, |_, col| {
|
(Seagrass, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.8)
|
close(col.temp, CONFIG.temperate_temp, 0.8)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -404,7 +426,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// seagrass, coastal patches
|
// seagrass, coastal patches
|
||||||
(Seagrass, true, |_, col| {
|
(Seagrass, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
MUSH_FACT
|
MUSH_FACT
|
||||||
* 600.0
|
* 600.0
|
||||||
@ -417,7 +439,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// scattered seaweed (temperate species)
|
// scattered seaweed (temperate species)
|
||||||
(SeaweedTemperate, true, |_, col| {
|
(SeaweedTemperate, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.8)
|
close(col.temp, CONFIG.temperate_temp, 0.8)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -433,7 +455,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// scattered seaweed (tropical species)
|
// scattered seaweed (tropical species)
|
||||||
(SeaweedTropical, true, |_, col| {
|
(SeaweedTropical, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.95)
|
close(col.temp, 1.0, 0.95)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -449,7 +471,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Caulerpa lentillifera algae patch
|
// Caulerpa lentillifera algae patch
|
||||||
(SeaGrapes, true, |_, col| {
|
(SeaGrapes, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
MUSH_FACT
|
MUSH_FACT
|
||||||
* 250.0
|
* 250.0
|
||||||
@ -464,7 +486,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Caulerpa prolifera algae patch
|
// Caulerpa prolifera algae patch
|
||||||
(WavyAlgae, true, |_, col| {
|
(WavyAlgae, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
MUSH_FACT
|
MUSH_FACT
|
||||||
* 250.0
|
* 250.0
|
||||||
@ -479,7 +501,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Mermaids' fan algae patch
|
// Mermaids' fan algae patch
|
||||||
(MermaidsFan, true, |_, col| {
|
(MermaidsFan, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.95)
|
close(col.temp, 1.0, 0.95)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -495,7 +517,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Sea anemones
|
// Sea anemones
|
||||||
(SeaAnemone, true, |_, col| {
|
(SeaAnemone, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.8)
|
close(col.temp, CONFIG.temperate_temp, 0.8)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -511,7 +533,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Giant Kelp
|
// Giant Kelp
|
||||||
(GiantKelp, true, |_, col| {
|
(GiantKelp, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.8)
|
close(col.temp, CONFIG.temperate_temp, 0.8)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -527,7 +549,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Bull Kelp
|
// Bull Kelp
|
||||||
(BullKelp, true, |_, col| {
|
(BullKelp, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, CONFIG.temperate_temp, 0.7)
|
close(col.temp, CONFIG.temperate_temp, 0.7)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -543,7 +565,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Stony Corals
|
// Stony Corals
|
||||||
(StonyCoral, true, |_, col| {
|
(StonyCoral, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.9)
|
close(col.temp, 1.0, 0.9)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -559,7 +581,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Soft Corals
|
// Soft Corals
|
||||||
(SoftCoral, true, |_, col| {
|
(SoftCoral, Underwater, |_, col| {
|
||||||
(
|
(
|
||||||
close(col.temp, 1.0, 0.9)
|
close(col.temp, 1.0, 0.9)
|
||||||
* MUSH_FACT
|
* MUSH_FACT
|
||||||
@ -575,7 +597,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
// Seashells
|
// Seashells
|
||||||
(Seashells, true, |c, col| {
|
(Seashells, Underwater, |c, col| {
|
||||||
(
|
(
|
||||||
(c.rockiness - 0.5).max(0.0)
|
(c.rockiness - 0.5).max(0.0)
|
||||||
* 1.0e-3
|
* 1.0e-3
|
||||||
@ -589,7 +611,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
(Stones, true, |c, col| {
|
(Stones, Underwater, |c, col| {
|
||||||
(
|
(
|
||||||
(c.rockiness - 0.5).max(0.0)
|
(c.rockiness - 0.5).max(0.0)
|
||||||
* 1.0e-3
|
* 1.0e-3
|
||||||
@ -601,6 +623,42 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
}),
|
}),
|
||||||
|
//River-related scatter
|
||||||
|
(LillyPads, Floating, |_, col| {
|
||||||
|
(
|
||||||
|
close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
|
* GRASS_FACT
|
||||||
|
* 100.0
|
||||||
|
* ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0)
|
||||||
|
* col
|
||||||
|
.water_dist
|
||||||
|
.map_or(0.0, |d| 1.0 / (1.0 + (d.abs() * 0.4).powi(2))),
|
||||||
|
Some((0.0, 128.0, 0.35)),
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
(Reed, Underwater, |_, col| {
|
||||||
|
(
|
||||||
|
close(col.temp, 0.2, 0.6).min(close(col.humidity, CONFIG.jungle_hum, 0.4))
|
||||||
|
* GRASS_FACT
|
||||||
|
* 100.0
|
||||||
|
* ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0)
|
||||||
|
* col
|
||||||
|
.water_dist
|
||||||
|
.map_or(0.0, |d| 1.0 / (1.0 + (d.abs() * 0.40).powi(2))),
|
||||||
|
Some((0.2, 128.0, 0.5)),
|
||||||
|
)
|
||||||
|
}),
|
||||||
|
(Reed, Ground, |_, col| {
|
||||||
|
(
|
||||||
|
close(col.humidity, CONFIG.jungle_hum, 0.9)
|
||||||
|
* col
|
||||||
|
.water_dist
|
||||||
|
.map(|wd| Lerp::lerp(0.2, 0.0, (wd / 8.0).clamped(0.0, 1.0)))
|
||||||
|
.unwrap_or(0.0)
|
||||||
|
* ((col.alt - CONFIG.sea_level) / 12.0).clamped(0.0, 1.0),
|
||||||
|
Some((0.2, 128.0, 0.5)),
|
||||||
|
)
|
||||||
|
}),
|
||||||
];
|
];
|
||||||
|
|
||||||
canvas.foreach_col(|canvas, wpos2d, col| {
|
canvas.foreach_col(|canvas, wpos2d, col| {
|
||||||
@ -609,7 +667,7 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
let kind = scatter
|
let kind = scatter
|
||||||
.iter()
|
.iter()
|
||||||
.enumerate()
|
.enumerate()
|
||||||
.find_map(|(i, (kind, is_underwater, f))| {
|
.find_map(|(i, (kind, water_mode, f))| {
|
||||||
let (density, patch) = f(canvas.chunk(), col);
|
let (density, patch) = f(canvas.chunk(), col);
|
||||||
let density = patch
|
let density = patch
|
||||||
.map(|(base_density_prop, wavelen, threshold)| {
|
.map(|(base_density_prop, wavelen, threshold)| {
|
||||||
@ -633,31 +691,28 @@ pub fn apply_scatter_to(canvas: &mut Canvas, rng: &mut impl Rng) {
|
|||||||
.unwrap_or(density);
|
.unwrap_or(density);
|
||||||
if density > 0.0
|
if density > 0.0
|
||||||
&& rng.gen::<f32>() < density //RandomField::new(i as u32).chance(Vec3::new(wpos2d.x, wpos2d.y, 0), density)
|
&& rng.gen::<f32>() < density //RandomField::new(i as u32).chance(Vec3::new(wpos2d.x, wpos2d.y, 0), density)
|
||||||
&& underwater == *is_underwater
|
&& matches!(&water_mode, Underwater | Floating) == underwater
|
||||||
{
|
{
|
||||||
Some(*kind)
|
Some((*kind, water_mode))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if let Some(kind) = kind {
|
if let Some((kind, water_mode)) = kind {
|
||||||
let alt = col.alt as i32;
|
let (alt, is_under): (_, fn(Block) -> bool) = match water_mode {
|
||||||
|
Ground | Underwater => (col.alt as i32, |block| block.is_solid()),
|
||||||
|
Floating => (col.water_level as i32, |block| !block.is_air()),
|
||||||
|
};
|
||||||
|
|
||||||
// Find the intersection between ground and air, if there is one near the
|
// Find the intersection between ground and air, if there is one near the
|
||||||
// surface
|
// Ground
|
||||||
if let Some(solid_end) = (-4..8)
|
if let Some(solid_end) = (-4..8)
|
||||||
.find(|z| {
|
.find(|z| is_under(canvas.get(Vec3::new(wpos2d.x, wpos2d.y, alt + z))))
|
||||||
canvas
|
|
||||||
.get(Vec3::new(wpos2d.x, wpos2d.y, alt + z))
|
|
||||||
.is_solid()
|
|
||||||
})
|
|
||||||
.and_then(|solid_start| {
|
.and_then(|solid_start| {
|
||||||
(1..8).map(|z| solid_start + z).find(|z| {
|
(1..8)
|
||||||
!canvas
|
.map(|z| solid_start + z)
|
||||||
.get(Vec3::new(wpos2d.x, wpos2d.y, alt + z))
|
.find(|z| !is_under(canvas.get(Vec3::new(wpos2d.x, wpos2d.y, alt + z))))
|
||||||
.is_solid()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
canvas.map(Vec3::new(wpos2d.x, wpos2d.y, alt + solid_end), |block| {
|
canvas.map(Vec3::new(wpos2d.x, wpos2d.y, alt + solid_end), |block| {
|
||||||
|
Loading…
Reference in New Issue
Block a user