|
|
|
@ -34,28 +34,23 @@ public class HeightMap {
@@ -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<Integer, HeightMap> 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 {
@@ -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; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|