working on animation stuff again, with pivot points

This commit is contained in:
Halbear
2026-05-24 13:44:30 +01:00
parent f69d83df64
commit c436a49b58
2 changed files with 36 additions and 2 deletions
@@ -0,0 +1,7 @@
package net.halbear.hvf.Entity.Renderer;
public enum PivotOrigin {
PilotSeat,
RelativeToEntityCenter,
EntityPosition
}
@@ -10,6 +10,7 @@ import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.model.EntityModel; import net.minecraft.client.renderer.entity.model.EntityModel;
import net.minecraft.client.renderer.texture.OverlayTexture; import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f; import net.minecraft.util.math.vector.Vector3f;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
@@ -18,6 +19,8 @@ import java.util.Arrays;
public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityModel<VehicleBaseEntity>> extends EntityRenderer<T> { public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityModel<VehicleBaseEntity>> extends EntityRenderer<T> {
private Vector3f LastRotations = new Vector3f(0,0,0); private Vector3f LastRotations = new Vector3f(0,0,0);
private PivotOrigin OriginType = PivotOrigin.RelativeToEntityCenter;
private Vector3d OriginOffset = new Vector3d(0,0,0);
private M[] models; private M[] models;
@@ -28,16 +31,40 @@ public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityMo
this.models = models; this.models = models;
} }
public VehicleBaseRenderer SetPivotPoint(PivotOrigin OriginType, Vector3d Offset){
this.OriginOffset = Offset;
this.OriginType = OriginType;
return this;
}
public PivotOrigin GetOriginType(){
return OriginType;
}
public Vector3d GetPivotOffset(){
return OriginOffset;
}
@Override @Override
public void render(T entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) { public void render(T entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) {
matrixStack.push(); matrixStack.push();
Vector3d OriginPosition = OriginOffset;
switch(OriginType) {
case PilotSeat:
OriginPosition.add(entity.GetPilotSeat().x,-entity.GetPilotSeat().y,entity.GetPilotSeat().z);
break;
case EntityPosition:
break;
case RelativeToEntityCenter:
OriginPosition.add(new Vector3d(0, entity.getHeight()/2, 0));
break;
}
entity.SetPartialTick(partialTicks); entity.SetPartialTick(partialTicks);
matrixStack.translate( entity.GetPilotSeat().x, -entity.GetPilotSeat().y, entity.GetPilotSeat().z); matrixStack.translate( OriginPosition.x, OriginPosition.y, OriginPosition.z);
matrixStack.rotate(Vector3f.YP.rotationDegrees(180.0F - entity.GetVehicleYaw())); matrixStack.rotate(Vector3f.YP.rotationDegrees(180.0F - entity.GetVehicleYaw()));
matrixStack.rotate(Vector3f.XP.rotationDegrees(entity.GetVehiclePitch())); matrixStack.rotate(Vector3f.XP.rotationDegrees(entity.GetVehiclePitch()));
matrixStack.rotate(Vector3f.ZP.rotationDegrees(entity.GetVehicleRoll())); matrixStack.rotate(Vector3f.ZP.rotationDegrees(entity.GetVehicleRoll()));
matrixStack.translate( -entity.GetPilotSeat().x, entity.GetPilotSeat().y, -entity.GetPilotSeat().z); matrixStack.translate( -OriginPosition.x, -OriginPosition.y, -OriginPosition.z);
matrixStack.scale(-1.0F, -1.0F, 1.0F); matrixStack.scale(-1.0F, -1.0F, 1.0F);
matrixStack.translate(0.0D, -1.5D, 0.0D); matrixStack.translate(0.0D, -1.5D, 0.0D);