From 0db7ef8e66a21b0a972c3ad393bf8927455268dc Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sat, 7 Jan 2023 14:01:04 -0600 Subject: [PATCH] Simplified puppet rendering code, iterates over puppet parts and their corresponding model renderers instead of having several if statements. --- .../noppes/npcs/client/model/ModelMPM.java | 95 +++++-------------- .../java/noppes/npcs/roles/JobPuppet.java | 15 +-- 2 files changed, 28 insertions(+), 82 deletions(-) diff --git a/src/main/java/noppes/npcs/client/model/ModelMPM.java b/src/main/java/noppes/npcs/client/model/ModelMPM.java index 85440b867..6969ac559 100644 --- a/src/main/java/noppes/npcs/client/model/ModelMPM.java +++ b/src/main/java/noppes/npcs/client/model/ModelMPM.java @@ -571,52 +571,15 @@ public class ModelMPM extends ModelNPCMale{ JobPuppet job = (JobPuppet) npc.jobInterface; if(job.isActive()){ - if(!job.head.disabled){ - bipedHead.rotateAngleX = job.bipedRotsHead[0]; - bipedHead.rotateAngleY = job.bipedRotsHead[1]; - bipedHead.rotateAngleZ = job.bipedRotsHead[2]; - this.setInterpolatedAngles(job,bipedHead,job.head); - this.setInterpolatedAngles(job,bipedHeadwear,job.head); - } + JobPuppet.PartConfig[] partConfigs = new JobPuppet.PartConfig[]{job.head,job.body,job.larm,job.rarm,job.lleg,job.rleg}; + ModelRenderer[] mainModelParts = new ModelRenderer[]{bipedHead,bipedBody,bipedLeftArm,bipedRightArm,bipedLeftLeg,bipedRightLeg}; + ModelRenderer[] armorModelParts = new ModelRenderer[]{bipedHeadwear,bipedBodywear,bipedLeftArmwear,bipedRightArmWear,bipedLeftLegWear,bipedRightLegWear}; - if(!job.body.disabled){ - bipedBody.rotateAngleX = job.bipedRotsBody[0]; - bipedBody.rotateAngleY = job.bipedRotsBody[1]; - bipedBody.rotateAngleZ = job.bipedRotsBody[2]; - this.setInterpolatedAngles(job,bipedBody,job.body); - this.setInterpolatedAngles(job,bipedBodywear,job.body); - } - - if(!job.larm.disabled){ - bipedLeftArm.rotateAngleX = job.bipedRotsLeftArm[0]; - bipedLeftArm.rotateAngleY = job.bipedRotsLeftArm[1]; - bipedLeftArm.rotateAngleZ = job.bipedRotsLeftArm[2]; - this.setInterpolatedAngles(job,bipedLeftArm,job.larm); - this.setInterpolatedAngles(job,bipedLeftArmwear,job.larm); - } - - if(!job.rarm.disabled){ - bipedRightArm.rotateAngleX = job.bipedRotsRightArm[0]; - bipedRightArm.rotateAngleY = job.bipedRotsRightArm[1]; - bipedRightArm.rotateAngleZ = job.bipedRotsRightArm[2]; - this.setInterpolatedAngles(job,bipedRightArm,job.rarm); - this.setInterpolatedAngles(job,bipedRightArmWear,job.rarm); - } - - if(!job.lleg.disabled){ - bipedLeftLeg.rotateAngleX = job.bipedRotsLeftLeg[0]; - bipedLeftLeg.rotateAngleY = job.bipedRotsLeftLeg[1]; - bipedLeftLeg.rotateAngleZ = job.bipedRotsLeftLeg[2]; - this.setInterpolatedAngles(job,bipedLeftLeg,job.lleg); - this.setInterpolatedAngles(job,bipedLeftLegWear,job.lleg); - } - - if(!job.rleg.disabled){ - bipedRightLeg.rotateAngleX = job.bipedRotsRightLeg[0]; - bipedRightLeg.rotateAngleY = job.bipedRotsRightLeg[1]; - bipedRightLeg.rotateAngleZ = job.bipedRotsRightLeg[2]; - this.setInterpolatedAngles(job,bipedRightLeg,job.rleg); - this.setInterpolatedAngles(job,bipedRightLegWear,job.rleg); + for (int i = 0; i < partConfigs.length; i++) { + if (!partConfigs[i].disabled) { + this.setInterpolatedAngles(job,mainModelParts[i],partConfigs[i]); + this.setInterpolatedAngles(job,armorModelParts[i],partConfigs[i]); + } } this.bipedRightArm.rotationPointX = @@ -657,30 +620,21 @@ public class ModelMPM extends ModelNPCMale{ -MathHelper.sin(this.bipedBody.rotateAngleY) * 2.0F + MathHelper.sin(this.bipedBody.rotateAngleX) * MathHelper.cos(this.bipedBody.rotateAngleY) * 12.0F; - this.addInterpolatedOffset(job,bipedHead,job.head); - this.addInterpolatedOffset(job,bipedHeadwear,job.head); - this.addInterpolatedOffset(job,bipedBody,job.body); - this.addInterpolatedOffset(job,bipedBodywear,job.body); - this.addInterpolatedOffset(job,bipedLeftArm,job.larm); - this.addInterpolatedOffset(job,bipedLeftArmwear,job.larm); - this.addInterpolatedOffset(job,bipedRightArm,job.rarm); - this.addInterpolatedOffset(job,bipedRightArmWear,job.rarm); - this.addInterpolatedOffset(job,bipedLeftLeg,job.lleg); - this.addInterpolatedOffset(job,bipedLeftLegWear,job.lleg); - this.addInterpolatedOffset(job,bipedRightLeg,job.rleg); - this.addInterpolatedOffset(job,bipedRightLegWear,job.rleg); - - job.bipedRotsHead = new float[]{bipedHead.rotateAngleX,bipedHead.rotateAngleY,bipedHead.rotateAngleZ}; - job.bipedRotsBody = new float[]{bipedBody.rotateAngleX,bipedBody.rotateAngleY,bipedBody.rotateAngleZ}; - job.bipedRotsLeftArm = new float[]{bipedLeftArm.rotateAngleX,bipedLeftArm.rotateAngleY,bipedLeftArm.rotateAngleZ}; - job.bipedRotsRightArm = new float[]{bipedRightArm.rotateAngleX,bipedRightArm.rotateAngleY,bipedRightArm.rotateAngleZ}; - job.bipedRotsLeftLeg = new float[]{bipedLeftLeg.rotateAngleX,bipedLeftLeg.rotateAngleY,bipedLeftLeg.rotateAngleZ}; - job.bipedRotsRightLeg = new float[]{bipedRightLeg.rotateAngleX, bipedRightLeg.rotateAngleY, bipedRightLeg.rotateAngleZ}; + for (int i = 0; i < partConfigs.length; i++) { + if (!partConfigs[i].disabled) { + this.addInterpolatedOffset(job,mainModelParts[i],partConfigs[i]); + this.addInterpolatedOffset(job,armorModelParts[i],partConfigs[i]); + } + } } } } public void setInterpolatedAngles(JobPuppet job, ModelRenderer modelPart, JobPuppet.PartConfig puppetPart) { + modelPart.rotateAngleX = puppetPart.prevRotations[0]; + modelPart.rotateAngleY = puppetPart.prevRotations[1]; + modelPart.rotateAngleZ = puppetPart.prevRotations[2]; + float pi = (float) Math.PI * (job.fullAngles ? 2 : 1); if (!job.animate) { modelPart.rotateAngleX = puppetPart.rotationX * pi; @@ -706,6 +660,7 @@ public class ModelMPM extends ModelNPCMale{ Math.min(puppetPart.rotationZ * pi,modelPart.rotateAngleZ) : Math.max(puppetPart.rotationZ * pi,modelPart.rotateAngleZ); } } + puppetPart.prevRotations = new float[]{modelPart.rotateAngleX,modelPart.rotateAngleY,modelPart.rotateAngleZ}; } public void addInterpolatedOffset(JobPuppet job, ModelRenderer modelPart, JobPuppet.PartConfig puppetPart) { @@ -715,12 +670,12 @@ public class ModelMPM extends ModelNPCMale{ modelPart.rotationPointZ += puppetPart.pivotZ; } else { if (job.interpolate) { - modelPart.rotationPointX += puppetPart.prevPivotX; - modelPart.rotationPointY += puppetPart.prevPivotY; - modelPart.rotationPointZ += puppetPart.prevPivotZ; - puppetPart.prevPivotX = (puppetPart.pivotX - puppetPart.prevPivotX) * job.animRate / 10f + puppetPart.prevPivotX; - puppetPart.prevPivotY = (puppetPart.pivotY - puppetPart.prevPivotY) * job.animRate / 10f + puppetPart.prevPivotY; - puppetPart.prevPivotZ = (puppetPart.pivotZ - puppetPart.prevPivotZ) * job.animRate / 10f + puppetPart.prevPivotZ; + modelPart.rotationPointX += puppetPart.prevPivots[0]; + modelPart.rotationPointY += puppetPart.prevPivots[1]; + modelPart.rotationPointZ += puppetPart.prevPivots[2]; + puppetPart.prevPivots[0] = (puppetPart.pivotX - puppetPart.prevPivots[0]) * job.animRate / 10f + puppetPart.prevPivots[0]; + puppetPart.prevPivots[1] = (puppetPart.pivotY - puppetPart.prevPivots[1]) * job.animRate / 10f + puppetPart.prevPivots[1]; + puppetPart.prevPivots[2] = (puppetPart.pivotZ - puppetPart.prevPivots[2]) * job.animRate / 10f + puppetPart.prevPivots[2]; } else { int directionX = Float.compare(puppetPart.pivotX, modelPart.rotationPointX); modelPart.rotationPointX += directionX * job.animRate / 10f; diff --git a/src/main/java/noppes/npcs/roles/JobPuppet.java b/src/main/java/noppes/npcs/roles/JobPuppet.java index 785de4879..1f962a6cf 100644 --- a/src/main/java/noppes/npcs/roles/JobPuppet.java +++ b/src/main/java/noppes/npcs/roles/JobPuppet.java @@ -21,14 +21,6 @@ public class JobPuppet extends JobInterface{ public float animRate = 1.0F; public boolean interpolate = true; - //Client-sided use - public float[] bipedRotsHead = {0,0,0}; - public float[] bipedRotsBody = {0,0,0}; - public float[] bipedRotsLeftArm = {0,0,0}; - public float[] bipedRotsRightArm = {0,0,0}; - public float[] bipedRotsLeftLeg = {0,0,0}; - public float[] bipedRotsRightLeg = {0,0,0}; - public JobPuppet(EntityNPCInterface npc) { super(npc); } @@ -105,10 +97,9 @@ public class JobPuppet extends JobInterface{ public float pivotZ = 0f; //Client-sided use - public float prevPivotX = 0f; - public float prevPivotY = 0f; - public float prevPivotZ = 0f; - + public float[] prevRotations = new float[]{0,0,0}; + public float[] prevPivots = new float[]{0,0,0}; + public boolean disabled = false; public NBTTagCompound writeNBT(){