111 lines
3.3 KiB
Java
111 lines
3.3 KiB
Java
package com.seibel.lod.objects;
|
|
|
|
import java.io.Serializable;
|
|
|
|
import com.seibel.lod.util.LodUtil;
|
|
|
|
public class LevelContainer implements Serializable
|
|
{
|
|
|
|
public static final char DATA_DELIMITER = ',';
|
|
|
|
public final byte detailLevel;
|
|
|
|
public final byte[][][] colors;
|
|
|
|
public final short[][] height;
|
|
|
|
public final short[][] depth;
|
|
|
|
public final byte[][] generationType;
|
|
|
|
public final boolean[][] dataExistence;
|
|
|
|
public LevelContainer(byte detailLevel, byte[][][] colors, short[][] height, short[][] depth, byte[][] generationType, boolean[][] dataExistence)
|
|
{
|
|
this.detailLevel = detailLevel;
|
|
this.colors = colors;
|
|
this.height = height;
|
|
this.depth = depth;
|
|
this.generationType = generationType;
|
|
this.dataExistence = dataExistence;
|
|
}
|
|
|
|
public LevelContainer(String data)
|
|
{
|
|
|
|
int index = 0;
|
|
int lastIndex = 0;
|
|
|
|
|
|
index = data.indexOf(DATA_DELIMITER, 0);
|
|
this.detailLevel = (byte) Integer.parseInt(data.substring(0, index));
|
|
int size = (int) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - detailLevel);
|
|
|
|
this.colors = new byte[size][size][3];
|
|
this.height = new short[size][size];
|
|
this.depth = new short[size][size];
|
|
this.generationType = new byte[size][size];
|
|
this.dataExistence = new boolean[size][size];
|
|
int intCol;
|
|
for (int x = 0; x < size; x++)
|
|
{
|
|
for (int z = 0; z < size; z++)
|
|
{
|
|
lastIndex = index;
|
|
index = data.indexOf(DATA_DELIMITER, lastIndex + 1);
|
|
intCol = Integer.parseInt(data.substring(lastIndex + 1, index), 16);
|
|
colors[x][z][0] = (byte) ((intCol >> 16) - 128);
|
|
colors[x][z][1] = (byte) ((intCol >> 8) - 128);
|
|
colors[x][z][2] = (byte) (intCol - 128);
|
|
|
|
lastIndex = index;
|
|
index = data.indexOf(DATA_DELIMITER, lastIndex + 1);
|
|
height[x][z] = Short.parseShort(data.substring(lastIndex + 1, index), 16);
|
|
|
|
lastIndex = index;
|
|
index = data.indexOf(DATA_DELIMITER, lastIndex + 1);
|
|
depth[x][z] = Short.parseShort(data.substring(lastIndex + 1, index), 16);
|
|
|
|
lastIndex = index;
|
|
index = data.indexOf(DATA_DELIMITER, lastIndex + 1);
|
|
generationType[x][z] = Byte.parseByte(data.substring(lastIndex + 1, index), 16);
|
|
|
|
lastIndex = index;
|
|
index = data.indexOf(DATA_DELIMITER, lastIndex + 1);
|
|
dataExistence[x][z] = Boolean.parseBoolean(data.substring(lastIndex + 1, index));
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public String toString()
|
|
{
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
int combinedCol;
|
|
int size = (int) Math.pow(2, LodUtil.REGION_DETAIL_LEVEL - detailLevel);
|
|
stringBuilder.append(detailLevel);
|
|
stringBuilder.append(DATA_DELIMITER);
|
|
for (int x = 0; x < size; x++)
|
|
{
|
|
for (int z = 0; z < size; z++)
|
|
{
|
|
//Converting the colors to intColor and then to HEX
|
|
combinedCol = ((colors[x][z][0] + 128) << 16) | ((colors[x][z][1] + 128) << 8) | ((colors[x][z][2] + 128));
|
|
stringBuilder.append(Integer.toHexString(combinedCol));
|
|
stringBuilder.append(DATA_DELIMITER);
|
|
stringBuilder.append(Integer.toHexString(height[x][z] & 0xffff));
|
|
stringBuilder.append(DATA_DELIMITER);
|
|
stringBuilder.append(Integer.toHexString(depth[x][z] & 0xffff));
|
|
stringBuilder.append(DATA_DELIMITER);
|
|
stringBuilder.append(Integer.toHexString(generationType[x][z] & 0xffff));
|
|
stringBuilder.append(DATA_DELIMITER);
|
|
stringBuilder.append(dataExistence[x][z]);
|
|
stringBuilder.append(DATA_DELIMITER);
|
|
}
|
|
}
|
|
return stringBuilder.toString();
|
|
}
|
|
}
|