简化炮塔角度算法,移除快艇前后俯仰特性

This commit is contained in:
Atsuihsio 2024-12-14 02:50:08 +08:00
parent 3695b8fa07
commit a7c206a95b
3 changed files with 20 additions and 24 deletions

View file

@ -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);
}

View file

@ -37,7 +37,6 @@ public class SpeedboatRenderer extends GeoEntityRenderer<SpeedboatEntity> {
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();
}

View file

@ -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));