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 063621956..1d91e683e 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 @@ -13,12 +13,15 @@ package de.bixilon.minosoft.gui.rendering.entities.easteregg +import de.bixilon.kotlinglm.func.rad +import de.bixilon.kotlinglm.vec3.Vec3 import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity 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) fun Entity.isFlipped(): Boolean { var name = this.customName?.message diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/HumanModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/HumanModel.kt index 8765f4031..be108e7be 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/HumanModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/HumanModel.kt @@ -13,6 +13,8 @@ package de.bixilon.minosoft.gui.rendering.entities.model.human +import de.bixilon.minosoft.data.entities.Poses +import de.bixilon.minosoft.data.entities.entities.LivingEntity import de.bixilon.minosoft.gui.rendering.entities.feature.SkeletalFeature import de.bixilon.minosoft.gui.rendering.entities.model.human.animator.ArmAnimator import de.bixilon.minosoft.gui.rendering.entities.model.human.animator.HeadPosition @@ -27,12 +29,18 @@ abstract class HumanModel>(renderer: R, model: BakedSkelet val arm = ArmAnimator(this, instance.transform.children["left_arm"]!!, instance.transform.children["right_arm"]!!) val speed = EntitySpeed(renderer.entity) - + var pose = Poses.STANDING override fun updatePosition() { super.updatePosition() head?.update() } + fun updatePose() { + val entity =renderer.entity + if(entity !is LivingEntity) return + val pose = entity.pose ?: return + } + override fun update(millis: Long, delta: Float) { speed.update(delta) super.update(millis, delta) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/PlayerModel.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/PlayerModel.kt index 2e3b4c2af..4e426440a 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/PlayerModel.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/PlayerModel.kt @@ -18,6 +18,7 @@ import de.bixilon.kutil.observer.set.SetObserver.Companion.observeSet import de.bixilon.minosoft.data.entities.entities.player.SkinParts.Companion.pack import de.bixilon.minosoft.gui.rendering.entities.renderer.player.PlayerRenderer import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel +import de.bixilon.minosoft.gui.rendering.system.base.DepthFunctions open class PlayerModel( renderer: PlayerRenderer<*>, diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/ArmAnimator.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/ArmAnimator.kt index 0f84be436..2ee919faf 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/ArmAnimator.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/ArmAnimator.kt @@ -13,12 +13,14 @@ 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.kutil.math.MathConstants.PIf import de.bixilon.kutil.math.interpolation.FloatInterpolation.interpolateLinear 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.rotateDegreesAssign +import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateXAssign import kotlin.math.sin class ArmAnimator( @@ -45,13 +47,15 @@ class ArmAnimator( if (this.maxAngle == 0.0f) return val progress = sin((progress - 1.0f) * PIf) * this.maxAngle + val rad = progress.rad + left.value .translateAssign(left.pivot) - .rotateDegreesAssign(Vec3(progress, 0.0f, 0.0f)) + .rotateXAssign(rad) .translateAssign(left.nPivot) right.value .translateAssign(left.pivot) - .rotateDegreesAssign(Vec3(-progress, 0.0f, 0.0f)) + .rotateXAssign(-rad) .translateAssign(left.nPivot) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/LegAnimator.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/LegAnimator.kt index 9c332b6fe..aee8eceeb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/LegAnimator.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/model/human/animator/LegAnimator.kt @@ -13,12 +13,14 @@ 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.kutil.math.MathConstants.PIf import de.bixilon.kutil.math.interpolation.FloatInterpolation.interpolateLinear 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.rotateDegreesAssign +import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateXAssign import kotlin.math.sin class LegAnimator( @@ -45,13 +47,14 @@ class LegAnimator( if (this.maxAngle == 0.0f) return val progress = sin((progress - 1.0f) * PIf) * this.maxAngle + val rad = progress.rad left.value .translateAssign(left.pivot) - .rotateDegreesAssign(Vec3(-progress, 0.0f, 0.0f)) + .rotateXAssign(-rad) .translateAssign(left.nPivot) right.value .translateAssign(left.pivot) - .rotateDegreesAssign(Vec3(progress, 0.0f, 0.0f)) + .rotateXAssign(rad) .translateAssign(left.nPivot) } 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 7a93cfa20..39f375b78 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 @@ -19,6 +19,7 @@ import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.ColorUtil import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer +import de.bixilon.minosoft.gui.rendering.entities.easteregg.EntityEasterEggs.FLIP_ROTATION import de.bixilon.minosoft.gui.rendering.entities.easteregg.EntityEasterEggs.isFlipped import de.bixilon.minosoft.gui.rendering.entities.feature.EntityRenderFeature import de.bixilon.minosoft.gui.rendering.entities.feature.FeatureManager @@ -52,7 +53,7 @@ abstract class EntityRenderer( matrix.translateAssign(position) if (entity.isFlipped()) { - matrix.rotateDegreesAssign(Vec3(180.0f, 0.0f, 0.0f)) // TODO: verify + matrix.rotateDegreesAssign(FLIP_ROTATION) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/util/EntitySpeed.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/util/EntitySpeed.kt index ea372543e..8052f28eb 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/util/EntitySpeed.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/util/EntitySpeed.kt @@ -53,7 +53,7 @@ class EntitySpeed(val entity: Entity) { } private companion object { - const val TIME = 0.2f + const val TIME = 0.15f const val TIME_RATIO = TIME / (ProtocolDefinition.TICK_TIMEf / 1000.0f) } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/AbstractShader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/AbstractShader.kt index 1d0be6069..44414c5d7 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/AbstractShader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/AbstractShader.kt @@ -19,5 +19,5 @@ import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader interface AbstractShader { val native: NativeShader - fun uniform(name: String, default: T, type: ShaderSetter = NativeShader::set): ShaderUniform + fun uniform(name: String, default: T, type: ShaderSetter = ShaderSetter { shader, name, value -> shader[name] = value }): ShaderUniform } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt index c90661dad..585b11e94 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/shader/Shader.kt @@ -15,6 +15,7 @@ package de.bixilon.minosoft.gui.rendering.shader import de.bixilon.minosoft.gui.rendering.shader.types.TransparentShader import de.bixilon.minosoft.gui.rendering.shader.uniform.ShaderUniform +import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader abstract class Shader : AbstractShader { private val uniforms: MutableMap> = mutableMapOf() diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/elements/SkeletalElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/elements/SkeletalElement.kt index 4bad0699d..1e757b6c4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/elements/SkeletalElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/skeletal/model/elements/SkeletalElement.kt @@ -48,13 +48,13 @@ data class SkeletalElement( private fun bake(context: SkeletalBakeContext, path: String) { val context = context.copy(this) - for ((name, child) in children) { - child.bake(context, "$path.$name") - } val transform = context.transform.id for ((direction, face) in faces) { face.bake(context, direction, this, transform, path) } + for ((name, child) in children) { + child.bake(context, "$path.$name") + } } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mat/mat4/Mat4Util.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mat/mat4/Mat4Util.kt index df9d941e6..8b8403644 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/util/mat/mat4/Mat4Util.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/util/mat/mat4/Mat4Util.kt @@ -54,6 +54,12 @@ object Mat4Util { System.arraycopy(empty.array, 0, array, 0, Mat4.length) } + fun Mat4.rotateXAssign(rad:Float): Mat4 { + rotateX(this, rad) + + return this + } + fun rotateX(m: Mat4, angle: Float) { val c = GLM.cos(angle) val s = GLM.sin(angle)