mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Added stalagtites
This commit is contained in:
parent
c547cdd72c
commit
c8ae5163b3
@ -1,10 +1,11 @@
|
|||||||
use crate::site::Site;
|
use crate::site::Site;
|
||||||
use common::store::{Id, Store};
|
use common::store::{Id, Store};
|
||||||
|
use noise::{NoiseFn, Seedable, SuperSimplex};
|
||||||
|
|
||||||
#[derive(Default)]
|
|
||||||
pub struct Index {
|
pub struct Index {
|
||||||
pub seed: u32,
|
pub seed: u32,
|
||||||
pub time: f32,
|
pub time: f32,
|
||||||
|
pub noise: Noise,
|
||||||
pub sites: Store<Site>,
|
pub sites: Store<Site>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -12,7 +13,21 @@ impl Index {
|
|||||||
pub fn new(seed: u32) -> Self {
|
pub fn new(seed: u32) -> Self {
|
||||||
Self {
|
Self {
|
||||||
seed,
|
seed,
|
||||||
..Self::default()
|
time: 0.0,
|
||||||
|
noise: Noise::new(seed),
|
||||||
|
sites: Store::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Noise {
|
||||||
|
pub cave_nz: SuperSimplex,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Noise {
|
||||||
|
fn new(seed: u32) -> Self {
|
||||||
|
Self {
|
||||||
|
cave_nz: SuperSimplex::new().set_seed(seed),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,8 @@ use common::{
|
|||||||
lottery::Lottery,
|
lottery::Lottery,
|
||||||
assets,
|
assets,
|
||||||
};
|
};
|
||||||
use std::f32;
|
use noise::NoiseFn;
|
||||||
|
use std::{f32, ops::{Sub, Mul}};
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
pub fn apply_paths_to<'a>(
|
pub fn apply_paths_to<'a>(
|
||||||
@ -138,6 +139,18 @@ pub fn apply_caves_to<'a>(
|
|||||||
let _ = vol.set(Vec3::new(offs.x, offs.y, z), Block::empty());
|
let _ = vol.set(Vec3::new(offs.x, offs.y, z), Block::empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Stalagtites
|
||||||
|
let stalagtites = index.noise.cave_nz
|
||||||
|
.get(wpos2d.map(|e| e as f64 * 0.1).into_array())
|
||||||
|
.sub(0.6)
|
||||||
|
.max(0.0)
|
||||||
|
.mul((col_sample.alt - cave_roof as f32 - 5.0).mul(0.15).clamped(0.0, 1.0) as f64)
|
||||||
|
.mul(40.0) as i32;
|
||||||
|
|
||||||
|
for z in cave_roof - stalagtites..cave_roof {
|
||||||
|
let _ = vol.set(Vec3::new(offs.x, offs.y, z), Block::new(BlockKind::Normal, Rgb::broadcast(200)));
|
||||||
|
}
|
||||||
|
|
||||||
// Scatter things in caves
|
// Scatter things in caves
|
||||||
if RandomField::new(index.seed).chance(wpos2d.into(), 0.001) && cave_base < surface_z as i32 - 25 {
|
if RandomField::new(index.seed).chance(wpos2d.into(), 0.001) && cave_base < surface_z as i32 - 25 {
|
||||||
let kind = *assets::load_expect::<Lottery<BlockKind>>("common.cave_scatter")
|
let kind = *assets::load_expect::<Lottery<BlockKind>>("common.cave_scatter")
|
||||||
|
Loading…
Reference in New Issue
Block a user