diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/EntityRenderFeature.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/EntityRenderFeature.kt index ab2514505..49715e39a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/EntityRenderFeature.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/EntityRenderFeature.kt @@ -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) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxFeature.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxFeature.kt index 20854da11..bcadf3e96 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxFeature.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxFeature.kt @@ -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() } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt index 5136afccc..a9a5b9897 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt @@ -26,6 +26,7 @@ abstract class EntityRenderer( ) { val features = FeatureManager(this) val visibility = EntityVisibility(this) + val info = entity.renderInfo val hitbox = HitboxFeature(this).register()