wip hitbox rendering

This commit is contained in:
Moritz Zwerger 2023-10-24 11:23:15 +02:00
parent 725d569016
commit 0e094609ed
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 33 additions and 2 deletions

View File

@ -33,7 +33,12 @@ abstract class EntityRenderFeature(val renderer: EntityRenderer<*>) : Comparable
abstract fun draw()
open fun compareByDistance(other: EntityRenderFeature): Int = 0
open fun compareByDistance(other: EntityRenderFeature): Int {
// TODO: optimize, cache
val a = (renderer.info.eyePosition - renderer.renderer.context.camera.view.view.eyePosition).length2()
val b = (renderer.info.eyePosition - renderer.renderer.context.camera.view.view.eyePosition).length2()
return a.compareTo(b)
}
override fun compareTo(other: EntityRenderFeature): Int {
var compare = priority.compareTo(other.priority)

View File

@ -13,12 +13,37 @@
package de.bixilon.minosoft.gui.rendering.entities.hitbox
import de.bixilon.minosoft.data.text.formatting.color.ChatColors
import de.bixilon.minosoft.gui.rendering.entities.feature.EntityRenderFeature
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
import de.bixilon.minosoft.gui.rendering.util.mesh.LineMesh
import de.bixilon.minosoft.gui.rendering.util.mesh.Mesh
class HitboxFeature(renderer: EntityRenderer<*>) : EntityRenderFeature(renderer) {
private val shader = renderer.renderer.context.shaders.genericColorShader
private var mesh: LineMesh? = null
override fun reset() {
unload()
}
override fun update(millis: Long) {
unload()
val mesh = LineMesh(renderer.renderer.context)
mesh.drawLazyAABB(renderer.entity.renderInfo.cameraAABB, renderer.entity.hitboxColor ?: ChatColors.WHITE)
}
override fun draw() {
TODO("Not yet implemented")
val mesh = this.mesh ?: return
if (mesh.state != Mesh.MeshStates.LOADED) mesh.load()
shader.use()
mesh.draw()
}
override fun unload() {
val mesh = this.mesh ?: return
this.mesh = null
renderer.renderer.queue += { mesh.unload() }
}
}

View File

@ -26,6 +26,7 @@ abstract class EntityRenderer<E : Entity>(
) {
val features = FeatureManager(this)
val visibility = EntityVisibility(this)
val info = entity.renderInfo
val hitbox = HitboxFeature(this).register()