mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 08:27:45 +00:00
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:
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user