From c4cd6c48566c6dc0a09c794c32d001a8cb19bd30 Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Thu, 7 Dec 2023 23:01:46 +0100 Subject: [PATCH] calculate section occlusion on demand In headless mode occlusion does not matter and chunks that are invisible or occluded also don't matter --- .../de/bixilon/minosoft/data/world/chunk/ChunkSection.kt | 5 ++--- .../data/world/container/block/SectionOcclusion.kt | 9 ++++++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/world/chunk/ChunkSection.kt b/src/main/java/de/bixilon/minosoft/data/world/chunk/ChunkSection.kt index 8a59681c4..bbe27ab64 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/chunk/ChunkSection.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/chunk/ChunkSection.kt @@ -44,9 +44,8 @@ class ChunkSection( var neighbours: Array? = null fun tick(connection: PlayConnection, chunkPosition: Vec2i, sectionHeight: Int, random: Random) { - if (blockEntities.isEmpty) { - return - } + if (blockEntities.isEmpty) return + val offset = Vec3i.of(chunkPosition, sectionHeight) val position = Vec3i() diff --git a/src/main/java/de/bixilon/minosoft/data/world/container/block/SectionOcclusion.kt b/src/main/java/de/bixilon/minosoft/data/world/container/block/SectionOcclusion.kt index 4297f7409..340e79335 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/container/block/SectionOcclusion.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/container/block/SectionOcclusion.kt @@ -26,6 +26,7 @@ class SectionOcclusion( private val provider: BlockSectionDataProvider, ) { private var occlusion = EMPTY + private var calculate = false fun clear(notify: Boolean) { update(EMPTY, notify) @@ -39,6 +40,8 @@ class SectionOcclusion( } fun recalculate(notify: Boolean) { + if (!calculate) return + if (provider.isEmpty) { clear(notify) return @@ -180,10 +183,14 @@ class SectionOcclusion( if (`in` == out) { return false } - return occlusion[CubeDirections.getIndex(`in`, out)] + return isOccluded(CubeDirections.getIndex(`in`, out)) } fun isOccluded(index: Int): Boolean { + if (!calculate) { + calculate = true + recalculate(false) + } return occlusion[index] }