don't damage chunk if a one block change doesn't touch a solid

This commit is contained in:
2024-09-02 19:59:37 +10:00
parent d35de84221
commit 0cdc495434

View File

@ -36,12 +36,18 @@ public class World {
for (i, ofs) in zip(internalPos.indices, [ SIMD3<Int>.X, .Y, .Z ]) { for (i, ofs) in zip(internalPos.indices, [ SIMD3<Int>.X, .Y, .Z ]) {
if internalPos[i] == 0 { if internalPos[i] == 0 {
let id = chunkID &- ofs let id = chunkID &- ofs
if self._chunks.keys.contains(id) { if let other = self._chunks[id],
// optim: Damage adjacent chunk only if block is touching a solid
case .solid = other.getBlock(internal: (internalPos &- ofs) & Chunk.mask).type
{
self._chunkDamage.insert(id) self._chunkDamage.insert(id)
} }
} else if internalPos[i] == Chunk.size - 1 { } else if internalPos[i] == Chunk.size - 1 {
let id = chunkID &+ ofs let id = chunkID &+ ofs
if self._chunks.keys.contains(id) { if let other = self._chunks[id],
// optim: Damage adjacent chunk only if block is touching a solid
case .solid = other.getBlock(internal: (internalPos &+ ofs) & Chunk.mask).type
{
self._chunkDamage.insert(id) self._chunkDamage.insert(id)
} }
} }