diff --git a/src/engine/devcmd/cmds/GetHeightCmd.java b/src/engine/devcmd/cmds/GetHeightCmd.java index ff88d6f0..4cc1662f 100644 --- a/src/engine/devcmd/cmds/GetHeightCmd.java +++ b/src/engine/devcmd/cmds/GetHeightCmd.java @@ -35,30 +35,35 @@ public class GetHeightCmd extends AbstractDevCmd { heightmapZone = Terrain.getNextZoneWithTerrain(currentZone); parentZone = Terrain.getNextZoneWithTerrain(currentZone.parent); - float currentHeight = Terrain.getWorldHeight(currentZone, playerCharacter.getLoc()); - float parentHeight = Terrain.getWorldHeight(parentZone, playerCharacter.getLoc()); + Vector2f childZoneLoc = ZoneManager.worldToTerrainSpace(playerCharacter.getLoc(), heightmapZone); + Vector2f childZoneOffset = ZoneManager.worldToZoneOffset(playerCharacter.getLoc(), heightmapZone); + Vector2f normalizedOffset = new Vector2f(Math.abs(childZoneOffset.x) / heightmapZone.major_radius, + Math.abs(childZoneOffset.y) / heightmapZone.minor_radius); + Vector2f parentZoneLoc = ZoneManager.worldToTerrainSpace(playerCharacter.getLoc(), parentZone); - Vector2f zoneLoc = ZoneManager.worldToTerrainSpace(playerCharacter.getLoc(), heightmapZone); - Vector2f zoneOffset = ZoneManager.worldToZoneOffset(playerCharacter.getLoc(), heightmapZone); - Vector2f normalizedOffset = new Vector2f(Math.abs(zoneOffset.x) / heightmapZone.major_radius, - Math.abs(zoneOffset.y) / heightmapZone.minor_radius); + float childHeight = heightmapZone.terrain.getInterpolatedTerrainHeight(childZoneLoc); + childHeight = childHeight + heightmapZone.global_height; - Vector2f gridSquare = heightmapZone.terrain.getTerrainCell(zoneLoc); + float parentHeight = parentZone.terrain.getInterpolatedTerrainHeight(parentZoneLoc); + parentHeight += parentZone.global_height; + + Vector2f gridSquare = heightmapZone.terrain.getTerrainCell(childZoneLoc); gridSquare.x = (float) Math.floor(gridSquare.x); gridSquare.y = (float) Math.floor(gridSquare.y); this.throwbackInfo(playerCharacter, "Current Zone : " + currentZone.zoneName); this.throwbackInfo(playerCharacter, "Heightmap Zone : " + heightmapZone.zoneName); - this.throwbackInfo(playerCharacter, "Global Height: " + heightmapZone.global_height); - this.throwbackInfo(playerCharacter, "Sea Level: " + heightmapZone.seaLevel); + this.throwbackInfo(playerCharacter, "Parent Zone: " + parentZone.zoneName); + this.throwbackInfo(playerCharacter, "Grid : " + "[" + gridSquare.x + "]" + "[" + gridSquare.y + "]"); this.throwbackInfo(playerCharacter, "Offset: " + "[" + normalizedOffset.x + "]" + "[" + normalizedOffset.y + "]"); - this.throwbackInfo(playerCharacter, "Blend: " + heightmapZone.terrain.terrainBlend(zoneOffset)); - this.throwbackInfo(playerCharacter, "Height returned: " + Math.ceil(currentHeight)); + this.throwbackInfo(playerCharacter, "Blend: " + heightmapZone.terrain.terrainBlend(childZoneOffset)); + this.throwbackInfo(playerCharacter, "Height returned: " + Math.ceil(childHeight)); this.throwbackInfo(playerCharacter, "------------"); - this.throwbackInfo(playerCharacter, "Parent : " + parentZone.zoneName); - this.throwbackInfo(playerCharacter, "Height returned : " + Math.ceil(parentHeight)); + + this.throwbackInfo(playerCharacter, "Child Height: " + Math.ceil(childHeight)); + this.throwbackInfo(playerCharacter, "Parent Height : " + Math.ceil(parentHeight)); this.throwbackInfo(playerCharacter, "------------"); } diff --git a/src/engine/gameManager/ZoneManager.java b/src/engine/gameManager/ZoneManager.java index 90fbb599..ffd08263 100644 --- a/src/engine/gameManager/ZoneManager.java +++ b/src/engine/gameManager/ZoneManager.java @@ -291,14 +291,12 @@ public enum ZoneManager { public static Vector2f worldToZoneOffset(Vector3fImmutable worldLoc, Zone zone) { - Vector2f localCoords; - Vector2f zoneOrigin; + Vector2f zoneLoc; - zoneOrigin = new Vector2f(zone.getLoc().x, zone.getLoc().z); - localCoords = new Vector2f(worldLoc.x, worldLoc.z); - localCoords = localCoords.subtract(zoneOrigin); + zoneLoc = new Vector2f(worldLoc.x, worldLoc.z).subtract(zone.getLoc().x, zone.getLoc().z); + zoneLoc.y *= -1; - return localCoords; + return zoneLoc; }