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.texture.OverlayTexture;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.vector.Vector3d;
import net.minecraft.util.math.vector.Vector3f;
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> {
private Vector3f LastRotations = new Vector3f(0,0,0);
private PivotOrigin OriginType = PivotOrigin.RelativeToEntityCenter;
private Vector3d OriginOffset = new Vector3d(0,0,0);
private M[] models;
@@ -28,16 +31,40 @@ public class VehicleBaseRenderer<T extends VehicleBaseEntity, M extends EntityMo
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
public void render(T entity, float entityYaw, float partialTicks, MatrixStack matrixStack, IRenderTypeBuffer buffer, int packedLight) {
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);
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.XP.rotationDegrees(entity.GetVehiclePitch()));
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.translate(0.0D, -1.5D, 0.0D);