重做自由视角
This commit is contained in:
parent
31b7f728ee
commit
9b56d6d3e0
3 changed files with 53 additions and 31 deletions
|
@ -54,6 +54,8 @@ import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache;
|
||||||
import software.bernie.geckolib.animation.AnimatableManager;
|
import software.bernie.geckolib.animation.AnimatableManager;
|
||||||
import software.bernie.geckolib.util.GeckoLibUtil;
|
import software.bernie.geckolib.util.GeckoLibUtil;
|
||||||
|
|
||||||
|
import static com.atsuishio.superbwarfare.event.ClientMouseHandler.freeCameraPitch;
|
||||||
|
import static com.atsuishio.superbwarfare.event.ClientMouseHandler.freeCameraYaw;
|
||||||
import static com.atsuishio.superbwarfare.tools.ParticleTool.sendParticle;
|
import static com.atsuishio.superbwarfare.tools.ParticleTool.sendParticle;
|
||||||
|
|
||||||
public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity, HelicopterEntity, WeaponVehicleEntity {
|
public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity, HelicopterEntity, WeaponVehicleEntity {
|
||||||
|
@ -686,11 +688,20 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
||||||
return Pair.of(Axis.XP.rotationDegrees(-this.getViewXRot(tickDelta)), Axis.ZP.rotationDegrees(-this.getRoll(tickDelta)));
|
return Pair.of(Axis.XP.rotationDegrees(-this.getViewXRot(tickDelta)), Axis.ZP.rotationDegrees(-this.getRoll(tickDelta)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Matrix4f getClientVehicleTransform(float ticks) {
|
||||||
|
Matrix4f transform = new Matrix4f();
|
||||||
|
transform.translate((float) Mth.lerp(ticks, xo, getX()), (float) Mth.lerp(ticks, yo + 1.45f, getY() + 1.45f), (float) Mth.lerp(ticks, zo, getZ()));
|
||||||
|
transform.rotate(Axis.YP.rotationDegrees((float) (-Mth.lerp(ticks, yRotO, getYRot()) + freeCameraYaw)));
|
||||||
|
transform.rotate(Axis.XP.rotationDegrees((float) (Mth.lerp(ticks, xRotO, getXRot()) + freeCameraPitch)));
|
||||||
|
transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
|
||||||
|
return transform;
|
||||||
|
}
|
||||||
|
|
||||||
@OnlyIn(Dist.CLIENT)
|
@OnlyIn(Dist.CLIENT)
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Vec2 getCameraRotation(float partialTicks, Player player, boolean zoom, boolean isFirstPerson) {
|
public @Nullable Vec2 getCameraRotation(float partialTicks, Player player, boolean zoom, boolean isFirstPerson) {
|
||||||
if (this.getSeatIndex(player) == 0) {
|
if (this.getSeatIndex(player) == 0) {
|
||||||
return new Vec2(getRotY(partialTicks) + 0.4f * Mth.lerp(partialTicks, delta_yo, delta_y), getRotX(partialTicks) + 0.4f * Mth.lerp(partialTicks, delta_xo, delta_x));
|
return new Vec2((float) (getRotY(partialTicks) - 0.5f * Mth.lerp(partialTicks, delta_yo, delta_y) - freeCameraYaw), (float) (getRotX(partialTicks) - 0.5f * Mth.lerp(partialTicks, delta_xo, delta_x) + freeCameraPitch));
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.getCameraRotation(partialTicks, player, false, false);
|
return super.getCameraRotation(partialTicks, player, false, false);
|
||||||
|
@ -700,7 +711,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
|
||||||
@Override
|
@Override
|
||||||
public Vec3 getCameraPosition(float partialTicks, Player player, boolean zoom, boolean isFirstPerson) {
|
public Vec3 getCameraPosition(float partialTicks, Player player, boolean zoom, boolean isFirstPerson) {
|
||||||
if (this.getSeatIndex(player) == 0) {
|
if (this.getSeatIndex(player) == 0) {
|
||||||
Matrix4f transform = getVehicleTransform(partialTicks);
|
Matrix4f transform = getClientVehicleTransform(partialTicks);
|
||||||
|
|
||||||
|
|
||||||
Vector4f worldPosition = transformPosition(transform, -2.1f, 1, -10);
|
Vector4f worldPosition = transformPosition(transform, -2.1f, 1, -10);
|
||||||
|
|
|
@ -191,7 +191,7 @@ public class ClientEventHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isFreeCam(Player player) {
|
public static boolean isFreeCam(Player player) {
|
||||||
return player.getVehicle() instanceof VehicleEntity vehicle && vehicle.allowFreeCam() && Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON && ModKeyMappings.FREE_CAMERA.isDown();
|
return player.getVehicle() instanceof VehicleEntity vehicle && vehicle.allowFreeCam() && ModKeyMappings.FREE_CAMERA.isDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isMoving() {
|
private static boolean isMoving() {
|
||||||
|
|
|
@ -22,6 +22,7 @@ import net.neoforged.bus.api.SubscribeEvent;
|
||||||
import net.neoforged.fml.common.EventBusSubscriber;
|
import net.neoforged.fml.common.EventBusSubscriber;
|
||||||
import net.neoforged.neoforge.client.event.CalculatePlayerTurnEvent;
|
import net.neoforged.neoforge.client.event.CalculatePlayerTurnEvent;
|
||||||
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
import net.neoforged.neoforge.client.event.ClientTickEvent;
|
||||||
|
import net.neoforged.neoforge.client.event.ViewportEvent;
|
||||||
import net.neoforged.neoforge.network.PacketDistributor;
|
import net.neoforged.neoforge.network.PacketDistributor;
|
||||||
|
|
||||||
import static com.atsuishio.superbwarfare.event.ClientEventHandler.droneFovLerp;
|
import static com.atsuishio.superbwarfare.event.ClientEventHandler.droneFovLerp;
|
||||||
|
@ -31,10 +32,7 @@ import static com.atsuishio.superbwarfare.event.ClientEventHandler.isFreeCam;
|
||||||
public class ClientMouseHandler {
|
public class ClientMouseHandler {
|
||||||
public static Vec2 posO = new Vec2(0, 0);
|
public static Vec2 posO = new Vec2(0, 0);
|
||||||
public static Vec2 posN = new Vec2(0, 0);
|
public static Vec2 posN = new Vec2(0, 0);
|
||||||
public static Vec2 mousePos = new Vec2(0, 0);
|
|
||||||
public static double PosX = 0;
|
|
||||||
public static double lerpPosX = 0;
|
public static double lerpPosX = 0;
|
||||||
public static double PosY = 0;
|
|
||||||
public static double lerpPosY = 0;
|
public static double lerpPosY = 0;
|
||||||
|
|
||||||
|
|
||||||
|
@ -80,35 +78,48 @@ public class ClientMouseHandler {
|
||||||
i *= (1 - (Mth.abs(vehicle.getRoll()) - 90) / 90);
|
i *= (1 - (Mth.abs(vehicle.getRoll()) - 90) / 90);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
|
if (!isFreeCam(player)) {
|
||||||
PacketDistributor.sendToServer(new MouseMoveMessage(
|
if (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON) {
|
||||||
(1 - (Mth.abs(vehicle.getRoll()) / 90)) * lerpPosX + ((Mth.abs(vehicle.getRoll()) / 90)) * lerpPosY * i,
|
PacketDistributor.sendToServer(new MouseMoveMessage(
|
||||||
(1 - (Mth.abs(vehicle.getRoll()) / 90)) * lerpPosY + ((Mth.abs(vehicle.getRoll()) / 90)) * lerpPosX * (vehicle.getRoll() < 0 ? -1 : 1))
|
(1 - (Mth.abs(vehicle.getRoll()) / 90)) * lerpPosX + ((Mth.abs(vehicle.getRoll()) / 90)) * lerpPosY * i,
|
||||||
);
|
(1 - (Mth.abs(vehicle.getRoll()) / 90)) * lerpPosY + ((Mth.abs(vehicle.getRoll()) / 90)) * lerpPosX * (vehicle.getRoll() < 0 ? -1 : 1))
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
PacketDistributor.sendToServer(new MouseMoveMessage(lerpPosX, lerpPosY));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
PacketDistributor.sendToServer(new MouseMoveMessage(lerpPosX, lerpPosY));
|
PacketDistributor.sendToServer(new MouseMoveMessage(0, 0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// lerpPosX = Mth.clamp(Mth.lerp(event.getPartialTick(), lerpPosX, 0), -1, 1);
|
@SubscribeEvent
|
||||||
// lerpPosY = Mth.clamp(Mth.lerp(event.getPartialTick(), lerpPosY, 0), -1, 1);
|
public static void handleClientTick(ViewportEvent.ComputeCameraAngles event) {
|
||||||
//
|
LocalPlayer player = Minecraft.getInstance().player;
|
||||||
//
|
if (player == null) return;
|
||||||
// if (isFreeCam(player)) {
|
|
||||||
// freeCameraYaw = Mth.clamp(freeCameraYaw + 4 * lerpPosX, -100, 100);
|
float times = 0.6f * (float) Math.min(Minecraft.getInstance().getTimer().getRealtimeDeltaTicks(), 0.8);
|
||||||
// freeCameraPitch = Mth.clamp(freeCameraPitch + 4 * lerpPosY, -90, 90);
|
|
||||||
// }
|
if (isFreeCam(player)) {
|
||||||
//
|
freeCameraYaw -= 0.4f * times * lerpPosX;
|
||||||
// float yaw = event.getYaw();
|
freeCameraPitch += 0.2f * times * lerpPosY;
|
||||||
// float pitch = event.getPitch();
|
} else {
|
||||||
//
|
freeCameraYaw = Mth.lerp(0.075 * event.getPartialTick(), freeCameraYaw, 0);
|
||||||
// event.setYaw((float) (yaw + freeCameraYaw));
|
freeCameraPitch = Mth.lerp(0.075 * event.getPartialTick(), freeCameraPitch, 0);
|
||||||
// event.setPitch((float) (pitch + freeCameraPitch));
|
}
|
||||||
//
|
|
||||||
// if (!isFreeCam(player)) {
|
while (freeCameraYaw > 180F) {
|
||||||
// freeCameraYaw *= 0.8;
|
freeCameraYaw -= 360;
|
||||||
// freeCameraPitch *= 0.8;
|
}
|
||||||
// }
|
while (freeCameraYaw <= -180F) {
|
||||||
|
freeCameraYaw += 360;
|
||||||
|
}
|
||||||
|
while (freeCameraPitch > 180F) {
|
||||||
|
freeCameraPitch -= 360;
|
||||||
|
}
|
||||||
|
while (freeCameraPitch <= -180F) {
|
||||||
|
freeCameraPitch += 360;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
|
|
Loading…
Add table
Reference in a new issue