Configuration moved to constructor

This commit is contained in:
2023-10-15 16:40:31 -04:00
parent 3d4058ad01
commit 2cbe5f38cd
2 changed files with 24 additions and 32 deletions
+23 -31
View File
@@ -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);
+1 -1
View File
@@ -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, "------------");