diff --git a/modules/terrain/TODO.org b/modules/terrain/TODO.org index c7a7ff5f..3a943d04 100644 --- a/modules/terrain/TODO.org +++ b/modules/terrain/TODO.org @@ -12,3 +12,4 @@ - [x] Stop processing terrain after generation is complete - [x] Don't start generation threads if all meshes are cached - [ ] Scaling modifiers +- [ ] Rewrite line modifier diff --git a/modules/terrain/terrain_modifier.cpp b/modules/terrain/terrain_modifier.cpp index f8ada285..9bacee2a 100644 --- a/modules/terrain/terrain_modifier.cpp +++ b/modules/terrain/terrain_modifier.cpp @@ -287,12 +287,13 @@ float TerrainModifierPath::evaluate_line(Vector3 a, bool a_end, Vector3 b, bool Vector2 const difference2{ b2 - a2 }; float w{ difference2.normalized().dot(relative_coordinate) / difference2.length() }; Vector3 const difference{ b - a }; - Vector3 const closest_on_line{ a + difference * (w > 0 ? (w < 1 ? w : 1) : 0) }; + float const w_clamped{ (w > 0 ? (w < 1 ? w : 1) : 0) }; + Vector3 const closest_on_line{ a + difference * w_clamped }; Vector2 const right{ -difference.z, difference.x }; out_dot = right.normalized().dot(relative_coordinate); out_distance = world_coordinate.distance_to({ closest_on_line.x, closest_on_line.z }); - out_percentage = w; - return a.y + (b.y - a.y) * w; + out_percentage = w_clamped; + return a.y + (b.y - a.y) * w_clamped; } float TerrainModifierPath::evaluate_at(Vector2 world_coordinate, float before) {