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_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);
|
||||
|
||||
|
||||
@@ -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, "------------");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user