Fixed chunk model updates

This commit is contained in:
OLEGSHA 2021-01-26 22:21:03 +03:00
parent 52f3f653d8
commit 26a35f306c
Signed by: OLEGSHA
GPG Key ID: E57A4B08D64AFF7A

View File

@ -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);
} }
} }