Ещё больше прибираемся

This commit is contained in:
DBotThePony 2022-12-30 12:36:07 +07:00
parent d8c1d9dab8
commit 819d188e2a
Signed by: DBot
GPG Key ID: DCC23B5715498507
4 changed files with 23 additions and 15 deletions

View File

@ -10,7 +10,7 @@ import ru.dbotthepony.kstarbound.client.gl.vertex.StatefulVertexBuilder
import ru.dbotthepony.kstarbound.client.gl.vertex.quad
import ru.dbotthepony.kstarbound.client.gl.vertex.shadowLine
import ru.dbotthepony.kstarbound.client.render.ConfiguredStaticMesh
import ru.dbotthepony.kstarbound.client.render.EntityRenderer
import ru.dbotthepony.kstarbound.client.render.entity.EntityRenderer
import ru.dbotthepony.kstarbound.client.render.ILayeredRenderer
import ru.dbotthepony.kstarbound.client.render.GPULightRenderer
import ru.dbotthepony.kstarbound.client.render.TileLayerList

View File

@ -1,5 +1,6 @@
package ru.dbotthepony.kstarbound.client.render.entity
import it.unimi.dsi.fastutil.objects.Reference2ObjectOpenHashMap
import ru.dbotthepony.kstarbound.client.ClientChunk
import ru.dbotthepony.kstarbound.client.gl.GLStateTracker
import ru.dbotthepony.kstarbound.client.render.entity.ItemRenderer
@ -11,12 +12,6 @@ import ru.dbotthepony.kvector.matrix.Matrix4fStack
import ru.dbotthepony.kvector.vector.ndouble.Vector2d
import java.io.Closeable
/**
* Pseudo Z position for entities, for them to appear behind tile geometry,
* but in front of background walls geometry
*/
const val Z_LEVEL_ENTITIES = 30000
/**
* Базовый класс, отвечающий за отрисовку определённого ентити в мире
*
@ -35,19 +30,34 @@ open class EntityRenderer(val state: GLStateTracker, val entity: Entity, open va
}
}
open val layer: Int = Z_LEVEL_ENTITIES
open val layer: Int get() = Z_LEVEL_ENTITIES
override fun close() {
}
companion object {
/**
* Pseudo Z position for entities, for them to appear behind tile geometry,
* but in front of background walls geometry
*/
const val Z_LEVEL_ENTITIES = 30000
private val renderers = Reference2ObjectOpenHashMap<Class<*>, (state: GLStateTracker, entity: Entity, chunk: ClientChunk?) -> EntityRenderer>()
@Suppress("unchecked_cast")
fun <T : Entity> registerRenderer(clazz: Class<T>, renderer: (state: GLStateTracker, entity: T, chunk: ClientChunk?) -> EntityRenderer) {
check(renderers.put(clazz, renderer as (state: GLStateTracker, entity: Entity, chunk: ClientChunk?) -> EntityRenderer) == null) { "Already has renderer for ${clazz.canonicalName}!" }
}
fun getRender(state: GLStateTracker, entity: Entity, chunk: ClientChunk? = null): EntityRenderer {
return when (entity) {
is Projectile -> ProjectileRenderer(state, entity, chunk)
is ItemEntity -> ItemRenderer(state, entity, chunk)
else -> EntityRenderer(state, entity, chunk)
}
val factory = renderers[entity::class.java] ?: return EntityRenderer(state, entity, chunk)
return factory.invoke(state, entity, chunk)
}
init {
registerRenderer(Projectile::class.java, ::ProjectileRenderer)
registerRenderer(ItemEntity::class.java, ::ItemRenderer)
}
}
}

View File

@ -6,7 +6,6 @@ import ru.dbotthepony.kstarbound.client.ClientChunk
import ru.dbotthepony.kstarbound.client.gl.GLStateTracker
import ru.dbotthepony.kstarbound.client.gl.vertex.QuadTransformers
import ru.dbotthepony.kstarbound.client.gl.vertex.quadRotatedZ
import ru.dbotthepony.kstarbound.client.render.EntityRenderer
import ru.dbotthepony.kstarbound.world.entities.ItemEntity
import ru.dbotthepony.kvector.matrix.Matrix4fStack

View File

@ -5,7 +5,6 @@ import ru.dbotthepony.kstarbound.client.ClientChunk
import ru.dbotthepony.kstarbound.client.gl.GLStateTracker
import ru.dbotthepony.kstarbound.client.gl.vertex.QuadTransformers
import ru.dbotthepony.kstarbound.client.gl.vertex.quadRotatedZ
import ru.dbotthepony.kstarbound.client.render.EntityRenderer
import ru.dbotthepony.kstarbound.client.render.FrameSetAnimator
import ru.dbotthepony.kstarbound.world.entities.projectile.Projectile
import ru.dbotthepony.kvector.matrix.Matrix4fStack