various fix to the new classes
This commit is contained in:
@@ -1,16 +1,18 @@
|
||||
package com.seibel.lod.objects;
|
||||
|
||||
import org.lwjgl.system.CallbackI;
|
||||
|
||||
public class PosToGenerateContainer
|
||||
{
|
||||
public int playerPosX;
|
||||
public int playerPosZ;
|
||||
public byte farMinDetail;
|
||||
public int maxSize;
|
||||
public int maxNearSize;
|
||||
public int maxFarSize;
|
||||
public int nearSize;
|
||||
public int farSize;
|
||||
public int[][] posToGenerate;
|
||||
private int playerPosX;
|
||||
private int playerPosZ;
|
||||
private byte farMinDetail;
|
||||
private int maxSize;
|
||||
private int maxNearSize;
|
||||
private int maxFarSize;
|
||||
private int nearSize;
|
||||
private int farSize;
|
||||
private int[][] posToGenerate;
|
||||
|
||||
public PosToGenerateContainer(byte farMinDetail, int maxDataToGenerate, int maxFarDataToGenerate, int playerPosX, int playerPosZ)
|
||||
{
|
||||
@@ -51,32 +53,26 @@ public class PosToGenerateContainer
|
||||
maxNearSize--;
|
||||
}
|
||||
index = posToGenerate.length - farSize;
|
||||
if (!(farSize == maxFarSize && LevelPosUtil.compareLevelAndDistance(tempPos, posToGenerate[index]) >= 0))
|
||||
while (index < posToGenerate.length - 1 && LevelPosUtil.compareLevelAndDistance(tempPos, posToGenerate[index + 1]) <= 0)
|
||||
{
|
||||
while(index < posToGenerate.length - 1 && LevelPosUtil.compareLevelAndDistance(tempPos, posToGenerate[index + 1]) <= 0)
|
||||
{
|
||||
posToGenerate[index] = posToGenerate[index + 1];
|
||||
index++;
|
||||
}
|
||||
if(index <= posToGenerate.length - 1)
|
||||
posToGenerate[index] = tempPos;
|
||||
posToGenerate[index] = posToGenerate[index + 1];
|
||||
index++;
|
||||
}
|
||||
if (index <= posToGenerate.length - 1)
|
||||
posToGenerate[index] = tempPos;
|
||||
} else
|
||||
{//We are introducing a position in the near array
|
||||
if (nearSize < maxNearSize)
|
||||
nearSize++;
|
||||
index = nearSize - 1;
|
||||
|
||||
if(!(nearSize >= maxNearSize && LevelPosUtil.compareDistance(tempPos, posToGenerate[index]) >= 0)){
|
||||
|
||||
while(index > 0 && LevelPosUtil.compareDistance(tempPos, posToGenerate[index - 1]) <= 0)
|
||||
{
|
||||
posToGenerate[index] = posToGenerate[index - 1];
|
||||
index--;
|
||||
}
|
||||
if(index >= 0)
|
||||
posToGenerate[index] = tempPos;
|
||||
while (index > 0 && LevelPosUtil.compareDistance(tempPos, posToGenerate[index - 1]) <= 0)
|
||||
{
|
||||
posToGenerate[index] = posToGenerate[index - 1];
|
||||
index--;
|
||||
}
|
||||
if (index >= 0)
|
||||
posToGenerate[index] = tempPos;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -89,13 +85,56 @@ public class PosToGenerateContainer
|
||||
public int[] getNthPos(int n)
|
||||
{
|
||||
int index;
|
||||
if(n > farSize * 2)
|
||||
if (n > farSize * 2)
|
||||
index = n - farSize;
|
||||
else if (n % 2 == 0)
|
||||
index = n / 2;
|
||||
else
|
||||
if (n % 2 == 0)
|
||||
index = n/2;
|
||||
else
|
||||
index = posToGenerate.length - n/2 - 1;
|
||||
index = posToGenerate.length - n / 2 - 1;
|
||||
return posToGenerate[index];
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
StringBuilder builder = new StringBuilder();
|
||||
builder.append("Number of pos to generate ");
|
||||
builder.append(farSize + nearSize);
|
||||
builder.append('\n');
|
||||
builder.append("Number of near pos to generate ");
|
||||
builder.append(nearSize);
|
||||
builder.append('\n');
|
||||
builder.append("Number of far pos to generate ");
|
||||
builder.append(farSize);
|
||||
builder.append('\n');
|
||||
builder.append('\n');
|
||||
builder.append("near pos to generate");
|
||||
builder.append('\n');
|
||||
for (int i = 0; i < nearSize; i++)
|
||||
{
|
||||
builder.append(posToGenerate[i][0]);
|
||||
builder.append(" ");
|
||||
builder.append(posToGenerate[i][1]);
|
||||
builder.append(" ");
|
||||
builder.append(posToGenerate[i][2]);
|
||||
builder.append(" ");
|
||||
builder.append(posToGenerate[i][3]);
|
||||
builder.append('\n');
|
||||
}
|
||||
builder.append('\n');
|
||||
builder.append("far pos to generate");
|
||||
builder.append('\n');
|
||||
for (int i = maxSize - 1; i >= maxSize - farSize; i--)
|
||||
{
|
||||
builder.append(posToGenerate[i][0]);
|
||||
builder.append(" ");
|
||||
builder.append(posToGenerate[i][1]);
|
||||
builder.append(" ");
|
||||
builder.append(posToGenerate[i][2]);
|
||||
builder.append(" ");
|
||||
builder.append(posToGenerate[i][3]);
|
||||
builder.append('\n');
|
||||
}
|
||||
builder.append('\n');
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
package com.seibel.lod.objects;
|
||||
|
||||
import com.seibel.lod.util.LodUtil;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class PosToRenderContainer
|
||||
@@ -7,6 +9,7 @@ public class PosToRenderContainer
|
||||
private byte minDetail;
|
||||
private int numberOfPosToRender;
|
||||
private int[][] posToRender;
|
||||
/*TODO this population matrix could be converted to boolean to improve memory use*/
|
||||
private byte[][] population;
|
||||
|
||||
public PosToRenderContainer(byte minDetail)
|
||||
@@ -14,7 +17,8 @@ public class PosToRenderContainer
|
||||
this.minDetail = minDetail;
|
||||
this.numberOfPosToRender = 0;
|
||||
posToRender = new int[1][4];
|
||||
population = new byte[minDetail][minDetail];
|
||||
int size = 1 << (LodUtil.REGION_DETAIL_LEVEL - minDetail);
|
||||
population = new byte[size][size];
|
||||
}
|
||||
|
||||
public void addPosToRender(int[] levelPos)
|
||||
@@ -23,13 +27,14 @@ public class PosToRenderContainer
|
||||
posToRender = Arrays.copyOf(posToRender, posToRender.length*2);
|
||||
posToRender[numberOfPosToRender] = levelPos;
|
||||
numberOfPosToRender++;
|
||||
int[] newLevelPos = LevelPosUtil.convert(levelPos, minDetail);
|
||||
int[] newLevelPos = LevelPosUtil.getRegionModule(LevelPosUtil.convert(levelPos, minDetail));
|
||||
population[LevelPosUtil.getPosZ(newLevelPos)][LevelPosUtil.getPosZ(newLevelPos)] = (byte) (LevelPosUtil.getDetailLevel(levelPos) + 1);
|
||||
}
|
||||
|
||||
public boolean isToRender(int[] levelPos)
|
||||
public boolean contains(int[] levelPos)
|
||||
{
|
||||
return (population[LevelPosUtil.getPosZ(levelPos)][LevelPosUtil.getPosZ(levelPos)] == (LevelPosUtil.getDetailLevel(levelPos) + 1));
|
||||
int[] newLevelPos = LevelPosUtil.convert(LevelPosUtil.getRegionModule(levelPos), minDetail);
|
||||
return (population[LevelPosUtil.getPosZ(newLevelPos)][LevelPosUtil.getPosZ(newLevelPos)] == (LevelPosUtil.getDetailLevel(levelPos) + 1));
|
||||
}
|
||||
|
||||
public int getNumberOfPos()
|
||||
@@ -41,4 +46,21 @@ public class PosToRenderContainer
|
||||
{
|
||||
return posToRender[n];
|
||||
}
|
||||
|
||||
public String toString()
|
||||
{
|
||||
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for(int i = 0; i < numberOfPosToRender; i++)
|
||||
{
|
||||
builder.append(posToRender[i][0]);
|
||||
builder.append(" ");
|
||||
builder.append(posToRender[i][1]);
|
||||
builder.append(" ");
|
||||
builder.append(posToRender[i][2]);
|
||||
builder.append('\n');
|
||||
}
|
||||
builder.append('\n');
|
||||
return builder.toString();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user