From d4361e20b8c38d301e83a15bd2a375e3f530773b Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Mon, 30 Oct 2023 22:05:07 +0100 Subject: [PATCH] fix flip easter egg --- .../gui/rendering/entities/easteregg/EntityEasterEggs.kt | 4 +++- .../gui/rendering/entities/feature/SkeletalFeature.kt | 7 +++++-- .../entities/model/human/animator/HeadPosition.kt | 4 ++++ .../gui/rendering/entities/renderer/EntityRenderer.kt | 6 ++++-- .../gui/rendering/skeletal/instance/SkeletalInstance.kt | 7 ++++--- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt index 1d91e683e..30f37f036 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt @@ -21,9 +21,11 @@ import de.bixilon.minosoft.data.entities.entities.player.SkinParts object EntityEasterEggs { private val FLIPPED = setOf("Dinnerbone", "Grumm") - val FLIP_ROTATION = Vec3(0.0f, 0.0f, 180.0f.rad) + val FLIP_ROTATION = Vec3(0, 0.0f, 180.0f.rad) + const val FLIP_ENABLED = true fun Entity.isFlipped(): Boolean { + if (!FLIP_ENABLED) return false var name = this.customName?.message if (name == null && this is PlayerEntity) { name = additional.name diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/SkeletalFeature.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/SkeletalFeature.kt index ac8539446..12093fe30 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/SkeletalFeature.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/SkeletalFeature.kt @@ -17,6 +17,7 @@ import de.bixilon.kotlinglm.func.rad import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.kotlinglm.vec3.Vec3d import de.bixilon.minosoft.data.entities.EntityRotation +import de.bixilon.minosoft.gui.rendering.entities.easteregg.EntityEasterEggs.isFlipped 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.instance.SkeletalInstance @@ -36,7 +37,7 @@ open class SkeletalFeature( protected open fun updatePosition() { val renderInfo = renderer.info - val yaw = renderInfo.rotation.yaw + var yaw = renderInfo.rotation.yaw val position = renderInfo.position var changes = 0 @@ -49,7 +50,9 @@ open class SkeletalFeature( this.yaw = yaw } if (changes == 0) return - + if (renderer.entity.isFlipped()) { + yaw *= -1.0f + } val rotation = Vec3(0.0f, (EntityRotation.HALF_CIRCLE_DEGREE - yaw).rad, 0.0f) instance.update(rotation, renderer.matrix) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/HeadPosition.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/HeadPosition.kt index 8fa0e8a70..56bef10ed 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/HeadPosition.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/HeadPosition.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.entities.model.human.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.skeletal.instance.TransformInstance import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateRadAssign @@ -31,6 +32,9 @@ class HeadPosition( val pitch = info.rotation.pitch this.rotation.x = -pitch.rad + if (model.renderer.entity.isFlipped()) { + this.rotation.x = -this.rotation.x // TODO: not 100% correct + } transform.value .translateAssign(transform.pivot) .rotateRadAssign(this.rotation) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt index 39f375b78..28f5a001d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt @@ -25,7 +25,7 @@ import de.bixilon.minosoft.gui.rendering.entities.feature.EntityRenderFeature import de.bixilon.minosoft.gui.rendering.entities.feature.FeatureManager import de.bixilon.minosoft.gui.rendering.entities.hitbox.HitboxFeature import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.reset -import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateDegreesAssign +import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateRadAssign import de.bixilon.minosoft.util.interpolate.Interpolator abstract class EntityRenderer( @@ -53,7 +53,9 @@ abstract class EntityRenderer( matrix.translateAssign(position) if (entity.isFlipped()) { - matrix.rotateDegreesAssign(FLIP_ROTATION) + matrix + .translateAssign(Vec3(0.0f, entity.dimensions.y + 0.2f, 0.0f)) + .rotateRadAssign(FLIP_ROTATION) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt index 3081be95a..4660f5dc3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/instance/SkeletalInstance.kt @@ -60,14 +60,15 @@ class SkeletalInstance( fun update(position: Vec3, rotation: Vec3, pivot: Vec3 = Vec3.EMPTY_INSTANCE, matrix: Mat4? = null) { this.matrix.reset() - if (matrix != null) { - this.matrix = this.matrix * matrix - } this.matrix .translateAssign(position) .translateAssign(pivot) .rotateRadAssign(rotation) .translateAssign(-pivot) + + if (matrix != null) { + this.matrix = matrix * this.matrix + } } fun update(rotation: Vec3, matrix: Mat4? = null) {