mirror of
https://github.com/KAMKEEL/CustomNPC-Plus.git
synced 2026-11-12 04:57:27 +00:00
Implemented interpolation options for player model animations.
This commit is contained in:
1 parent
d6ed069862
commit
235ddaa1ea
2 files changed
+59
-12
No files matched your search
@@ -29,6 +29,7 @@ public class PlayerModelData implements IPlayerModelData {
|
||||
|
||||
public boolean animate = false;
|
||||
public float animRate = 1.0F;
|
||||
public boolean interpolate;
|
||||
|
||||
//Client-sided use
|
||||
public float modelRotPartialTicks;
|
||||
@@ -75,6 +76,7 @@ public class PlayerModelData implements IPlayerModelData {
|
||||
compound.setBoolean("PuppetRotationEnabledY",rotationEnabledY);
|
||||
compound.setBoolean("PuppetRotationEnabledZ",rotationEnabledZ);
|
||||
|
||||
compound.setBoolean("PuppetInterpolate", interpolate);
|
||||
compound.setBoolean("PuppetAnimate", animate);
|
||||
compound.setFloat("PuppetAnimSpeed", animRate);
|
||||
return compound;
|
||||
@@ -101,6 +103,11 @@ public class PlayerModelData implements IPlayerModelData {
|
||||
rotationEnabledY = compound.getBoolean("PuppetRotationEnabledY");
|
||||
rotationEnabledZ = compound.getBoolean("PuppetRotationEnabledZ");
|
||||
|
||||
if (!compound.hasKey("PuppetInterpolate")) {
|
||||
interpolate = true;
|
||||
} else {
|
||||
interpolate = compound.getBoolean("PuppetInterpolate");
|
||||
}
|
||||
animate = compound.getBoolean("PuppetAnimate");
|
||||
animRate = compound.getFloat("PuppetAnimSpeed");
|
||||
}
|
||||
@@ -121,6 +128,14 @@ public class PlayerModelData implements IPlayerModelData {
|
||||
return this.animate;
|
||||
}
|
||||
|
||||
public void setInterpolated(boolean interpolate) {
|
||||
this.interpolate = interpolate;
|
||||
}
|
||||
|
||||
public boolean isInterpolated() {
|
||||
return this.interpolate;
|
||||
}
|
||||
|
||||
public void setFullAngles(boolean limit) {
|
||||
fullAngles = limit;
|
||||
}
|
||||
@@ -130,6 +145,8 @@ public class PlayerModelData implements IPlayerModelData {
|
||||
}
|
||||
|
||||
public void setAnimRate(float animRate) {
|
||||
if (animRate < 0)
|
||||
animRate = 0;
|
||||
this.animRate = animRate;
|
||||
}
|
||||
|
||||
|
||||
@@ -193,12 +193,27 @@ public class MixinModelRenderer {
|
||||
this.rotateAngleZ = puppetPart.rotationZ * pi;
|
||||
} else if (puppetPart.partialRotationTick != ClientEventHandler.partialRenderTick) {
|
||||
puppetPart.partialRotationTick = ClientEventHandler.partialRenderTick;
|
||||
if (puppetPart.rotationX * pi - this.rotateAngleX != 0)
|
||||
this.rotateAngleX = (puppetPart.rotationX * pi - this.rotateAngleX) * modelData.animRate /10f + this.rotateAngleX;
|
||||
if (puppetPart.rotationY * pi - this.rotateAngleY != 0)
|
||||
this.rotateAngleY = (puppetPart.rotationY * pi - this.rotateAngleY) * modelData.animRate /10f + this.rotateAngleY;
|
||||
if (puppetPart.rotationZ * pi - this.rotateAngleZ != 0)
|
||||
this.rotateAngleZ = (puppetPart.rotationZ * pi - this.rotateAngleZ) * modelData.animRate /10f + this.rotateAngleZ;
|
||||
if (modelData.interpolate) {
|
||||
if (puppetPart.rotationX * pi - this.rotateAngleX != 0)
|
||||
this.rotateAngleX = (puppetPart.rotationX * pi - this.rotateAngleX) * modelData.animRate / 10f + this.rotateAngleX;
|
||||
if (puppetPart.rotationY * pi - this.rotateAngleY != 0)
|
||||
this.rotateAngleY = (puppetPart.rotationY * pi - this.rotateAngleY) * modelData.animRate / 10f + this.rotateAngleY;
|
||||
if (puppetPart.rotationZ * pi - this.rotateAngleZ != 0)
|
||||
this.rotateAngleZ = (puppetPart.rotationZ * pi - this.rotateAngleZ) * modelData.animRate / 10f + this.rotateAngleZ;
|
||||
} else {
|
||||
int directionX = Float.compare(puppetPart.rotationX * pi, this.rotateAngleX);
|
||||
this.rotateAngleX += directionX * modelData.animRate / 10f;
|
||||
this.rotateAngleX = directionX == 1 ?
|
||||
Math.min(puppetPart.rotationX * pi,this.rotateAngleX) : Math.max(puppetPart.rotationX * pi,this.rotateAngleX);
|
||||
int directionY = Float.compare(puppetPart.rotationY * pi, this.rotateAngleY);
|
||||
this.rotateAngleY += directionY * modelData.animRate / 10f;
|
||||
this.rotateAngleY = directionY == 1 ?
|
||||
Math.min(puppetPart.rotationY * pi,this.rotateAngleY) : Math.max(puppetPart.rotationY * pi,this.rotateAngleY);
|
||||
int directionZ = Float.compare(puppetPart.rotationZ * pi, this.rotateAngleZ);
|
||||
this.rotateAngleZ += directionZ * modelData.animRate / 10f;
|
||||
this.rotateAngleZ = directionZ == 1 ?
|
||||
Math.min(puppetPart.rotationZ * pi,this.rotateAngleZ) : Math.max(puppetPart.rotationZ * pi,this.rotateAngleZ);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -216,12 +231,27 @@ public class MixinModelRenderer {
|
||||
this.rotationPointZ = puppetPart.originalPivotZ + puppetPart.pivotZ;
|
||||
} else if (puppetPart.partialPivotTick != ClientEventHandler.partialRenderTick) {
|
||||
puppetPart.partialPivotTick = ClientEventHandler.partialRenderTick;
|
||||
puppetPart.destPivotX = (puppetPart.pivotX - puppetPart.destPivotX) * modelData.animRate /10f + puppetPart.destPivotX;
|
||||
this.rotationPointX = puppetPart.originalPivotX + puppetPart.destPivotX;
|
||||
puppetPart.destPivotY = (puppetPart.pivotY - puppetPart.destPivotY) * modelData.animRate /10f + puppetPart.destPivotY;
|
||||
this.rotationPointY = puppetPart.originalPivotY + puppetPart.destPivotY;
|
||||
puppetPart.destPivotZ = (puppetPart.pivotZ - puppetPart.destPivotZ) * modelData.animRate /10f + puppetPart.destPivotZ;
|
||||
this.rotationPointZ = puppetPart.originalPivotZ + puppetPart.destPivotZ;
|
||||
if (modelData.interpolate) {
|
||||
puppetPart.destPivotX = (puppetPart.pivotX - puppetPart.destPivotX) * modelData.animRate / 10f + puppetPart.destPivotX;
|
||||
this.rotationPointX = puppetPart.originalPivotX + puppetPart.destPivotX;
|
||||
puppetPart.destPivotY = (puppetPart.pivotY - puppetPart.destPivotY) * modelData.animRate / 10f + puppetPart.destPivotY;
|
||||
this.rotationPointY = puppetPart.originalPivotY + puppetPart.destPivotY;
|
||||
puppetPart.destPivotZ = (puppetPart.pivotZ - puppetPart.destPivotZ) * modelData.animRate / 10f + puppetPart.destPivotZ;
|
||||
this.rotationPointZ = puppetPart.originalPivotZ + puppetPart.destPivotZ;
|
||||
} else {
|
||||
int directionX = Float.compare(puppetPart.pivotX, this.rotationPointX);
|
||||
this.rotationPointX = puppetPart.originalPivotX + directionX * modelData.animRate / 10f;
|
||||
this.rotationPointX = directionX == 1 ?
|
||||
Math.min(puppetPart.originalPivotX + puppetPart.pivotX,this.rotationPointX) : Math.max(puppetPart.originalPivotX + puppetPart.pivotX,this.rotationPointX);
|
||||
int directionY = Float.compare(puppetPart.pivotY, this.rotationPointY);
|
||||
this.rotationPointY = puppetPart.originalPivotY + directionY * modelData.animRate / 10f;
|
||||
this.rotationPointY = directionY == 1 ?
|
||||
Math.min(puppetPart.originalPivotY + puppetPart.pivotY,this.rotationPointY) : Math.max(puppetPart.originalPivotY + puppetPart.pivotY,this.rotationPointY);
|
||||
int directionZ = Float.compare(puppetPart.pivotZ, this.rotationPointZ);
|
||||
this.rotationPointZ = puppetPart.originalPivotZ + directionZ * modelData.animRate / 10f;
|
||||
this.rotationPointZ = directionZ == 1 ?
|
||||
Math.min(puppetPart.originalPivotZ + puppetPart.pivotZ,this.rotationPointZ) : Math.max(puppetPart.originalPivotZ + puppetPart.pivotZ,this.rotationPointZ);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user