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<*>, renderer: EntityRenderer<*>,
val instance: SkeletalInstance, val instance: SkeletalInstance,
) : EntityRenderFeature(renderer) { ) : EntityRenderFeature(renderer) {
private val manager = renderer.renderer.context.skeletal protected val manager = renderer.renderer.context.skeletal
protected open val shader: SkeletalShader = manager.shader protected open val shader: SkeletalShader = manager.shader
protected var position = Vec3d.EMPTY protected var position = Vec3d.EMPTY

View File

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