diff --git a/src/engine/InterestManagement/Terrain.java b/src/engine/InterestManagement/Terrain.java index f8aa914b..63f79a98 100644 --- a/src/engine/InterestManagement/Terrain.java +++ b/src/engine/InterestManagement/Terrain.java @@ -25,8 +25,7 @@ public class Terrain { public Vector2f cell_size = new Vector2f(); public Vector2f cell_count = new Vector2f(); public float terrain_scale; - public Vector2f major_blend = new Vector2f(); - public Vector2f minor_blend = new Vector2f(); + public Vector2f blend_ratio = new Vector2f(); public int heightmap; Zone zone; @@ -65,11 +64,21 @@ public class Terrain { // Blending and height scaling configuration - this.major_blend.x = this.zone.max_blend / this.zone.major_radius; - this.major_blend.y = this.zone.min_blend / this.zone.major_radius; + Vector2f major_blend = new Vector2f(this.zone.max_blend / this.zone.major_radius, + this.zone.min_blend / this.zone.major_radius); - this.minor_blend.x = this.zone.max_blend / this.zone.minor_radius; - this.minor_blend.y = this.zone.min_blend / this.zone.minor_radius; + Vector2f minor_blend = new Vector2f(this.zone.max_blend / this.zone.minor_radius, + this.zone.min_blend / this.zone.minor_radius); + + if (major_blend.y > 0.4f) + blend_ratio.x = major_blend.y; + else + blend_ratio.x = Math.min(major_blend.x, 0.4f); + + if (minor_blend.y > 0.4f) + blend_ratio.y = minor_blend.y; + else + blend_ratio.y = Math.min(minor_blend.x, 0.4f); this.terrain_scale = this.zone.terrain_max_y / 255f; } @@ -123,10 +132,10 @@ public class Terrain { // Blend between terrains - float blendFactor = terrainZone.terrain.terrainBlend(terrainOffset); + float blendCoefficient = terrainZone.terrain.getTerrainBlendCoefficient(terrainOffset); - float terrainHeight = interpolatedChildHeight * blendFactor; - terrainHeight += interpolatedParentTerrainHeight * (1 - blendFactor); + float terrainHeight = interpolatedChildHeight * blendCoefficient; + terrainHeight += interpolatedParentTerrainHeight * (1 - blendCoefficient); return terrainHeight; @@ -136,9 +145,6 @@ public class Terrain { Zone currentZone = ZoneManager.findSmallestZone(world_loc); - if (currentZone == null) - return 0; - return getWorldHeight(currentZone, world_loc); } @@ -188,37 +194,23 @@ public class Terrain { } - public float terrainBlend(Vector2f zone_offset) { + public float getTerrainBlendCoefficient(Vector2f zone_offset) { // Normalize terrain offset Vector2f normalizedOffset = new Vector2f(Math.abs(zone_offset.x) / this.zone.major_radius, Math.abs(zone_offset.y) / this.zone.minor_radius); - float xval; - - if (this.major_blend.y > 0.4f) - xval = this.major_blend.y; - else - xval = Math.min(this.major_blend.x, 0.4f); - - float yval; - - if (this.minor_blend.y > 0.4f) - yval = this.minor_blend.y; - else - yval = Math.min(this.minor_blend.x, 0.4f); - float value; - if (normalizedOffset.x <= 1 - xval || normalizedOffset.x <= normalizedOffset.y) { + if (normalizedOffset.x <= 1 - blend_ratio.x || normalizedOffset.x <= normalizedOffset.y) { - if (normalizedOffset.y < 1 - yval) + if (normalizedOffset.y < 1 - blend_ratio.y) return 1; - value = (normalizedOffset.y - (1 - yval)) / yval; + value = (normalizedOffset.y - (1 - blend_ratio.y)) / blend_ratio.y; } else - value = (normalizedOffset.x - (1 - xval)) / xval; + value = (normalizedOffset.x - (1 - blend_ratio.x)) / blend_ratio.x; value = (float) Math.atan((0.5f - value) * PI); diff --git a/src/engine/devcmd/cmds/GetHeightCmd.java b/src/engine/devcmd/cmds/GetHeightCmd.java index 8e779a8d..6231f05a 100644 --- a/src/engine/devcmd/cmds/GetHeightCmd.java +++ b/src/engine/devcmd/cmds/GetHeightCmd.java @@ -60,7 +60,7 @@ public class GetHeightCmd extends AbstractDevCmd { this.throwbackInfo(playerCharacter, "Grid : " + "[" + gridSquare.x + "]" + "[" + gridSquare.y + "]"); this.throwbackInfo(playerCharacter, "offset: " + "[" + childZoneOffset.x + "]" + "[" + childZoneOffset.y + "]"); this.throwbackInfo(playerCharacter, "Normalized offset: " + "[" + normalizedOffset.x + "]" + "[" + normalizedOffset.y + "]"); - this.throwbackInfo(playerCharacter, "Blend: " + heightmapZone.terrain.terrainBlend(childZoneOffset)); + this.throwbackInfo(playerCharacter, "Blend: " + heightmapZone.terrain.getTerrainBlendCoefficient(childZoneOffset)); this.throwbackInfo(playerCharacter, "------------");