another change to save format... now there is no static offset
This commit is contained in:
@@ -134,7 +134,7 @@ public class CubicLodTemplate
|
||||
color = vertexOptimizer.getColor(lodDirection);
|
||||
addPosAndColor(buffer,
|
||||
vertexOptimizer.getX(lodDirection, vertexIndex),
|
||||
vertexOptimizer.getY(lodDirection, vertexIndex, verticalFaceIndex) + DataPointUtil.VERTICAL_OFFSET,
|
||||
vertexOptimizer.getY(lodDirection, vertexIndex, verticalFaceIndex),
|
||||
vertexOptimizer.getZ(lodDirection, vertexIndex),
|
||||
color, skyLight, blockLight );
|
||||
}
|
||||
|
||||
@@ -285,7 +285,7 @@ public class LodBuilder
|
||||
lightSky = (light >> 4) & 0b1111;
|
||||
isDefault = ((light >> 8)) == 1;
|
||||
|
||||
dataToMerge[index * verticalData + count] = DataPointUtil.createDataPoint(height - DataPointUtil.VERTICAL_OFFSET, depth - DataPointUtil.VERTICAL_OFFSET, color, lightSky, lightBlock, generation, isDefault);
|
||||
dataToMerge[index * verticalData + count] = DataPointUtil.createDataPoint(height, depth, color, lightSky, lightBlock, generation, isDefault);
|
||||
topBlock = false;
|
||||
yAbs = depth - 1;
|
||||
count++;
|
||||
|
||||
@@ -78,7 +78,7 @@ public class LodDimensionFileHandler
|
||||
* file handler, older versions (smaller numbers) will be deleted and overwritten,
|
||||
* newer versions (larger numbers) will be ignored and won't be read.
|
||||
*/
|
||||
public static final int LOD_SAVE_FILE_VERSION = 7;
|
||||
public static final int LOD_SAVE_FILE_VERSION = 8;
|
||||
|
||||
/**
|
||||
* Allow saving asynchronously, but never try to save multiple regions
|
||||
@@ -208,14 +208,14 @@ public class LodDimensionFileHandler
|
||||
|
||||
break;
|
||||
}
|
||||
else if (fileVersion == 6)
|
||||
else if (fileVersion < LOD_SAVE_FILE_VERSION)
|
||||
{
|
||||
//this is old, but readable version
|
||||
byte[] data = ThreadMapUtil.getSaveContainer(tempDetailLevel);
|
||||
inputStream.read(data);
|
||||
inputStream.close();
|
||||
// add the data to our region
|
||||
region.addLevelContainer(new VerticalLevelContainer(data, 6));
|
||||
region.addLevelContainer(new VerticalLevelContainer(data, fileVersion));
|
||||
} else
|
||||
{
|
||||
// this file is a readable version,
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.seibel.lod.core.util.DetailDistanceUtil;
|
||||
import com.seibel.lod.core.util.LevelPosUtil;
|
||||
import com.seibel.lod.core.util.LodUtil;
|
||||
import com.seibel.lod.core.util.ThreadMapUtil;
|
||||
import com.seibel.lod.forge.wrappers.VersionConstants;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -123,6 +124,7 @@ public class VerticalLevelContainer implements LevelContainer
|
||||
size = 1 << (LodUtil.REGION_DETAIL_LEVEL - detailLevel);
|
||||
int x = size * size * tempMaxVerticalData;
|
||||
long[] tempDataContainer = new long[x];
|
||||
short minHeight = (short) VersionConstants.INSTANCE.getMinimumWorldHeight();
|
||||
|
||||
if (version == 6)
|
||||
{
|
||||
@@ -138,17 +140,17 @@ public class VerticalLevelContainer implements LevelContainer
|
||||
DataPointUtil.getRed(newData),
|
||||
DataPointUtil.getGreen(newData),
|
||||
DataPointUtil.getBlue(newData),
|
||||
DataPointUtil.getHeight(newData) - DataPointUtil.VERTICAL_OFFSET,
|
||||
DataPointUtil.getDepth(newData) - DataPointUtil.VERTICAL_OFFSET,
|
||||
DataPointUtil.getHeight(newData) - minHeight,
|
||||
DataPointUtil.getDepth(newData) - minHeight,
|
||||
DataPointUtil.getLightSky(newData),
|
||||
DataPointUtil.getLightBlock(newData),
|
||||
DataPointUtil.getGenerationMode(newData),
|
||||
DataPointUtil.getFlag(newData)
|
||||
);
|
||||
DataPointUtil.getFlag(newData));
|
||||
|
||||
tempDataContainer[i] = newData;
|
||||
}
|
||||
}
|
||||
else //if (version == 7)
|
||||
else if (version == 7)
|
||||
{
|
||||
for (int i = 0; i < x; i++)
|
||||
{
|
||||
@@ -156,9 +158,63 @@ public class VerticalLevelContainer implements LevelContainer
|
||||
for (tempIndex = 0; tempIndex < 8; tempIndex++)
|
||||
newData += (((long) inputData[index + tempIndex]) & 0xff) << (8 * tempIndex);
|
||||
index += 8;
|
||||
|
||||
newData = DataPointUtil.createDataPoint(
|
||||
DataPointUtil.getAlpha(newData),
|
||||
DataPointUtil.getRed(newData),
|
||||
DataPointUtil.getGreen(newData),
|
||||
DataPointUtil.getBlue(newData),
|
||||
DataPointUtil.getHeight(newData) - 64 - minHeight,
|
||||
DataPointUtil.getDepth(newData) - 64 - minHeight,
|
||||
DataPointUtil.getLightSky(newData),
|
||||
DataPointUtil.getLightBlock(newData),
|
||||
DataPointUtil.getGenerationMode(newData),
|
||||
DataPointUtil.getFlag(newData));
|
||||
|
||||
tempDataContainer[i] = newData;
|
||||
}
|
||||
}
|
||||
else //if (version == 8)
|
||||
{
|
||||
short tempMinHeight = inputData[index];
|
||||
index++;
|
||||
tempMinHeight |= inputData[index] << 8;
|
||||
index++;
|
||||
if (tempMinHeight != minHeight)
|
||||
{
|
||||
for (int i = 0; i < x; i++)
|
||||
{
|
||||
newData = 0;
|
||||
for (tempIndex = 0; tempIndex < 8; tempIndex++)
|
||||
newData |= ((long) inputData[index + tempIndex]) << (8 * tempIndex);
|
||||
index += 8;
|
||||
newData = DataPointUtil.createDataPoint(
|
||||
DataPointUtil.getAlpha(newData),
|
||||
DataPointUtil.getRed(newData),
|
||||
DataPointUtil.getGreen(newData),
|
||||
DataPointUtil.getBlue(newData),
|
||||
DataPointUtil.getHeight(newData) + tempMinHeight - minHeight,
|
||||
DataPointUtil.getDepth(newData) + tempMinHeight - minHeight,
|
||||
DataPointUtil.getLightSky(newData),
|
||||
DataPointUtil.getLightBlock(newData),
|
||||
DataPointUtil.getGenerationMode(newData),
|
||||
DataPointUtil.getFlag(newData));
|
||||
|
||||
tempDataContainer[i] = newData;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < x; i++)
|
||||
{
|
||||
newData = 0;
|
||||
for (tempIndex = 0; tempIndex < 8; tempIndex++)
|
||||
newData |= ((long) inputData[index + tempIndex]) << (8 * tempIndex);
|
||||
index += 8;
|
||||
tempDataContainer[i] = newData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tempMaxVerticalData > DetailDistanceUtil.getMaxVerticalData(detailLevel))
|
||||
{
|
||||
@@ -221,11 +277,17 @@ public class VerticalLevelContainer implements LevelContainer
|
||||
long current;
|
||||
boolean allGenerated = true;
|
||||
byte[] tempData = ThreadMapUtil.getSaveContainer(detailLevel);
|
||||
short minHeight = (short) VersionConstants.INSTANCE.getMinimumWorldHeight();
|
||||
|
||||
tempData[index] = detailLevel;
|
||||
index++;
|
||||
tempData[index] = (byte) maxVerticalData;
|
||||
index++;
|
||||
tempData[index] = (byte) (minHeight & 0xFF);
|
||||
index++;
|
||||
tempData[index] = (byte) ((minHeight >> 8) & 0xFF);
|
||||
index++;
|
||||
|
||||
int j;
|
||||
for (int i = 0; i < x; i++)
|
||||
{
|
||||
|
||||
@@ -145,7 +145,7 @@ public class ThreadMapUtil
|
||||
int size = 1;
|
||||
for (int i = LodUtil.DETAIL_OPTIONS - 1; i >= 0; i--)
|
||||
{
|
||||
array[i] = new byte[2 + 8 * size * size * DetailDistanceUtil.getMaxVerticalData(i)];
|
||||
array[i] = new byte[4 + 8 * size * size * DetailDistanceUtil.getMaxVerticalData(i)];
|
||||
size = size << 1;
|
||||
}
|
||||
saveContainer.put(Thread.currentThread().getName(), array);
|
||||
|
||||
Reference in New Issue
Block a user