forked from MagicBane/Server
Class cleanup and comments
This commit is contained in:
@@ -39,18 +39,24 @@ public class Terrain {
|
|||||||
|
|
||||||
this.heightmap = this.zone.terrain_image;
|
this.heightmap = this.zone.terrain_image;
|
||||||
|
|
||||||
// Configure PLANAR
|
// Configure PLANAR zones to use the same
|
||||||
|
// 16x16 pixel image that all other flat
|
||||||
|
// terrains share.
|
||||||
|
|
||||||
if (this.zone.terrain_type.equals("PLANAR"))
|
if (this.zone.terrain_type.equals("PLANAR"))
|
||||||
this.heightmap = 1006300;
|
this.heightmap = 1006300;
|
||||||
|
|
||||||
this.terrain_size.x = this.zone.major_radius * 2;
|
// Load pixel data for this terrain from cache
|
||||||
this.terrain_size.y = this.zone.minor_radius * 2;
|
|
||||||
|
|
||||||
this.terrain_pixel_data = Terrain._heightmap_pixel_cache.get(heightmap);
|
this.terrain_pixel_data = Terrain._heightmap_pixel_cache.get(heightmap);
|
||||||
|
|
||||||
if (terrain_pixel_data == null)
|
if (terrain_pixel_data == null)
|
||||||
Logger.error("Pixel map empty for zone: " + zone.getObjectUUID() + ":" + zone.zoneName);
|
Logger.error("Pixel map empty for zone: " + this.zone.getObjectUUID() + ":" + this.zone.zoneName);
|
||||||
|
|
||||||
|
// Configure terrain based on zone properties
|
||||||
|
|
||||||
|
this.terrain_size.x = this.zone.major_radius * 2;
|
||||||
|
this.terrain_size.y = this.zone.minor_radius * 2;
|
||||||
|
|
||||||
this.cell_count.x = this.terrain_pixel_data.length - 1;
|
this.cell_count.x = this.terrain_pixel_data.length - 1;
|
||||||
this.cell_count.y = this.terrain_pixel_data[0].length - 1;
|
this.cell_count.y = this.terrain_pixel_data[0].length - 1;
|
||||||
@@ -67,6 +73,10 @@ public class Terrain {
|
|||||||
|
|
||||||
public static Zone getNextZoneWithTerrain(Zone zone) {
|
public static Zone getNextZoneWithTerrain(Zone zone) {
|
||||||
|
|
||||||
|
// Not all zones have a terrain. Some are for display only
|
||||||
|
// and heights returned are from the parent heightmap. This
|
||||||
|
// is controlled in the JSON via the has_terrain_gen field.
|
||||||
|
|
||||||
Zone terrain_zone = zone;
|
Zone terrain_zone = zone;
|
||||||
|
|
||||||
if (zone == null)
|
if (zone == null)
|
||||||
@@ -88,9 +98,7 @@ public class Terrain {
|
|||||||
|
|
||||||
Zone terrainZone;
|
Zone terrainZone;
|
||||||
|
|
||||||
// Retrieve the next zone with a heightmap attached.
|
// Retrieve the next zone with a terrain defined.
|
||||||
// Zones without a heightmap use the next zone up the
|
|
||||||
// tree to calculate heights from.
|
|
||||||
|
|
||||||
terrainZone = getNextZoneWithTerrain(currentZone);
|
terrainZone = getNextZoneWithTerrain(currentZone);
|
||||||
|
|
||||||
@@ -136,11 +144,10 @@ public class Terrain {
|
|||||||
|
|
||||||
Vector2f terrain_cell = getTerrainCell(terrainLoc);
|
Vector2f terrain_cell = getTerrainCell(terrainLoc);
|
||||||
|
|
||||||
int gridX = (int) Math.floor(terrain_cell.x);
|
int pixel_x = (int) Math.floor(terrain_cell.x);
|
||||||
int gridY = (int) Math.floor(terrain_cell.y);
|
int pixel_t = (int) Math.floor(terrain_cell.y);
|
||||||
|
|
||||||
float offsetX = terrain_cell.x % 1;
|
Vector2f pixel_offset = new Vector2f(terrain_cell.x % 1, terrain_cell.y % 1);
|
||||||
float offsetY = terrain_cell.y % 1;
|
|
||||||
|
|
||||||
//get 4 surrounding vertices from the pixel array.
|
//get 4 surrounding vertices from the pixel array.
|
||||||
|
|
||||||
@@ -149,17 +156,17 @@ public class Terrain {
|
|||||||
float bottomLeftHeight;
|
float bottomLeftHeight;
|
||||||
float bottomRightHeight;
|
float bottomRightHeight;
|
||||||
|
|
||||||
topLeftHeight = terrain_pixel_data[gridX][gridY];
|
topLeftHeight = terrain_pixel_data[pixel_x][pixel_t];
|
||||||
topRightHeight = terrain_pixel_data[gridX + 1][gridY];
|
topRightHeight = terrain_pixel_data[pixel_x + 1][pixel_t];
|
||||||
bottomLeftHeight = terrain_pixel_data[gridX][gridY + 1];
|
bottomLeftHeight = terrain_pixel_data[pixel_x][pixel_t + 1];
|
||||||
bottomRightHeight = terrain_pixel_data[gridX + 1][gridY + 1];
|
bottomRightHeight = terrain_pixel_data[pixel_x + 1][pixel_t + 1];
|
||||||
|
|
||||||
// Interpolate between the 4 vertices
|
// Interpolate between the 4 vertices
|
||||||
|
|
||||||
interpolatedHeight = topLeftHeight * (1 - offsetX) * (1 - offsetY);
|
interpolatedHeight = topLeftHeight * (1 - pixel_offset.x) * (1 - pixel_offset.y);
|
||||||
interpolatedHeight += topRightHeight * (1 - offsetY) * (offsetX);
|
interpolatedHeight += topRightHeight * (1 - pixel_offset.y) * (pixel_offset.x);
|
||||||
interpolatedHeight += (bottomLeftHeight * (1 - offsetX) * offsetY);
|
interpolatedHeight += (bottomLeftHeight * (1 - pixel_offset.x) * pixel_offset.y);
|
||||||
interpolatedHeight += (bottomRightHeight * offsetY * offsetX);
|
interpolatedHeight += (bottomRightHeight * pixel_offset.y * pixel_offset.x);
|
||||||
|
|
||||||
interpolatedHeight *= this.terrain_scale; // Scale height
|
interpolatedHeight *= this.terrain_scale; // Scale height
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user