mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Fmt, remove inline_tweak and move close functions
This commit is contained in:
parent
48837bf3f6
commit
2472a62e38
15
Cargo.lock
generated
15
Cargo.lock
generated
@ -3150,22 +3150,8 @@ version = "1.1.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "c6acddbefae08bfba73e27f55513f491f35c365d84bf3002bf85ba9b916c5e5f"
|
checksum = "c6acddbefae08bfba73e27f55513f491f35c365d84bf3002bf85ba9b916c5e5f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"inline_tweak_derive",
|
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"proc-macro2 1.0.78",
|
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
"syn 2.0.48",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "inline_tweak_derive"
|
|
||||||
version = "3.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "46d62a0a3b6af04d4eee8e7251cd758ce74b0ed86253d3e4ac8a1b297a75f4a0"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2 1.0.78",
|
|
||||||
"quote 1.0.35",
|
|
||||||
"syn 2.0.48",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -7415,7 +7401,6 @@ dependencies = [
|
|||||||
"fxhash",
|
"fxhash",
|
||||||
"hashbrown 0.13.2",
|
"hashbrown 0.13.2",
|
||||||
"image",
|
"image",
|
||||||
"inline_tweak",
|
|
||||||
"itertools 0.10.5",
|
"itertools 0.10.5",
|
||||||
"kiddo",
|
"kiddo",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
@ -1118,7 +1118,10 @@ impl Body {
|
|||||||
| object::Body::Flamethrower
|
| object::Body::Flamethrower
|
||||||
| object::Body::TerracottaStatue
|
| object::Body::TerracottaStatue
|
||||||
),
|
),
|
||||||
Body::QuadrupedLow(q) => matches!(q.species, quadruped_low::Species::Lavadrake | quadruped_low::Species::Salamander),
|
Body::QuadrupedLow(q) => matches!(
|
||||||
|
q.species,
|
||||||
|
quadruped_low::Species::Lavadrake | quadruped_low::Species::Salamander
|
||||||
|
),
|
||||||
Body::BirdLarge(b) => matches!(
|
Body::BirdLarge(b) => matches!(
|
||||||
b.species,
|
b.species,
|
||||||
bird_large::Species::Phoenix
|
bird_large::Species::Phoenix
|
||||||
|
@ -39,7 +39,7 @@ packed_simd = { version = "0.3.9", optional = true }
|
|||||||
rayon = { workspace = true }
|
rayon = { workspace = true }
|
||||||
serde = { workspace = true }
|
serde = { workspace = true }
|
||||||
ron = { workspace = true }
|
ron = { workspace = true }
|
||||||
inline_tweak = { workspace = true, features = ["derive"] }
|
# inline_tweak = { workspace = true, features = ["derive"] }
|
||||||
kiddo = "0.2"
|
kiddo = "0.2"
|
||||||
strum = { workspace = true }
|
strum = { workspace = true }
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ use common::{
|
|||||||
trade::{SiteId, SitePrices},
|
trade::{SiteId, SitePrices},
|
||||||
};
|
};
|
||||||
use core::ops::Deref;
|
use core::ops::Deref;
|
||||||
use noise::{Fbm, Seedable, SuperSimplex, MultiFractal};
|
use noise::{Fbm, MultiFractal, Seedable, SuperSimplex};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
const WORLD_COLORS_MANIFEST: &str = "world.style.colors";
|
const WORLD_COLORS_MANIFEST: &str = "world.style.colors";
|
||||||
|
@ -1,10 +1,8 @@
|
|||||||
use super::scatter::close;
|
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
site::SiteKind,
|
site::SiteKind,
|
||||||
util::{
|
util::{
|
||||||
sampler::Sampler, FastNoise2d, RandomField, RandomPerm, SmallCache, StructureGen2d,
|
close_fast as close, sampler::Sampler, FastNoise2d, RandomField, RandomPerm, SmallCache,
|
||||||
LOCALITY, SQUARE_4,
|
StructureGen2d, LOCALITY, SQUARE_4,
|
||||||
},
|
},
|
||||||
Canvas, CanvasInfo, ColumnSample, Land,
|
Canvas, CanvasInfo, ColumnSample, Land,
|
||||||
};
|
};
|
||||||
@ -16,7 +14,6 @@ use common::{
|
|||||||
},
|
},
|
||||||
vol::RectVolSize,
|
vol::RectVolSize,
|
||||||
};
|
};
|
||||||
use inline_tweak::tweak_fn;
|
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use noise::NoiseFn;
|
use noise::NoiseFn;
|
||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
@ -27,10 +24,6 @@ use std::{
|
|||||||
};
|
};
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
fn close_fast(x: f32, tgt: f32, falloff: f32, falloff_strength: i32) -> f32 {
|
|
||||||
(1.0 - ((x - tgt) / falloff).powi(falloff_strength * 2)).max(0.0)
|
|
||||||
}
|
|
||||||
|
|
||||||
const CELL_SIZE: i32 = 1536;
|
const CELL_SIZE: i32 = 1536;
|
||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
@ -122,7 +115,6 @@ impl Tunnel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tweak_fn]
|
|
||||||
fn z_range_at(
|
fn z_range_at(
|
||||||
&self,
|
&self,
|
||||||
wposf: Vec2<f64>,
|
wposf: Vec2<f64>,
|
||||||
@ -182,7 +174,6 @@ impl Tunnel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline_tweak::tweak_fn]
|
|
||||||
fn biome_at(&self, wpos: Vec3<i32>, info: &CanvasInfo) -> Biome {
|
fn biome_at(&self, wpos: Vec3<i32>, info: &CanvasInfo) -> Biome {
|
||||||
let Some(col) = info.col_or_gen(wpos.xy()) else {
|
let Some(col) = info.col_or_gen(wpos.xy()) else {
|
||||||
return Biome::default();
|
return Biome::default();
|
||||||
@ -242,37 +233,38 @@ impl Tunnel {
|
|||||||
// Mushrooms grow underground and thrive in a humid environment with moderate
|
// Mushrooms grow underground and thrive in a humid environment with moderate
|
||||||
// temperatures
|
// temperatures
|
||||||
let mushroom = underground
|
let mushroom = underground
|
||||||
* close(humidity, 1.0, 0.7)
|
* close(humidity, 1.0, 0.7, 3)
|
||||||
* close(temp, 1.5, 0.9)
|
* close(temp, 1.5, 0.9, 3)
|
||||||
* close(depth, 1.0, 0.6);
|
* close(depth, 1.0, 0.6, 3);
|
||||||
// Extremely hot and dry areas deep underground
|
// Extremely hot and dry areas deep underground
|
||||||
let fire = underground
|
let fire = underground
|
||||||
* close(humidity, 0.0, 0.6)
|
* close(humidity, 0.0, 0.6, 3)
|
||||||
* close(temp, 2.0, 1.3)
|
* close(temp, 2.0, 1.3, 3)
|
||||||
* close(depth, 1.0, 0.5);
|
* close(depth, 1.0, 0.55, 3);
|
||||||
// Overgrown with plants that need a moderate climate to survive
|
// Overgrown with plants that need a moderate climate to survive
|
||||||
let leafy = underground
|
let leafy = underground
|
||||||
* close(humidity, 0.8, 0.8)
|
* close(humidity, 0.8, 0.8, 3)
|
||||||
* close(temp, 0.95, 0.85)
|
* close(temp, 0.95, 0.85, 3)
|
||||||
* close(depth, 0.0, 0.6);
|
* close(depth, 0.0, 0.6, 3);
|
||||||
// Cool temperature, dry and devoid of value
|
// Cool temperature, dry and devoid of value
|
||||||
let dusty = close(humidity, 0.0, 0.5) * close(temp, -0.1, 0.6);
|
let dusty = close(humidity, 0.0, 0.5, 3) * close(temp, -0.1, 0.6, 3);
|
||||||
// Deep underground and freezing cold
|
// Deep underground and freezing cold
|
||||||
let icy = underground
|
let icy = underground
|
||||||
* close(temp, -1.5, 1.3)
|
* close(temp, -1.5, 1.3, 3)
|
||||||
* close(depth, 1.0, 0.65)
|
* close(depth, 1.0, 0.65, 3)
|
||||||
* close(humidity, 1.0, 0.7);
|
* close(humidity, 1.0, 0.7, 3);
|
||||||
// Rocky cold cave that appear near the surface
|
// Rocky cold cave that appear near the surface
|
||||||
let snowy = close(temp, -0.5, 0.3) * close(depth, 0.0, 0.4);
|
let snowy = close(temp, -0.6, 0.5, 3) * close(depth, 0.0, 0.45, 3);
|
||||||
// Crystals grow deep underground in areas rich with minerals. They are present
|
// Crystals grow deep underground in areas rich with minerals. They are present
|
||||||
// in areas with colder temperatures and low humidity
|
// in areas with colder temperatures and low humidity
|
||||||
let crystal = underground
|
let crystal = underground
|
||||||
* close(humidity, 0.0, 0.5)
|
* close(humidity, 0.0, 0.5, 3)
|
||||||
* close(temp, -0.6, 0.75)
|
* close(temp, -0.6, 0.75, 3)
|
||||||
* close(depth, 1.0, 0.55)
|
* close(depth, 1.0, 0.55, 3)
|
||||||
* close(mineral, 1.5, 1.0);
|
* close(mineral, 2.0, 1.25, 3);
|
||||||
// Hot, dry and shallow
|
// Hot, dry and shallow
|
||||||
let sandy = close(humidity, 0.0, 0.3) * close(temp, 0.7, 0.9) * close(depth, 0.0, 0.6);
|
let sandy =
|
||||||
|
close(humidity, 0.0, 0.3, 3) * close(temp, 0.7, 0.9, 3) * close(depth, 0.0, 0.6, 3);
|
||||||
|
|
||||||
let biomes = [
|
let biomes = [
|
||||||
barren, mushroom, fire, leafy, dusty, icy, snowy, crystal, sandy,
|
barren, mushroom, fire, leafy, dusty, icy, snowy, crystal, sandy,
|
||||||
@ -543,7 +535,6 @@ struct Flower {
|
|||||||
// rotation: Mat3<f32>,
|
// rotation: Mat3<f32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline_tweak::tweak_fn]
|
|
||||||
fn write_column<R: Rng>(
|
fn write_column<R: Rng>(
|
||||||
canvas: &mut Canvas,
|
canvas: &mut Canvas,
|
||||||
col: &ColumnSample,
|
col: &ColumnSample,
|
||||||
@ -652,7 +643,7 @@ fn write_column<R: Rng>(
|
|||||||
.mul(width_factor)
|
.mul(width_factor)
|
||||||
.mul(
|
.mul(
|
||||||
(0.75 * dist_cave_center)
|
(0.75 * dist_cave_center)
|
||||||
+ max_height * (close(dist_cave_center, cave_width, cave_width * 0.7)),
|
+ max_height * (close(dist_cave_center, cave_width, cave_width * 0.7, 3)),
|
||||||
)
|
)
|
||||||
.mul(((col.alt - z_range.end as f32) / 64.0).clamped(0.0, 1.0));
|
.mul(((col.alt - z_range.end as f32) / 64.0).clamped(0.0, 1.0));
|
||||||
|
|
||||||
@ -769,8 +760,8 @@ fn write_column<R: Rng>(
|
|||||||
if biome.mushroom > 0.7
|
if biome.mushroom > 0.7
|
||||||
&& vertical > 16.0
|
&& vertical > 16.0
|
||||||
&& rng.gen_bool(
|
&& rng.gen_bool(
|
||||||
0.5 * close_fast(vertical, MAX_RADIUS, MAX_RADIUS - 16.0, 2) as f64
|
0.5 * close(vertical, MAX_RADIUS, MAX_RADIUS - 16.0, 2) as f64
|
||||||
* close_fast(biome.mushroom, 1.0, 0.7, 1) as f64,
|
* close(biome.mushroom, 1.0, 0.7, 1) as f64,
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
let purp = rng.gen_range(0..50);
|
let purp = rng.gen_range(0..50);
|
||||||
@ -787,7 +778,7 @@ fn write_column<R: Rng>(
|
|||||||
),
|
),
|
||||||
}))
|
}))
|
||||||
} else if biome.crystal > 0.5
|
} else if biome.crystal > 0.5
|
||||||
&& rng.gen_bool(0.4 * close_fast(biome.crystal, 1.0, 0.7, 2) as f64)
|
&& rng.gen_bool(0.4 * close(biome.crystal, 1.0, 0.7, 2) as f64)
|
||||||
{
|
{
|
||||||
let on_ground = rng.gen_bool(0.6);
|
let on_ground = rng.gen_bool(0.6);
|
||||||
let pos = wpos2d.with_z(if on_ground {
|
let pos = wpos2d.with_z(if on_ground {
|
||||||
@ -798,13 +789,10 @@ fn write_column<R: Rng>(
|
|||||||
|
|
||||||
let mut crystals: Vec<Crystal> = Vec::new();
|
let mut crystals: Vec<Crystal> = Vec::new();
|
||||||
let max_length =
|
let max_length =
|
||||||
(48.0 * close_fast(vertical, MAX_RADIUS, MAX_RADIUS, 1)).max(12.0);
|
(48.0 * close(vertical, MAX_RADIUS, MAX_RADIUS, 1)).max(12.0);
|
||||||
let length = rng.gen_range(8.0..max_length);
|
let length = rng.gen_range(8.0..max_length);
|
||||||
let radius = Lerp::lerp(
|
let radius =
|
||||||
2.0,
|
Lerp::lerp(2.0, 4.5, length / max_length + rng.gen_range(-0.1..0.1));
|
||||||
4.5,
|
|
||||||
length / max_length + rng.gen_range(-0.1..0.1),
|
|
||||||
);
|
|
||||||
let dir = Vec3::new(
|
let dir = Vec3::new(
|
||||||
rng.gen_range(-3.0..3.0),
|
rng.gen_range(-3.0..3.0),
|
||||||
rng.gen_range(-3.0..3.0),
|
rng.gen_range(-3.0..3.0),
|
||||||
@ -846,8 +834,8 @@ fn write_column<R: Rng>(
|
|||||||
&& vertical > 16.0
|
&& vertical > 16.0
|
||||||
&& horizontal > 8.0
|
&& horizontal > 8.0
|
||||||
&& rng.gen_bool(
|
&& rng.gen_bool(
|
||||||
0.25 * (close_fast(vertical, MAX_RADIUS, MAX_RADIUS - 16.0, 2)
|
0.25 * (close(vertical, MAX_RADIUS, MAX_RADIUS - 16.0, 2)
|
||||||
* close_fast(horizontal, MAX_RADIUS, MAX_RADIUS - 8.0, 2)
|
* close(horizontal, MAX_RADIUS, MAX_RADIUS - 8.0, 2)
|
||||||
* biome.leafy) as f64,
|
* biome.leafy) as f64,
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@ -859,15 +847,12 @@ fn write_column<R: Rng>(
|
|||||||
* (z_range.end - z_range.start - 8) as f32
|
* (z_range.end - z_range.start - 8) as f32
|
||||||
* 0.75,
|
* 0.75,
|
||||||
petals: rng.gen_range(1..5) * 2 + 1,
|
petals: rng.gen_range(1..5) * 2 + 1,
|
||||||
petal_height: 0.4
|
petal_height: 0.4 * petal_radius * (1.0 + rng.gen::<f32>().powf(2.0)),
|
||||||
* petal_radius
|
|
||||||
* (1.0 + rng.gen::<f32>().powf(2.0)),
|
|
||||||
petal_radius,
|
petal_radius,
|
||||||
}))
|
}))
|
||||||
} else if (biome.leafy > 0.7 || giant_tree_factor > 0.0)
|
} else if (biome.leafy > 0.7 || giant_tree_factor > 0.0)
|
||||||
&& rng.gen_bool(
|
&& rng.gen_bool(
|
||||||
(0.5 * close_fast(biome.leafy, 1.0, 0.5, 1)
|
(0.5 * close(biome.leafy, 1.0, 0.5, 1).max(1.0 + giant_tree_factor)
|
||||||
.max(1.0 + giant_tree_factor)
|
|
||||||
as f64)
|
as f64)
|
||||||
.clamped(0.0, 1.0),
|
.clamped(0.0, 1.0),
|
||||||
)
|
)
|
||||||
@ -876,10 +861,8 @@ fn write_column<R: Rng>(
|
|||||||
pos,
|
pos,
|
||||||
radius: rng.gen_range(
|
radius: rng.gen_range(
|
||||||
1.5..(3.5
|
1.5..(3.5
|
||||||
+ close_fast(vertical, MAX_RADIUS, MAX_RADIUS / 2.0, 2)
|
+ close(vertical, MAX_RADIUS, MAX_RADIUS / 2.0, 2) * 3.0
|
||||||
* 3.0
|
+ close(horizontal, MAX_RADIUS, MAX_RADIUS / 2.0, 2) * 3.0),
|
||||||
+ close_fast(horizontal, MAX_RADIUS, MAX_RADIUS / 2.0, 2)
|
|
||||||
* 3.0),
|
|
||||||
),
|
),
|
||||||
height: (z_range.end - z_range.start) as f32,
|
height: (z_range.end - z_range.start) as f32,
|
||||||
})
|
})
|
||||||
@ -1073,8 +1056,8 @@ fn write_column<R: Rng>(
|
|||||||
.atan2(rpos.y)
|
.atan2(rpos.y)
|
||||||
.rem_euclid(std::f32::consts::TAU / flower.petals as f32);
|
.rem_euclid(std::f32::consts::TAU / flower.petals as f32);
|
||||||
if dist_ratio < 0.175 {
|
if dist_ratio < 0.175 {
|
||||||
let red = close_fast(near, 0.0, 0.5, 1);
|
let red = close(near, 0.0, 0.5, 1);
|
||||||
let purple = close_fast(near, 0.0, 0.35, 1);
|
let purple = close(near, 0.0, 0.35, 1);
|
||||||
if dist_ratio > red || rpos.z < petal_height_at {
|
if dist_ratio > red || rpos.z < petal_height_at {
|
||||||
return Some(Block::new(
|
return Some(Block::new(
|
||||||
BlockKind::ArtLeaves,
|
BlockKind::ArtLeaves,
|
||||||
@ -1092,8 +1075,7 @@ fn write_column<R: Rng>(
|
|||||||
));
|
));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let inset = close_fast(near, -1.0, 1.0, 2)
|
let inset = close(near, -1.0, 1.0, 2).max(close(near, 1.0, 1.0, 2));
|
||||||
.max(close_fast(near, 1.0, 1.0, 2));
|
|
||||||
if dist_ratio < inset {
|
if dist_ratio < inset {
|
||||||
return Some(Block::new(
|
return Some(Block::new(
|
||||||
BlockKind::ArtLeaves,
|
BlockKind::ArtLeaves,
|
||||||
@ -1336,7 +1318,7 @@ fn write_column<R: Rng>(
|
|||||||
} else if biome.fire.max(biome.snowy) > 0.5 {
|
} else if biome.fire.max(biome.snowy) > 0.5 {
|
||||||
BlockKind::Rock
|
BlockKind::Rock
|
||||||
} else if biome.crystal > 0.5 {
|
} else if biome.crystal > 0.5 {
|
||||||
if rand.chance(wpos, biome.crystal * 0.05) {
|
if rand.chance(wpos, biome.crystal * 0.02) {
|
||||||
BlockKind::GlowingRock
|
BlockKind::GlowingRock
|
||||||
} else {
|
} else {
|
||||||
BlockKind::Rock
|
BlockKind::Rock
|
||||||
@ -1502,8 +1484,8 @@ fn write_column<R: Rng>(
|
|||||||
.ok()
|
.ok()
|
||||||
.and_then(|s| s.0)
|
.and_then(|s| s.0)
|
||||||
} else if rand.chance(wpos2d.with_z(7), 0.01) {
|
} else if rand.chance(wpos2d.with_z(7), 0.01) {
|
||||||
let shallow = close(biome.depth, 0.0, 0.4);
|
let shallow = close(biome.depth, 0.0, 0.4, 3);
|
||||||
let middle = close(biome.depth, 0.5, 0.4);
|
let middle = close(biome.depth, 0.5, 0.4, 3);
|
||||||
//let deep = close(biome.depth, 1.0, 0.4); // TODO: Use this for deep only
|
//let deep = close(biome.depth, 1.0, 0.4); // TODO: Use this for deep only
|
||||||
// things
|
// things
|
||||||
[
|
[
|
||||||
@ -1570,7 +1552,7 @@ fn write_column<R: Rng>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[tweak_fn]
|
|
||||||
fn apply_entity_spawns<R: Rng>(canvas: &mut Canvas, wpos: Vec3<i32>, biome: &Biome, rng: &mut R) {
|
fn apply_entity_spawns<R: Rng>(canvas: &mut Canvas, wpos: Vec3<i32>, biome: &Biome, rng: &mut R) {
|
||||||
if RandomField::new(canvas.info().index().seed).chance(wpos, 0.035) {
|
if RandomField::new(canvas.info().index().seed).chance(wpos, 0.035) {
|
||||||
if let Some(entity_asset) = [
|
if let Some(entity_asset) = [
|
||||||
@ -1656,7 +1638,12 @@ fn apply_entity_spawns<R: Rng>(canvas: &mut Canvas, wpos: Vec3<i32>, biome: &Bio
|
|||||||
// Dusty biome
|
// Dusty biome
|
||||||
(
|
(
|
||||||
Some("common.entity.wild.aggressive.dodarock"),
|
Some("common.entity.wild.aggressive.dodarock"),
|
||||||
biome.dusty.max(biome.barren).max(biome.crystal).max(biome.snowy) + 0.05,
|
biome
|
||||||
|
.dusty
|
||||||
|
.max(biome.barren)
|
||||||
|
.max(biome.crystal)
|
||||||
|
.max(biome.snowy)
|
||||||
|
+ 0.05,
|
||||||
0.05,
|
0.05,
|
||||||
0.5,
|
0.5,
|
||||||
),
|
),
|
||||||
@ -1797,7 +1784,7 @@ fn apply_entity_spawns<R: Rng>(canvas: &mut Canvas, wpos: Vec3<i32>, biome: &Bio
|
|||||||
.iter()
|
.iter()
|
||||||
.filter_map(|(entity, biome_modifier, chance, cutoff)| {
|
.filter_map(|(entity, biome_modifier, chance, cutoff)| {
|
||||||
if let Some(entity) = entity {
|
if let Some(entity) = entity {
|
||||||
let close = close_fast(1.0, *biome_modifier, *cutoff, 2);
|
let close = close(1.0, *biome_modifier, *cutoff, 2);
|
||||||
(close > 0.0).then(|| (Some(entity), close * chance))
|
(close > 0.0).then(|| (Some(entity), close * chance))
|
||||||
} else {
|
} else {
|
||||||
Some((None, 100.0))
|
Some((None, 100.0))
|
||||||
|
@ -1,4 +1,9 @@
|
|||||||
use crate::{column::ColumnSample, sim::SimChunk, util::RandomField, Canvas, CONFIG};
|
use crate::{
|
||||||
|
column::ColumnSample,
|
||||||
|
sim::SimChunk,
|
||||||
|
util::{close, RandomField},
|
||||||
|
Canvas, CONFIG,
|
||||||
|
};
|
||||||
use common::{
|
use common::{
|
||||||
calendar::{Calendar, CalendarEvent},
|
calendar::{Calendar, CalendarEvent},
|
||||||
terrain::{Block, BlockKind, SpriteKind},
|
terrain::{Block, BlockKind, SpriteKind},
|
||||||
@ -9,10 +14,6 @@ use rand::prelude::*;
|
|||||||
use std::f32;
|
use std::f32;
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
pub fn close(x: f32, tgt: f32, falloff: f32) -> f32 {
|
|
||||||
(1.0 - (x - tgt).abs() / falloff).max(0.0).powf(0.125)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns a decimal value between 0 and 1.
|
/// Returns a decimal value between 0 and 1.
|
||||||
/// The density is maximum at the middle of the highest and the lowest allowed
|
/// The density is maximum at the middle of the highest and the lowest allowed
|
||||||
/// altitudes, and zero otherwise. Quadratic curve.
|
/// altitudes, and zero otherwise. Quadratic curve.
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
use crate::{column::ColumnSample, sim::SimChunk, IndexRef, CONFIG};
|
use crate::{column::ColumnSample, sim::SimChunk, util::close, IndexRef, CONFIG};
|
||||||
use common::{
|
use common::{
|
||||||
assets::{self, AssetExt},
|
assets::{self, AssetExt},
|
||||||
calendar::{Calendar, CalendarEvent},
|
calendar::{Calendar, CalendarEvent},
|
||||||
@ -17,10 +17,6 @@ type Weight = u32;
|
|||||||
type Min = u8;
|
type Min = u8;
|
||||||
type Max = u8;
|
type Max = u8;
|
||||||
|
|
||||||
fn close(x: f32, tgt: f32, falloff: f32) -> f32 {
|
|
||||||
(1.0 - (x - tgt).abs() / falloff).max(0.0).powf(0.125)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, Deserialize)]
|
#[derive(Clone, Debug, Deserialize)]
|
||||||
pub struct SpawnEntry {
|
pub struct SpawnEntry {
|
||||||
/// User-facing info for wiki, statistical tools, etc.
|
/// User-facing info for wiki, statistical tools, etc.
|
||||||
|
@ -8,8 +8,6 @@ use num::integer::Roots;
|
|||||||
use rand::prelude::*;
|
use rand::prelude::*;
|
||||||
use vek::*;
|
use vek::*;
|
||||||
|
|
||||||
use inline_tweak::tweak;
|
|
||||||
|
|
||||||
enum RoofKind {
|
enum RoofKind {
|
||||||
Crenelated,
|
Crenelated,
|
||||||
Hipped,
|
Hipped,
|
||||||
@ -618,7 +616,7 @@ fn render_tower(bridge: &Bridge, painter: &Painter, roof_kind: &RoofKind) {
|
|||||||
.fill(rock.clone());
|
.fill(rock.clone());
|
||||||
|
|
||||||
let offset = tower_size * 2 - 2;
|
let offset = tower_size * 2 - 2;
|
||||||
let d = tweak!(2);
|
let d = 2;
|
||||||
let n = (bridge.end.z - bridge.start.z - d) / offset;
|
let n = (bridge.end.z - bridge.start.z - d) / offset;
|
||||||
let p = (bridge.end.z - bridge.start.z - d) / n;
|
let p = (bridge.end.z - bridge.start.z - d) / n;
|
||||||
|
|
||||||
|
@ -36,6 +36,14 @@ pub fn attempt<T>(max_iters: usize, mut f: impl FnMut() -> Option<T>) -> Option<
|
|||||||
(0..max_iters).find_map(|_| f())
|
(0..max_iters).find_map(|_| f())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn close(x: f32, tgt: f32, falloff: f32) -> f32 {
|
||||||
|
(1.0 - (x - tgt).abs() / falloff).max(0.0).powf(0.125)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn close_fast(x: f32, tgt: f32, falloff: f32, falloff_strength: i32) -> f32 {
|
||||||
|
(1.0 - ((x - tgt) / falloff).powi(falloff_strength * 2)).max(0.0)
|
||||||
|
}
|
||||||
|
|
||||||
pub const CARDINALS: [Vec2<i32>; 4] = [
|
pub const CARDINALS: [Vec2<i32>; 4] = [
|
||||||
Vec2::new(0, 1),
|
Vec2::new(0, 1),
|
||||||
Vec2::new(1, 0),
|
Vec2::new(1, 0),
|
||||||
|
Loading…
Reference in New Issue
Block a user