arm overlay: use new skin system

This commit is contained in:
Bixilon 2022-12-09 09:22:40 +01:00
parent 7a8cec05d1
commit 2e5a4c1b03
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -27,7 +27,7 @@ import de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.Overlay
import de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.OverlayFactory import de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.OverlayFactory
import de.bixilon.minosoft.gui.rendering.models.unbaked.element.UnbakedElement.Companion.BLOCK_RESOLUTION import de.bixilon.minosoft.gui.rendering.models.unbaked.element.UnbakedElement.Companion.BLOCK_RESOLUTION
import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities
import de.bixilon.minosoft.gui.rendering.system.base.texture.dynamic.DynamicTexture import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
import de.bixilon.minosoft.util.KUtil.minosoft import de.bixilon.minosoft.util.KUtil.minosoft
class ArmOverlay(private val renderWindow: RenderWindow) : Overlay { class ArmOverlay(private val renderWindow: RenderWindow) : Overlay {
@ -36,7 +36,7 @@ class ArmOverlay(private val renderWindow: RenderWindow) : Overlay {
override val render: Boolean override val render: Boolean
get() = renderWindow.camera.view.view.renderArm && config.arm.render get() = renderWindow.camera.view.view.renderArm && config.arm.render
private var arm = renderWindow.connection.player.mainArm // TODO: camera player entity private var arm = renderWindow.connection.player.mainArm // TODO: camera player entity
private var skin: DynamicTexture? = null private var skin: PlayerSkin? = null
private var model: PlayerModel? = null private var model: PlayerModel? = null
private var mesh: ArmMesh = unsafeNull() private var mesh: ArmMesh = unsafeNull()
private var animator: ArmAnimator? = null private var animator: ArmAnimator? = null
@ -50,8 +50,11 @@ class ArmOverlay(private val renderWindow: RenderWindow) : Overlay {
private fun updateMesh() { private fun updateMesh() {
this.mesh = ArmMesh(renderWindow) this.mesh = ArmMesh(renderWindow)
val skin = this.skin ?: renderWindow.textureManager.steveTexture val skin = this.skin
this.model?.instance?.model?.model?.let { this.mesh.addArm(it, arm, skin) } val model = this.model?.instance?.model?.model
if (model != null && skin != null) {
this.mesh.addArm(model, arm, skin.texture)
}
this.mesh.load() this.mesh.load()
} }
@ -66,12 +69,12 @@ class ArmOverlay(private val renderWindow: RenderWindow) : Overlay {
val model = renderWindow.connection.player.model.nullCast<PlayerModel>() val model = renderWindow.connection.player.model.nullCast<PlayerModel>()
this.model = model this.model = model
this.animator = model?.let { ArmAnimator(it) } this.animator = model?.let { ArmAnimator(it) }
val skin = model?.skin val skin = model?.skin ?: return
if (this.skin == skin) { if (this.skin == skin) {
return return
} }
this.skin?.usages?.decrementAndGet() this.skin?.texture?.usages?.decrementAndGet()
skin?.usages?.incrementAndGet() skin.texture.usages.incrementAndGet()
this.skin = skin this.skin = skin
} }
@ -109,7 +112,7 @@ class ArmOverlay(private val renderWindow: RenderWindow) : Overlay {
updateMesh() updateMesh()
shader.use() shader.use()
shader.transform = calculateTransform() shader.transform = calculateTransform()
shader.textureIndexLayer = skin.shaderId shader.textureIndexLayer = skin.texture.shaderId
mesh.draw() mesh.draw()
} }