mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-15 18:34:56 -04:00
rendering: use position offset more, fixes
This commit is contained in:
parent
4794d1cf61
commit
553084744f
@ -113,7 +113,8 @@ class MatrixHandler(
|
|||||||
val fov = calculateFOV()
|
val fov = calculateFOV()
|
||||||
val view = camera.view.view
|
val view = camera.view.view
|
||||||
val eyePosition = view.eyePosition
|
val eyePosition = view.eyePosition
|
||||||
val matrixPosition = view.matrixPosition
|
context.camera.offset.draw()
|
||||||
|
val matrixPosition = Vec3(eyePosition - context.camera.offset.offset)
|
||||||
val front = view.front
|
val front = view.front
|
||||||
if (upToDate && matrixPosition == this.matrixPosition && front == this.front && fov == previousFOV && shaking.isEmpty) {
|
if (upToDate && matrixPosition == this.matrixPosition && front == this.front && fov == previousFOV && shaking.isEmpty) {
|
||||||
return
|
return
|
||||||
|
@ -17,15 +17,23 @@ import de.bixilon.kotlinglm.vec3.Vec3i
|
|||||||
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
import de.bixilon.kutil.observer.DataObserver.Companion.observed
|
||||||
import de.bixilon.minosoft.data.world.World
|
import de.bixilon.minosoft.data.world.World
|
||||||
import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable
|
import de.bixilon.minosoft.gui.rendering.renderer.drawable.Drawable
|
||||||
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.blockPosition
|
||||||
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY
|
||||||
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
|
||||||
|
|
||||||
class WorldOffset(private val camera: Camera) : Drawable {
|
class WorldOffset(private val camera: Camera) : Drawable {
|
||||||
var offset by observed(Vec3i(100, 100, 100))
|
var offset by observed(Vec3i.EMPTY)
|
||||||
private set
|
private set
|
||||||
|
|
||||||
override fun draw() {
|
override fun draw() {
|
||||||
val previous = offset
|
val previous = offset
|
||||||
val position = camera.view.view.eyePosition
|
val position = camera.view.view.eyePosition
|
||||||
|
|
||||||
|
val mod = (position.blockPosition / MAX_DISTANCE) * MAX_DISTANCE
|
||||||
|
if (mod != previous) {
|
||||||
|
this.offset = mod
|
||||||
|
}
|
||||||
|
// TODO: optimize this and use MIN_DISTANCE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ interface CameraView {
|
|||||||
val updateFrustum: Boolean get() = true
|
val updateFrustum: Boolean get() = true
|
||||||
|
|
||||||
val eyePosition: Vec3d
|
val eyePosition: Vec3d
|
||||||
val matrixPosition: Vec3
|
|
||||||
|
|
||||||
val rotation: EntityRotation
|
val rotation: EntityRotation
|
||||||
val front: Vec3
|
val front: Vec3
|
||||||
@ -49,12 +48,4 @@ interface CameraView {
|
|||||||
|
|
||||||
|
|
||||||
fun draw() = Unit
|
fun draw() = Unit
|
||||||
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
|
|
||||||
fun CameraView.matrix(eye: Vec3d): Vec3 {
|
|
||||||
return Vec3(eye - context.camera.offset.offset)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ import de.bixilon.minosoft.data.entities.EntityRotation
|
|||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.CameraDefinition.CAMERA_UP_VEC3
|
import de.bixilon.minosoft.gui.rendering.camera.CameraDefinition.CAMERA_UP_VEC3
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView.Companion.matrix
|
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
import de.bixilon.minosoft.input.camera.MovementInputActions
|
import de.bixilon.minosoft.input.camera.MovementInputActions
|
||||||
@ -32,7 +31,6 @@ class DebugView(private val camera: Camera) : CameraView {
|
|||||||
override val shaking: Boolean get() = false
|
override val shaking: Boolean get() = false
|
||||||
|
|
||||||
override var eyePosition = Vec3d.EMPTY
|
override var eyePosition = Vec3d.EMPTY
|
||||||
override var matrixPosition = Vec3.EMPTY
|
|
||||||
|
|
||||||
override var rotation = EntityRotation.EMPTY
|
override var rotation = EntityRotation.EMPTY
|
||||||
override var front = Vec3.EMPTY
|
override var front = Vec3.EMPTY
|
||||||
@ -65,7 +63,6 @@ class DebugView(private val camera: Camera) : CameraView {
|
|||||||
movement *= delta
|
movement *= delta
|
||||||
|
|
||||||
eyePosition = eyePosition + movement
|
eyePosition = eyePosition + movement
|
||||||
this.matrixPosition = matrix(this.eyePosition)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onMouse(delta: Vec2d) {
|
override fun onMouse(delta: Vec2d) {
|
||||||
@ -79,7 +76,6 @@ class DebugView(private val camera: Camera) : CameraView {
|
|||||||
|
|
||||||
override fun onAttach(previous: CameraView?) {
|
override fun onAttach(previous: CameraView?) {
|
||||||
this.eyePosition = previous?.eyePosition ?: Vec3d.EMPTY
|
this.eyePosition = previous?.eyePosition ?: Vec3d.EMPTY
|
||||||
this.matrixPosition = matrix(this.eyePosition)
|
|
||||||
this.rotation = previous?.rotation ?: EntityRotation.EMPTY
|
this.rotation = previous?.rotation ?: EntityRotation.EMPTY
|
||||||
this.front = previous?.front ?: Vec3.EMPTY
|
this.front = previous?.front ?: Vec3.EMPTY
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
|
|||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView
|
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView.Companion.matrix
|
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
|
|
||||||
@ -41,7 +40,6 @@ class FirstPersonView(override val camera: Camera) : PersonView {
|
|||||||
override val renderOverlays: Boolean get() = true
|
override val renderOverlays: Boolean get() = true
|
||||||
|
|
||||||
override var eyePosition: Vec3d = Vec3d.EMPTY
|
override var eyePosition: Vec3d = Vec3d.EMPTY
|
||||||
override var matrixPosition: Vec3 = Vec3.EMPTY
|
|
||||||
|
|
||||||
override var rotation = EntityRotation.EMPTY
|
override var rotation = EntityRotation.EMPTY
|
||||||
override var front = Vec3.EMPTY
|
override var front = Vec3.EMPTY
|
||||||
@ -56,7 +54,6 @@ class FirstPersonView(override val camera: Camera) : PersonView {
|
|||||||
private fun update() {
|
private fun update() {
|
||||||
val entity = context.connection.camera.entity
|
val entity = context.connection.camera.entity
|
||||||
this.eyePosition = entity.renderInfo.eyePosition
|
this.eyePosition = entity.renderInfo.eyePosition
|
||||||
this.matrixPosition = matrix(this.eyePosition)
|
|
||||||
this.rotation = entity.physics.rotation
|
this.rotation = entity.physics.rotation
|
||||||
this.front = this.rotation.front
|
this.front = this.rotation.front
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ import de.bixilon.minosoft.data.entities.EntityRotation
|
|||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
import de.bixilon.minosoft.gui.rendering.camera.Camera
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView
|
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView
|
||||||
import de.bixilon.minosoft.gui.rendering.camera.view.CameraView.Companion.matrix
|
|
||||||
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
|
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3d
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY
|
||||||
@ -32,7 +31,6 @@ class ThirdPersonView(override val camera: Camera) : PersonView {
|
|||||||
override val context: RenderContext get() = camera.context
|
override val context: RenderContext get() = camera.context
|
||||||
|
|
||||||
override var eyePosition: Vec3d = Vec3d.EMPTY
|
override var eyePosition: Vec3d = Vec3d.EMPTY
|
||||||
override var matrixPosition: Vec3 = Vec3.EMPTY
|
|
||||||
|
|
||||||
override var rotation = EntityRotation.EMPTY
|
override var rotation = EntityRotation.EMPTY
|
||||||
override var front = Vec3.EMPTY
|
override var front = Vec3.EMPTY
|
||||||
@ -62,7 +60,6 @@ class ThirdPersonView(override val camera: Camera) : PersonView {
|
|||||||
val distance = target?.distance?.let { minOf(it, MAX_DISTANCE) } ?: MAX_DISTANCE
|
val distance = target?.distance?.let { minOf(it, MAX_DISTANCE) } ?: MAX_DISTANCE
|
||||||
|
|
||||||
this.eyePosition = position + (-front * distance)
|
this.eyePosition = position + (-front * distance)
|
||||||
this.matrixPosition = matrix(this.eyePosition)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onAttach(previous: CameraView?) {
|
override fun onAttach(previous: CameraView?) {
|
||||||
|
@ -27,6 +27,7 @@ class CloudArray(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun build() {
|
private fun build() {
|
||||||
|
val offset = layer.clouds.context.camera.offset.offset
|
||||||
val matrix = layer.clouds.matrix
|
val matrix = layer.clouds.matrix
|
||||||
val matrixOffset = (offset * ARRAY_SIZE) and 0xFF
|
val matrixOffset = (offset * ARRAY_SIZE) and 0xFF
|
||||||
|
|
||||||
@ -47,7 +48,7 @@ class CloudArray(
|
|||||||
matrix[matrixX - 1, matrixZ + 0], // WEST
|
matrix[matrixX - 1, matrixZ + 0], // WEST
|
||||||
matrix[matrixX + 1, matrixZ + 0], // EAST
|
matrix[matrixX + 1, matrixZ + 0], // EAST
|
||||||
)
|
)
|
||||||
mesh.createCloud(start, start + CLOUD_SIZE, layer.height.first, layer.height.last, layer.clouds.flat, cull)
|
mesh.createCloud(start, start + CLOUD_SIZE, offset, layer.height.first, layer.height.last, layer.clouds.flat, cull)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,6 +16,7 @@ package de.bixilon.minosoft.gui.rendering.sky.clouds
|
|||||||
import de.bixilon.kotlinglm.vec2.Vec2
|
import de.bixilon.kotlinglm.vec2.Vec2
|
||||||
import de.bixilon.kotlinglm.vec2.Vec2i
|
import de.bixilon.kotlinglm.vec2.Vec2i
|
||||||
import de.bixilon.kotlinglm.vec3.Vec3
|
import de.bixilon.kotlinglm.vec3.Vec3
|
||||||
|
import de.bixilon.kotlinglm.vec3.Vec3i
|
||||||
import de.bixilon.minosoft.data.direction.Directions
|
import de.bixilon.minosoft.data.direction.Directions
|
||||||
import de.bixilon.minosoft.gui.rendering.RenderContext
|
import de.bixilon.minosoft.gui.rendering.RenderContext
|
||||||
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
|
import de.bixilon.minosoft.gui.rendering.system.base.MeshUtil.buffer
|
||||||
@ -30,9 +31,9 @@ class CloudMesh(context: RenderContext) : Mesh(context, CloudMeshStruct, context
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun createCloud(start: Vec2i, end: Vec2i, yStart: Int, yEnd: Int, flat: Boolean, culling: BooleanArray) {
|
fun createCloud(start: Vec2i, end: Vec2i, offset: Vec3i, yStart: Int, yEnd: Int, flat: Boolean, culling: BooleanArray) {
|
||||||
val start = Vec3(start.x, yStart, start.y) + CLOUD_OFFSET
|
val start = Vec3(start.x - offset.x, yStart - offset.y, start.y - offset.z) + CLOUD_OFFSET
|
||||||
val end = Vec3(end.x, yEnd, end.y) + CLOUD_OFFSET
|
val end = Vec3(end.x - offset.x, yEnd - offset.y, end.y - offset.z) + CLOUD_OFFSET
|
||||||
|
|
||||||
addYQuad(Vec2(start.x, start.z), start.y, Vec2(end.x, end.z)) { position, _ -> addVertex(position, Directions.DOWN) }
|
addYQuad(Vec2(start.x, start.z), start.y, Vec2(end.x, end.z)) { position, _ -> addVertex(position, Directions.DOWN) }
|
||||||
if (!flat) {
|
if (!flat) {
|
||||||
|
@ -113,6 +113,7 @@ class WorldRenderer(
|
|||||||
paused = false
|
paused = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
context.camera.offset::offset.observe(this) { silentlyClearChunkCache() }
|
||||||
|
|
||||||
context.inputHandler.registerKeyCallback("minosoft:clear_chunk_cache".toResourceLocation(), KeyBinding(
|
context.inputHandler.registerKeyCallback("minosoft:clear_chunk_cache".toResourceLocation(), KeyBinding(
|
||||||
KeyActions.MODIFIER to setOf(KeyCodes.KEY_F3),
|
KeyActions.MODIFIER to setOf(KeyCodes.KEY_F3),
|
||||||
|
@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.world.border
|
|||||||
|
|
||||||
import de.bixilon.kotlinglm.func.common.clamp
|
import de.bixilon.kotlinglm.func.common.clamp
|
||||||
import de.bixilon.kotlinglm.vec2.Vec2
|
import de.bixilon.kotlinglm.vec2.Vec2
|
||||||
|
import de.bixilon.kotlinglm.vec2.Vec2d
|
||||||
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
import de.bixilon.kutil.latch.CountUpAndDownLatch
|
||||||
import de.bixilon.kutil.time.TimeUtil.millis
|
import de.bixilon.kutil.time.TimeUtil.millis
|
||||||
import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft
|
import de.bixilon.minosoft.data.registries.identified.Namespaces.minosoft
|
||||||
@ -86,7 +87,8 @@ class WorldBorderRenderer(
|
|||||||
color = color.with(alpha = (strength * strength))
|
color = color.with(alpha = (strength * strength))
|
||||||
shader.tintColor = color
|
shader.tintColor = color
|
||||||
shader.radius = border.diameter.toFloat() / 2.0f
|
shader.radius = border.diameter.toFloat() / 2.0f
|
||||||
shader.center = Vec2(border.center)
|
val offset = context.camera.offset.offset
|
||||||
|
shader.center = Vec2(border.center - Vec2d(offset.x, offset.z))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun drawTranslucent() {
|
override fun drawTranslucent() {
|
||||||
|
@ -32,6 +32,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.RenderSystem
|
|||||||
import de.bixilon.minosoft.gui.rendering.system.base.phases.OpaqueDrawable
|
import de.bixilon.minosoft.gui.rendering.system.base.phases.OpaqueDrawable
|
||||||
import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh
|
import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.blockPosition
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.blockPosition
|
||||||
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.EMPTY
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.chunkPosition
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.chunkPosition
|
||||||
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.sectionHeight
|
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3iUtil.sectionHeight
|
||||||
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection
|
||||||
@ -45,6 +46,7 @@ class ChunkBorderRenderer(
|
|||||||
) : AsyncRenderer, OpaqueDrawable, MeshSwapper {
|
) : AsyncRenderer, OpaqueDrawable, MeshSwapper {
|
||||||
private val profile = connection.profiles.rendering
|
private val profile = connection.profiles.rendering
|
||||||
override val renderSystem: RenderSystem = context.renderSystem
|
override val renderSystem: RenderSystem = context.renderSystem
|
||||||
|
private var offset = Vec3i.EMPTY
|
||||||
private var chunkPosition: Vec2i? = null
|
private var chunkPosition: Vec2i? = null
|
||||||
private var sectionHeight: Int = Int.MIN_VALUE
|
private var sectionHeight: Int = Int.MIN_VALUE
|
||||||
|
|
||||||
@ -77,52 +79,54 @@ class ChunkBorderRenderer(
|
|||||||
val eyePosition = connection.camera.entity.renderInfo.eyePosition.blockPosition
|
val eyePosition = connection.camera.entity.renderInfo.eyePosition.blockPosition
|
||||||
val chunkPosition = eyePosition.chunkPosition
|
val chunkPosition = eyePosition.chunkPosition
|
||||||
val sectionHeight = eyePosition.sectionHeight
|
val sectionHeight = eyePosition.sectionHeight
|
||||||
if (chunkPosition == this.chunkPosition && sectionHeight == this.sectionHeight && mesh != null) {
|
val offset = context.camera.offset.offset
|
||||||
|
if (chunkPosition == this.chunkPosition && sectionHeight == this.sectionHeight && this.offset == offset && mesh != null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
unload = true
|
unload = true
|
||||||
val mesh = LineMesh(context)
|
val mesh = LineMesh(context)
|
||||||
|
|
||||||
val dimension = context.connection.world.dimension
|
val dimension = context.connection.world.dimension
|
||||||
val basePosition = chunkPosition * Vec2i(ProtocolDefinition.SECTION_WIDTH_X, ProtocolDefinition.SECTION_WIDTH_Z)
|
val basePosition = chunkPosition * Vec2i(ProtocolDefinition.SECTION_WIDTH_X, ProtocolDefinition.SECTION_WIDTH_Z) - Vec2i(offset.x, offset.z)
|
||||||
|
|
||||||
mesh.drawInnerChunkLines(basePosition, dimension)
|
mesh.drawInnerChunkLines(Vec3i(basePosition.x, -offset.y, basePosition.y), dimension)
|
||||||
|
|
||||||
if (sectionHeight in dimension.minSection until dimension.maxSection) {
|
if (sectionHeight in dimension.minSection until dimension.maxSection) {
|
||||||
mesh.drawSectionLines(Vec3i(basePosition.x, sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y, basePosition.y))
|
mesh.drawSectionLines(Vec3i(basePosition.x, sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y, basePosition.y))
|
||||||
}
|
}
|
||||||
|
|
||||||
mesh.drawOuterChunkLines(chunkPosition, dimension)
|
mesh.drawOuterChunkLines(chunkPosition, offset, dimension)
|
||||||
|
|
||||||
this.nextMesh = mesh
|
|
||||||
this.chunkPosition = chunkPosition
|
this.chunkPosition = chunkPosition
|
||||||
this.sectionHeight = sectionHeight
|
this.sectionHeight = sectionHeight
|
||||||
|
this.offset = offset
|
||||||
|
this.nextMesh = mesh
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun LineMesh.drawOuterChunkLines(chunkPosition: Vec2i, dimension: DimensionProperties) {
|
private fun LineMesh.drawOuterChunkLines(chunkPosition: Vec2i, offset: Vec3i, dimension: DimensionProperties) {
|
||||||
for (x in -OUTER_CHUNK_SIZE..OUTER_CHUNK_SIZE + 1) {
|
for (x in -OUTER_CHUNK_SIZE..OUTER_CHUNK_SIZE + 1) {
|
||||||
for (z in -OUTER_CHUNK_SIZE..OUTER_CHUNK_SIZE + 1) {
|
for (z in -OUTER_CHUNK_SIZE..OUTER_CHUNK_SIZE + 1) {
|
||||||
if ((x == 0 || x == 1) && (z == 0 || z == 1)) {
|
if ((x == 0 || x == 1) && (z == 0 || z == 1)) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
val chunkBase = (chunkPosition + Vec2i(x, z)) * Vec2i(ProtocolDefinition.SECTION_WIDTH_X, ProtocolDefinition.SECTION_WIDTH_Z)
|
val chunkBase = (chunkPosition + Vec2i(x, z)) * Vec2i(ProtocolDefinition.SECTION_WIDTH_X, ProtocolDefinition.SECTION_WIDTH_Z) - Vec2i(offset.x, offset.z)
|
||||||
drawLine(Vec3(chunkBase.x + 0, dimension.minY, chunkBase.y), Vec3(chunkBase.x + 0, dimension.maxY + 1, chunkBase.y), OUTER_CHUNK_LINE_WIDTH, OUTER_CHUNK_COLOR)
|
drawLine(Vec3(chunkBase.x + 0, dimension.minY - offset.y, chunkBase.y), Vec3(chunkBase.x + 0, dimension.maxY - offset.y + 1, chunkBase.y), OUTER_CHUNK_LINE_WIDTH, OUTER_CHUNK_COLOR)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun LineMesh.drawInnerChunkLines(basePosition: Vec2i, dimension: DimensionProperties) {
|
private fun LineMesh.drawInnerChunkLines(basePosition: Vec3i, dimension: DimensionProperties) {
|
||||||
drawLine(Vec3(basePosition.x + 0, dimension.minY, basePosition.y), Vec3(basePosition.x + 0, dimension.maxY + 1, basePosition.y), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x + 0, basePosition.y + dimension.minY, basePosition.z), Vec3(basePosition.x + 0, basePosition.y + dimension.maxY + 1, basePosition.z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
drawLine(Vec3(basePosition.x, dimension.minY, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x, dimension.maxY + 1, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x, basePosition.y + dimension.minY, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x, basePosition.y + dimension.maxY + 1, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, dimension.minY, basePosition.y + 0), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, dimension.maxY + 1, basePosition.y + 0), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, basePosition.y + dimension.minY, basePosition.z + 0), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, basePosition.y + dimension.maxY + 1, basePosition.z + 0), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, dimension.minY, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, dimension.maxY + 1, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, basePosition.y + dimension.minY, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, basePosition.y + dimension.maxY + 1, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
|
|
||||||
for (sectionHeight in dimension.minSection..dimension.maxSection) {
|
for (sectionHeight in dimension.minSection..dimension.maxSection) {
|
||||||
val y = sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y
|
val y = basePosition.y + sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y
|
||||||
drawLine(Vec3(basePosition.x, y, basePosition.y), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.y), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x, y, basePosition.z), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
drawLine(Vec3(basePosition.x, y, basePosition.y), Vec3(basePosition.x, y, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x, y, basePosition.z), Vec3(basePosition.x, y, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.y), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x, y, basePosition.y + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
drawLine(Vec3(basePosition.x + ProtocolDefinition.SECTION_WIDTH_X, y, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), Vec3(basePosition.x, y, basePosition.z + ProtocolDefinition.SECTION_WIDTH_Z), INNER_CHUNK_LINE_WIDTH, INNER_CHUNK_COLOR)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,6 +68,8 @@ class FluidCullSectionPreparer(
|
|||||||
var rendered = false
|
var rendered = false
|
||||||
var tint: Int
|
var tint: Int
|
||||||
|
|
||||||
|
val cameraOffset = context.camera.offset.offset
|
||||||
|
|
||||||
val offsetX = chunkPosition.x * ProtocolDefinition.SECTION_WIDTH_X
|
val offsetX = chunkPosition.x * ProtocolDefinition.SECTION_WIDTH_X
|
||||||
val offsetY = sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y
|
val offsetY = sectionHeight * ProtocolDefinition.SECTION_HEIGHT_Y
|
||||||
val offsetZ = chunkPosition.y * ProtocolDefinition.SECTION_WIDTH_Z
|
val offsetZ = chunkPosition.y * ProtocolDefinition.SECTION_WIDTH_Z
|
||||||
@ -130,6 +132,8 @@ class FluidCullSectionPreparer(
|
|||||||
getCornerHeight(chunk, chunkPosition, position + Directions.SOUTH, fluid),
|
getCornerHeight(chunk, chunkPosition, position + Directions.SOUTH, fluid),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val offsetPosition = Vec3(position - cameraOffset)
|
||||||
|
|
||||||
if (!skip[Directions.O_UP]) {
|
if (!skip[Directions.O_UP]) {
|
||||||
val velocity = fluid.getVelocity(blockState, position, chunk)
|
val velocity = fluid.getVelocity(blockState, position, chunk)
|
||||||
val still = velocity.x == 0.0 && velocity.z == 0.0
|
val still = velocity.x == 0.0 && velocity.z == 0.0
|
||||||
@ -164,10 +168,10 @@ class FluidCullSectionPreparer(
|
|||||||
val meshToUse = texture.transparency.getMesh(mesh)
|
val meshToUse = texture.transparency.getMesh(mesh)
|
||||||
|
|
||||||
val positions = arrayOf(
|
val positions = arrayOf(
|
||||||
Vec3(position.x, position.y + cornerHeights[0], position.z),
|
Vec3(offsetPosition.x, offsetPosition.y + cornerHeights[0], offsetPosition.z),
|
||||||
Vec3(position.x + 1, position.y + cornerHeights[1], position.z),
|
Vec3(offsetPosition.x + 1, offsetPosition.y + cornerHeights[1], offsetPosition.z),
|
||||||
Vec3(position.x + 1, position.y + cornerHeights[2], position.z + 1),
|
Vec3(offsetPosition.x + 1, offsetPosition.y + cornerHeights[2], offsetPosition.z + 1),
|
||||||
Vec3(position.x, position.y + cornerHeights[3], position.z + 1),
|
Vec3(offsetPosition.x, offsetPosition.y + cornerHeights[3], offsetPosition.z + 1),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -182,9 +186,9 @@ class FluidCullSectionPreparer(
|
|||||||
if (skip[Directions.SIDE_OFFSET + direction]) {
|
if (skip[Directions.SIDE_OFFSET + direction]) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
var faceX = position.x.toFloat()
|
var faceX = offsetPosition.x
|
||||||
var faceXEnd = faceX
|
var faceXEnd = faceX
|
||||||
var faceZ = position.z.toFloat()
|
var faceZ = offsetPosition.z
|
||||||
var faceZEnd = faceZ
|
var faceZEnd = faceZ
|
||||||
var v1 = 0.0f
|
var v1 = 0.0f
|
||||||
var v2 = 0.0f
|
var v2 = 0.0f
|
||||||
@ -222,10 +226,10 @@ class FluidCullSectionPreparer(
|
|||||||
|
|
||||||
|
|
||||||
val positions = arrayOf(
|
val positions = arrayOf(
|
||||||
Vec3(faceX, position.y + v1, faceZ),
|
Vec3(faceX, offsetPosition.y + v1, faceZ),
|
||||||
Vec3(faceX, position.y, faceZ),
|
Vec3(faceX, offsetPosition.y, faceZ),
|
||||||
Vec3(faceXEnd, position.y, faceZEnd),
|
Vec3(faceXEnd, offsetPosition.y, faceZEnd),
|
||||||
Vec3(faceXEnd, position.y + v2, faceZEnd),
|
Vec3(faceXEnd, offsetPosition.y + v2, faceZEnd),
|
||||||
)
|
)
|
||||||
val texturePositions = arrayOf(
|
val texturePositions = arrayOf(
|
||||||
TEXTURE_1,
|
TEXTURE_1,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user