From e35dff2f4b5e8d10216707365c75ab53a7ddc57b Mon Sep 17 00:00:00 2001
From: Joshua Barretto <joshua.s.barretto@gmail.com>
Date: Wed, 22 Apr 2020 21:54:46 +0100
Subject: [PATCH] Fixed noise on bridges

---
 world/src/layer/mod.rs | 31 +++++++++++++------------------
 1 file changed, 13 insertions(+), 18 deletions(-)

diff --git a/world/src/layer/mod.rs b/world/src/layer/mod.rs
index 348f59b9c1..87642c991b 100644
--- a/world/src/layer/mod.rs
+++ b/world/src/layer/mod.rs
@@ -48,27 +48,22 @@ pub fn apply_paths_to<'a>(
                 let col10 = get_column(col_pos.map(|e| e.floor() as i32) + Vec2::new(1, 0));
                 let col01 = get_column(col_pos.map(|e| e.floor() as i32) + Vec2::new(0, 1));
                 let col11 = get_column(col_pos.map(|e| e.floor() as i32) + Vec2::new(1, 1));
-                let riverless_alt = match (col00, col10, col01, col11) {
+                let col_attr = |col: &ColumnSample| Vec3::new(col.riverless_alt, col.alt, col.water_dist.unwrap_or(1000.0));
+                let [riverless_alt, alt, water_dist] = match (col00, col10, col01, col11) {
                     (Some(col00), Some(col10), Some(col01), Some(col11)) => Lerp::lerp(
-                        Lerp::lerp(col00.riverless_alt, col10.riverless_alt, path_nearest.x.fract()),
-                        Lerp::lerp(col01.riverless_alt, col11.riverless_alt, path_nearest.x.fract()),
+                        Lerp::lerp(col_attr(col00), col_attr(col10), path_nearest.x.fract()),
+                        Lerp::lerp(col_attr(col01), col_attr(col11), path_nearest.x.fract()),
                         path_nearest.y.fract(),
                     ),
-                    _ => col_sample.riverless_alt,
-                };
-                let col = get_column(col_pos.map(|e| e.floor() as i32))
-                    .unwrap_or(col_sample);
-                let (bridge_offset, depth) = if let Some(water_dist) = col.water_dist {
-                    (
-                        ((water_dist.max(0.0) * 0.2).min(f32::consts::PI).cos() + 1.0) * 5.0,
-                        ((1.0 - ((water_dist + 2.0) * 0.3).min(0.0).cos().abs())
-                            * (riverless_alt + 5.0 - col.alt).max(0.0)
-                            * 1.75
-                            + 3.0) as i32,
-                    )
-                } else {
-                    (0.0, 3)
-                };
+                    _ => col_attr(col_sample),
+                }.into_array();
+                let (bridge_offset, depth) = (
+                    ((water_dist.max(0.0) * 0.2).min(f32::consts::PI).cos() + 1.0) * 5.0,
+                    ((1.0 - ((water_dist + 2.0) * 0.3).min(0.0).cos().abs())
+                        * (riverless_alt + 5.0 - alt).max(0.0)
+                        * 1.75
+                        + 3.0) as i32,
+                );
                 let surface_z = (riverless_alt + bridge_offset).floor() as i32;
 
                 for z in inset - depth..inset {