mirror of
https://gitlab.bixilon.de/bixilon/minosoft.git
synced 2025-09-17 03:15:35 -04:00
arm: improvements to screen ratio and left arm
This commit is contained in:
parent
f59fb270db
commit
d209181ea8
@ -26,7 +26,6 @@ import de.bixilon.minosoft.gui.rendering.entity.models.minecraft.player.PlayerMo
|
||||
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.skeletal.baked.BakedSkeletalModel.Companion.fromBlockCoordinates
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.baked.BakedSkeletalModel.Companion.toBlockCoordinate
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.IntegratedBufferTypes
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities
|
||||
import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin
|
||||
@ -78,18 +77,22 @@ class ArmOverlay(private val renderWindow: RenderWindow) : Overlay {
|
||||
|
||||
private fun calculateTransform(): Mat4 {
|
||||
val screen = renderWindow.window.sizef
|
||||
val projection = GLM.perspective(60.0f.rad, screen.x / screen.y, CameraDefinition.NEAR_PLANE, CameraDefinition.FAR_PLANE)
|
||||
val aspect = screen.x / screen.y
|
||||
val projection = GLM.perspective(60.0f.rad, aspect, CameraDefinition.NEAR_PLANE, CameraDefinition.FAR_PLANE)
|
||||
|
||||
val model = this.model ?: return Mat4()
|
||||
val outliner = model.instance?.model?.model?.outliner?.find { it.name == if (arm == Arms.LEFT) "LEFT_ARM" else "RIGHT_ARM" } ?: return Mat4()
|
||||
outliner.origin.z = 15.0f.toBlockCoordinate()
|
||||
|
||||
val matrix = FirstPersonArmAnimator(model).calculateTransform(outliner, 0.0f)
|
||||
val screenMatrix = Mat4()
|
||||
|
||||
screenMatrix.translateAssign(Vec3(if (arm == Arms.LEFT) -0.2f else 0.2f, 0, 0)) // move inner side of arm to 0|0|0
|
||||
val translation = Vec3(if (arm == Arms.LEFT) -0.10f else 0.25f, 0, 0)
|
||||
if (aspect > 1.7f) {
|
||||
translation.x *= aspect * 2
|
||||
}
|
||||
screenMatrix.translateAssign(translation) // move inner side of arm to 0|0|0
|
||||
|
||||
screenMatrix.translateAssign(Vec3(-18, -55, -10).fromBlockCoordinates())
|
||||
screenMatrix.translateAssign(Vec3(if (arm == Arms.LEFT) -15 else -18, -55, -10).fromBlockCoordinates())
|
||||
|
||||
return projection * screenMatrix * matrix
|
||||
}
|
||||
|
@ -14,6 +14,7 @@
|
||||
package de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.overlays.arm
|
||||
|
||||
import de.bixilon.kotlinglm.vec3.Vec3
|
||||
import de.bixilon.minosoft.data.entities.entities.player.Arms
|
||||
import de.bixilon.minosoft.gui.rendering.entity.models.minecraft.player.PlayerModel
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.AnimationLoops
|
||||
import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.SkeletalAnimation
|
||||
@ -31,6 +32,9 @@ class FirstPersonArmAnimator(private val player: PlayerModel) : SkeletalAnimatio
|
||||
if (channel != KeyframeChannels.ROTATION) {
|
||||
return null
|
||||
}
|
||||
if (player.entity.mainArm == Arms.LEFT) {
|
||||
return Vec3(120, 20, 0)
|
||||
}
|
||||
return Vec3(120, -20, -10)
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user