优化飞行载具旋转轴

This commit is contained in:
Atsuihsio 2025-02-14 16:49:25 +08:00
parent 014145bf33
commit eef5bc9a0c
5 changed files with 37 additions and 11 deletions

View file

@ -242,7 +242,7 @@ public class HelicopterHudOverlay {
public static Matrix4f getVehicleTransform(VehicleEntity vehicle) { public static Matrix4f getVehicleTransform(VehicleEntity vehicle) {
Matrix4f transform = new Matrix4f(); Matrix4f transform = new Matrix4f();
transform.translate((float) vehicle.getX(), (float) vehicle.getY(), (float) vehicle.getZ()); transform.translate((float) vehicle.getX(), (float) vehicle.getY() + 1.45f, (float) vehicle.getZ());
transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYRot())); transform.rotate(Axis.YP.rotationDegrees(-vehicle.getYRot()));
transform.rotate(Axis.XP.rotationDegrees(vehicle.getXRot())); transform.rotate(Axis.XP.rotationDegrees(vehicle.getXRot()));
transform.rotate(Axis.ZP.rotationDegrees(vehicle.getRoll())); transform.rotate(Axis.ZP.rotationDegrees(vehicle.getRoll()));

View file

@ -10,6 +10,7 @@ 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.phys.Vec3;
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;
@ -38,9 +39,10 @@ public class Ah6Renderer extends GeoEntityRenderer<Ah6Entity> {
@Override @Override
public void render(Ah6Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { public void render(Ah6Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
poseStack.pushPose(); poseStack.pushPose();
poseStack.mulPose(Axis.YP.rotationDegrees(-entityYaw)); Vec3 root = new Vec3(0, 1.45, 0);
poseStack.mulPose(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()))); poseStack.rotateAround(Axis.YP.rotationDegrees(-entityYaw), (float) root.x, (float) root.y, (float) root.z);
poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll()))); poseStack.rotateAround(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())), (float) root.x, (float) root.y, (float) root.z);
poseStack.rotateAround(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll())), (float) root.x, (float) root.y, (float) root.z);
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
poseStack.popPose(); poseStack.popPose();
} }

View file

@ -10,6 +10,7 @@ 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.phys.Vec3;
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;
@ -40,9 +41,10 @@ public class Tom6Renderer extends GeoEntityRenderer<Tom6Entity> {
@Override @Override
public void render(Tom6Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) { public void render(Tom6Entity entityIn, float entityYaw, float partialTicks, PoseStack poseStack, MultiBufferSource bufferIn, int packedLightIn) {
poseStack.pushPose(); poseStack.pushPose();
poseStack.mulPose(Axis.YP.rotationDegrees(-entityYaw)); Vec3 root = new Vec3(0, 0.5, 0);
poseStack.mulPose(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot()))); poseStack.rotateAround(Axis.YP.rotationDegrees(-entityYaw), (float) root.x, (float) root.y, (float) root.z);
poseStack.mulPose(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll()))); poseStack.rotateAround(Axis.XP.rotationDegrees(Mth.lerp(partialTicks, entityIn.xRotO, entityIn.getXRot())), (float) root.x, (float) root.y, (float) root.z);
poseStack.rotateAround(Axis.ZP.rotationDegrees(Mth.lerp(partialTicks, entityIn.prevRoll, entityIn.getRoll())), (float) root.x, (float) root.y, (float) root.z);
super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn); super.render(entityIn, entityYaw, partialTicks, poseStack, bufferIn, packedLightIn);
poseStack.popPose(); poseStack.popPose();
} }

View file

@ -13,6 +13,7 @@ import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.ParticleTool;
import com.atsuishio.superbwarfare.tools.SoundTool; import com.atsuishio.superbwarfare.tools.SoundTool;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.math.Axis;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.particles.ParticleTypes; import net.minecraft.core.particles.ParticleTypes;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
@ -445,7 +446,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform();
float x = 0.6f; float x = 0.6f;
float y = 1.2f; float y = 1.2f - 1.45f;
float z = 1f; float z = 1f;
y += (float) passenger.getMyRidingOffset(); y += (float) passenger.getMyRidingOffset();
@ -481,6 +482,16 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
return 2; return 2;
} }
@Override
public Matrix4f getVehicleTransform() {
Matrix4f transform = new Matrix4f();
transform.translate((float) getX(), (float) getY() + 1.45f, (float) getZ());
transform.rotate(Axis.YP.rotationDegrees(-getYRot()));
transform.rotate(Axis.XP.rotationDegrees(getXRot()));
transform.rotate(Axis.ZP.rotationDegrees(getRoll()));
return transform;
}
@Override @Override
public void destroy() { public void destroy() {
Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID));
@ -566,7 +577,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
if (this.cannotFire) return; if (this.cannotFire) return;
x = 1.15f; x = 1.15f;
y = 0.62f; y = 0.62f - 1.45f;
z = 0.8f; z = 0.8f;
worldPositionRight = transformPosition(transform, -x, y, z); worldPositionRight = transformPosition(transform, -x, y, z);
@ -628,7 +639,7 @@ public class Ah6Entity extends ContainerMobileEntity implements GeoEntity, IHeli
} }
} else if (entityData.get(WEAPON_TYPE) == 1 && this.getEntityData().get(LOADED_ROCKET) > 0) { } else if (entityData.get(WEAPON_TYPE) == 1 && this.getEntityData().get(LOADED_ROCKET) > 0) {
x = 1.7f; x = 1.7f;
y = 0.62f; y = 0.62f - 1.45f;
z = 0.8f; z = 0.8f;
worldPositionRight = transformPosition(transform, -x, y, z); worldPositionRight = transformPosition(transform, -x, y, z);

View file

@ -10,6 +10,7 @@ import com.atsuishio.superbwarfare.init.ModSounds;
import com.atsuishio.superbwarfare.tools.CustomExplosion; import com.atsuishio.superbwarfare.tools.CustomExplosion;
import com.atsuishio.superbwarfare.tools.EntityFindUtil; import com.atsuishio.superbwarfare.tools.EntityFindUtil;
import com.atsuishio.superbwarfare.tools.ParticleTool; import com.atsuishio.superbwarfare.tools.ParticleTool;
import com.mojang.math.Axis;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
@ -259,7 +260,7 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
Matrix4f transform = getVehicleTransform(); Matrix4f transform = getVehicleTransform();
float x = 0f; float x = 0f;
float y = 0.95f; float y = 0.45f;
float z = -0.4f; float z = -0.4f;
y += (float) passenger.getMyRidingOffset(); y += (float) passenger.getMyRidingOffset();
@ -287,6 +288,16 @@ public class Tom6Entity extends MobileVehicleEntity implements GeoEntity {
entity.setYBodyRot(getYRot()); entity.setYBodyRot(getYRot());
} }
@Override
public Matrix4f getVehicleTransform() {
Matrix4f transform = new Matrix4f();
transform.translate((float) getX(), (float) getY() + 0.5f, (float) getZ());
transform.rotate(Axis.YP.rotationDegrees(-getYRot()));
transform.rotate(Axis.XP.rotationDegrees(getXRot()));
transform.rotate(Axis.ZP.rotationDegrees(getRoll()));
return transform;
}
@Override @Override
public void destroy() { public void destroy() {
Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID)); Entity attacker = EntityFindUtil.findEntity(this.level(), this.entityData.get(LAST_ATTACKER_UUID));