From 4346992f14a8a0cb6e69d71a224b3e8cb838ca73 Mon Sep 17 00:00:00 2001 From: "Luis C.M" <42545778+c0508383@users.noreply.github.com> Date: Sat, 7 Jan 2023 13:13:44 -0600 Subject: [PATCH] IJobPuppet: -Added the option to not interpolate between angles and move from one value to another at a constant speed. --- src/api | 2 +- .../noppes/npcs/client/model/ModelMPM.java | 48 +++++++++++++++---- .../java/noppes/npcs/roles/JobPuppet.java | 13 +++-- .../npcs/scripted/roles/ScriptJobPuppet.java | 18 +++++-- 4 files changed, 64 insertions(+), 17 deletions(-) diff --git a/src/api b/src/api index 88eb8e3ae..e4a0840ae 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 88eb8e3aedea2c69fd115c48f70a2dc53156119c +Subproject commit e4a0840ae287bd2ffc3f04a6fc0a45d4873343f8 diff --git a/src/main/java/noppes/npcs/client/model/ModelMPM.java b/src/main/java/noppes/npcs/client/model/ModelMPM.java index e2054abbc..85440b867 100644 --- a/src/main/java/noppes/npcs/client/model/ModelMPM.java +++ b/src/main/java/noppes/npcs/client/model/ModelMPM.java @@ -687,9 +687,24 @@ public class ModelMPM extends ModelNPCMale{ modelPart.rotateAngleY = puppetPart.rotationY * pi; modelPart.rotateAngleZ = puppetPart.rotationZ * pi; } else { - modelPart.rotateAngleX = (puppetPart.rotationX * pi - modelPart.rotateAngleX) * job.animRate /10f + modelPart.rotateAngleX; - modelPart.rotateAngleY = (puppetPart.rotationY * pi - modelPart.rotateAngleY) * job.animRate /10f + modelPart.rotateAngleY; - modelPart.rotateAngleZ = (puppetPart.rotationZ * pi - modelPart.rotateAngleZ) * job.animRate /10f + modelPart.rotateAngleZ; + if (job.interpolate) { + modelPart.rotateAngleX = (puppetPart.rotationX * pi - modelPart.rotateAngleX) * job.animRate / 10f + modelPart.rotateAngleX; + modelPart.rotateAngleY = (puppetPart.rotationY * pi - modelPart.rotateAngleY) * job.animRate / 10f + modelPart.rotateAngleY; + modelPart.rotateAngleZ = (puppetPart.rotationZ * pi - modelPart.rotateAngleZ) * job.animRate / 10f + modelPart.rotateAngleZ; + } else { + int directionX = Float.compare(puppetPart.rotationX * pi, modelPart.rotateAngleX); + modelPart.rotateAngleX += directionX * job.animRate / 10f; + modelPart.rotateAngleX = directionX == 1 ? + Math.min(puppetPart.rotationX * pi,modelPart.rotateAngleX) : Math.max(puppetPart.rotationX * pi,modelPart.rotateAngleX); + int directionY = Float.compare(puppetPart.rotationY * pi, modelPart.rotateAngleY); + modelPart.rotateAngleY += directionY * job.animRate / 10f; + modelPart.rotateAngleY = directionY == 1 ? + Math.min(puppetPart.rotationY * pi,modelPart.rotateAngleY) : Math.max(puppetPart.rotationY * pi,modelPart.rotateAngleY); + int directionZ = Float.compare(puppetPart.rotationZ * pi, modelPart.rotateAngleZ); + modelPart.rotateAngleZ += directionZ * job.animRate / 10f; + modelPart.rotateAngleZ = directionZ == 1 ? + Math.min(puppetPart.rotationZ * pi,modelPart.rotateAngleZ) : Math.max(puppetPart.rotationZ * pi,modelPart.rotateAngleZ); + } } } @@ -699,12 +714,27 @@ public class ModelMPM extends ModelNPCMale{ modelPart.rotationPointY += puppetPart.pivotY; modelPart.rotationPointZ += puppetPart.pivotZ; } else { - 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; + 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; + } else { + int directionX = Float.compare(puppetPart.pivotX, modelPart.rotationPointX); + modelPart.rotationPointX += directionX * job.animRate / 10f; + modelPart.rotationPointX = directionX == 1 ? + Math.min(puppetPart.pivotX,modelPart.rotationPointX) : Math.max(puppetPart.pivotX,modelPart.rotationPointX); + int directionY = Float.compare(puppetPart.pivotY, modelPart.rotationPointY); + modelPart.rotationPointY += directionY * job.animRate / 10f; + modelPart.rotationPointY = directionY == 1 ? + Math.min(puppetPart.pivotY,modelPart.rotationPointY) : Math.max(puppetPart.pivotY,modelPart.rotationPointY); + int directionZ = Float.compare(puppetPart.pivotZ, modelPart.rotationPointZ); + modelPart.rotationPointZ += directionZ * job.animRate / 10f; + modelPart.rotationPointZ = directionZ == 1 ? + Math.min(puppetPart.pivotZ,modelPart.rotationPointZ) : Math.max(puppetPart.pivotZ,modelPart.rotationPointZ); + } } } diff --git a/src/main/java/noppes/npcs/roles/JobPuppet.java b/src/main/java/noppes/npcs/roles/JobPuppet.java index c7a180612..785de4879 100644 --- a/src/main/java/noppes/npcs/roles/JobPuppet.java +++ b/src/main/java/noppes/npcs/roles/JobPuppet.java @@ -19,6 +19,7 @@ public class JobPuppet extends JobInterface{ public boolean animate = false; public float animRate = 1.0F; + public boolean interpolate = true; //Client-sided use public float[] bipedRotsHead = {0,0,0}; @@ -46,6 +47,7 @@ public class JobPuppet extends JobInterface{ compound.setBoolean("PuppetMoving", whileMoving); compound.setBoolean("PuppetFullAngles", fullAngles); + compound.setBoolean("PuppetInterpolate", interpolate); compound.setBoolean("PuppetAnimate", animate); compound.setFloat("PuppetAnimSpeed", animRate); return compound; @@ -65,6 +67,11 @@ public class JobPuppet extends JobInterface{ whileMoving = compound.getBoolean("PuppetMoving"); fullAngles = compound.getBoolean("PuppetFullAngles"); + if (!compound.hasKey("PuppetInterpolate")) { + interpolate = true; + } else { + interpolate = compound.getBoolean("PuppetInterpolate"); + } animate = compound.getBoolean("PuppetAnimate"); animRate = compound.getFloat("PuppetAnimSpeed"); } @@ -118,9 +125,9 @@ public class JobPuppet extends JobInterface{ } public void readNBT(NBTTagCompound compound){ - rotationX = ValueUtil.correctFloat(compound.getFloat("RotationX"), -0.5f, 0.5f); - rotationY = ValueUtil.correctFloat(compound.getFloat("RotationY"), -0.5f, 0.5f); - rotationZ = ValueUtil.correctFloat(compound.getFloat("RotationZ"), -0.5f, 0.5f); + rotationX = compound.getFloat("RotationX"); + rotationY = compound.getFloat("RotationY"); + rotationZ = compound.getFloat("RotationZ"); pivotX = compound.getFloat("PivotX"); pivotY = compound.getFloat("PivotY"); pivotZ = compound.getFloat("PivotZ"); diff --git a/src/main/java/noppes/npcs/scripted/roles/ScriptJobPuppet.java b/src/main/java/noppes/npcs/scripted/roles/ScriptJobPuppet.java index f9dec576a..4141cd887 100644 --- a/src/main/java/noppes/npcs/scripted/roles/ScriptJobPuppet.java +++ b/src/main/java/noppes/npcs/scripted/roles/ScriptJobPuppet.java @@ -16,19 +16,29 @@ public class ScriptJobPuppet extends ScriptJobInterface implements IJobPuppet { this.job.animate = animated; } - public boolean fullAngles() { - return job.fullAngles; + public boolean isAnimated() { + return this.job.animate; + } + + public void setInterpolated(boolean interpolate) { + this.job.interpolate = interpolate; + } + + public boolean isInterpolated() { + return this.job.interpolate; } public void setFullAngles(boolean limit) { job.fullAngles = limit; } - public boolean isAnimated() { - return this.job.animate; + public boolean fullAngles() { + return job.fullAngles; } public void setAnimRate(float animRate) { + if (animRate < 0) + animRate = 0; this.job.animRate = animRate; }