generic skeletal head animator

This commit is contained in:
Moritz Zwerger 2023-11-09 09:57:02 +01:00
parent d54c5ff57f
commit f8285711af
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
4 changed files with 19 additions and 9 deletions

View File

@ -14,9 +14,15 @@
package de.bixilon.minosoft.gui.rendering.entities.model.animal
import de.bixilon.minosoft.gui.rendering.entities.feature.SkeletalFeature
import de.bixilon.minosoft.gui.rendering.entities.model.animator.HeadAnimator
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
class AnimalModel<R : EntityRenderer<*>>(renderer: R, model: BakedSkeletalModel) : SkeletalFeature(renderer, model) {
// TODO: animate head
val head = instance.transform["head"]?.let { HeadAnimator(renderer, it) }
override fun updatePosition() {
super.updatePosition()
head?.update()
}
}

View File

@ -11,28 +11,28 @@
* This software is not affiliated with Mojang AB, the original developer of Minecraft.
*/
package de.bixilon.minosoft.gui.rendering.entities.model.human.animator
package de.bixilon.minosoft.gui.rendering.entities.model.animator
import de.bixilon.kotlinglm.func.rad
import de.bixilon.kotlinglm.vec3.Vec3
import de.bixilon.minosoft.gui.rendering.entities.easteregg.EntityEasterEggs.isFlipped
import de.bixilon.minosoft.gui.rendering.entities.model.human.HumanModel
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
import de.bixilon.minosoft.gui.rendering.skeletal.instance.TransformInstance
import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateRadAssign
import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3Util.EMPTY
class HumanHeadAnimator(
val model: HumanModel<*>,
class HeadAnimator(
val renderer: EntityRenderer<*>,
val transform: TransformInstance,
) {
private var rotation = Vec3.EMPTY
fun update() {
val info = model.renderer.info
val info = renderer.info
val pitch = info.rotation.pitch
this.rotation.x = pitch.rad
if (model.renderer.entity.isFlipped()) {
if (renderer.entity.isFlipped()) {
this.rotation.x = -this.rotation.x // TODO: not 100% correct
}
transform.value

View File

@ -14,15 +14,15 @@
package de.bixilon.minosoft.gui.rendering.entities.model.human
import de.bixilon.minosoft.gui.rendering.entities.feature.SkeletalFeature
import de.bixilon.minosoft.gui.rendering.entities.model.animator.HeadAnimator
import de.bixilon.minosoft.gui.rendering.entities.model.human.animator.ArmAnimator
import de.bixilon.minosoft.gui.rendering.entities.model.human.animator.HumanHeadAnimator
import de.bixilon.minosoft.gui.rendering.entities.model.human.animator.LegAnimator
import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer
import de.bixilon.minosoft.gui.rendering.entities.util.EntitySpeed
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel
abstract class HumanModel<R : EntityRenderer<*>>(renderer: R, model: BakedSkeletalModel) : SkeletalFeature(renderer, model) {
val head = instance.transform.children["head"]?.let { HumanHeadAnimator(this, it) }
val head = instance.transform.children["head"]?.let { HeadAnimator(renderer, it) }
val leg = LegAnimator(this, instance.transform.children["left_leg"]!!, instance.transform.children["right_leg"]!!)
val arm = ArmAnimator(this, instance.transform.children["left_arm"]!!, instance.transform.children["right_arm"]!!)

View File

@ -46,4 +46,8 @@ class TransformInstance(
child.pack(buffer, temp, temp)
}
}
operator fun get(name: String): TransformInstance? {
return this.children[name]
}
}