From a7c206a95b79b1326beb6971239efc8faf265a2d Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Sat, 14 Dec 2024 02:50:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8C=96=E7=82=AE=E5=A1=94=E8=A7=92?= =?UTF-8?q?=E5=BA=A6=E7=AE=97=E6=B3=95=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=BF=AB?= =?UTF-8?q?=E8=89=87=E5=89=8D=E5=90=8E=E4=BF=AF=E4=BB=B0=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../superbwarfare/client/ClickHandler.java | 2 +- .../renderer/entity/SpeedboatRenderer.java | 1 - .../superbwarfare/entity/SpeedboatEntity.java | 41 +++++++++---------- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java index eb2db7b46..4189abba4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/ClickHandler.java @@ -92,7 +92,7 @@ public class ClickHandler { if (player.getMainHandItem().is(ModTags.Items.GUN) || stack.is(ModItems.MONITOR.get()) || player.hasEffect(ModMobEffects.SHOCK.get()) - || (player.getVehicle() != null && player.getVehicle() instanceof ICannonEntity)) { + || (player.getVehicle() != null && (player.getVehicle() instanceof ICannonEntity || player.getVehicle() instanceof IVehicleEntity))) { if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) { event.setCanceled(true); } diff --git a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java index 4c2cda496..1d2d0249a 100644 --- a/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java +++ b/src/main/java/com/atsuishio/superbwarfare/client/renderer/entity/SpeedboatRenderer.java @@ -37,7 +37,6 @@ public class SpeedboatRenderer extends GeoEntityRenderer { public void render(SpeedboatEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { poseStack.pushPose(); poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot()))); - poseStack.mulPose(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()))); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); poseStack.popPose(); } diff --git a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java index bfd7bc0a3..2476ea693 100644 --- a/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java +++ b/src/main/java/com/atsuishio/superbwarfare/entity/SpeedboatEntity.java @@ -43,6 +43,7 @@ import net.minecraftforge.fluids.FluidType; import net.minecraftforge.network.NetworkHooks; import net.minecraftforge.network.PlayMessages; import net.minecraftforge.registries.ForgeRegistries; +import org.joml.Math; import software.bernie.geckolib.animatable.GeoEntity; import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache; import software.bernie.geckolib.core.animation.AnimatableManager; @@ -319,13 +320,9 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, this.entityData.set(ROTOR, this.entityData.get(ROTOR) + this.entityData.get(POWER)); this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.8f); - double movementZ = Math.cos(calculateAngle(new Vec3(this.getDeltaMovement().x, 0, this.getDeltaMovement().z), new Vec3(this.getLookAngle().x, 0, this.getLookAngle().z))) * this.getDeltaMovement().horizontalDistance(); - - this.setXRot((float) Mth.lerp(0.1, this.getXRot(), -4f * movementZ)); - if (this.isInWater() || this.isUnderWater()) { this.setYRot(this.entityData.get(ROT_Y) - this.entityData.get(DELTA_ROT)); - this.setDeltaMovement(this.getDeltaMovement().add(this.getViewVector(1).scale(this.entityData.get(POWER)))); + this.setDeltaMovement(this.getDeltaMovement().add(new Vec3(this.getLookAngle().x, 0, this.getLookAngle().z).scale(this.entityData.get(POWER)))); } } @@ -333,25 +330,25 @@ public class SpeedboatEntity extends Entity implements GeoEntity, IChargeEntity, Entity driver = this.getFirstPassenger(); if (driver == null) return; - var boatAngle = this.getLookAngle(); - Vec3 rightVec = boatAngle.yRot(90 * Mth.DEG_TO_RAD).normalize(); - Vec3 driverAngleVec = driver.getLookAngle().normalize(); - double lookAngle = calculateAngle(driverAngleVec, rightVec); +// var boatAngle = this.getLookAngle(); +// Vec3 rightVec = boatAngle.yRot(90 * Mth.DEG_TO_RAD).normalize(); +// Vec3 driverAngleVec = driver.getLookAngle().normalize(); +// double lookAngle = calculateAngle(driverAngleVec, rightVec); - double gunAngle; - if (lookAngle < 90) { - gunAngle = calculateAngle(driver.getLookAngle(), this.getLookAngle()); - } else { - gunAngle = -calculateAngle(driver.getLookAngle(), this.getLookAngle()); - } + double gunAngle = -Math.clamp(-105f, 105f, Mth.wrapDegrees(driver.getYHeadRot() - this.getYRot())); +// if (lookAngle < 90) { +// gunAngle = calculateAngle(driver.getLookAngle(), this.getLookAngle()); +// } else { +// gunAngle = -calculateAngle(driver.getLookAngle(), this.getLookAngle()); +// } +// +// if (gunAngle > 180) { +// gunAngle -= 360; +// } else if (gunAngle < -180) { +// gunAngle += 360; +// } - if (gunAngle > 180) { - gunAngle -= 360; - } else if (gunAngle < -180) { - gunAngle += 360; - } - - this.entityData.set(GUN_YAW, (float) Mth.lerp(0.1, this.entityData.get(GUN_YAW), gunAngle)); + this.entityData.set(GUN_YAW, (float) Mth.lerp(0.2, this.entityData.get(GUN_YAW), gunAngle)); float diffX = driver.getXRot() - this.getXRot(); this.entityData.set(GUN_PITCH, (float) Mth.lerp(0.1, this.entityData.get(GUN_PITCH), diffX));