visibility graph: check if chunk is occluded

This commit is contained in:
Bixilon 2022-05-07 16:50:52 +02:00
parent ec185c60db
commit c8c3ee1d35
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -63,13 +63,20 @@ class WorldVisibilityGraph(
calculateGraph()
}
fun isInViewDistance(chunkPosition: Vec2i): Boolean {
return chunkPosition.isInViewDistance(connection.world.view.viewDistance, cameraChunkPosition)
}
fun isChunkVisible(chunkPosition: Vec2i): Boolean {
if (!chunkPosition.isInViewDistance(connection.world.view.viewDistance, cameraChunkPosition)) {
if (!isInViewDistance(chunkPosition)) {
return false
}
visibilityLock.acquire()
val visible = visibilities[chunkPosition]
visibilityLock.release()
// ToDo: basic frustum culling
return true
return visible?.isNotEmpty() ?: false
}
fun isSectionVisible(chunkPosition: Vec2i, sectionHeight: Int, minPosition: Vec3i = DEFAULT_MIN_POSITION, maxPosition: Vec3i = DEFAULT_MAX_POSITION, checkChunk: Boolean = true): Boolean {
@ -110,7 +117,7 @@ class WorldVisibilityGraph(
if ((direction == Directions.UP && sectionIndex >= maxIndex) || (direction == Directions.DOWN && sectionIndex < 0)) {
return
}
if (!isChunkVisible(chunkPosition)) {
if (!isInViewDistance(chunkPosition)) {
return
}
val inverted = direction.inverted