public virtual void resolve(float x, float y, int chainLength, com.brashmonkey.spriter.objects.SpriterAbstractObject effector) { float xx = effector.getX() + (float)System.Math.Cos(SpriterCalculator.DegreeToRadian(effector .getAngle())) * SpriterCalculator.BONE_LENGTH * effector .getScaleX(); float yy = effector.getY() + (float)System.Math.Sin(SpriterCalculator.DegreeToRadian(effector .getAngle())) * SpriterCalculator.BONE_LENGTH * effector .getScaleX(); effector.setAngle(com.brashmonkey.spriter.SpriterCalculator.angleBetween(effector .getX(), effector.getY(), x, y)); if (this.player.getFlipX() == -1) { effector.setAngle(effector.getAngle() + 180f); } com.brashmonkey.spriter.objects.SpriterBone parent = null; if (effector.hasParent()) { parent = player.getRuntimeBones()[effector.getParentId()]; effector.copyValuesTo(temp); com.brashmonkey.spriter.SpriterCalculator.reTranslateRelative(parent, temp); if (effector is com.brashmonkey.spriter.objects.SpriterBone) { temp.copyValuesTo(player.lastFrame.getBones()[effector.getId()]); } else { temp.copyValuesTo(player.lastFrame.getObjects()[effector.getId()]); } } for (int i = 0; i < chainLength && parent != null; i++) { if (com.brashmonkey.spriter.SpriterCalculator.distanceBetween(xx, yy, x, y) <= 1) { return; } parent.setAngle(parent.getAngle() + com.brashmonkey.spriter.SpriterCalculator.angleDifference (com.brashmonkey.spriter.SpriterCalculator.angleBetween(parent.getX(), parent.getY (), x, y), com.brashmonkey.spriter.SpriterCalculator.angleBetween(parent.getX(), parent.getY(), xx, yy))); this.player.updateRecursively(parent); if (parent.hasParent()) { parent = player.getRuntimeBones()[parent.getParent().getId()]; } else { parent = null; } xx = effector.getX() + (float)System.Math.Cos(SpriterCalculator.DegreeToRadian(effector.getAngle ())) * SpriterCalculator.BONE_LENGTH * effector.getScaleX (); yy = effector.getY() + (float)System.Math.Sin(SpriterCalculator.DegreeToRadian(effector.getAngle ())) * SpriterCalculator.BONE_LENGTH * effector.getScaleX (); } }
private void interpolateAbstractObject(com.brashmonkey.spriter.objects.SpriterAbstractObject target, com.brashmonkey.spriter.objects.SpriterAbstractObject obj1, com.brashmonkey.spriter.objects.SpriterAbstractObject obj2, float startTime, float endTime, float frame) { if (obj2 == null) { return; } target.setX(this.interpolate(obj1.getX(), obj2.getX(), startTime, endTime, frame) ); target.setY(this.interpolate(obj1.getY(), obj2.getY(), startTime, endTime, frame) ); target.setScaleX(this.interpolate(obj1.getScaleX(), obj2.getScaleX(), startTime, endTime, frame)); target.setScaleY(this.interpolate(obj1.getScaleY(), obj2.getScaleY(), startTime, endTime, frame)); target.setAngle(this.interpolateAngle(obj1.getAngle(), obj2.getAngle(), startTime , endTime, frame)); }
private void modObject(com.brashmonkey.spriter.objects.SpriterAbstractObject @object ) { @object.setAngle(@object.getAngle() + this.angle); @object.setScaleX(@object.getScaleX() * this.scaleX); @object.setScaleY(@object.getScaleY() * this.scaleY); @object.setX(@object.getX() + this.x); @object.setY(@object.getY() + this.y); }
public static void reTranslateRelative(com.brashmonkey.spriter.objects.SpriterAbstractObject parent, com.brashmonkey.spriter.objects.SpriterAbstractObject child) { reTranslateRelative(parent, child.getX(), child.getY(), child); }
/// <summary>Rotates the given point around the given parent.</summary> /// <remarks>Rotates the given point around the given parent.</remarks> /// <param name="parent"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="target">save new position in</param> public static void translateRelative(com.brashmonkey.spriter.objects.SpriterAbstractObject parent, float x, float y, com.brashmonkey.spriter.objects.SpriterAbstractObject target) { float px = x * (parent.getScaleX()); float py = y * (parent.getScaleY()); float s = (float)System.Math.Sin(DegreeToRadian(parent.getAngle())); float c = (float)System.Math.Cos(DegreeToRadian(parent.getAngle())); float xnew = (px * c) - (py * s); float ynew = (px * s) + (py * c); xnew += parent.getX(); ynew += parent.getY(); target.setX(xnew); target.setY(ynew); }
public static void reTranslateRelative(com.brashmonkey.spriter.objects.SpriterAbstractObject parent, float x, float y, com.brashmonkey.spriter.objects.SpriterAbstractObject target) { target.setAngle(target.getAngle() - parent.getAngle()); target.setScaleX(target.getScaleX() / parent.getScaleX()); target.setScaleY(target.getScaleY() / parent.getScaleY()); float xx = x - parent.getX(); float yy = y - parent.getY(); double angle = DegreeToRadian(parent.getAngle()); float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); float newX = yy * sin + xx * cos; float newY = yy * cos - xx * sin; target.setX(newX / parent.getScaleX()); target.setY(newY / parent.getScaleY()); }
private void updateTransformedTempObject(com.brashmonkey.spriter.objects.SpriterAbstractObject source, com.brashmonkey.spriter.objects.SpriterAbstractObject target) { source.copyValuesTo(target); if (!target.hasParent()) { target.setX(target.getX() + this.pivotX); target.setY(target.getY() + this.pivotY); } this.translateRelative(target, (target.hasParent()) ? this.tempBones2[target.getParentId ()] : this.tempParent); }