arm: improvements to screen ratio and left arm

This commit is contained in:
Bixilon 2022-12-14 16:00:55 +01:00
parent f59fb270db
commit d209181ea8
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 12 additions and 5 deletions

View File

@ -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.Overlay
import de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.OverlayFactory 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.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.IntegratedBufferTypes
import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities import de.bixilon.minosoft.gui.rendering.system.base.RenderingCapabilities
import de.bixilon.minosoft.gui.rendering.system.base.texture.skin.PlayerSkin 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 { private fun calculateTransform(): Mat4 {
val screen = renderWindow.window.sizef 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 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() 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 matrix = FirstPersonArmAnimator(model).calculateTransform(outliner, 0.0f)
val screenMatrix = Mat4() 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 return projection * screenMatrix * matrix
} }

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.overlays.arm package de.bixilon.minosoft.gui.rendering.framebuffer.world.overlay.overlays.arm
import de.bixilon.kotlinglm.vec3.Vec3 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.entity.models.minecraft.player.PlayerModel
import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.AnimationLoops import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.AnimationLoops
import de.bixilon.minosoft.gui.rendering.skeletal.model.animations.SkeletalAnimation 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) { if (channel != KeyframeChannels.ROTATION) {
return null return null
} }
if (player.entity.mainArm == Arms.LEFT) {
return Vec3(120, 20, 0)
}
return Vec3(120, -20, -10) return Vec3(120, -20, -10)
} }
} }