diff --git a/src/engine/InterestManagement/HeightMap.java b/src/engine/InterestManagement/HeightMap.java index 5be2524f..48edff22 100644 --- a/src/engine/InterestManagement/HeightMap.java +++ b/src/engine/InterestManagement/HeightMap.java @@ -12,6 +12,7 @@ import engine.Enum; import engine.gameManager.ConfigManager; import engine.gameManager.DbManager; import engine.gameManager.ZoneManager; +import engine.math.Bounds; import engine.math.Vector2f; import engine.math.Vector3fImmutable; import engine.objects.Zone; @@ -26,6 +27,8 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; +import static java.lang.Math.abs; + public class HeightMap { // Class variables @@ -206,6 +209,7 @@ public class HeightMap { public static float getWorldHeight(Zone currentZone, Vector3fImmutable worldLoc) { Zone heightMapZone; + float worldHeight; // Seafloor is rather flat. @@ -226,6 +230,24 @@ public class HeightMap { float interpolatedTerrainHeight = heightMapZone.getHeightMap().getInterpolatedTerrainHeight(zoneLoc); + // Heightmap blending is based on distance to edge of zone. + + if (Bounds.collide(worldLoc, heightMapZone.maxBlend) == true) { + worldHeight = interpolatedTerrainHeight + heightMapZone.worldAltitude; + return worldHeight; + } + + if (Bounds.collide(worldLoc, heightMapZone.minBlend) == true) { + + // How far into blend zone are we? + + Bounds blendBounds = Bounds.borrow(); + zoneLoc.x = abs(zoneLoc.x); + zoneLoc.y = abs(zoneLoc.x); + blendBounds.setBounds(new Vector2f(heightMapZone.absX, heightMapZone.absZ), zoneLoc, 0.0f); + + } + // Position returned from Heightmap engine is relative to zone world height return interpolatedTerrainHeight + heightMapZone.worldAltitude;