Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6572f0c805 | |||
| 496b49b349 | |||
| ffac5bf369 | |||
| 15313b3460 | |||
| 898e37eedb | |||
| d42788c694 | |||
| 46655a1cfe | |||
| 668e3ee70f | |||
| 0ec9f01130 | |||
| ad6f886e1e | |||
| 6402d228c0 | |||
| a68496d451 | |||
| 72fe3c58c6 |
@@ -21,6 +21,8 @@ import static java.lang.Math.PI;
|
|||||||
public class Terrain {
|
public class Terrain {
|
||||||
public static final HashMap<Integer, short[][]> _heightmap_pixel_cache = new HashMap<>();
|
public static final HashMap<Integer, short[][]> _heightmap_pixel_cache = new HashMap<>();
|
||||||
public short[][] terrain_pixel_data;
|
public short[][] terrain_pixel_data;
|
||||||
|
|
||||||
|
public Vector2f image_size = new Vector2f();
|
||||||
public Vector2f terrain_size = new Vector2f();
|
public Vector2f terrain_size = new Vector2f();
|
||||||
public Vector2f cell_size = new Vector2f();
|
public Vector2f cell_size = new Vector2f();
|
||||||
public Vector2f cell_count = new Vector2f();
|
public Vector2f cell_count = new Vector2f();
|
||||||
@@ -44,6 +46,7 @@ public class Terrain {
|
|||||||
// Load pixel data for this terrain from cache
|
// Load pixel data for this terrain from cache
|
||||||
|
|
||||||
this.terrain_pixel_data = Terrain._heightmap_pixel_cache.get(heightmap);
|
this.terrain_pixel_data = Terrain._heightmap_pixel_cache.get(heightmap);
|
||||||
|
this.image_size.set(this.terrain_pixel_data.length, this.terrain_pixel_data[0].length);
|
||||||
|
|
||||||
if (terrain_pixel_data == null)
|
if (terrain_pixel_data == null)
|
||||||
Logger.error("Pixel map empty for zone: " + this.zone.getObjectUUID() + ":" + this.zone.zoneName);
|
Logger.error("Pixel map empty for zone: " + this.zone.getObjectUUID() + ":" + this.zone.zoneName);
|
||||||
@@ -53,8 +56,8 @@ public class Terrain {
|
|||||||
this.terrain_size.x = this.zone.major_radius * 2;
|
this.terrain_size.x = this.zone.major_radius * 2;
|
||||||
this.terrain_size.y = this.zone.minor_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.image_size.x;
|
||||||
this.cell_count.y = this.terrain_pixel_data[0].length - 1;
|
this.cell_count.y = this.image_size.y; // Bug in exe
|
||||||
|
|
||||||
this.cell_size.x = terrain_size.x / this.cell_count.x;
|
this.cell_size.x = terrain_size.x / this.cell_count.x;
|
||||||
this.cell_size.y = terrain_size.y / this.cell_count.y;
|
this.cell_size.y = terrain_size.y / this.cell_count.y;
|
||||||
@@ -84,7 +87,7 @@ public class Terrain {
|
|||||||
|
|
||||||
// Scale coefficient for this terrain
|
// Scale coefficient for this terrain
|
||||||
|
|
||||||
this.terrain_scale = this.zone.template.terrain_max_y / 255f;
|
this.terrain_scale = this.zone.template.terrain_max_y / 256;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Zone getNextZoneWithTerrain(Zone zone) {
|
public static Zone getNextZoneWithTerrain(Zone zone) {
|
||||||
@@ -155,14 +158,14 @@ public class Terrain {
|
|||||||
|
|
||||||
public Vector2f getTerrainCell(Vector2f terrain_loc) {
|
public Vector2f getTerrainCell(Vector2f terrain_loc) {
|
||||||
|
|
||||||
// Calculate terrain cell with offset
|
// Calculate terrain cell with offset. Bug mirrors the exe
|
||||||
|
|
||||||
Vector2f terrain_cell = new Vector2f(terrain_loc.x / this.cell_size.x, terrain_loc.y / this.cell_size.y);
|
Vector2f terrain_cell = new Vector2f(terrain_loc.x / this.cell_size.x, terrain_loc.y / this.cell_size.x);
|
||||||
|
|
||||||
// Clamp values when standing directly on pole
|
// Clamp values when standing directly on pole
|
||||||
|
|
||||||
terrain_cell.x = Math.max(0, Math.min(this.cell_count.x - 1, terrain_cell.x));
|
terrain_cell.x = Math.max(0, Math.min(this.cell_count.x - 2, terrain_cell.x));
|
||||||
terrain_cell.y = Math.max(0, Math.min(this.cell_count.y - 1, terrain_cell.y));
|
terrain_cell.y = Math.max(0, Math.min(this.cell_count.y - 2, terrain_cell.y));
|
||||||
|
|
||||||
return terrain_cell;
|
return terrain_cell;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user