From cab4ae771798d9a650f818639385dfa589714b2e Mon Sep 17 00:00:00 2001 From: Halbear Date: Sun, 31 May 2026 17:06:27 +0100 Subject: [PATCH] updating physics and animation --- .../Renderer/VehicleAnimationManager.java | 19 + .../halbear/hvf/Entity/VehicleBaseEntity.java | 15 + .../Renderer/Models/Updatedbiplane.java | 372 ++++++++++++++++++ .../Util/VehicleData/VehicleBuildInfo.java | 2 + 4 files changed, 408 insertions(+) create mode 100644 src/main/java/net/halbear/hvf/UsageExamples/Aeroplane/Renderer/Models/Updatedbiplane.java diff --git a/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java b/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java index e5d02fb..13be106 100644 --- a/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java +++ b/src/main/java/net/halbear/hvf/Entity/Renderer/VehicleAnimationManager.java @@ -1,6 +1,7 @@ package net.halbear.hvf.Entity.Renderer; import net.halbear.hvf.Entity.*; +import net.halbear.hvf.Halsvehicleframework; import net.minecraft.util.math.vector.Vector3f; import net.minecraft.client.renderer.model.ModelRenderer; @@ -28,6 +29,24 @@ public class VehicleAnimationManager { return BoneIn; } + public ModelRenderer WheelAnimationAccurate(ModelRenderer BoneIn, T entity, double WheelDiameterInMetres, AnimationAxis axis, boolean invertAnimation){ + float PartialTick = VehicleBaseRenderer.PartialTick; + double RotationDeg = ((360 * entity.GetPositionDifference())/ (WheelDiameterInMetres * Math.PI))%360; + float RotationRad = (float)(RotationDeg * DegToRad); + switch(axis){ + case X_AXIS: + BoneIn.rotateAngleX = BoneIn.rotateAngleX + (RotationRad*PartialTick); + break; + case Y_AXIS: + BoneIn.rotateAngleY = BoneIn.rotateAngleY + (RotationRad*PartialTick); + break; + case Z_AXIS: + BoneIn.rotateAngleZ = BoneIn.rotateAngleZ + (RotationRad*PartialTick); + break; + } + return BoneIn; + } + public static Vector3f ConvertCartesianToEuler(Vector3f VectorIn){ return new Vector3f(VectorIn.getZ(),VectorIn.getY(),VectorIn.getX());} public static Vector3f ConvertEulerToCartesian(Vector3f VectorIn){ return ConvertCartesianToEuler(VectorIn); diff --git a/src/main/java/net/halbear/hvf/Entity/VehicleBaseEntity.java b/src/main/java/net/halbear/hvf/Entity/VehicleBaseEntity.java index dd5da39..290b254 100644 --- a/src/main/java/net/halbear/hvf/Entity/VehicleBaseEntity.java +++ b/src/main/java/net/halbear/hvf/Entity/VehicleBaseEntity.java @@ -37,6 +37,8 @@ public class VehicleBaseEntity extends Entity { private final Vector3d[] VehicleSeatOffsets; private float PartialTick = 1.0f; private EngineCategories EngineType; + private Vector3d LastPositionVector = new Vector3d(0,0,0); + private Vector3d CurrentPositionVector = new Vector3d(0,0,0); public void SetPartialTick(float PartialTick){this.PartialTick = PartialTick;} public float GetPartialTick(){return PartialTick;} @@ -113,6 +115,17 @@ public class VehicleBaseEntity extends Entity { BASE_BOOL_PARAMETERS.forEach(SyncedData::putBoolean); BASE_BYTE_ARRAY_PARAMETERS.forEach(SyncedData::putByteArray); this.dataManager.set(VEHICLE_SYNCHED_PARAMETERS,SyncedData); + this.LastPositionVector = this.getPositionVec(); + this.CurrentPositionVector = this.getPositionVec(); + } + + public Vector3d GetLastEntityPosition(){ + return this.LastPositionVector; + } + public double GetPositionDifference(){ + Vector3d Diff = getPositionVec().subtract(this.LastPositionVector); + Diff = Diff.mul(Diff); + return Math.sqrt(Diff.x + Diff.y+ Diff.z); } public void SetRenderState(String NewState){ SetStringDataValue("RENDER_STATE",NewState); @@ -222,6 +235,8 @@ public class VehicleBaseEntity extends Entity { @Override public void tick() { + this.LastPositionVector = CurrentPositionVector; + CurrentPositionVector = getPositionVec(); super.tick(); if(GetBooleanDataValue("ADHERES_TO_GRAVITY")){ if (!this.isOnGround()) { diff --git a/src/main/java/net/halbear/hvf/UsageExamples/Aeroplane/Renderer/Models/Updatedbiplane.java b/src/main/java/net/halbear/hvf/UsageExamples/Aeroplane/Renderer/Models/Updatedbiplane.java new file mode 100644 index 0000000..1c4c7af --- /dev/null +++ b/src/main/java/net/halbear/hvf/UsageExamples/Aeroplane/Renderer/Models/Updatedbiplane.java @@ -0,0 +1,372 @@ +package net.halbear.hvf.UsageExamples.Aeroplane.Renderer.Models;// Made with Blockbench 5.1.4 +import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.IVertexBuilder; +import net.halbear.hvf.Entity.Renderer.AnimationAxis; +import net.halbear.hvf.UsageExamples.Aeroplane.Aeroplane; +import net.halbear.hvf.Entity.VehicleBaseEntity; +import net.minecraft.client.renderer.entity.model.EntityModel; +import net.minecraft.client.renderer.model.ModelRenderer; + + +public class Updatedbiplane extends EntityModel { + private final ModelRenderer Body; + private final ModelRenderer cube_r1; + private final ModelRenderer cube_r2; + private final ModelRenderer cube_r3; + private final ModelRenderer cube_r4; + private final ModelRenderer cube_r5; + private final ModelRenderer cube_r6; + private final ModelRenderer cube_r7; + private final ModelRenderer cube_r8; + private final ModelRenderer cube_r9; + private final ModelRenderer cube_r10; + private final ModelRenderer cube_r11; + private final ModelRenderer cube_r12; + private final ModelRenderer cube_r13; + private final ModelRenderer cube_r14; + private final ModelRenderer cube_r15; + private final ModelRenderer cube_r16; + private final ModelRenderer cube_r17; + private final ModelRenderer cube_r18; + private final ModelRenderer cube_r19; + private final ModelRenderer cube_r20; + private final ModelRenderer cube_r21; + private final ModelRenderer cube_r22; + private final ModelRenderer cube_r23; + private final ModelRenderer cube_r24; + private final ModelRenderer cube_r25; + private final ModelRenderer cube_r26; + private final ModelRenderer cube_r27; + private final ModelRenderer cube_r28; + private final ModelRenderer cube_r29; + private final ModelRenderer cube_r30; + private final ModelRenderer cube_r31; + private final ModelRenderer cube_r32; + private final ModelRenderer cube_r33; + private final ModelRenderer cube_r34; + private final ModelRenderer cube_r35; + private final ModelRenderer cube_r36; + private final ModelRenderer cube_r37; + private final ModelRenderer cube_r38; + private final ModelRenderer cube_r39; + private final ModelRenderer cube_r40; + private final ModelRenderer cube_r41; + private final ModelRenderer propeller; + private final ModelRenderer cube_r42; + private final ModelRenderer LeftWheel; + private final ModelRenderer RightWheel; + + public Updatedbiplane() { + textureWidth = 512; + textureHeight = 512; + + Body = new ModelRenderer(this); + Body.setRotationPoint(0.0F, 3.0F, -9.0F); + Body.setTextureOffset(144, 0).addBox(-5.0F, 7.25F, -12.0F, 10.0F, 2.0F, 32.0F, 0.0F, false); + Body.setTextureOffset(96, 43).addBox(-2.0F, -6.0F, 34.0F, 4.0F, 2.0F, 10.0F, 0.0F, false); + Body.setTextureOffset(0, 92).addBox(-2.0F, -6.0F, 50.0F, 4.0F, 10.0F, 6.0F, 0.0F, false); + Body.setTextureOffset(0, 92).addBox(-26.0F, -18.0F, -7.0F, 52.0F, 2.0F, 24.0F, 0.0F, false); + Body.setTextureOffset(0, 92).addBox(-26.0F, 5.0F, -2.0F, 52.0F, 2.0F, 24.0F, 0.0F, false); + Body.setTextureOffset(9, 207).addBox(9.0F, 16.0F, -1.0F, 2.0F, 2.0F, 2.0F, 0.0F, false); + Body.setTextureOffset(9, 207).addBox(-11.0F, 16.0F, -1.0F, 2.0F, 2.0F, 2.0F, 0.0F, true); + + cube_r1 = new ModelRenderer(this); + cube_r1.setRotationPoint(-9.0F, 18.0F, 0.0F); + Body.addChild(cube_r1); + setRotationAngle(cube_r1, 0.0F, 0.0F, 0.4363F); + cube_r1.setTextureOffset(10, 205).addBox(-2.0F, -12.0F, -1.0F, 2.0F, 12.0F, 2.0F, 0.0F, true); + + cube_r2 = new ModelRenderer(this); + cube_r2.setRotationPoint(9.0F, 18.0F, 0.0F); + Body.addChild(cube_r2); + setRotationAngle(cube_r2, 0.0F, 0.0F, -0.4363F); + cube_r2.setTextureOffset(10, 205).addBox(0.0F, -12.0F, -1.0F, 2.0F, 12.0F, 2.0F, 0.0F, false); + + cube_r3 = new ModelRenderer(this); + cube_r3.setRotationPoint(-42.0F, 4.0F, 7.0F); + Body.addChild(cube_r3); + setRotationAngle(cube_r3, 0.1745F, 0.1745F, 0.0F); + cube_r3.setTextureOffset(52, 21).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + + cube_r4 = new ModelRenderer(this); + cube_r4.setRotationPoint(-39.0F, 4.0F, 26.0F); + Body.addChild(cube_r4); + setRotationAngle(cube_r4, 0.1745F, 0.1745F, 0.0F); + cube_r4.setTextureOffset(100, 203).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + + cube_r5 = new ModelRenderer(this); + cube_r5.setRotationPoint(39.0F, 4.0F, 26.0F); + Body.addChild(cube_r5); + setRotationAngle(cube_r5, 0.1745F, -0.1745F, 0.0F); + cube_r5.setTextureOffset(186, 177).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + + cube_r6 = new ModelRenderer(this); + cube_r6.setRotationPoint(-11.0F, 4.5F, 21.0F); + Body.addChild(cube_r6); + setRotationAngle(cube_r6, 0.2659F, 0.008F, -0.0169F); + cube_r6.setTextureOffset(162, 177).addBox(-1.0F, -22.5F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + + cube_r7 = new ModelRenderer(this); + cube_r7.setRotationPoint(11.0F, 4.5F, 21.0F); + Body.addChild(cube_r7); + setRotationAngle(cube_r7, 0.2659F, -0.008F, 0.0169F); + cube_r7.setTextureOffset(170, 177).addBox(-1.0F, -22.5F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + + cube_r8 = new ModelRenderer(this); + cube_r8.setRotationPoint(-11.1935F, -5.629F, -1.7596F); + Body.addChild(cube_r8); + setRotationAngle(cube_r8, 0.2223F, 0.008F, -0.0169F); + cube_r8.setTextureOffset(52, 21).addBox(-1.0F, -12.0F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + + cube_r9 = new ModelRenderer(this); + cube_r9.setRotationPoint(11.1935F, -5.629F, -1.7596F); + Body.addChild(cube_r9); + setRotationAngle(cube_r9, 0.2223F, -0.008F, 0.0169F); + cube_r9.setTextureOffset(178, 177).addBox(-1.0F, -12.0F, -2.0F, 2.0F, 24.0F, 2.0F, 0.0F, false); + + cube_r10 = new ModelRenderer(this); + cube_r10.setRotationPoint(42.0F, 4.0F, 7.0F); + Body.addChild(cube_r10); + setRotationAngle(cube_r10, 0.1745F, -0.1745F, 0.0F); + cube_r10.setTextureOffset(206, 177).addBox(-1.0F, -22.0F, -6.0F, 2.0F, 23.0F, 2.0F, 0.0F, false); + + cube_r11 = new ModelRenderer(this); + cube_r11.setRotationPoint(-26.0F, -18.0F, -7.0F); + Body.addChild(cube_r11); + setRotationAngle(cube_r11, 0.0F, 0.1309F, 0.0F); + cube_r11.setTextureOffset(0, 118).addBox(-29.0F, -0.01F, 0.0F, 29.0F, 2.0F, 24.0F, 0.0F, false); + + cube_r12 = new ModelRenderer(this); + cube_r12.setRotationPoint(26.0F, -18.0F, -7.0F); + Body.addChild(cube_r12); + setRotationAngle(cube_r12, 0.0F, -0.1309F, 0.0F); + cube_r12.setTextureOffset(0, 118).addBox(0.0F, -0.01F, 0.0F, 29.0F, 2.0F, 24.0F, 0.0F, true); + + cube_r13 = new ModelRenderer(this); + cube_r13.setRotationPoint(-26.0F, 5.0F, -2.0F); + Body.addChild(cube_r13); + setRotationAngle(cube_r13, 0.0F, 0.1309F, 0.0F); + cube_r13.setTextureOffset(64, 177).addBox(-19.0F, -0.01F, 0.0F, 19.0F, 2.0F, 24.0F, 0.0F, false); + + cube_r14 = new ModelRenderer(this); + cube_r14.setRotationPoint(26.0F, 5.0F, -2.0F); + Body.addChild(cube_r14); + setRotationAngle(cube_r14, 0.0F, -0.1309F, 0.0F); + cube_r14.setTextureOffset(64, 177).addBox(0.0F, -0.01F, 0.0F, 19.0F, 2.0F, 24.0F, 0.0F, true); + + cube_r15 = new ModelRenderer(this); + cube_r15.setRotationPoint(-26.8737F, -5.0F, 6.9632F); + Body.addChild(cube_r15); + setRotationAngle(cube_r15, 0.1686F, 0.6551F, -0.0096F); + cube_r15.setTextureOffset(190, 90).addBox(-19.5F, -12.0F, 1.0F, 39.0F, 24.0F, 0.0F, 0.0F, true); + + cube_r16 = new ModelRenderer(this); + cube_r16.setRotationPoint(-26.5867F, -6.1884F, 8.6681F); + Body.addChild(cube_r16); + setRotationAngle(cube_r16, 0.2164F, -0.4589F, -0.102F); + cube_r16.setTextureOffset(190, 90).addBox(-20.5F, -11.0F, 0.0F, 39.0F, 23.0F, 0.0F, 0.0F, true); + + cube_r17 = new ModelRenderer(this); + cube_r17.setRotationPoint(26.5867F, -6.1884F, 8.6681F); + Body.addChild(cube_r17); + setRotationAngle(cube_r17, 0.2164F, 0.4589F, 0.102F); + cube_r17.setTextureOffset(190, 90).addBox(-18.5F, -11.0F, 0.0F, 39.0F, 23.0F, 0.0F, 0.0F, false); + + cube_r18 = new ModelRenderer(this); + cube_r18.setRotationPoint(26.8737F, -5.0F, 6.9632F); + Body.addChild(cube_r18); + setRotationAngle(cube_r18, 0.1686F, -0.6551F, 0.0096F); + cube_r18.setTextureOffset(190, 90).addBox(-19.5F, -12.0F, 1.0F, 39.0F, 24.0F, 0.0F, 0.0F, false); + + cube_r19 = new ModelRenderer(this); + cube_r19.setRotationPoint(0.0F, -1.5F, 0.0F); + Body.addChild(cube_r19); + setRotationAngle(cube_r19, -0.3491F, 0.0F, 0.0F); + cube_r19.setTextureOffset(0, 0).addBox(-0.5F, -2.5F, 1.0F, 1.0F, 9.0F, 1.0F, 0.0F, false); + + cube_r20 = new ModelRenderer(this); + cube_r20.setRotationPoint(10.0F, -3.0F, 52.0F); + Body.addChild(cube_r20); + setRotationAngle(cube_r20, -0.3054F, 0.0F, 1.5708F); + cube_r20.setTextureOffset(144, 0).addBox(-1.0F, -9.0F, -6.0F, 2.0F, 18.0F, 12.0F, 0.0F, true); + + cube_r21 = new ModelRenderer(this); + cube_r21.setRotationPoint(-10.0F, -3.0F, 52.0F); + Body.addChild(cube_r21); + setRotationAngle(cube_r21, -0.3054F, 0.0F, -1.5708F); + cube_r21.setTextureOffset(144, 0).addBox(-1.0F, -9.0F, -6.0F, 2.0F, 18.0F, 12.0F, 0.0F, false); + + cube_r22 = new ModelRenderer(this); + cube_r22.setRotationPoint(0.0F, -15.0F, 50.0F); + Body.addChild(cube_r22); + setRotationAngle(cube_r22, -0.3054F, 0.0F, 0.0F); + cube_r22.setTextureOffset(54, 144).addBox(-1.0F, -6.0F, -4.0F, 2.0F, 18.0F, 12.0F, 0.0F, false); + + cube_r23 = new ModelRenderer(this); + cube_r23.setRotationPoint(2.0F, 9.25F, 34.0F); + Body.addChild(cube_r23); + setRotationAngle(cube_r23, 0.2528F, -0.1733F, 0.5888F); + cube_r23.setTextureOffset(135, 133).addBox(-0.25F, -6.3007F, -0.9537F, 0.0F, 6.0F, 17.0F, 0.0F, true); + + cube_r24 = new ModelRenderer(this); + cube_r24.setRotationPoint(-2.0F, 9.25F, 34.0F); + Body.addChild(cube_r24); + setRotationAngle(cube_r24, 0.2528F, 0.1733F, -0.5888F); + cube_r24.setTextureOffset(135, 133).addBox(0.25F, -6.3007F, -0.9537F, 0.0F, 6.0F, 17.0F, 0.0F, false); + + cube_r25 = new ModelRenderer(this); + cube_r25.setRotationPoint(0.0F, 9.25F, 33.0F); + Body.addChild(cube_r25); + setRotationAngle(cube_r25, 0.2618F, 0.0F, 0.0F); + cube_r25.setTextureOffset(106, 144).addBox(-2.0F, -6.0F, 0.0F, 4.0F, 6.0F, 21.0F, 0.0F, false); + + cube_r26 = new ModelRenderer(this); + cube_r26.setRotationPoint(-5.0F, 9.0F, 20.0F); + Body.addChild(cube_r26); + setRotationAngle(cube_r26, 0.0F, 0.1745F, 0.0F); + cube_r26.setTextureOffset(38, 201).addBox(0.0F, -1.75F, 0.0F, 5.0F, 2.0F, 14.0F, 0.0F, true); + + cube_r27 = new ModelRenderer(this); + cube_r27.setRotationPoint(5.0F, 9.0F, 20.0F); + Body.addChild(cube_r27); + setRotationAngle(cube_r27, 0.0F, -0.1745F, 0.0F); + cube_r27.setTextureOffset(38, 201).addBox(-5.0F, -1.75F, 0.0F, 5.0F, 2.0F, 14.0F, 0.0F, false); + + cube_r28 = new ModelRenderer(this); + cube_r28.setRotationPoint(-7.0F, -11.0F, 20.0F); + Body.addChild(cube_r28); + setRotationAngle(cube_r28, 0.3925F, -1.2393F, 1.1581F); + cube_r28.setTextureOffset(196, 64).addBox(0.0F, -7.0F, -5.0F, 18.0F, 7.0F, 5.0F, 0.0F, true); + + cube_r29 = new ModelRenderer(this); + cube_r29.setRotationPoint(7.0F, -11.0F, 20.0F); + Body.addChild(cube_r29); + setRotationAngle(cube_r29, 0.3925F, 1.2393F, -1.1581F); + cube_r29.setTextureOffset(196, 64).addBox(-18.0F, -7.0F, -5.0F, 18.0F, 7.0F, 5.0F, 0.0F, false); + + cube_r30 = new ModelRenderer(this); + cube_r30.setRotationPoint(0.0F, -6.0F, 9.0F); + Body.addChild(cube_r30); + setRotationAngle(cube_r30, 0.0F, 0.0F, -1.5708F); + cube_r30.setTextureOffset(42, 182).addBox(-10.0F, -7.0F, 6.0F, 15.0F, 14.0F, 5.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 239).addBox(-15.0F, -7.0F, -28.0F, 15.0F, 14.0F, 0.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 223).addBox(-15.0F, -7.0F, -27.0F, 15.0F, 14.0F, 0.0F, 0.0F, false); + cube_r30.setTextureOffset(96, 55).addBox(-9.0F, -2.0F, -28.0F, 4.0F, 4.0F, 7.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 201).addBox(-14.0F, -7.0F, -26.0F, 14.0F, 14.0F, 5.0F, 0.0F, false); + cube_r30.setTextureOffset(144, 34).addBox(-16.0F, -9.0F, -28.0F, 18.0F, 2.0F, 7.0F, 0.0F, false); + cube_r30.setTextureOffset(42, 0).addBox(0.0F, -7.0F, -28.0F, 2.0F, 14.0F, 7.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 0).addBox(-10.0F, -7.0F, -18.0F, 0.0F, 14.0F, 25.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 0).addBox(1.0F, 0.0F, -26.0F, 15.0F, 0.0F, 66.0F, 0.0F, false); + cube_r30.setTextureOffset(0, 0).addBox(-10.0F, -7.0F, -21.0F, 11.0F, 14.0F, 10.0F, 0.0F, false); + cube_r30.setTextureOffset(54, 144).addBox(-10.0F, -8.0F, -21.0F, 10.0F, 1.0F, 32.0F, 0.0F, false); + + cube_r31 = new ModelRenderer(this); + cube_r31.setRotationPoint(0.0F, -6.0F, 9.0F); + Body.addChild(cube_r31); + setRotationAngle(cube_r31, 0.0F, 0.0F, 1.5708F); + cube_r31.setTextureOffset(144, 34).addBox(-2.0F, -9.0F, -28.0F, 18.0F, 2.0F, 7.0F, 0.0F, true); + cube_r31.setTextureOffset(54, 144).addBox(0.0F, -8.0F, -21.0F, 10.0F, 1.0F, 32.0F, 0.0F, true); + + cube_r32 = new ModelRenderer(this); + cube_r32.setRotationPoint(0.0F, 36.0F, 9.0F); + Body.addChild(cube_r32); + setRotationAngle(cube_r32, 0.0F, 0.0F, 1.5708F); + cube_r32.setTextureOffset(42, 0).addBox(-28.0F, -7.0F, -28.0F, 2.0F, 14.0F, 7.0F, 0.0F, false); + + cube_r33 = new ModelRenderer(this); + cube_r33.setRotationPoint(0.0F, -7.0F, -5.0F); + Body.addChild(cube_r33); + setRotationAngle(cube_r33, 0.0F, -0.4363F, -1.5708F); + cube_r33.setTextureOffset(0, 118).addBox(0.0F, -7.0F, 0.0F, 7.0F, 14.0F, 1.0F, 0.0F, false); + + cube_r34 = new ModelRenderer(this); + cube_r34.setRotationPoint(51.0F, -18.5F, 20.0F); + Body.addChild(cube_r34); + setRotationAngle(cube_r34, 0.7342F, -0.1119F, -1.4365F); + cube_r34.setTextureOffset(53, 0).addBox(-24.5F, 0.0F, 0.0F, 24.0F, 0.0F, 43.0F, 0.0F, false); + + cube_r35 = new ModelRenderer(this); + cube_r35.setRotationPoint(-51.0F, -18.5F, 20.0F); + Body.addChild(cube_r35); + setRotationAngle(cube_r35, 0.7342F, 0.1119F, 1.4365F); + cube_r35.setTextureOffset(53, 0).addBox(0.5F, 0.0F, 0.0F, 24.0F, 0.0F, 43.0F, 0.0F, true); + + cube_r36 = new ModelRenderer(this); + cube_r36.setRotationPoint(8.0F, 4.0F, 5.5F); + Body.addChild(cube_r36); + setRotationAngle(cube_r36, 0.0F, 0.0F, 2.0944F); + cube_r36.setTextureOffset(162, 178).addBox(0.0F, 0.0F, -17.5F, 6.0F, 1.0F, 32.0F, 0.0F, true); + + cube_r37 = new ModelRenderer(this); + cube_r37.setRotationPoint(-8.0F, 4.0F, 5.5F); + Body.addChild(cube_r37); + setRotationAngle(cube_r37, 0.0F, 0.0F, -2.0944F); + cube_r37.setTextureOffset(162, 178).addBox(-6.0F, 0.0F, -17.5F, 6.0F, 1.0F, 32.0F, 0.0F, false); + + cube_r38 = new ModelRenderer(this); + cube_r38.setRotationPoint(5.0F, 9.0F, 20.0F); + Body.addChild(cube_r38); + setRotationAngle(cube_r38, 0.1515F, -0.0869F, -1.0538F); + cube_r38.setTextureOffset(0, 182).addBox(-0.1927F, -3.9414F, -0.5209F, 6.0F, 4.0F, 15.0F, 0.0F, false); + + cube_r39 = new ModelRenderer(this); + cube_r39.setRotationPoint(-5.0F, 9.0F, 20.0F); + Body.addChild(cube_r39); + setRotationAngle(cube_r39, 0.1515F, 0.0869F, 1.0538F); + cube_r39.setTextureOffset(82, 118).addBox(-5.8073F, -4.9414F, -0.5209F, 6.0F, 5.0F, 15.0F, 0.0F, false); + + cube_r40 = new ModelRenderer(this); + cube_r40.setRotationPoint(-8.0F, 0.5F, 20.0F); + Body.addChild(cube_r40); + setRotationAngle(cube_r40, 0.1745F, 0.0F, 1.5708F); + cube_r40.setTextureOffset(0, 144).addBox(-6.5F, -4.0F, 0.0F, 10.0F, 4.0F, 34.0F, 0.0F, true); + + cube_r41 = new ModelRenderer(this); + cube_r41.setRotationPoint(8.0F, 0.5F, 20.0F); + Body.addChild(cube_r41); + setRotationAngle(cube_r41, 0.1745F, 0.0F, -1.5708F); + cube_r41.setTextureOffset(0, 144).addBox(-3.5F, -4.0F, 0.0F, 10.0F, 4.0F, 34.0F, 0.0F, false); + + propeller = new ModelRenderer(this); + propeller.setRotationPoint(0.0F, 1.0F, -20.5F); + Body.addChild(propeller); + + + cube_r42 = new ModelRenderer(this); + cube_r42.setRotationPoint(0.0F, -7.0F, 29.5F); + propeller.addChild(cube_r42); + setRotationAngle(cube_r42, 0.0F, 0.0F, -1.5708F); + cube_r42.setTextureOffset(32, 0).addBox(-9.0F, -2.0F, -32.0F, 4.0F, 4.0F, 3.0F, 0.0F, false); + cube_r42.setTextureOffset(0, 260).addBox(-22.0F, -15.0F, -29.0F, 30.0F, 30.0F, 0.0F, 0.0F, false); + cube_r42.setTextureOffset(4, 0).addBox(-8.0F, -1.0F, -29.0F, 2.0F, 2.0F, 1.0F, 0.0F, false); + + LeftWheel = new ModelRenderer(this); + LeftWheel.setRotationPoint(12.0F, 17.0F, 0.0F); + Body.addChild(LeftWheel); + LeftWheel.setTextureOffset(292, 89).addBox(-1.0F, -4.0F, -4.0F, 2.0F, 8.0F, 8.0F, 0.0F, false); + + RightWheel = new ModelRenderer(this); + RightWheel.setRotationPoint(-12.0F, 17.0F, 0.0F); + Body.addChild(RightWheel); + RightWheel.setTextureOffset(292, 89).addBox(-1.0F, -4.0F, -4.0F, 2.0F, 8.0F, 8.0F, 0.0F, true); + } + + @Override + public void setRotationAngles(VehicleBaseEntity entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch){ + Aeroplane aeroplane = (Aeroplane)entity; + aeroplane.GetAnimationManager().PropellerAnimation(propeller, aeroplane, AnimationAxis.Z_AXIS, false); + aeroplane.GetAnimationManager().WheelAnimationAccurate(LeftWheel, aeroplane,0.5, AnimationAxis.X_AXIS, false); + aeroplane.GetAnimationManager().WheelAnimationAccurate(RightWheel, aeroplane,0.5, AnimationAxis.X_AXIS, false); + } + + @Override + public void render(MatrixStack matrixStack, IVertexBuilder buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha){ + Body.render(matrixStack, buffer, packedLight, packedOverlay, red, green, blue, alpha); + } + + public void setRotationAngle(ModelRenderer modelRenderer, float x, float y, float z) { + modelRenderer.rotateAngleX = x; + modelRenderer.rotateAngleY = y; + modelRenderer.rotateAngleZ = z; + } +} \ No newline at end of file diff --git a/src/main/java/net/halbear/hvf/Util/VehicleData/VehicleBuildInfo.java b/src/main/java/net/halbear/hvf/Util/VehicleData/VehicleBuildInfo.java index 76b0c3a..a5d04c3 100644 --- a/src/main/java/net/halbear/hvf/Util/VehicleData/VehicleBuildInfo.java +++ b/src/main/java/net/halbear/hvf/Util/VehicleData/VehicleBuildInfo.java @@ -23,6 +23,8 @@ public class VehicleBuildInfo { private List BuiltInVehicleInputActions = new ArrayList<>(); private List PassengerSeats = new ArrayList<>(); private List FuelTanks = new ArrayList<>(); + private Vector3d AtRestAngleOffsets; + private Vector3d AtSpeedOnGroundAngleOffsets; public VehicleBuildInfo RegisterInputAction(String ActionName){ BuiltInVehicleInputActions.add(ActionName);