diff --git a/src/main/java/com/atsuishio/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java b/src/main/java/com/atsuishio/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java index 389716b6d..b8f4a3077 100644 --- a/src/main/java/com/atsuishio/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java +++ b/src/main/java/com/atsuishio/superbwarfare/compat/clothconfig/client/DisplayClothConfig.java @@ -74,5 +74,13 @@ public class DisplayClothConfig { .setSaveConsumer(DisplayConfig.EXPLOSION_SCREEN_SHAKE::set) .setTooltip(Component.translatable("config.superbwarfare.client.display.explosion_screen_shake.des")) .build()); + + category.addEntry(entryBuilder + .startIntSlider(Component.translatable("config.superbwarfare.client.display.shock_screen_shake"), DisplayConfig.SHOCK_SCREEN_SHAKE.get(), + 0, 100) + .setDefaultValue(100) + .setSaveConsumer(DisplayConfig.SHOCK_SCREEN_SHAKE::set) + .setTooltip(Component.translatable("config.superbwarfare.client.display.shock_screen_shake.des")) + .build()); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/config/client/DisplayConfig.java b/src/main/java/com/atsuishio/superbwarfare/config/client/DisplayConfig.java index 5223a0e8d..7d2e2c83f 100644 --- a/src/main/java/com/atsuishio/superbwarfare/config/client/DisplayConfig.java +++ b/src/main/java/com/atsuishio/superbwarfare/config/client/DisplayConfig.java @@ -12,6 +12,7 @@ public class DisplayConfig { public static ModConfigSpec.BooleanValue STAMINA_HUD; public static ModConfigSpec.IntValue WEAPON_SCREEN_SHAKE; public static ModConfigSpec.IntValue EXPLOSION_SCREEN_SHAKE; + public static ModConfigSpec.IntValue SHOCK_SCREEN_SHAKE; public static void init(ModConfigSpec.Builder builder) { builder.push("display"); @@ -40,6 +41,9 @@ public class DisplayConfig { builder.comment("The strength of screen shaking while exploding"); EXPLOSION_SCREEN_SHAKE = builder.defineInRange("explosion_screen_shake", 100, 0, 100); + builder.comment("The strength of screen shaking when shocked"); + SHOCK_SCREEN_SHAKE = builder.defineInRange("shock_screen_shake", 100, 0, 100); + builder.pop(); } } diff --git a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java index 41d5c509c..4c5fd11a8 100644 --- a/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/event/ClientEventHandler.java @@ -1121,7 +1121,6 @@ public class ClientEventHandler { moveFadeTime = Mth.lerp(0.1 * times, moveFadeTime, 0); } - movePosX = 0.2 * Math.sin(1 * Math.PI * moveXTime) * (1 - 0.95 * zoomTime) * moveFadeTime; movePosY = -0.135 * Math.sin(2 * Math.PI * (moveYTime - 0.25)) * (1 - 0.95 * zoomTime) * moveFadeTime; @@ -1141,7 +1140,6 @@ public class ClientEventHandler { pos = 0; } - movePosHorizon = Mth.lerp(0.1f * times, movePosHorizon, pos * (1 - 1 * zoomTime)); double velocity = entity.getDeltaMovement().y() + 0.078; @@ -1179,7 +1177,6 @@ public class ClientEventHandler { if (cantFireTime <= 10) { zoomTime = Mth.clamp(zoomTime + 0.03 * speed * times, 0, 1); } - } else { zoomTime = Mth.clamp(zoomTime - 0.04 * speed * times, 0, 1); } @@ -1222,7 +1219,6 @@ public class ClientEventHandler { if (0.454 <= firePosTimer && firePosTimer < 1) { firePos = 4.34 * Math.pow(firePosTimer, 2) - 6.5 * firePosTimer + 2.167; } - if (0 < fireRotTimer && fireRotTimer < 1.732) { fireRotTimer += 0.18 * (1.9 - fireRotTimer) * times; } @@ -1377,9 +1373,14 @@ public class ClientEventHandler { private static void handleShockCamera(ViewportEvent.ComputeCameraAngles event, LivingEntity entity) { if (entity.hasEffect(ModMobEffects.SHOCK) && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) { - event.setYaw(Minecraft.getInstance().gameRenderer.getMainCamera().getYRot() + (float) Mth.nextDouble(RandomSource.create(), -3, 3)); - event.setPitch(Minecraft.getInstance().gameRenderer.getMainCamera().getXRot() + (float) Mth.nextDouble(RandomSource.create(), -3, 3)); - event.setRoll((float) Mth.nextDouble(RandomSource.create(), 8, 12)); + float shakeStrength = (float) (DisplayConfig.SHOCK_SCREEN_SHAKE.get() / 100.0); + if (shakeStrength <= 0.0f) return; + + event.setYaw(Minecraft.getInstance().gameRenderer.getMainCamera().getYRot() + + (float) Mth.nextDouble(RandomSource.create(), -3, 3) * shakeStrength); + event.setPitch(Minecraft.getInstance().gameRenderer.getMainCamera().getXRot() + + (float) Mth.nextDouble(RandomSource.create(), -3, 3) * shakeStrength); + event.setRoll((float) Mth.nextDouble(RandomSource.create(), 8, 12) * shakeStrength); } } diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 74bb16fb3..c4c78f3d7 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -547,6 +547,8 @@ "config.superbwarfare.client.display.weapon_screen_shake.des": "The strength of the screen shake caused by weapons", "config.superbwarfare.client.display.explosion_screen_shake": "Explosion Screen Shake Strength", "config.superbwarfare.client.display.explosion_screen_shake.des": "The strength of the screen shake caused by explosions", + "config.superbwarfare.client.display.shock_screen_shake": "Shock Screen Shake Strength", + "config.superbwarfare.client.display.shock_screen_shake.des": "The strength of the screen shake caused by shock effect", "config.superbwarfare.client.vehicle": "Control Vehicle", "config.superbwarfare.client.vehicle.invert_aircraft_control": "Invert Aircraft Control", "config.superbwarfare.client.vehicle.left_click_reload.des": "Set TRUE to invert aircraft control", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 59e959a02..97937b134 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -548,6 +548,8 @@ "config.superbwarfare.client.display.weapon_screen_shake.des": "武器开火时,屏幕抖动的强度", "config.superbwarfare.client.display.explosion_screen_shake": "爆炸屏幕抖动", "config.superbwarfare.client.display.explosion_screen_shake.des": "爆炸时,屏幕抖动的强度", + "config.superbwarfare.client.display.shock_screen_shake": "电击屏幕抖动", + "config.superbwarfare.client.display.shock_screen_shake.des": "受到电击效果时,屏幕抖动的强度", "config.superbwarfare.client.vehicle": "载具控制", "config.superbwarfare.client.vehicle.invert_aircraft_control": "飞行器鼠标反转", "config.superbwarfare.client.vehicle.left_click_reload.des": "开启飞行器鼠标反转",