mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-13 17:37:58 -04:00
dynamic player model
This commit is contained in:
parent
799acf8b17
commit
61f54dacb9
@ -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
|
||||
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
@ -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 }
|
||||
}
|
||||
}
|
||||
|
@ -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]!!
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user