From 5e7f265a65131ac9dd0f9e3af6b283603ce97d9e Mon Sep 17 00:00:00 2001 From: MrCrayfish Date: Sat, 11 Dec 2021 21:02:52 +1030 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=A6=20Improved=20immersive=20camera=20?= =?UTF-8?q?roll=20logic?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/handler/GunRenderingHandler.java | 33 ++++++++++++++----- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java b/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java index 192663134..68e26ff4e 100644 --- a/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java +++ b/src/main/java/com/mrcrayfish/guns/client/handler/GunRenderingHandler.java @@ -99,8 +99,8 @@ public static GunRenderingHandler get() private Field equippedProgressMainHandField; private Field prevEquippedProgressMainHandField; - private float immersiveWeaponRoll; private float immersiveRoll; + private float prevImmersiveRoll; private GunRenderingHandler() {} @@ -113,6 +113,7 @@ public void onTick(TickEvent.ClientTickEvent event) this.updateSprinting(); this.updateMuzzleFlash(); this.updateOffhandTranslate(); + this.updateImmersiveCamera(); } private void updateSprinting() @@ -251,9 +252,10 @@ public void onRenderOverlay(RenderHandEvent event) if(Config.CLIENT.experimental.immersiveCamera.get() && mc.player != null) { - float targetAngle = heldItem.getItem() instanceof GunItem ? mc.player.input.leftImpulse * 2F : 0F; - this.immersiveWeaponRoll = Mth.approach(this.immersiveWeaponRoll, targetAngle, 0.25F); - poseStack.mulPose(Vector3f.ZP.rotationDegrees(this.immersiveWeaponRoll)); + float roll = Mth.lerp(event.getPartialTicks(), this.prevImmersiveRoll, this.immersiveRoll); + roll = (float) Math.sin((roll * Math.PI) / 2.0); + roll *= 5F; + poseStack.mulPose(Vector3f.ZP.rotationDegrees(roll)); } ItemStack overrideModel = ItemStack.EMPTY; @@ -757,9 +759,10 @@ private float getEquipProgress(float partialTicks) return 0.0F; } - @SubscribeEvent - public void onCameraSetup(EntityViewRenderEvent.CameraSetup event) + private void updateImmersiveCamera() { + this.prevImmersiveRoll = this.immersiveRoll; + if(!Config.CLIENT.experimental.immersiveCamera.get()) return; @@ -768,8 +771,20 @@ public void onCameraSetup(EntityViewRenderEvent.CameraSetup event) return; ItemStack heldItem = mc.player.getMainHandItem(); - float targetAngle = heldItem.getItem() instanceof GunItem ? mc.player.input.leftImpulse * 5F: 0F; - this.immersiveRoll = Mth.approach(this.immersiveRoll, targetAngle, 0.4F); - event.setRoll(-this.immersiveRoll); + float targetAngle = heldItem.getItem() instanceof GunItem ? mc.player.input.leftImpulse: 0F; + float speed = mc.player.input.leftImpulse != 0 ? 0.075F : 0.15F; + this.immersiveRoll = Mth.lerp(speed, this.immersiveRoll, targetAngle); + } + + @SubscribeEvent + public void onCameraSetup(EntityViewRenderEvent.CameraSetup event) + { + if(!Config.CLIENT.experimental.immersiveCamera.get()) + return; + + float roll = (float) Mth.lerp(event.getPartialTicks(), this.prevImmersiveRoll, this.immersiveRoll); + roll = (float) Math.sin((roll * Math.PI) / 2.0); + roll *= 10F; + event.setRoll(-roll); } }