IJobPuppet:

-Added the option to not interpolate between angles and move from one value to another at a constant speed.
This commit is contained in:
Luis C.M committed 2023-01-07 13:13:44 -06:00
1 parent b4cb69000e
commit 4346992f14
4 files changed
+64 -17

No files matched your search

@@ -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);
}
}
}
+10 -3
View File
@@ -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");
@@ -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;
}