diff --git a/src/main/java/de/bixilon/minosoft/data/world/positions/BlockPositionUtil.kt b/src/main/java/de/bixilon/minosoft/data/world/positions/BlockPositionUtil.kt index 60ff01797..6d07def1a 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/positions/BlockPositionUtil.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/positions/BlockPositionUtil.kt @@ -24,6 +24,10 @@ object BlockPositionUtil { return hash shr 16 } + inline fun assertPosition(condition: Boolean, message: String) { + if (!DebugOptions.VERIFY_COORDINATES) return + if (!condition) throw AssertionError("Position assert failed: $message") + } inline fun assertPosition(condition: Boolean) { if (!DebugOptions.VERIFY_COORDINATES) return if (!condition) throw AssertionError("Position assert failed!") diff --git a/src/main/java/de/bixilon/minosoft/data/world/positions/InSectionPosition.kt b/src/main/java/de/bixilon/minosoft/data/world/positions/InSectionPosition.kt index db6ce1f92..4441e5b04 100644 --- a/src/main/java/de/bixilon/minosoft/data/world/positions/InSectionPosition.kt +++ b/src/main/java/de/bixilon/minosoft/data/world/positions/InSectionPosition.kt @@ -40,7 +40,7 @@ value class InSectionPosition( inline fun plusX(): InSectionPosition { - assertPosition(this.x < ProtocolDefinition.SECTION_MAX_X) + assertPosition(this.x < ProtocolDefinition.SECTION_MAX_X, "x < max") return InSectionPosition(index + X * 1) } @@ -50,12 +50,12 @@ value class InSectionPosition( } inline fun minusX(): InSectionPosition { - assertPosition(this.x > 0) + assertPosition(this.x > 0, "x > 0") return InSectionPosition(index - X * 1) } inline fun plusY(): InSectionPosition { - assertPosition(this.y < ProtocolDefinition.SECTION_MAX_Y) + assertPosition(this.y < ProtocolDefinition.SECTION_MAX_Y, "y < max") return InSectionPosition(index + Y * 1) } @@ -65,12 +65,12 @@ value class InSectionPosition( } inline fun minusY(): InSectionPosition { - assertPosition(this.y > 0) + assertPosition(this.y > 0, "y > 0") return InSectionPosition(index - Y * 1) } inline fun plusZ(): InSectionPosition { - assertPosition(this.z < ProtocolDefinition.SECTION_MAX_Z) + assertPosition(this.z < ProtocolDefinition.SECTION_MAX_Z, "z < max") return InSectionPosition(index + Z * 1) } @@ -80,7 +80,7 @@ value class InSectionPosition( } inline fun minusZ(): InSectionPosition { - assertPosition(this.z > 0) + assertPosition(this.z > 0, "z > 0") return InSectionPosition(index - Z * 1) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/light/ao/AmbientOcclusionUtil.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/light/ao/AmbientOcclusionUtil.kt index 5c9ac2f80..1920738c3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/light/ao/AmbientOcclusionUtil.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/light/ao/AmbientOcclusionUtil.kt @@ -33,7 +33,7 @@ object AmbientOcclusionUtil { val EMPTY = IntArray(LEVELS) { LEVEL_NONE } - fun ChunkSection?.trace(x: Int, y: Int, z: Int): Int { + fun ChunkSection?.trace(x: Int, y: Int, z: Int): Int { // TODO: use packed and direction if (this == null) return 0 var x = x var y = y @@ -163,7 +163,7 @@ object AmbientOcclusionUtil { } fun applyWest(section: ChunkSection, position: InSectionPosition, ao: IntArray): IntArray { - if (position.z == 0) { + if (position.x == 0) { return setX(section.neighbours?.get(O_WEST), position.with(x = ProtocolDefinition.SECTION_MAX_X), true, ao) } else { return setX(section, position.minusX(), false, ao) @@ -171,7 +171,7 @@ object AmbientOcclusionUtil { } fun applyEast(section: ChunkSection, position: InSectionPosition, ao: IntArray): IntArray { - if (position.z == ProtocolDefinition.SECTION_MAX_X) { + if (position.x == ProtocolDefinition.SECTION_MAX_X) { return setX(section.neighbours?.get(O_EAST), position.with(x = 0), true, ao) } else { return setX(section, position.plusX(), true, ao) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/clouds/CloudLayer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/clouds/CloudLayer.kt index 59657ae18..e4f139bfa 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/sky/clouds/CloudLayer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/sky/clouds/CloudLayer.kt @@ -28,7 +28,7 @@ class CloudLayer( val index: Int, var height: IntRange, ) { - private var position = ChunkPosition(Int.MIN_VALUE, Int.MIN_VALUE) + private var position = ChunkPosition(-ChunkPosition.MAX_X, -ChunkPosition.MAX_Z) private val arrays: Array = arrayOfNulls(3 * 3).unsafeCast() private var offset = 0.0f var movement = true