dynamic player model

This commit is contained in:
Moritz Zwerger 2023-10-27 09:42:48 +02:00
parent 799acf8b17
commit 61f54dacb9
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 26 additions and 14 deletions

View File

@ -27,7 +27,7 @@ open class SkeletalFeature(
renderer: EntityRenderer<*>,
val instance: SkeletalInstance,
) : EntityRenderFeature(renderer) {
private val manager = renderer.renderer.context.skeletal
protected val manager = renderer.renderer.context.skeletal
protected open val shader: SkeletalShader = manager.shader
protected var position = Vec3d.EMPTY

View File

@ -13,7 +13,22 @@
package de.bixilon.minosoft.gui.rendering.entities.model.biped
import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
import de.bixilon.minosoft.gui.rendering.skeletal.mesh.SkeletalMesh
open class PlayerModel(renderer: EntityRenderer<*>, model: BakedSkeletalModel) : BipedModel(renderer, model)
open class PlayerModel(renderer: EntityRenderer<*>, model: BakedSkeletalModel) : BipedModel(renderer, model) {
private var mesh = model.mesh
fun updateMesh(mesh: SkeletalMesh) {
this.mesh = mesh
}
override fun draw() {
manager.context.system.reset(faceCulling = renderer.entity is LocalPlayerEntity)
shader.use()
manager.upload(instance)
mesh.draw()
}
}

View File

@ -20,6 +20,6 @@ import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer
open class LocalPlayerRenderer(renderer: EntitiesRenderer, entity: LocalPlayerEntity) : PlayerRenderer<LocalPlayerEntity>(renderer, entity) {
init {
renderer.context.camera.view::view.observe(this, instant = true) { hitbox.enabled = it.renderSelf }
renderer.context.camera.view::view.observe(this, instant = true) { hitbox.enabled = it.renderSelf; model.enabled = it.renderSelf }
}
}

View File

@ -29,6 +29,7 @@ import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
import java.util.*
open class PlayerRenderer<E : PlayerEntity>(renderer: EntitiesRenderer, entity: E) : EntityRenderer<E>(renderer, entity) {
protected val model = PlayerModel(this, getModel())
private var properties: PlayerProperties? = null
private var registered = false
@ -42,11 +43,11 @@ open class PlayerRenderer<E : PlayerEntity>(renderer: EntitiesRenderer, entity:
if (registered) return
val update = updateProperties()
val model = getModel() ?: return
val model = getModel()
this.registered = true
this.features += PlayerModel(this, model)
this.features += this.model
}
private fun updateProperties(): Boolean {
@ -59,7 +60,8 @@ open class PlayerRenderer<E : PlayerEntity>(renderer: EntitiesRenderer, entity:
}
open fun getSkin(): PlayerSkin? {
return renderer.context.textures.skins.default[UUID.randomUUID()] // TODO
val skins = renderer.context.textures.skins
return skins.default[UUID.randomUUID()]
// val properties = this.properties?.textures?.skin
// if(properties == null){
// return renderer.context.textures.skins.getSkin(entity, properties, )
@ -67,18 +69,13 @@ open class PlayerRenderer<E : PlayerEntity>(renderer: EntitiesRenderer, entity:
}
open fun getModel(): BakedSkeletalModel? {
val skin = getSkin() ?: return null
private fun getModel(): BakedSkeletalModel {
val skin = getSkin() ?: throw IllegalArgumentException("")
val name = when (skin.model) {
SkinModel.WIDE -> WIDE
SkinModel.SLIM -> SLIM
}
return renderer.context.models.skeletal[name]
val properties = this.properties
val model = properties?.textures?.skin?.metadata?.model ?: SkinModel.WIDE // TODO: failover according
return renderer.context.models.skeletal[name]!!
}