翻新ntw20,优化载具瞄准视角,大量lerp仙人

This commit is contained in:
Atsuihsio 2025-03-18 17:52:35 +08:00
parent 0436765576
commit 51e7aa5fa0
20 changed files with 3786 additions and 7439 deletions

View file

@ -19,6 +19,10 @@ import static com.atsuishio.superbwarfare.event.ClientEventHandler.isProne;
public class Ntw20Model extends GeoModel<Ntw20Item> { public class Ntw20Model extends GeoModel<Ntw20Item> {
public static float fireRotY = 0f;
public static float fireRotZ = 0f;
public static float rotXBipod = 0f;
@Override @Override
public ResourceLocation getAnimationResource(Ntw20Item animatable) { public ResourceLocation getAnimationResource(Ntw20Item animatable) {
return ModUtils.loc("animations/ntw_20.animation.json"); return ModUtils.loc("animations/ntw_20.animation.json");
@ -37,8 +41,7 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
@Override @Override
public void setCustomAnimations(Ntw20Item animatable, long instanceId, AnimationState animationState) { public void setCustomAnimations(Ntw20Item animatable, long instanceId, AnimationState animationState) {
CoreGeoBone gun = getAnimationProcessor().getBone("bone"); CoreGeoBone gun = getAnimationProcessor().getBone("bone");
CoreGeoBone shen = getAnimationProcessor().getBone("shen"); // CoreGeoBone scope = getAnimationProcessor().getBone("scope");
CoreGeoBone scope = getAnimationProcessor().getBone("scope");
CoreGeoBone l = getAnimationProcessor().getBone("l"); CoreGeoBone l = getAnimationProcessor().getBone("l");
CoreGeoBone r = getAnimationProcessor().getBone("r"); CoreGeoBone r = getAnimationProcessor().getBone("r");
CoreGeoBone action = getAnimationProcessor().getBone("action"); CoreGeoBone action = getAnimationProcessor().getBone("action");
@ -67,24 +70,45 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
double fp = ClientEventHandler.firePos; double fp = ClientEventHandler.firePos;
double fr = ClientEventHandler.fireRot; double fr = ClientEventHandler.fireRot;
int type = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.SCOPE);
int stockType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.STOCK);
int barrelType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.BARREL);
int gripType = GunsTool.getAttachmentType(stack, GunsTool.AttachmentType.GRIP);
if (isProne(player)) { if (isProne(player)) {
l.setRotX(-1.5f); l.setRotX(-1.5f);
r.setRotX(-1.5f); r.setRotX(-1.5f);
} }
shen.setPosX((float) (0.95f * ClientEventHandler.recoilHorizon * fpz * fp)); CoreGeoBone shen;
shen.setPosY((float) (0.4f * fp + 0.44f * fr)); if (zt < 0.5) {
shen.setPosZ((float) (5.825 * fp + 0.34f * fr + 2.35 * fpz)); shen = getAnimationProcessor().getBone("fireRootNormal");
shen.setRotX((float) (0.01f * fp + 0.2f * fr + 0.01f * fpz)); } else {
shen.setRotY((float) (0.1f * ClientEventHandler.recoilHorizon * fpz)); shen = switch (type) {
shen.setRotZ((float) ((0.08f + 0.1 * fr) * ClientEventHandler.recoilHorizon)); case 0 -> getAnimationProcessor().getBone("fireRoot0");
case 1 -> getAnimationProcessor().getBone("fireRoot1");
case 2 -> getAnimationProcessor().getBone("fireRoot2");
case 3 -> getAnimationProcessor().getBone("fireRoot3");
default -> getAnimationProcessor().getBone("fireRootNormal");
};
}
fireRotY = (float) Mth.lerp(0.3f * times, fireRotY, 0.6f * ClientEventHandler.recoilHorizon * fpz);
fireRotZ = (float) Mth.lerp(2f * times, fireRotZ, (0.4f + 0.5f * fpz) * ClientEventHandler.recoilHorizon);
shen.setPosX(-0.4f * (float) (ClientEventHandler.recoilHorizon * (0.5 + 0.4 * ClientEventHandler.fireSpread)));
shen.setPosY((float) (0.15f * fp + 0.18f * fr));
shen.setPosZ((float) (2.935 * fp + 0.23f * fr + 1.325 * fpz));
shen.setRotX((float) (0.015f * fp + 0.12f * fr + 0.015f * fpz + 0.15f * (float) ClientEventHandler.actionMove));
shen.setRotY(fireRotY);
shen.setRotZ(fireRotZ);
shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt))); shen.setPosX((float) (shen.getPosX() * (1 - 0.4 * zt)));
shen.setPosY((float) (shen.getPosY() * (1 - 0.5 * zt))); shen.setPosY((float) (shen.getPosY() * (-1 + 0.8 * zt)));
shen.setPosZ((float) (shen.getPosZ() * (1 - 0.7 * zt))); shen.setPosZ((float) (shen.getPosZ() * (1 - 0.6 * zt)));
shen.setRotX((float) (shen.getRotX() * (1 - 0.87 * zt))); shen.setRotX((float) (shen.getRotX() * (1 - 0.8 * zt)));
shen.setRotY((float) (shen.getRotY() * (1 - 0.7 * zt))); shen.setRotY((float) (shen.getRotY() * (1 - 0.85 * zt)));
shen.setRotZ((float) (shen.getRotZ() * (1 - 0.65 * zt))); shen.setRotZ((float) (shen.getRotZ() * (1 - 0.4 * zt)));
CrossHairOverlay.gunRot = shen.getRotZ(); CrossHairOverlay.gunRot = shen.getRotZ();
@ -93,12 +117,12 @@ public class Ntw20Model extends GeoModel<Ntw20Item> {
gun.setPosZ(10.0f * (float) zp + (float) (0.3f * zpz)); gun.setPosZ(10.0f * (float) zp + (float) (0.3f * zpz));
gun.setRotZ((float) (0.02f * zpz)); gun.setRotZ((float) (0.02f * zpz));
gun.setScaleZ(1f - (0.8f * (float) zp)); gun.setScaleZ(1f - (0.8f * (float) zp));
scope.setScaleZ(1f - (0.85f * (float) zp)); // scope.setScaleZ(1f - (0.85f * (float) zp));
stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 4.3)); stack.getOrCreateTag().putBoolean("HoloHidden", !(gun.getPosX() > 4.3));
action.setPosZ(6f * (float) ClientEventHandler.actionMove); action.setPosZ(3f * (float) ClientEventHandler.actionMove);
lh.setPosZ(-6f * (float) ClientEventHandler.actionMove); lh.setPosZ(-3f * (float) ClientEventHandler.actionMove);
CoreGeoBone root = getAnimationProcessor().getBone("root"); CoreGeoBone root = getAnimationProcessor().getBone("root");
root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph)); root.setPosX((float) (movePosX + 20 * ClientEventHandler.drawTime + 9.3f * mph));

View file

@ -154,7 +154,7 @@ public class VehicleHudOverlay {
&& !(player.getVehicle() instanceof SpeedboatEntity)) { && !(player.getVehicle() instanceof SpeedboatEntity)) {
poseStack.pushPose(); poseStack.pushPose();
poseStack.translate(Mth.clamp(-8 * ClientEventHandler.turnRot[1], -10, 10), Mth.clamp(-8 * ClientEventHandler.turnRot[0], -10, 10) - 0.3 * ClientEventHandler.shakeTime + 5 * ClientEventHandler.cameraRoll, 0); poseStack.translate(0.2 * ClientEventHandler.shakeTime + 5 * ClientEventHandler.cameraRoll, 0 - 0.3 * ClientEventHandler.shakeTime + 5 * ClientEventHandler.cameraRoll, 0);
poseStack.rotateAround(Axis.ZP.rotationDegrees(-0.5f * ClientEventHandler.cameraRoll), w / 2f, h / 2f, 0); poseStack.rotateAround(Axis.ZP.rotationDegrees(-0.5f * ClientEventHandler.cameraRoll), w / 2f, h / 2f, 0);
RenderSystem.disableDepthTest(); RenderSystem.disableDepthTest();
RenderSystem.depthMask(false); RenderSystem.depthMask(false);

View file

@ -3,14 +3,17 @@ package com.atsuishio.superbwarfare.client.renderer.entity;
import com.atsuishio.superbwarfare.client.layer.Bmp2Layer; import com.atsuishio.superbwarfare.client.layer.Bmp2Layer;
import com.atsuishio.superbwarfare.client.model.entity.Bmp2Model; import com.atsuishio.superbwarfare.client.model.entity.Bmp2Model;
import com.atsuishio.superbwarfare.entity.vehicle.Bmp2Entity; import com.atsuishio.superbwarfare.entity.vehicle.Bmp2Entity;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis; import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.GeoEntityRenderer;
@ -57,6 +60,10 @@ public class Bmp2Renderer extends GeoEntityRenderer<Bmp2Entity> {
} }
if (name.equals("cannon")) { if (name.equals("cannon")) {
Player player = Minecraft.getInstance().player;
bone.setHidden(ClientEventHandler.zoomVehicle && animatable.getFirstPassenger() == player);
bone.setRotY(Mth.lerp(partialTick, animatable.turretYRotO, animatable.getTurretYRot()) * Mth.DEG_TO_RAD); bone.setRotY(Mth.lerp(partialTick, animatable.turretYRotO, animatable.getTurretYRot()) * Mth.DEG_TO_RAD);
} }
if (name.equals("barrel")) { if (name.equals("barrel")) {

View file

@ -3,14 +3,17 @@ package com.atsuishio.superbwarfare.client.renderer.entity;
import com.atsuishio.superbwarfare.client.layer.Lav150Layer; import com.atsuishio.superbwarfare.client.layer.Lav150Layer;
import com.atsuishio.superbwarfare.client.model.entity.Lav150Model; import com.atsuishio.superbwarfare.client.model.entity.Lav150Model;
import com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity; import com.atsuishio.superbwarfare.entity.vehicle.Lav150Entity;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis; import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.GeoEntityRenderer;
@ -62,6 +65,10 @@ public class Lav150Renderer extends GeoEntityRenderer<Lav150Entity> {
bone.setRotX(1.5f * Mth.lerp(partialTick, animatable.leftWheelRotO, animatable.getLeftWheelRot())); bone.setRotX(1.5f * Mth.lerp(partialTick, animatable.leftWheelRotO, animatable.getLeftWheelRot()));
} }
if (name.equals("cannon")) { if (name.equals("cannon")) {
Player player = Minecraft.getInstance().player;
bone.setHidden(ClientEventHandler.zoomVehicle && animatable.getFirstPassenger() == player);
bone.setRotY(Mth.lerp(partialTick, animatable.turretYRotO, animatable.getTurretYRot()) * Mth.DEG_TO_RAD); bone.setRotY(Mth.lerp(partialTick, animatable.turretYRotO, animatable.getTurretYRot()) * Mth.DEG_TO_RAD);
} }
if (name.equals("barrel")) { if (name.equals("barrel")) {

View file

@ -3,14 +3,17 @@ package com.atsuishio.superbwarfare.client.renderer.entity;
import com.atsuishio.superbwarfare.client.layer.Yx100GlowLayer; import com.atsuishio.superbwarfare.client.layer.Yx100GlowLayer;
import com.atsuishio.superbwarfare.client.model.entity.Yx100Model; import com.atsuishio.superbwarfare.client.model.entity.Yx100Model;
import com.atsuishio.superbwarfare.entity.vehicle.Yx100Entity; import com.atsuishio.superbwarfare.entity.vehicle.Yx100Entity;
import com.atsuishio.superbwarfare.event.ClientEventHandler;
import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Axis; import com.mojang.math.Axis;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.entity.EntityRendererProvider; import net.minecraft.client.renderer.entity.EntityRendererProvider;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import net.minecraft.world.entity.player.Player;
import software.bernie.geckolib.cache.object.BakedGeoModel; import software.bernie.geckolib.cache.object.BakedGeoModel;
import software.bernie.geckolib.cache.object.GeoBone; import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoEntityRenderer; import software.bernie.geckolib.renderer.GeoEntityRenderer;
@ -84,6 +87,10 @@ public class Yx100Renderer extends GeoEntityRenderer<Yx100Entity> {
} }
if (name.equals("base")) { if (name.equals("base")) {
Player player = Minecraft.getInstance().player;
bone.setHidden(ClientEventHandler.zoomVehicle && animatable.getFirstPassenger() == player);
float a = animatable.getEntityData().get(YAW); float a = animatable.getEntityData().get(YAW);
float r = (Mth.abs(a) - 90f) / 90f; float r = (Mth.abs(a) - 90f) / 90f;

View file

@ -124,12 +124,12 @@ public class Ntw20Renderer extends GeoItemRenderer<Ntw20Item> {
VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc)); VertexConsumer sleeveBuilder = this.currentBuffer.getBuffer(RenderType.entityTranslucent(loc));
if (name.equals("Lefthand")) { if (name.equals("Lefthand")) {
stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f); stack.translate(-1.0f * SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
AnimationHelper.renderPartOverBone(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1); AnimationHelper.renderPartOverBone2(model.leftArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
AnimationHelper.renderPartOverBone(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1); AnimationHelper.renderPartOverBone2(model.leftSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
} else { } else {
stack.translate(SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f); stack.translate(SCALE_RECIPROCAL, 2.0f * SCALE_RECIPROCAL, 0.0f);
AnimationHelper.renderPartOverBone(model.rightArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1); AnimationHelper.renderPartOverBone2(model.rightArm, bone, stack, armBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
AnimationHelper.renderPartOverBone(model.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1); AnimationHelper.renderPartOverBone2(model.rightSleeve, bone, stack, sleeveBuilder, packedLightIn, OverlayTexture.NO_OVERLAY, 1);
} }
this.currentBuffer.getBuffer(this.renderType); this.currentBuffer.getBuffer(this.renderType);

View file

@ -412,7 +412,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
return; return;
} }
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform(1);
float x = 0.6f; float x = 0.6f;
float y = 1.2f - 1.45f; float y = 1.2f - 1.45f;
@ -472,12 +472,12 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
} }
@Override @Override
public Matrix4f getVehicleTransform() { public Matrix4f getVehicleTransform(float ticks) {
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate((float) getX(), (float) getY() + 1.45f, (float) getZ()); 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(-getYRot())); transform.rotate(Axis.YP.rotationDegrees(-Mth.lerp(ticks, yRotO, getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }
@ -529,7 +529,7 @@ public class Ah6Entity extends ContainerMobileVehicleEntity implements GeoEntity
} }
} }
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform(1);
float x; float x;
float y; float y;
float z; float z;

View file

@ -269,7 +269,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
} }
} }
Matrix4f transform = getBarrelTransform(); Matrix4f transform = getBarrelTransform(1);
if (getWeaponIndex(0) == 0) { if (getWeaponIndex(0) == 0) {
if (this.cannotFire) return; if (this.cannotFire) return;
float x = -0.1125f; float x = -0.1125f;
@ -355,7 +355,7 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
} }
} }
} else if (getWeaponIndex(0) == 2 && this.getEntityData().get(LOADED_MISSILE) > 0) { } else if (getWeaponIndex(0) == 2 && this.getEntityData().get(LOADED_MISSILE) > 0) {
Matrix4f transformT = getBarrelTransform(); Matrix4f transformT = getBarrelTransform(1);
Vector4f worldPosition = transformPosition(transformT, 0, 1, 0); Vector4f worldPosition = transformPosition(transformT, 0, 1, 0);
var wgMissileEntity = ((WgMissileWeapon) getWeapon(0)).create(player); var wgMissileEntity = ((WgMissileWeapon) getWeapon(0)).create(player);
@ -448,8 +448,8 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
return; return;
} }
Matrix4f transform = getTurretTransform(); Matrix4f transform = getTurretTransform(1);
Matrix4f transformV = getVehicleTransform(); Matrix4f transformV = getVehicleTransform(1);
float x = 0.5f; float x = 0.5f;
float y = 0.1f; float y = 0.1f;
@ -472,8 +472,14 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
return 5; return 5;
} }
public Matrix4f getBarrelTransform() { public Vec3 driverZoomPos(float ticks) {
Matrix4f transformT = getTurretTransform(); Matrix4f transform = getTurretTransform(ticks);
Vector4f worldPosition = transformPosition(transform, 0, 0, 0.75f);
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
}
public Matrix4f getBarrelTransform(float ticks) {
Matrix4f transformT = getTurretTransform(ticks);
float x = 0f; float x = 0f;
float y = 0.5541f; float y = 0.5541f;
float z = 0.83004375f; float z = 0.83004375f;
@ -481,14 +487,14 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getTurretXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, turretXRotO, getTurretXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }
public Matrix4f getTurretTransform() { public Matrix4f getTurretTransform(float ticks) {
Matrix4f transformT = getVehicleTransform(); Matrix4f transformT = getVehicleTransform(ticks);
float x = 0f; float x = 0f;
float y = 2f; float y = 2f;
float z = -0.703125f; float z = -0.703125f;
@ -496,9 +502,9 @@ public class Bmp2Entity extends ContainerMobileVehicleEntity implements GeoEntit
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }

View file

@ -229,7 +229,7 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
} }
} }
Matrix4f transform = getBarrelTransform(); Matrix4f transform = getBarrelTransform(1);
if (getWeaponIndex(0) == 0) { if (getWeaponIndex(0) == 0) {
if (this.cannotFire) return; if (this.cannotFire) return;
float x = -0.0234375f; float x = -0.0234375f;
@ -385,8 +385,8 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
return; return;
} }
Matrix4f transform = getTurretTransform(); Matrix4f transform = getTurretTransform(1);
Matrix4f transformV = getVehicleTransform(); Matrix4f transformV = getVehicleTransform(1);
float x = 0.36f; float x = 0.36f;
float y = -0.3f; float y = -0.3f;
@ -409,8 +409,14 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
return 5; return 5;
} }
public Matrix4f getBarrelTransform() { public Vec3 driverZoomPos(float ticks) {
Matrix4f transformT = getTurretTransform(); Matrix4f transform = getTurretTransform(ticks);
Vector4f worldPosition = transformPosition(transform, 0, 0, 0.56f);
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
}
public Matrix4f getBarrelTransform(float ticks) {
Matrix4f transformT = getTurretTransform(ticks);
float x = 0f; float x = 0f;
float y = 0.33795f; float y = 0.33795f;
float z = 0.825f; float z = 0.825f;
@ -418,18 +424,18 @@ public class Lav150Entity extends ContainerMobileVehicleEntity implements GeoEnt
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getTurretXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, turretXRotO, getTurretXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }
public Matrix4f getTurretTransform() { public Matrix4f getTurretTransform(float ticks) {
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate((float) getX(), (float) getY() + 2.4f, (float) getZ()); transform.translate((float) Mth.lerp(ticks, xo, getX()), (float) Mth.lerp(ticks, yo + 2.4f, getY() + 2.4f), (float) Mth.lerp(ticks, zo, getZ()));
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }

View file

@ -188,22 +188,23 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
/** /**
* 机枪塔开火 * 机枪塔开火
*/ */
public Vec3 shootPos(float ticks) {
Matrix4f transform = getBarrelTransform(ticks);
Vector4f worldPosition = transformPosition(transform, 0, 0, 0);
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
}
@Override @Override
public void vehicleShoot(Player player, int type) { public void vehicleShoot(Player player, int type) {
if (this.cannotFire) return; if (this.cannotFire) return;
Matrix4f transform = getBarrelTransform();
float x = 0;
float y = 0;
float z = 0;
Vector4f worldPosition = transformPosition(transform, x, y, z);
var projectile = ((ProjectileWeapon) getWeapon(0)).create(player); var projectile = ((ProjectileWeapon) getWeapon(0)).create(player);
projectile.bypassArmorRate(0.4f); projectile.bypassArmorRate(0.4f);
projectile.setPos(worldPosition.x - 1.1 * this.getDeltaMovement().x, worldPosition.y, worldPosition.z - 1.1 * this.getDeltaMovement().z); projectile.setPos(shootPos(1).x - 1.1 * this.getDeltaMovement().x, shootPos(1).y, shootPos(1).z - 1.1 * this.getDeltaMovement().z);
projectile.shoot(player, getBarrelVector(1).x, getBarrelVector(1).y + 0.005f, getBarrelVector(1).z, 20, projectile.shoot(player, getBarrelVector(1).x, getBarrelVector(1).y + 0.005f, getBarrelVector(1).z, 20,
(float) 0.4); (float) 0.4);
this.level().addFreshEntity(projectile); this.level().addFreshEntity(projectile);
@ -305,8 +306,8 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
} }
} }
public Matrix4f getBarrelTransform() { public Matrix4f getBarrelTransform(float ticks) {
Matrix4f transformT = getTurretTransform(); Matrix4f transformT = getTurretTransform(ticks);
float x = 0f; float x = 0f;
float y = 0.5088375f; float y = 0.5088375f;
float z = 0.04173125f; float z = 0.04173125f;
@ -314,14 +315,14 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getTurretXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, turretXRotO, getTurretXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }
public Matrix4f getTurretTransform() { public Matrix4f getTurretTransform(float ticks) {
Matrix4f transformT = getVehicleTransform(); Matrix4f transformT = getVehicleTransform(ticks);
float x = 0f; float x = 0f;
float y = 2.4616625f; float y = 2.4616625f;
float z = -0.565625f; float z = -0.565625f;
@ -329,9 +330,9 @@ public class SpeedboatEntity extends ContainerMobileVehicleEntity implements Geo
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }
@Override @Override

View file

@ -197,7 +197,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
if (upInputDown && !onGround() && entityData.get(MELON)) { if (upInputDown && !onGround() && entityData.get(MELON)) {
entityData.set(MELON, false); entityData.set(MELON, false);
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform(1);
Vector4f worldPosition; Vector4f worldPosition;
worldPosition = transformPosition(transform, 0, -0.2f, 0); worldPosition = transformPosition(transform, 0, -0.2f, 0);
@ -252,7 +252,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
return; return;
} }
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform(1);
float x = 0f; float x = 0f;
float y = 0.45f; float y = 0.45f;
@ -284,12 +284,12 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
} }
@Override @Override
public Matrix4f getVehicleTransform() { public Matrix4f getVehicleTransform(float ticks) {
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate((float) getX(), (float) getY() + 0.5f, (float) getZ()); transform.translate((float) Mth.lerp(ticks, xo, getX()), (float) Mth.lerp(ticks, yo + 0.5f, getY() + 0.5f), (float) Mth.lerp(ticks, zo, getZ()));
transform.rotate(Axis.YP.rotationDegrees(-getYRot())); transform.rotate(Axis.YP.rotationDegrees(-Mth.lerp(ticks, yRotO, getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }

View file

@ -302,7 +302,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
return; return;
} }
Matrix4f transform = getBarrelTransform(); Matrix4f transform = getBarrelTransform(1);
Vector4f worldPosition = transformPosition(transform, 0, 0, 0); Vector4f worldPosition = transformPosition(transform, 0, 0, 0);
var cannonShell = (CannonShellWeapon) getWeapon(0); var cannonShell = (CannonShellWeapon) getWeapon(0);
@ -383,7 +383,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
if (type == 1) { if (type == 1) {
if (this.cannotFire) return; if (this.cannotFire) return;
Matrix4f transform = getGunTransform(); Matrix4f transform = getGunTransform(1);
Vector4f worldPosition = transformPosition(transform, 0, -0.25f, 0); Vector4f worldPosition = transformPosition(transform, 0, -0.25f, 0);
var projectile = (ProjectileWeapon) getWeapon(1); var projectile = (ProjectileWeapon) getWeapon(1);
@ -506,7 +506,7 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
return; return;
} }
Matrix4f transform = getTurretTransform(); Matrix4f transform = getTurretTransform(1);
int i = this.getOrderedPassengers().indexOf(passenger); int i = this.getOrderedPassengers().indexOf(passenger);
@ -521,12 +521,18 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z); callback.accept(passenger, worldPosition.x, worldPosition.y, worldPosition.z);
} }
public Vec3 driverZoomPos(float ticks) {
Matrix4f transform = getTurretTransform(ticks);
Vector4f worldPosition = transformPosition(transform, 0, 0, 0.6076875f);
return new Vec3(worldPosition.x, worldPosition.y, worldPosition.z);
}
public int getMaxPassengers() { public int getMaxPassengers() {
return 3; return 3;
} }
public Matrix4f getBarrelTransform() { public Matrix4f getBarrelTransform(float ticks) {
Matrix4f transformT = getTurretTransform(); Matrix4f transformT = getTurretTransform(ticks);
float x = 0f; float x = 0f;
float y = 0.653275f; float y = 0.653275f;
float z = 0.750975f; float z = 0.750975f;
@ -534,14 +540,14 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getTurretXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, turretXRotO, getTurretXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }
public Matrix4f getGunTransform() { public Matrix4f getGunTransform(float ticks) {
Matrix4f transformT = getTurretTransform(); Matrix4f transformT = getTurretTransform(ticks);
float x = -0.87890625f; float x = -0.87890625f;
float y = 2f; float y = 2f;
float z = -0.6640625f; float z = -0.6640625f;
@ -555,8 +561,8 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
return transform; return transform;
} }
public Matrix4f getTurretTransform() { public Matrix4f getTurretTransform(float ticks) {
Matrix4f transformT = getVehicleTransform(); Matrix4f transformT = getVehicleTransform(ticks);
float x = 0f; float x = 0f;
float y = 2.1484375f; float y = 2.1484375f;
float z = 0; float z = 0;
@ -564,9 +570,9 @@ public class Yx100Entity extends ContainerMobileVehicleEntity implements GeoEnti
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate(worldPosition.x, worldPosition.y, worldPosition.z); transform.translate(worldPosition.x, worldPosition.y, worldPosition.z);
transform.rotate(Axis.YP.rotationDegrees(getTurretYRot() - getYRot())); transform.rotate(Axis.YP.rotationDegrees(Mth.lerp(ticks, turretYRotO - yRotO, getTurretYRot() - getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }

View file

@ -704,12 +704,12 @@ public abstract class VehicleEntity extends Entity {
} }
// From Immersive_Aircraft // From Immersive_Aircraft
public Matrix4f getVehicleTransform() { public Matrix4f getVehicleTransform(float ticks) {
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate((float) getX(), (float) getY(), (float) getZ()); transform.translate((float) Mth.lerp(ticks, xo, getX()), (float) Mth.lerp(ticks, yo, getY()), (float) Mth.lerp(ticks, zo, getZ()));
transform.rotate(Axis.YP.rotationDegrees(-getYRot())); transform.rotate(Axis.YP.rotationDegrees(-Mth.lerp(ticks, yRotO, getYRot())));
transform.rotate(Axis.XP.rotationDegrees(getXRot())); transform.rotate(Axis.XP.rotationDegrees(Mth.lerp(ticks, xRotO, getXRot())));
transform.rotate(Axis.ZP.rotationDegrees(getRoll())); transform.rotate(Axis.ZP.rotationDegrees(Mth.lerp(ticks, prevRoll, getRoll())));
return transform; return transform;
} }

View file

@ -592,7 +592,7 @@ public class ClientEventHandler {
public static void gunPartMove(float times) { public static void gunPartMove(float times) {
chamberRot = Mth.lerp(0.07 * times, chamberRot, 0); chamberRot = Mth.lerp(0.07 * times, chamberRot, 0);
actionMove = Mth.lerp(0.2 * times, actionMove, 0); actionMove = Mth.lerp(0.125 * times, actionMove, 0);
} }
public static void handleClientShoot() { public static void handleClientShoot() {

View file

@ -18,7 +18,6 @@ import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.BlockGetter; import net.minecraft.world.level.BlockGetter;
import org.joml.Math; import org.joml.Math;
import org.joml.Matrix4f; import org.joml.Matrix4f;
import org.joml.Vector3d;
import org.joml.Vector4f; import org.joml.Vector4f;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Shadow;
@ -51,7 +50,7 @@ public abstract class CameraMixin {
if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) { if (stack.is(ModItems.MONITOR.get()) && stack.getOrCreateTag().getBoolean("Using") && stack.getOrCreateTag().getBoolean("Linked")) {
DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone")); DroneEntity drone = EntityFindUtil.findDrone(player.level(), stack.getOrCreateTag().getString("LinkedDrone"));
if (drone != null) { if (drone != null) {
Matrix4f transform = superbWarfare$getVehicleTransform(drone, partialTicks); Matrix4f transform = superbWarfare$getDroneTransform(drone, partialTicks);
float x0 = 0f; float x0 = 0f;
float y0 = 0.075f; float y0 = 0.075f;
float z0 = 0.18f; float z0 = 0.18f;
@ -66,17 +65,10 @@ public abstract class CameraMixin {
} }
if ((player.getVehicle() != null && player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player) && ClientEventHandler.zoomVehicle) { if ((player.getVehicle() != null && player.getVehicle() instanceof SpeedboatEntity boat && boat.getFirstPassenger() == player) && ClientEventHandler.zoomVehicle) {
float yRot = Mth.lerp(partialTicks, boat.yRotO, boat.getYRot()); float yRot = -Mth.lerp(partialTicks, boat.turretYRotO - boat.yRotO, boat.getTurretYRot() - boat.getYRot());
if (yRot < 0) { float xRot = Mth.lerp(partialTicks, boat.turretXRotO - boat.xRotO, boat.getTurretXRot() - boat.getXRot());
yRot += 360; setRotation(yRot, xRot);
} setPosition(boat.shootPos(partialTicks).x - 0.35 * boat.getBarrelVector(partialTicks).x, boat.shootPos(partialTicks).y + 0.35, boat.shootPos(partialTicks).z - 0.35 * boat.getBarrelVector(partialTicks).z);
yRot = yRot + 90 % 360;
var CameraPos = new Vector3d(-0.57, 3.3, 0);
CameraPos.rotateZ(-Mth.lerp(partialTicks, boat.xRotO, boat.getXRot()) * Mth.DEG_TO_RAD);
CameraPos.rotateY(-yRot * Mth.DEG_TO_RAD);
setRotation(-Mth.lerp(partialTicks, boat.turretYRotO - boat.yRotO, boat.getTurretYRot() - boat.getYRot()), Mth.lerp(partialTicks, boat.turretXRotO - boat.xRotO, boat.getTurretXRot() - boat.getXRot()));
setPosition(Mth.lerp(partialTicks, boat.xo + CameraPos.x, boat.getX() + CameraPos.x), Mth.lerp(partialTicks, boat.yo + CameraPos.y, boat.getY() + CameraPos.y), Mth.lerp(partialTicks, boat.zo + CameraPos.z, boat.getZ() + CameraPos.z));
info.cancel(); info.cancel();
return; return;
} }
@ -84,7 +76,11 @@ public abstract class CameraMixin {
if (player.getVehicle() instanceof Lav150Entity lav150 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { if (player.getVehicle() instanceof Lav150Entity lav150 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) {
if (lav150.getFirstPassenger() == player) { if (lav150.getFirstPassenger() == player) {
setRotation(-Mth.lerp(partialTicks, lav150.turretYRotO - lav150.yRotO, lav150.getTurretYRot() - lav150.getYRot()), Mth.lerp(partialTicks, lav150.turretXRotO - lav150.xRotO, lav150.getTurretXRot() - lav150.getXRot())); setRotation(-Mth.lerp(partialTicks, lav150.turretYRotO - lav150.yRotO, lav150.getTurretYRot() - lav150.getYRot()), Mth.lerp(partialTicks, lav150.turretXRotO - lav150.xRotO, lav150.getTurretXRot() - lav150.getXRot()));
if (ClientEventHandler.zoomVehicle) {
setPosition(lav150.driverZoomPos(partialTicks).x, Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), lav150.driverZoomPos(partialTicks).z);
} else {
setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ())); setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ()));
}
info.cancel(); info.cancel();
} else { } else {
setRotation(Mth.lerp(partialTicks, player.yHeadRotO, player.getYHeadRot()), Mth.lerp(partialTicks, player.xRotO, player.getXRot())); setRotation(Mth.lerp(partialTicks, player.yHeadRotO, player.getYHeadRot()), Mth.lerp(partialTicks, player.xRotO, player.getXRot()));
@ -97,7 +93,11 @@ public abstract class CameraMixin {
if (player.getVehicle() instanceof Bmp2Entity bmp2 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { if (player.getVehicle() instanceof Bmp2Entity bmp2 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) {
if (bmp2.getFirstPassenger() == player) { if (bmp2.getFirstPassenger() == player) {
setRotation(-Mth.lerp(partialTicks, bmp2.turretYRotO - bmp2.yRotO, bmp2.getTurretYRot() - bmp2.getYRot()), Mth.lerp(partialTicks, bmp2.turretXRotO - bmp2.xRotO, bmp2.getTurretXRot() - bmp2.getXRot())); setRotation(-Mth.lerp(partialTicks, bmp2.turretYRotO - bmp2.yRotO, bmp2.getTurretYRot() - bmp2.getYRot()), Mth.lerp(partialTicks, bmp2.turretXRotO - bmp2.xRotO, bmp2.getTurretXRot() - bmp2.getXRot()));
if (ClientEventHandler.zoomVehicle) {
setPosition(bmp2.driverZoomPos(partialTicks).x, Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), bmp2.driverZoomPos(partialTicks).z);
} else {
setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ())); setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight(), player.getEyeY()), Mth.lerp(partialTicks, player.zo, player.getZ()));
}
info.cancel(); info.cancel();
} else { } else {
setRotation(Mth.lerp(partialTicks, player.yHeadRotO, player.getYHeadRot()), Mth.lerp(partialTicks, player.xRotO, player.getXRot())); setRotation(Mth.lerp(partialTicks, player.yHeadRotO, player.getYHeadRot()), Mth.lerp(partialTicks, player.xRotO, player.getXRot()));
@ -110,7 +110,11 @@ public abstract class CameraMixin {
if (player.getVehicle() instanceof Yx100Entity yx100 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) { if (player.getVehicle() instanceof Yx100Entity yx100 && (Minecraft.getInstance().options.getCameraType() == CameraType.FIRST_PERSON || ClientEventHandler.zoomVehicle)) {
if (yx100.getFirstPassenger() == player) { if (yx100.getFirstPassenger() == player) {
setRotation(-Mth.lerp(partialTicks, yx100.turretYRotO - yx100.yRotO, yx100.getTurretYRot() - yx100.getYRot()), Mth.lerp(partialTicks, yx100.turretXRotO - yx100.xRotO, yx100.getTurretXRot() - yx100.getXRot())); setRotation(-Mth.lerp(partialTicks, yx100.turretYRotO - yx100.yRotO, yx100.getTurretYRot() - yx100.getYRot()), Mth.lerp(partialTicks, yx100.turretXRotO - yx100.xRotO, yx100.getTurretXRot() - yx100.getXRot()));
if (ClientEventHandler.zoomVehicle) {
setPosition(yx100.driverZoomPos(partialTicks).x, Mth.lerp(partialTicks, player.yo + player.getEyeHeight() + 1.5, player.getEyeY() + 1.5), yx100.driverZoomPos(partialTicks).z);
} else {
setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight() + 1.5, player.getEyeY() + 1.5), Mth.lerp(partialTicks, player.zo, player.getZ())); setPosition(Mth.lerp(partialTicks, player.xo, player.getX()), Mth.lerp(partialTicks, player.yo + player.getEyeHeight() + 1.5, player.getEyeY() + 1.5), Mth.lerp(partialTicks, player.zo, player.getZ()));
}
info.cancel(); info.cancel();
} else if (yx100.getNthEntity(1) == player) { } else if (yx100.getNthEntity(1) == player) {
setRotation(-Mth.lerp(partialTicks, yx100.gunYRotO - yx100.yRotO, yx100.getGunYRot() - yx100.getYRot()), Mth.lerp(partialTicks, yx100.gunXRotO - yx100.xRotO, yx100.getGunXRot() - yx100.getXRot())); setRotation(-Mth.lerp(partialTicks, yx100.gunYRotO - yx100.yRotO, yx100.getGunYRot() - yx100.getYRot()), Mth.lerp(partialTicks, yx100.gunXRotO - yx100.xRotO, yx100.getGunXRot() - yx100.getXRot()));
@ -129,7 +133,7 @@ public abstract class CameraMixin {
} }
@Unique @Unique
private static Matrix4f superbWarfare$getVehicleTransform(DroneEntity vehicle, float ticks) { private static Matrix4f superbWarfare$getDroneTransform(DroneEntity vehicle, float ticks) {
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate((float) Mth.lerp(ticks, vehicle.xo, vehicle.getX()), (float) Mth.lerp(ticks, vehicle.yo, vehicle.getY()), (float) Mth.lerp(ticks, vehicle.zo, vehicle.getZ())); transform.translate((float) Mth.lerp(ticks, vehicle.xo, vehicle.getX()), (float) Mth.lerp(ticks, vehicle.yo, vehicle.getY()), (float) Mth.lerp(ticks, vehicle.zo, vehicle.getZ()));
transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYaw(ticks))); transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYaw(ticks)));

File diff suppressed because it is too large Load diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB