Fixed chunk model updates
This commit is contained in:
parent
52f3f653d8
commit
26a35f306c
@ -19,6 +19,8 @@
|
|||||||
package ru.windcorp.progressia.client.world;
|
package ru.windcorp.progressia.client.world;
|
||||||
|
|
||||||
import glm.vec._3.i.Vec3i;
|
import glm.vec._3.i.Vec3i;
|
||||||
|
import ru.windcorp.progressia.common.util.VectorUtil;
|
||||||
|
import ru.windcorp.progressia.common.util.Vectors;
|
||||||
import ru.windcorp.progressia.common.world.ChunkData;
|
import ru.windcorp.progressia.common.world.ChunkData;
|
||||||
import ru.windcorp.progressia.common.world.ChunkDataListener;
|
import ru.windcorp.progressia.common.world.ChunkDataListener;
|
||||||
import ru.windcorp.progressia.common.world.block.BlockData;
|
import ru.windcorp.progressia.common.world.block.BlockData;
|
||||||
@ -65,25 +67,33 @@ class ChunkUpdateListener implements ChunkDataListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onLocationChanged(ChunkData chunk, Vec3i blockInChunk) {
|
private void onLocationChanged(ChunkData chunk, Vec3i blockInChunk) {
|
||||||
Vec3i chunkPos = new Vec3i(chunk.getPosition());
|
Vec3i chunkPos = Vectors.grab3i().set(chunk.getX(), chunk.getY(), chunk.getZ());
|
||||||
|
|
||||||
if (blockInChunk.x == 0) {
|
checkCoordinate(blockInChunk, chunkPos, VectorUtil.Axis.X);
|
||||||
chunkPos.x -= 1;
|
checkCoordinate(blockInChunk, chunkPos, VectorUtil.Axis.Y);
|
||||||
} else if (blockInChunk.x == ChunkData.BLOCKS_PER_CHUNK - 1) {
|
checkCoordinate(blockInChunk, chunkPos, VectorUtil.Axis.Z);
|
||||||
chunkPos.x += 1;
|
|
||||||
} else if (blockInChunk.y == 0) {
|
Vectors.release(chunkPos);
|
||||||
chunkPos.y -= 1;
|
}
|
||||||
} else if (blockInChunk.y == ChunkData.BLOCKS_PER_CHUNK - 1) {
|
|
||||||
chunkPos.y += 1;
|
private void checkCoordinate(Vec3i blockInChunk, Vec3i chunkPos, VectorUtil.Axis axis) {
|
||||||
} else if (blockInChunk.z == 0) {
|
int block = VectorUtil.get(blockInChunk, axis);
|
||||||
chunkPos.z -= 1;
|
int diff = 0;
|
||||||
} else if (blockInChunk.z == ChunkData.BLOCKS_PER_CHUNK - 1) {
|
|
||||||
chunkPos.z += 1;
|
if (block == 0) {
|
||||||
|
diff = -1;
|
||||||
|
} else if (block == ChunkData.BLOCKS_PER_CHUNK - 1) {
|
||||||
|
diff = +1;
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int previousChunkPos = VectorUtil.get(chunkPos, axis);
|
||||||
|
VectorUtil.set(chunkPos, axis, previousChunkPos + diff);
|
||||||
|
|
||||||
world.markChunkForUpdate(chunkPos);
|
world.markChunkForUpdate(chunkPos);
|
||||||
|
|
||||||
|
VectorUtil.set(chunkPos, axis, previousChunkPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user