|
|
@ -118,8 +118,8 @@ public class HeightMap { |
|
|
|
int halfExtentsY = (int) Enum.CityBoundsType.ZONE.halfExtents; |
|
|
|
int halfExtentsY = (int) Enum.CityBoundsType.ZONE.halfExtents; |
|
|
|
this.zoneLoadID = 0; |
|
|
|
this.zoneLoadID = 0; |
|
|
|
this.seaLevel = 0; |
|
|
|
this.seaLevel = 0; |
|
|
|
this.zone_minBlend = 256; |
|
|
|
this.zone_minBlend = 0; |
|
|
|
this.zone_maxBlend = 256; |
|
|
|
this.zone_maxBlend = 0; |
|
|
|
|
|
|
|
|
|
|
|
// Cache the full extents to avoid the calculation
|
|
|
|
// Cache the full extents to avoid the calculation
|
|
|
|
|
|
|
|
|
|
|
@ -246,14 +246,26 @@ public class HeightMap { |
|
|
|
|
|
|
|
|
|
|
|
blendBounds.setBounds(new Vector2f(heightMapZone.absX, heightMapZone.absZ), zoneLoc, 0.0f); |
|
|
|
blendBounds.setBounds(new Vector2f(heightMapZone.absX, heightMapZone.absZ), zoneLoc, 0.0f); |
|
|
|
|
|
|
|
|
|
|
|
float currentArea = (blendBounds.getHalfExtents().x * 2) * |
|
|
|
float maxBlendArea = (heightMapZone.maxBlend.getHalfExtents().x) * |
|
|
|
(blendBounds.getHalfExtents().y * 2); |
|
|
|
(heightMapZone.maxBlend.getHalfExtents().y); |
|
|
|
float zoneArea = (heightMapZone.getBounds().getHalfExtents().x * 2) * |
|
|
|
float currentArea = (blendBounds.getHalfExtents().x) * |
|
|
|
(heightMapZone.getBounds().getHalfExtents().y * 2); |
|
|
|
(blendBounds.getHalfExtents().y); |
|
|
|
|
|
|
|
float zoneArea = (heightMapZone.getBounds().getHalfExtents().x) * |
|
|
|
|
|
|
|
(heightMapZone.getBounds().getHalfExtents().y); |
|
|
|
|
|
|
|
|
|
|
|
float areaDelta = currentArea / zoneArea; |
|
|
|
float blendDelta = zoneArea - maxBlendArea; |
|
|
|
|
|
|
|
float currentDelta = zoneArea - currentArea; |
|
|
|
|
|
|
|
|
|
|
|
interpolatedTerrainHeight = FastMath.LERP(areaDelta, interpolatedTerrainHeight, interpolatedParentTerrainHeight); |
|
|
|
float percentage; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (currentDelta != 0 && blendDelta != 0) |
|
|
|
|
|
|
|
percentage = currentDelta / blendDelta; |
|
|
|
|
|
|
|
else |
|
|
|
|
|
|
|
percentage = 0.0f; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interpolatedTerrainHeight = FastMath.LERP(percentage, interpolatedTerrainHeight, interpolatedParentTerrainHeight); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
interpolatedTerrainHeight = FastMath.LERP(percentage, interpolatedTerrainHeight, interpolatedParentTerrainHeight); |
|
|
|
return interpolatedTerrainHeight + heightMapZone.worldAltitude; |
|
|
|
return interpolatedTerrainHeight + heightMapZone.worldAltitude; |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|