some fixes

This commit is contained in:
Moritz Zwerger 2025-03-05 17:39:57 +01:00
parent ff2de678a1
commit 5f9058e44a
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 14 additions and 10 deletions

View File

@ -24,6 +24,10 @@ object BlockPositionUtil {
return hash shr 16 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) { inline fun assertPosition(condition: Boolean) {
if (!DebugOptions.VERIFY_COORDINATES) return if (!DebugOptions.VERIFY_COORDINATES) return
if (!condition) throw AssertionError("Position assert failed!") if (!condition) throw AssertionError("Position assert failed!")

View File

@ -40,7 +40,7 @@ value class InSectionPosition(
inline fun plusX(): 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) return InSectionPosition(index + X * 1)
} }
@ -50,12 +50,12 @@ value class InSectionPosition(
} }
inline fun minusX(): InSectionPosition { inline fun minusX(): InSectionPosition {
assertPosition(this.x > 0) assertPosition(this.x > 0, "x > 0")
return InSectionPosition(index - X * 1) return InSectionPosition(index - X * 1)
} }
inline fun plusY(): InSectionPosition { 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) return InSectionPosition(index + Y * 1)
} }
@ -65,12 +65,12 @@ value class InSectionPosition(
} }
inline fun minusY(): InSectionPosition { inline fun minusY(): InSectionPosition {
assertPosition(this.y > 0) assertPosition(this.y > 0, "y > 0")
return InSectionPosition(index - Y * 1) return InSectionPosition(index - Y * 1)
} }
inline fun plusZ(): InSectionPosition { 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) return InSectionPosition(index + Z * 1)
} }
@ -80,7 +80,7 @@ value class InSectionPosition(
} }
inline fun minusZ(): InSectionPosition { inline fun minusZ(): InSectionPosition {
assertPosition(this.z > 0) assertPosition(this.z > 0, "z > 0")
return InSectionPosition(index - Z * 1) return InSectionPosition(index - Z * 1)
} }

View File

@ -33,7 +33,7 @@ object AmbientOcclusionUtil {
val EMPTY = IntArray(LEVELS) { LEVEL_NONE } 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 if (this == null) return 0
var x = x var x = x
var y = y var y = y
@ -163,7 +163,7 @@ object AmbientOcclusionUtil {
} }
fun applyWest(section: ChunkSection, position: InSectionPosition, ao: IntArray): IntArray { 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) return setX(section.neighbours?.get(O_WEST), position.with(x = ProtocolDefinition.SECTION_MAX_X), true, ao)
} else { } else {
return setX(section, position.minusX(), false, ao) return setX(section, position.minusX(), false, ao)
@ -171,7 +171,7 @@ object AmbientOcclusionUtil {
} }
fun applyEast(section: ChunkSection, position: InSectionPosition, ao: IntArray): IntArray { 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) return setX(section.neighbours?.get(O_EAST), position.with(x = 0), true, ao)
} else { } else {
return setX(section, position.plusX(), true, ao) return setX(section, position.plusX(), true, ao)

View File

@ -28,7 +28,7 @@ class CloudLayer(
val index: Int, val index: Int,
var height: IntRange, 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<CloudArray> = arrayOfNulls<CloudArray?>(3 * 3).unsafeCast() private val arrays: Array<CloudArray> = arrayOfNulls<CloudArray?>(3 * 3).unsafeCast()
private var offset = 0.0f private var offset = 0.0f
var movement = true var movement = true