This commit is contained in:
Moritz Zwerger 2023-10-30 19:58:02 +01:00
parent 520a02b77b
commit f255d5278d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
11 changed files with 38 additions and 11 deletions

View File

@ -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

View File

@ -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<R : EntityRenderer<*>>(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)

View File

@ -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<*>,

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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<E : Entity>(
matrix.translateAssign(position)
if (entity.isFlipped()) {
matrix.rotateDegreesAssign(Vec3(180.0f, 0.0f, 0.0f)) // TODO: verify
matrix.rotateDegreesAssign(FLIP_ROTATION)
}
}

View File

@ -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)
}
}

View File

@ -19,5 +19,5 @@ import de.bixilon.minosoft.gui.rendering.system.base.shader.NativeShader
interface AbstractShader {
val native: NativeShader
fun <T> uniform(name: String, default: T, type: ShaderSetter<T> = NativeShader::set): ShaderUniform<T>
fun <T> uniform(name: String, default: T, type: ShaderSetter<T> = ShaderSetter { shader, name, value -> shader[name] = value }): ShaderUniform<T>
}

View File

@ -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<String, ShaderUniform<*>> = mutableMapOf()

View File

@ -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")
}
}
}

View File

@ -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)