mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 09:26:11 -04:00
ambient occlusion
west + east
This commit is contained in:
parent
b6d14b3a9b
commit
6a9cc77879
@ -137,6 +137,11 @@ class SolidSectionMesher(
|
|||||||
|
|
||||||
AmbientOcclusionUtil.setBottom(section, x, y, z, ao[O_DOWN])
|
AmbientOcclusionUtil.setBottom(section, x, y, z, ao[O_DOWN])
|
||||||
AmbientOcclusionUtil.setTop(section, x, y, z, ao[O_UP])
|
AmbientOcclusionUtil.setTop(section, x, y, z, ao[O_UP])
|
||||||
|
AmbientOcclusionUtil.setNorth(section, x, y, z, ao[O_NORTH])
|
||||||
|
AmbientOcclusionUtil.setSouth(section, x, y, z, ao[O_SOUTH])
|
||||||
|
|
||||||
|
AmbientOcclusionUtil.setWest(section, x, y, z, ao[O_WEST])
|
||||||
|
AmbientOcclusionUtil.setEast(section, x, y, z, ao[O_EAST])
|
||||||
|
|
||||||
|
|
||||||
val tints = tints.getBlockTint(state, chunk, x, position.y, z)
|
val tints = tints.getBlockTint(state, chunk, x, position.y, z)
|
||||||
|
@ -96,6 +96,17 @@ object AmbientOcclusionUtil {
|
|||||||
ao[if (flip) 1 else 3] = calculateLevel(south, west, section.trace(x - 1, y, z + 1))
|
ao[if (flip) 1 else 3] = calculateLevel(south, west, section.trace(x - 1, y, z + 1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setBottom(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
||||||
|
var section: ChunkSection? = section
|
||||||
|
var y = y - 1
|
||||||
|
if (y < 0) {
|
||||||
|
section = section?.neighbours?.get(O_DOWN)
|
||||||
|
y = ProtocolDefinition.SECTION_MAX_Y
|
||||||
|
}
|
||||||
|
|
||||||
|
setY(section, x, y, z, true, ao)
|
||||||
|
}
|
||||||
|
|
||||||
fun setTop(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
fun setTop(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
||||||
var section: ChunkSection? = section
|
var section: ChunkSection? = section
|
||||||
var y = y + 1
|
var y = y + 1
|
||||||
@ -107,14 +118,78 @@ object AmbientOcclusionUtil {
|
|||||||
setY(section, x, y, z, false, ao)
|
setY(section, x, y, z, false, ao)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setBottom(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
fun setZ(section: ChunkSection?, x: Int, y: Int, z: Int, flip: Boolean, ao: IntArray) {
|
||||||
|
ao.clear()
|
||||||
|
if (section == null || section.blocks.isEmpty) return
|
||||||
|
|
||||||
|
val down = section.trace(x + 0, y - 1, z)
|
||||||
|
val west = section.trace(x - 1, y + 0, z)
|
||||||
|
val up = section.trace(x + 0, y + 1, z)
|
||||||
|
val east = section.trace(x + 1, y + 0, z)
|
||||||
|
|
||||||
|
ao[0] = calculateLevel(down, west, section.trace(x - 1, y - 1, z))
|
||||||
|
ao[if (flip) 3 else 1] = calculateLevel(west, up, section.trace(x - 1, y + 1, z))
|
||||||
|
ao[2] = calculateLevel(up, east, section.trace(x + 1, y + 1, z))
|
||||||
|
ao[if (flip) 1 else 3] = calculateLevel(east, down, section.trace(x + 1, y - 1, z))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun setNorth(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
||||||
var section: ChunkSection? = section
|
var section: ChunkSection? = section
|
||||||
var y = y - 1
|
var z = z - 1
|
||||||
if (y < 0) {
|
if (z < 0) {
|
||||||
section = section?.neighbours?.get(O_DOWN)
|
section = section?.neighbours?.get(O_NORTH)
|
||||||
y = ProtocolDefinition.SECTION_MAX_Y
|
z = ProtocolDefinition.SECTION_MAX_Z
|
||||||
}
|
}
|
||||||
|
|
||||||
setY(section, x, y, z, true, ao)
|
setZ(section, x, y, z, true, ao)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setSouth(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
||||||
|
var section: ChunkSection? = section
|
||||||
|
var z = z + 1
|
||||||
|
if (z > ProtocolDefinition.SECTION_MAX_Z) {
|
||||||
|
section = section?.neighbours?.get(O_SOUTH)
|
||||||
|
z = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setZ(section, x, y, z, false, ao)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setX(section: ChunkSection?, x: Int, y: Int, z: Int, flip: Boolean, ao: IntArray) {
|
||||||
|
ao.clear()
|
||||||
|
if (section == null || section.blocks.isEmpty) return
|
||||||
|
|
||||||
|
val down = section.trace(x + 0, y - 1, z)
|
||||||
|
val north = section.trace(x, y + 0, z - 1)
|
||||||
|
val up = section.trace(x, y + 1, z)
|
||||||
|
val south = section.trace(x, y + 0, z + 1)
|
||||||
|
|
||||||
|
ao[0] = calculateLevel(down, north, section.trace(x, y - 1, z - 1))
|
||||||
|
ao[if (flip) 3 else 1] = calculateLevel(north, up, section.trace(x, y + 1, z - 1))
|
||||||
|
ao[2] = calculateLevel(up, south, section.trace(x, y + 1, z + 1))
|
||||||
|
ao[if (flip) 1 else 3] = calculateLevel(south, down, section.trace(x, y - 1, z + 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setWest(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
||||||
|
var section: ChunkSection? = section
|
||||||
|
var x = x - 1
|
||||||
|
if (x < 0) {
|
||||||
|
section = section?.neighbours?.get(O_WEST)
|
||||||
|
x = ProtocolDefinition.SECTION_MAX_X
|
||||||
|
}
|
||||||
|
|
||||||
|
setX(section, x, y, z, false, ao)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun setEast(section: ChunkSection, x: Int, y: Int, z: Int, ao: IntArray) {
|
||||||
|
var section: ChunkSection? = section
|
||||||
|
var x = x + 1
|
||||||
|
if (x > ProtocolDefinition.SECTION_MAX_X) {
|
||||||
|
section = section?.neighbours?.get(O_EAST)
|
||||||
|
x = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
setX(section, x, y, z, true, ao)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user