From 40c27eef79b0ecd22278ec627ce3522e248fcf25 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Sun, 17 Sep 2023 14:00:00 -0400 Subject: [PATCH] Update to blend logic. --- src/engine/InterestManagement/HeightMap.java | 45 +++++++------------- src/engine/devcmd/cmds/GetHeightCmd.java | 7 +-- src/engine/objects/Zone.java | 8 +--- 3 files changed, 17 insertions(+), 43 deletions(-) diff --git a/src/engine/InterestManagement/HeightMap.java b/src/engine/InterestManagement/HeightMap.java index 02bf06ab..4e3afbd7 100644 --- a/src/engine/InterestManagement/HeightMap.java +++ b/src/engine/InterestManagement/HeightMap.java @@ -34,28 +34,23 @@ public class HeightMap { // Class variables - public static float SCALEVALUE = 1.0f / 255; - // Heightmap data for all zones. - public static final HashMap heightmapByLoadNum = new HashMap<>(); + // Heightmap data for all zones. + public static float SCALEVALUE = 1.0f / 255; // Bootstrap Tracking - public static int heightMapsCreated = 0; public static HeightMap PlayerCityHeightMap; // Heightmap data for this heightmap - - public BufferedImage heightmapImage; - public final int heightMapID; public final int maxHeight; public final int fullExtentsX; public final int fullExtentsY; - + public final int zoneLoadID; + public BufferedImage heightmapImage; public float bucketWidthX; public float bucketWidthY; - public final int zoneLoadID; public float seaLevel = 0; public int[][] pixelColorValues; @@ -246,31 +241,21 @@ public class HeightMap { parentZone = HeightMap.getNextZoneWithTerrain(heightMapZone.getParent()); interpolatedParentTerrainHeight = HeightMap.getWorldHeight(parentZone, worldLoc); - // Between maxBlend and minBlend distance from edge of zone we LERP between the two heights - - if (Bounds.collide(worldLoc, heightMapZone.minBlend) == true) { + Bounds blendBounds = Bounds.borrow(); + zoneLoc.x = abs(zoneLoc.x); + zoneLoc.y = abs(zoneLoc.x); - 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); + blendBounds.setBounds(new Vector2f(heightMapZone.absX, heightMapZone.absZ), zoneLoc, 0.0f); - float childArea = (blendBounds.getHalfExtents().x * 2) * - (blendBounds.getHalfExtents().y * 2); - float parentArea = (parentZone.minBlend.getHalfExtents().x * 2) * - (parentZone.minBlend.getHalfExtents().y * 2); - - float areaDelta = childArea / parentArea; - - interpolatedTerrainHeight = FastMath.LERP(areaDelta, interpolatedTerrainHeight, interpolatedParentTerrainHeight); - return interpolatedTerrainHeight + heightMapZone.worldAltitude; - - } + float currentArea = (blendBounds.getHalfExtents().x * 2) * + (blendBounds.getHalfExtents().y * 2); + float zoneArea = (heightMapZone.getBounds().getHalfExtents().x * 2) * + (heightMapZone.getBounds().getHalfExtents().y * 2); - // Past min blend we just return the parent height. - // This should never be reached + float areaDelta = currentArea / zoneArea; - return interpolatedParentTerrainHeight + heightMapZone.worldAltitude; + interpolatedTerrainHeight = FastMath.LERP(areaDelta, interpolatedTerrainHeight, interpolatedParentTerrainHeight); + return interpolatedTerrainHeight + heightMapZone.worldAltitude; } diff --git a/src/engine/devcmd/cmds/GetHeightCmd.java b/src/engine/devcmd/cmds/GetHeightCmd.java index 5c014663..df8331a5 100644 --- a/src/engine/devcmd/cmds/GetHeightCmd.java +++ b/src/engine/devcmd/cmds/GetHeightCmd.java @@ -64,12 +64,7 @@ public class GetHeightCmd extends AbstractDevCmd { return; } - if (Bounds.collide(playerCharacter.getLoc(), heightmapZone.minBlend)) { - this.throwbackInfo(playerCharacter, "Blend: Min (LERP)"); - return; - } - - this.throwbackInfo(playerCharacter, "Blend: None (Parent)"); + this.throwbackInfo(playerCharacter, "Blend: Min (LERP)"); } diff --git a/src/engine/objects/Zone.java b/src/engine/objects/Zone.java index d414037e..d53087a9 100644 --- a/src/engine/objects/Zone.java +++ b/src/engine/objects/Zone.java @@ -60,8 +60,6 @@ public class Zone extends AbstractGameObject { private float seaLevel = 0f; public static final Set respawnQue = Collections.newSetFromMap(new ConcurrentHashMap<>()); public static long lastRespawn = 0; - - public Bounds minBlend; public Bounds maxBlend; /** @@ -191,14 +189,10 @@ public class Zone extends AbstractGameObject { // Set heightmap blending bounds if (heightMap == null) { - this.minBlend = this.getBounds(); this.maxBlend = this.getBounds(); } else { - this.minBlend = Bounds.borrow(); this.maxBlend = Bounds.borrow(); - - this.minBlend.setBounds(new Vector2f(this.absX, this.absZ), this.getBounds().getHalfExtents().subtract(heightMap.zone_minBlend, heightMap.zone_minBlend), 0.0f); - this.maxBlend.setBounds(new Vector2f(this.absX, this.absZ), this.minBlend.getHalfExtents().subtract(heightMap.zone_maxBlend, heightMap.zone_maxBlend), 0.0f); + this.maxBlend.setBounds(new Vector2f(this.absX, this.absZ), this.getBounds().getHalfExtents().subtract(heightMap.zone_minBlend, heightMap.zone_minBlend), 0.0f); } }