new line brackets
This commit is contained in:
@@ -16,7 +16,8 @@ import java.io.Serializable;
|
||||
* 0 for x, 1 for y, 2 for z in 3D
|
||||
*/
|
||||
|
||||
public class LodRegion implements Serializable {
|
||||
public class LodRegion implements Serializable
|
||||
{
|
||||
//x coord,
|
||||
private byte minDetailLevel;
|
||||
private static final byte POSSIBLE_LOD = 10;
|
||||
@@ -41,8 +42,8 @@ public class LodRegion implements Serializable {
|
||||
public final int regionPosX;
|
||||
public final int regionPosZ;
|
||||
|
||||
public LodRegion(LevelContainer levelContainer, RegionPos regionPos) {
|
||||
/**TODO there is some error here in the update*/
|
||||
public LodRegion(LevelContainer levelContainer, RegionPos regionPos)
|
||||
{
|
||||
this.regionPosX = regionPos.x;
|
||||
this.regionPosZ = regionPos.z;
|
||||
this.minDetailLevel = levelContainer.detailLevel;
|
||||
@@ -63,7 +64,8 @@ public class LodRegion implements Serializable {
|
||||
dataExistence[minDetailLevel] = levelContainer.dataExistence;
|
||||
|
||||
//Initialize all the different matrices
|
||||
for (byte lod = (byte) (minDetailLevel + 1); lod <= LodUtil.REGION_DETAIL_LEVEL; lod++) {
|
||||
for (byte lod = (byte) (minDetailLevel + 1); lod <= LodUtil.REGION_DETAIL_LEVEL; lod++)
|
||||
{
|
||||
int size = (short) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - lod);
|
||||
colors[lod] = new byte[size][size][3];
|
||||
height[lod] = new short[size][size];
|
||||
@@ -73,10 +75,13 @@ public class LodRegion implements Serializable {
|
||||
}
|
||||
int sizeDiff;
|
||||
LevelPos levelPos;
|
||||
for (byte tempLod = (byte) (minDetailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++) {
|
||||
sizeDiff = (int) Math.pow(2,LodUtil.REGION_DETAIL_LEVEL - tempLod);
|
||||
for (int x = 0; x < sizeDiff; x++) {
|
||||
for (int z = 0; z < sizeDiff; z++) {
|
||||
for (byte tempLod = (byte) (minDetailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++)
|
||||
{
|
||||
sizeDiff = (int) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - tempLod);
|
||||
for (int x = 0; x < sizeDiff; x++)
|
||||
{
|
||||
for (int z = 0; z < sizeDiff; z++)
|
||||
{
|
||||
levelPos = new LevelPos(tempLod, x, z);
|
||||
update(levelPos);
|
||||
}
|
||||
@@ -84,7 +89,8 @@ public class LodRegion implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
public LodRegion(byte minDetailLevel, RegionPos regionPos) {
|
||||
public LodRegion(byte minDetailLevel, RegionPos regionPos)
|
||||
{
|
||||
this.minDetailLevel = minDetailLevel;
|
||||
this.regionPosX = regionPos.x;
|
||||
this.regionPosZ = regionPos.z;
|
||||
@@ -100,7 +106,8 @@ public class LodRegion implements Serializable {
|
||||
|
||||
|
||||
//Initialize all the different matrices
|
||||
for (byte lod = minDetailLevel; lod <= LodUtil.REGION_DETAIL_LEVEL; lod++) {
|
||||
for (byte lod = minDetailLevel; lod <= LodUtil.REGION_DETAIL_LEVEL; lod++)
|
||||
{
|
||||
int size = (short) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - lod);
|
||||
colors[lod] = new byte[size][size][3];
|
||||
height[lod] = new short[size][size];
|
||||
@@ -120,12 +127,14 @@ public class LodRegion implements Serializable {
|
||||
* @param update
|
||||
* @return
|
||||
*/
|
||||
public boolean setData(LevelPos levelPos, LodDataPoint dataPoint, byte generationType, boolean update) {
|
||||
public boolean setData(LevelPos levelPos, LodDataPoint dataPoint, byte generationType, boolean update)
|
||||
{
|
||||
levelPos = levelPos.regionModule();
|
||||
if ((this.generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ] == 0) || (generationType >= this.generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ])) {
|
||||
if ((this.generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ] == 0) || (generationType >= this.generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ]))
|
||||
{
|
||||
|
||||
//update the number of node present
|
||||
//if (this.generationType[lod][posX][posZ] == 0) numberOfPoints++;
|
||||
if (this.dataExistence[levelPos.detailLevel][levelPos.posX][levelPos.posZ]) numberOfPoints++;
|
||||
|
||||
//add the node data
|
||||
this.colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][0] = (byte) (dataPoint.color.getRed() - 128);
|
||||
@@ -138,20 +147,24 @@ public class LodRegion implements Serializable {
|
||||
|
||||
//update could be stopped and a single big update could be done at the end
|
||||
LevelPos tempLevelPos = levelPos;
|
||||
if (update) {
|
||||
for (byte tempLod = (byte) (levelPos.detailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++) {
|
||||
if (update)
|
||||
{
|
||||
for (byte tempLod = (byte) (levelPos.detailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++)
|
||||
{
|
||||
tempLevelPos = tempLevelPos.convert(tempLod);
|
||||
update(tempLevelPos);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
} else {
|
||||
} else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public LodDataPoint getData(ChunkPos chunkPos) {
|
||||
public LodDataPoint getData(ChunkPos chunkPos)
|
||||
{
|
||||
return getData(new LevelPos(LodUtil.CHUNK_DETAIL_LEVEL, chunkPos.x, chunkPos.z));
|
||||
}
|
||||
|
||||
@@ -161,7 +174,8 @@ public class LodRegion implements Serializable {
|
||||
* @param lod
|
||||
* @return the data at the relative pos and level
|
||||
*/
|
||||
public LodDataPoint getData(byte lod, BlockPos blockPos) {
|
||||
public LodDataPoint getData(byte lod, BlockPos blockPos)
|
||||
{
|
||||
int posX = Math.floorMod(blockPos.getX(), (int) Math.pow(2, lod));
|
||||
int posZ = Math.floorMod(blockPos.getZ(), (int) Math.pow(2, lod));
|
||||
return getData(new LevelPos(lod, posX, posZ));
|
||||
@@ -173,7 +187,8 @@ public class LodRegion implements Serializable {
|
||||
* @param levelPos
|
||||
* @return the data at the relative pos and level
|
||||
*/
|
||||
public LodDataPoint getData(LevelPos levelPos) {
|
||||
public LodDataPoint getData(LevelPos levelPos)
|
||||
{
|
||||
levelPos = levelPos.regionModule();
|
||||
return new LodDataPoint(
|
||||
height[levelPos.detailLevel][levelPos.posX][levelPos.posZ],
|
||||
@@ -188,37 +203,29 @@ public class LodRegion implements Serializable {
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
/*
|
||||
public List<LevelPos> getDataToGenerate(int playerPosX, int playerPosZ, int start, int end, byte generetion, byte detailLevel) {
|
||||
if(detailLevel < minDetailLevel) detailLevel = minDetailLevel;
|
||||
LevelPos levelPos
|
||||
/*
|
||||
public List<LevelPos> getDataToGenerate(int playerPosX, int playerPosZ, int start, int end, byte generetion, byte detailLevel)
|
||||
{
|
||||
if (detailLevel < minDetailLevel) detailLevel = minDetailLevel;
|
||||
LevelPos levelPos;
|
||||
int size;
|
||||
int width;
|
||||
int posX;
|
||||
int posZ;
|
||||
int distance;
|
||||
for(int tempLod = detailLevel; tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++){
|
||||
size = (int) Math.pow(2,LodUtil.REGION_DETAIL_LEVEL-tempLod);
|
||||
width = (int) Math.pow(2,tempLod);
|
||||
for(int x = 0; x < size; x++){
|
||||
for(int z = 0; z < size; z++){
|
||||
posX = regionPosX * 512 + x * width + width/2;
|
||||
posZ = regionPosZ * 512 + z * width + width/2;
|
||||
distance = (int) Math.sqrt(Math.pow(playerPosX - posX, 2) + Math.pow(playerPosZ - posZ, 2))
|
||||
if(distance >= start && distance <= end){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
size = (int) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - tempLod);
|
||||
width = (int) Math.pow(2, tempLod);
|
||||
posX = regionPosX * 512 + width / 2;
|
||||
posZ = regionPosZ * 512 + width / 2;
|
||||
distance = (int) Math.sqrt(Math.pow(playerPosX - posX, 2) + Math.pow(playerPosZ - posZ, 2))
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
||||
/**
|
||||
* @return
|
||||
*/
|
||||
/*
|
||||
public List<LevelPos> getDataToRender(int playerPosX, int playerPosZ, int start, int end, byte detailLevel) {
|
||||
*//*
|
||||
public List<LevelPos> getDataToRender(int playerPosX, int playerPosZ, int start, int end, byte detailLevel)
|
||||
{
|
||||
if(detailLevel < minDetailLevel) detailLevel = minDetailLevel;
|
||||
int size;
|
||||
int width;
|
||||
@@ -234,13 +241,14 @@ public class LodRegion implements Serializable {
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
||||
/**TODO a method to update a whole area, to be used as a single big update*/
|
||||
/**
|
||||
* @param levelPos
|
||||
*/
|
||||
private void updateArea(LevelPos levelPos) {
|
||||
private void updateArea(LevelPos levelPos)
|
||||
{
|
||||
/*
|
||||
LevelPos tempLevelPos = levelPos;
|
||||
int sizeDiff;
|
||||
@@ -259,13 +267,25 @@ public class LodRegion implements Serializable {
|
||||
|
||||
}
|
||||
|
||||
int sizeDiff;
|
||||
LevelPos levelPos;
|
||||
for (byte tempLod = (byte) (minDetailLevel + 1); tempLod <= LodUtil.REGION_DETAIL_LEVEL; tempLod++) {
|
||||
sizeDiff = (int) Math.pow(2,LodUtil.REGION_DETAIL_LEVEL - tempLod);
|
||||
for (int x = 0; x < sizeDiff; x++) {
|
||||
for (int z = 0; z < sizeDiff; z++) {
|
||||
levelPos = new LevelPos(tempLod, x, z);
|
||||
update(levelPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/**
|
||||
* @param levelPos
|
||||
*/
|
||||
private void update(LevelPos levelPos) {
|
||||
private void update(LevelPos levelPos)
|
||||
{
|
||||
|
||||
levelPos = levelPos.regionModule();
|
||||
boolean[][] children = getChildren(levelPos);
|
||||
@@ -282,13 +302,16 @@ public class LodRegion implements Serializable {
|
||||
int newPosZ;
|
||||
byte newLod;
|
||||
LevelPos childPos;
|
||||
for (int x = 0; x <= 1; x++) {
|
||||
for (int z = 0; z <= 1; z++) {
|
||||
for (int x = 0; x <= 1; x++)
|
||||
{
|
||||
for (int z = 0; z <= 1; z++)
|
||||
{
|
||||
newPosX = 2 * levelPos.posX + x;
|
||||
newPosZ = 2 * levelPos.posZ + z;
|
||||
newLod = (byte) (levelPos.detailLevel - 1);
|
||||
childPos = new LevelPos(newLod, newPosX, newPosZ);
|
||||
if (hasDataBeenGenerated(childPos)) {
|
||||
if (hasDataBeenGenerated(childPos))
|
||||
{
|
||||
numberOfChildren++;
|
||||
|
||||
tempRed += colors[newLod][newPosX][newPosZ][0];
|
||||
@@ -301,7 +324,8 @@ public class LodRegion implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
if (numberOfChildren > 0) {
|
||||
if (numberOfChildren > 0)
|
||||
{
|
||||
colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][0] = (byte) (tempRed / numberOfChildren);
|
||||
colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][1] = (byte) (tempGreen / numberOfChildren);
|
||||
colors[levelPos.detailLevel][levelPos.posX][levelPos.posZ][2] = (byte) (tempBlue / numberOfChildren);
|
||||
@@ -316,15 +340,19 @@ public class LodRegion implements Serializable {
|
||||
* @param levelPos
|
||||
* @return
|
||||
*/
|
||||
private boolean[][] getChildren(LevelPos levelPos) {
|
||||
private boolean[][] getChildren(LevelPos levelPos)
|
||||
{
|
||||
levelPos = levelPos.regionModule();
|
||||
boolean[][] children = new boolean[2][2];
|
||||
int numberOfChild = 0;
|
||||
if (minDetailLevel == levelPos.detailLevel) {
|
||||
if (minDetailLevel == levelPos.detailLevel)
|
||||
{
|
||||
return children;
|
||||
}
|
||||
for (int x = 0; x <= 1; x++) {
|
||||
for (int z = 0; z <= 1; z++) {
|
||||
for (int x = 0; x <= 1; x++)
|
||||
{
|
||||
for (int z = 0; z <= 1; z++)
|
||||
{
|
||||
children[x][z] = (dataExistence[levelPos.detailLevel - 1][2 * levelPos.posX + x][2 * levelPos.posZ + z]);
|
||||
}
|
||||
}
|
||||
@@ -335,7 +363,8 @@ public class LodRegion implements Serializable {
|
||||
* @param chunkPos
|
||||
* @return
|
||||
*/
|
||||
public boolean doesDataExist(ChunkPos chunkPos) {
|
||||
public boolean doesDataExist(ChunkPos chunkPos)
|
||||
{
|
||||
return doesDataExist(new LevelPos(LodUtil.CHUNK_DETAIL_LEVEL, chunkPos.x, chunkPos.z));
|
||||
}
|
||||
|
||||
@@ -343,7 +372,8 @@ public class LodRegion implements Serializable {
|
||||
* @param levelPos
|
||||
* @return
|
||||
*/
|
||||
public boolean doesDataExist(LevelPos levelPos) {
|
||||
public boolean doesDataExist(LevelPos levelPos)
|
||||
{
|
||||
levelPos = levelPos.regionModule();
|
||||
return dataExistence[levelPos.detailLevel][levelPos.posX][levelPos.posZ];
|
||||
}
|
||||
@@ -352,10 +382,12 @@ public class LodRegion implements Serializable {
|
||||
* @param levelPos
|
||||
* @return
|
||||
*/
|
||||
public DistanceGenerationMode getGenerationMode(LevelPos levelPos) {
|
||||
public DistanceGenerationMode getGenerationMode(LevelPos levelPos)
|
||||
{
|
||||
levelPos = levelPos.regionModule();
|
||||
DistanceGenerationMode generationMode = DistanceGenerationMode.NONE;
|
||||
switch (generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ]) {
|
||||
switch (generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ])
|
||||
{
|
||||
case 0:
|
||||
generationMode = DistanceGenerationMode.NONE;
|
||||
break;
|
||||
@@ -386,12 +418,14 @@ public class LodRegion implements Serializable {
|
||||
* @param levelPos
|
||||
* @return
|
||||
*/
|
||||
public boolean hasDataBeenGenerated(LevelPos levelPos) {
|
||||
public boolean hasDataBeenGenerated(LevelPos levelPos)
|
||||
{
|
||||
levelPos = levelPos.regionModule();
|
||||
return (generationType[levelPos.detailLevel][levelPos.posX][levelPos.posZ] != 0);
|
||||
}
|
||||
|
||||
public byte getMinDetailLevel() {
|
||||
public byte getMinDetailLevel()
|
||||
{
|
||||
return minDetailLevel;
|
||||
}
|
||||
|
||||
@@ -401,15 +435,18 @@ public class LodRegion implements Serializable {
|
||||
* @param lod
|
||||
* @return
|
||||
*/
|
||||
public LevelContainer getLevel(byte lod) {
|
||||
public LevelContainer getLevel(byte lod)
|
||||
{
|
||||
return new LevelContainer(lod, colors[lod], height[lod], depth[lod], generationType[lod], dataExistence[lod]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param levelContainer
|
||||
*/
|
||||
public void addLevel(LevelContainer levelContainer) {
|
||||
if (levelContainer.detailLevel < minDetailLevel - 1) {
|
||||
public void addLevel(LevelContainer levelContainer)
|
||||
{
|
||||
if (levelContainer.detailLevel < minDetailLevel - 1)
|
||||
{
|
||||
throw new IllegalArgumentException("addLevel requires a level that is at least the minimum level of the region -1 ");
|
||||
}
|
||||
if (levelContainer.detailLevel == minDetailLevel - 1) minDetailLevel = levelContainer.detailLevel;
|
||||
@@ -424,8 +461,10 @@ public class LodRegion implements Serializable {
|
||||
/**
|
||||
* @param lod
|
||||
*/
|
||||
public void removeDetailLevel(byte lod) {
|
||||
for (byte tempLod = 0; tempLod <= lod; tempLod++) {
|
||||
public void removeDetailLevel(byte lod)
|
||||
{
|
||||
for (byte tempLod = 0; tempLod <= lod; tempLod++)
|
||||
{
|
||||
colors[tempLod] = new byte[0][0][0];
|
||||
height[tempLod] = new short[0][0];
|
||||
depth[tempLod] = new short[0][0];
|
||||
@@ -434,7 +473,8 @@ public class LodRegion implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
public String toString(){
|
||||
public String toString()
|
||||
{
|
||||
return getLevel(LodUtil.REGION_DETAIL_LEVEL).toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user