forked from MagicBane/Server
Configuration moved to constructor
This commit is contained in:
@@ -25,8 +25,7 @@ public class Terrain {
|
|||||||
public Vector2f cell_size = new Vector2f();
|
public Vector2f cell_size = new Vector2f();
|
||||||
public Vector2f cell_count = new Vector2f();
|
public Vector2f cell_count = new Vector2f();
|
||||||
public float terrain_scale;
|
public float terrain_scale;
|
||||||
public Vector2f major_blend = new Vector2f();
|
public Vector2f blend_ratio = new Vector2f();
|
||||||
public Vector2f minor_blend = new Vector2f();
|
|
||||||
public int heightmap;
|
public int heightmap;
|
||||||
Zone zone;
|
Zone zone;
|
||||||
|
|
||||||
@@ -65,11 +64,21 @@ public class Terrain {
|
|||||||
|
|
||||||
// Blending and height scaling configuration
|
// Blending and height scaling configuration
|
||||||
|
|
||||||
this.major_blend.x = this.zone.max_blend / this.zone.major_radius;
|
Vector2f major_blend = new Vector2f(this.zone.max_blend / this.zone.major_radius,
|
||||||
this.major_blend.y = this.zone.min_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;
|
Vector2f minor_blend = new Vector2f(this.zone.max_blend / this.zone.minor_radius,
|
||||||
this.minor_blend.y = this.zone.min_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;
|
this.terrain_scale = this.zone.terrain_max_y / 255f;
|
||||||
}
|
}
|
||||||
@@ -123,10 +132,10 @@ public class Terrain {
|
|||||||
|
|
||||||
// Blend between terrains
|
// Blend between terrains
|
||||||
|
|
||||||
float blendFactor = terrainZone.terrain.terrainBlend(terrainOffset);
|
float blendCoefficient = terrainZone.terrain.getTerrainBlendCoefficient(terrainOffset);
|
||||||
|
|
||||||
float terrainHeight = interpolatedChildHeight * blendFactor;
|
float terrainHeight = interpolatedChildHeight * blendCoefficient;
|
||||||
terrainHeight += interpolatedParentTerrainHeight * (1 - blendFactor);
|
terrainHeight += interpolatedParentTerrainHeight * (1 - blendCoefficient);
|
||||||
|
|
||||||
return terrainHeight;
|
return terrainHeight;
|
||||||
|
|
||||||
@@ -136,9 +145,6 @@ public class Terrain {
|
|||||||
|
|
||||||
Zone currentZone = ZoneManager.findSmallestZone(world_loc);
|
Zone currentZone = ZoneManager.findSmallestZone(world_loc);
|
||||||
|
|
||||||
if (currentZone == null)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return getWorldHeight(currentZone, world_loc);
|
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
|
// Normalize terrain offset
|
||||||
|
|
||||||
Vector2f normalizedOffset = new Vector2f(Math.abs(zone_offset.x) / this.zone.major_radius,
|
Vector2f normalizedOffset = new Vector2f(Math.abs(zone_offset.x) / this.zone.major_radius,
|
||||||
Math.abs(zone_offset.y) / this.zone.minor_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;
|
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;
|
return 1;
|
||||||
|
|
||||||
value = (normalizedOffset.y - (1 - yval)) / yval;
|
value = (normalizedOffset.y - (1 - blend_ratio.y)) / blend_ratio.y;
|
||||||
} else
|
} 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);
|
value = (float) Math.atan((0.5f - value) * PI);
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ public class GetHeightCmd extends AbstractDevCmd {
|
|||||||
this.throwbackInfo(playerCharacter, "Grid : " + "[" + gridSquare.x + "]" + "[" + gridSquare.y + "]");
|
this.throwbackInfo(playerCharacter, "Grid : " + "[" + gridSquare.x + "]" + "[" + gridSquare.y + "]");
|
||||||
this.throwbackInfo(playerCharacter, "offset: " + "[" + childZoneOffset.x + "]" + "[" + childZoneOffset.y + "]");
|
this.throwbackInfo(playerCharacter, "offset: " + "[" + childZoneOffset.x + "]" + "[" + childZoneOffset.y + "]");
|
||||||
this.throwbackInfo(playerCharacter, "Normalized offset: " + "[" + normalizedOffset.x + "]" + "[" + normalizedOffset.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, "------------");
|
this.throwbackInfo(playerCharacter, "------------");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user