Slightly smaller giant trees, more dispersed forests

This commit is contained in:
Joshua Barretto
2021-02-07 21:20:48 +00:00
parent 7d526da735
commit abd1eec815

View File

@ -29,7 +29,7 @@ use crate::{
column::ColumnGen, column::ColumnGen,
site::Site, site::Site,
util::{ util::{
seed_expan, FastNoise, RandomField, RandomPerm, Sampler, StructureGen2d, LOCALITY, seed_expan, FastNoise, FastNoise2d, RandomField, RandomPerm, Sampler, StructureGen2d, LOCALITY,
NEIGHBORS, NEIGHBORS,
}, },
IndexRef, CONFIG, IndexRef, CONFIG,
@ -43,6 +43,7 @@ use common::{
TerrainChunkSize, TerrainChunkSize,
}, },
vol::RectVolSize, vol::RectVolSize,
lottery::Lottery,
}; };
use common_net::msg::WorldMapMsg; use common_net::msg::WorldMapMsg;
use enum_iterator::IntoEnumIterator; use enum_iterator::IntoEnumIterator;
@ -2001,18 +2002,34 @@ impl WorldSim {
pub fn get_near_trees(&self, wpos: Vec2<i32>) -> impl Iterator<Item = TreeAttr> + '_ { pub fn get_near_trees(&self, wpos: Vec2<i32>) -> impl Iterator<Item = TreeAttr> + '_ {
// Deterministic based on wpos // Deterministic based on wpos
let normal_trees = std::array::IntoIter::new(self.gen_ctx.structure_gen.get(wpos)) let normal_trees = std::array::IntoIter::new(self.gen_ctx.structure_gen.get(wpos))
.map(move |(pos, seed)| TreeAttr { .filter_map(move |(pos, seed)| {
pos, let chunk = self.get_wpos(pos)?;
seed, let env = Environment {
scale: 1.0, humid: chunk.humidity,
forest_kind: self.get_wpos(pos).map_or(ForestKind::Oak, |c| c.forest_kind), temp: chunk.temp,
near_water: if chunk.river.is_lake() || chunk.river.near_river() { 1.0 } else { 0.0 },
};
Some(TreeAttr {
pos,
seed,
scale: 1.0,
forest_kind: *Lottery::from(ForestKind::into_enum_iter()
.enumerate()
.map(|(i, fk)| {
const CLUSTER_SIZE: f64 = 48.0;
let nz = (FastNoise2d::new(i as u32).get(wpos.map(|e| e as f64) / CLUSTER_SIZE) + 1.0) / 2.0;
(fk.proclivity(&env) * nz, fk)
})
.collect::<Vec<_>>())
.choose_seeded(seed),
})
}); });
let giant_trees = std::array::IntoIter::new(self.gen_ctx.big_structure_gen.get(wpos)) let giant_trees = std::array::IntoIter::new(self.gen_ctx.big_structure_gen.get(wpos))
.map(move |(pos, seed)| TreeAttr { .map(move |(pos, seed)| TreeAttr {
pos, pos,
seed, seed,
scale: 10.0, scale: 4.0,
forest_kind: ForestKind::Oak, forest_kind: ForestKind::Oak,
}); });