From 12c986806d23c63e45f95a78aae3175edd30942b Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Sat, 24 Dec 2016 17:22:11 +0100 Subject: [PATCH] worldToLocalRotation and localToWorldRotation utility methods. http://esotericsoftware.com/forum/RegionAttachment-offset-7662?p=35770#p35770 --- .../src/com/esotericsoftware/spine/Bone.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java index e96d6a661..109811a26 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java @@ -380,29 +380,6 @@ public class Bone implements Updatable { return (float)Math.sqrt(b * b + d * d); } - public float worldToLocalRotationX () { - Bone parent = this.parent; - if (parent == null) return arotation; - return atan2(parent.a * c - parent.c * a, parent.d * a - parent.b * c) * radDeg; - } - - public float worldToLocalRotationY () { - Bone parent = this.parent; - if (parent == null) return arotation; - return atan2(parent.a * d - parent.c * b, parent.d * b - parent.b * d) * radDeg; - } - - /** Rotates the world transform the specified amount. {@link #updateWorldTransform()} will need to be called on any child - * bones, recursively. */ - public void rotateWorld (float degrees) { - float cos = cosDeg(degrees), sin = sinDeg(degrees); - a = cos * a - sin * c; - b = cos * b - sin * d; - c = sin * a + cos * c; - d = sin * b + cos * d; - appliedValid = false; - } - /** Computes the individual applied transform values from the world transform. This can be useful to perform processing using * the applied transform after the world transform has been modified directly (eg, by a constraint). *

@@ -480,6 +457,29 @@ public class Bone implements Updatable { return local; } + /** Transforms a world rotation to a local rotation. */ + public float worldToLocalRotation (float worldRotation) { + float sin = sinDeg(worldRotation), cos = cosDeg(worldRotation); + return atan2(a * sin - c * cos, d * cos - b * sin) * radDeg; + } + + /** Transforms a local rotation to a world rotation. */ + public float localToWorldRotation (float localRotation) { + float sin = sinDeg(localRotation), cos = cosDeg(localRotation); + return atan2(cos * c + sin * d, cos * a + sin * b) * radDeg; + } + + /** Rotates the world transform the specified amount. {@link #updateWorldTransform()} will need to be called on any child + * bones, recursively. */ + public void rotateWorld (float degrees) { + float cos = cosDeg(degrees), sin = sinDeg(degrees); + a = cos * a - sin * c; + b = cos * b - sin * d; + c = sin * a + cos * c; + d = sin * b + cos * d; + appliedValid = false; + } + public String toString () { return data.name; }