简化炮塔角度算法,移除快艇前后俯仰特性
This commit is contained in:
parent
3695b8fa07
commit
a7c206a95b
3 changed files with 20 additions and 24 deletions
|
@ -92,7 +92,7 @@ public class ClickHandler {
|
||||||
if (player.getMainHandItem().is(ModTags.Items.GUN)
|
if (player.getMainHandItem().is(ModTags.Items.GUN)
|
||||||
|| stack.is(ModItems.MONITOR.get())
|
|| stack.is(ModItems.MONITOR.get())
|
||||||
|| player.hasEffect(ModMobEffects.SHOCK.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) {
|
if (button == GLFW.GLFW_MOUSE_BUTTON_LEFT) {
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
public void render(SpeedboatEntity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
|
||||||
poseStack.pushPose();
|
poseStack.pushPose();
|
||||||
poseStack.mulPose(Axis.YP.rotationDegrees(-Mth.lerp(partialTicks, entityIn.yRotO, entityIn.getYRot())));
|
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);
|
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
|
||||||
poseStack.popPose();
|
poseStack.popPose();
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,7 @@ import net.minecraftforge.fluids.FluidType;
|
||||||
import net.minecraftforge.network.NetworkHooks;
|
import net.minecraftforge.network.NetworkHooks;
|
||||||
import net.minecraftforge.network.PlayMessages;
|
import net.minecraftforge.network.PlayMessages;
|
||||||
import net.minecraftforge.registries.ForgeRegistries;
|
import net.minecraftforge.registries.ForgeRegistries;
|
||||||
|
import org.joml.Math;
|
||||||
import software.bernie.geckolib.animatable.GeoEntity;
|
import software.bernie.geckolib.animatable.GeoEntity;
|
||||||
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
import software.bernie.geckolib.core.animatable.instance.AnimatableInstanceCache;
|
||||||
import software.bernie.geckolib.core.animation.AnimatableManager;
|
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(ROTOR, this.entityData.get(ROTOR) + this.entityData.get(POWER));
|
||||||
this.entityData.set(DELTA_ROT, this.entityData.get(DELTA_ROT) * 0.8f);
|
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()) {
|
if (this.isInWater() || this.isUnderWater()) {
|
||||||
this.setYRot(this.entityData.get(ROT_Y) - this.entityData.get(DELTA_ROT));
|
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();
|
Entity driver = this.getFirstPassenger();
|
||||||
if (driver == null) return;
|
if (driver == null) return;
|
||||||
|
|
||||||
var boatAngle = this.getLookAngle();
|
// var boatAngle = this.getLookAngle();
|
||||||
Vec3 rightVec = boatAngle.yRot(90 * Mth.DEG_TO_RAD).normalize();
|
// Vec3 rightVec = boatAngle.yRot(90 * Mth.DEG_TO_RAD).normalize();
|
||||||
Vec3 driverAngleVec = driver.getLookAngle().normalize();
|
// Vec3 driverAngleVec = driver.getLookAngle().normalize();
|
||||||
double lookAngle = calculateAngle(driverAngleVec, rightVec);
|
// double lookAngle = calculateAngle(driverAngleVec, rightVec);
|
||||||
|
|
||||||
double gunAngle;
|
double gunAngle = -Math.clamp(-105f, 105f, Mth.wrapDegrees(driver.getYHeadRot() - this.getYRot()));
|
||||||
if (lookAngle < 90) {
|
// if (lookAngle < 90) {
|
||||||
gunAngle = calculateAngle(driver.getLookAngle(), this.getLookAngle());
|
// gunAngle = calculateAngle(driver.getLookAngle(), this.getLookAngle());
|
||||||
} else {
|
// } else {
|
||||||
gunAngle = -calculateAngle(driver.getLookAngle(), this.getLookAngle());
|
// gunAngle = -calculateAngle(driver.getLookAngle(), this.getLookAngle());
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
// if (gunAngle > 180) {
|
||||||
|
// gunAngle -= 360;
|
||||||
|
// } else if (gunAngle < -180) {
|
||||||
|
// gunAngle += 360;
|
||||||
|
// }
|
||||||
|
|
||||||
if (gunAngle > 180) {
|
this.entityData.set(GUN_YAW, (float) Mth.lerp(0.2, this.entityData.get(GUN_YAW), gunAngle));
|
||||||
gunAngle -= 360;
|
|
||||||
} else if (gunAngle < -180) {
|
|
||||||
gunAngle += 360;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.entityData.set(GUN_YAW, (float) Mth.lerp(0.1, this.entityData.get(GUN_YAW), gunAngle));
|
|
||||||
|
|
||||||
float diffX = driver.getXRot() - this.getXRot();
|
float diffX = driver.getXRot() - this.getXRot();
|
||||||
this.entityData.set(GUN_PITCH, (float) Mth.lerp(0.1, this.entityData.get(GUN_PITCH), diffX));
|
this.entityData.set(GUN_PITCH, (float) Mth.lerp(0.1, this.entityData.get(GUN_PITCH), diffX));
|
||||||
|
|
Loading…
Add table
Reference in a new issue