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..d7db61803 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/Bone.java @@ -30,7 +30,7 @@ package com.esotericsoftware.spine; -import static com.badlogic.gdx.math.MathUtils.*; +import static com.esotericsoftware.spine.utils.TrigUtils.*; import static com.badlogic.gdx.math.Matrix3.*; import com.badlogic.gdx.math.Matrix3; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java index 36a5c9a1e..4929cd9f4 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -30,7 +30,7 @@ package com.esotericsoftware.spine; -import static com.badlogic.gdx.math.MathUtils.*; +import static com.esotericsoftware.spine.utils.TrigUtils.*; import com.badlogic.gdx.utils.Array; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java index 08e83a4b6..b03184860 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/PathConstraint.java @@ -30,7 +30,6 @@ package com.esotericsoftware.spine; -import static com.badlogic.gdx.math.MathUtils.*; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.FloatArray; @@ -39,6 +38,7 @@ import com.esotericsoftware.spine.PathConstraintData.RotateMode; import com.esotericsoftware.spine.PathConstraintData.SpacingMode; import com.esotericsoftware.spine.attachments.Attachment; import com.esotericsoftware.spine.attachments.PathAttachment; +import com.esotericsoftware.spine.utils.TrigUtils; /** Stores the current pose for a path constraint. A path constraint adjusts the rotation, translation, and scale of the * constrained bones so they follow a {@link PathAttachment}. @@ -131,7 +131,7 @@ public class PathConstraint implements Constraint { else { tip = false; Bone p = target.bone; - offsetRotation *= p.a * p.d - p.b * p.c > 0 ? degRad : -degRad; + offsetRotation *= p.a * p.d - p.b * p.c > 0 ? TrigUtils.degRad : -TrigUtils.degRad; } for (int i = 0, p = 3; i < boneCount; i++, p += 3) { Bone bone = (Bone)bones[i]; @@ -155,23 +155,23 @@ public class PathConstraint implements Constraint { else if (spaces[i + 1] == 0) r = positions[p + 2]; else - r = atan2(dy, dx); - r -= atan2(c, a); + r = (float)Math.atan2(dy, dx); + r -= (float)Math.atan2(c, a); if (tip) { - cos = cos(r); - sin = sin(r); + cos = (float)Math.cos(r); + sin = (float)Math.sin(r); float length = bone.data.length; boneX += (length * (cos * a - sin * c) - dx) * rotateMix; boneY += (length * (sin * a + cos * c) - dy) * rotateMix; } else r += offsetRotation; - if (r > PI) - r -= PI2; - else if (r < -PI) // - r += PI2; + if (r > TrigUtils.PI) + r -= TrigUtils.PI2; + else if (r < -TrigUtils.PI) // + r += TrigUtils.PI2; r *= rotateMix; - cos = cos(r); - sin = sin(r); + cos = (float)Math.cos(r); + sin = (float)Math.sin(r); bone.a = cos * a - sin * c; bone.b = cos * b - sin * d; bone.c = sin * a + cos * c; @@ -399,16 +399,16 @@ public class PathConstraint implements Constraint { } private void addBeforePosition (float p, float[] temp, int i, float[] out, int o) { - float x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = atan2(dy, dx); - out[o] = x1 + p * cos(r); - out[o + 1] = y1 + p * sin(r); + float x1 = temp[i], y1 = temp[i + 1], dx = temp[i + 2] - x1, dy = temp[i + 3] - y1, r = (float)Math.atan2(dy, dx); + out[o] = x1 + p * (float)Math.cos(r); + out[o + 1] = y1 + p * (float)Math.sin(r); out[o + 2] = r; } private void addAfterPosition (float p, float[] temp, int i, float[] out, int o) { - float x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = atan2(dy, dx); - out[o] = x1 + p * cos(r); - out[o + 1] = y1 + p * sin(r); + float x1 = temp[i + 2], y1 = temp[i + 3], dx = x1 - temp[i], dy = y1 - temp[i + 1], r = (float)Math.atan2(dy, dx); + out[o] = x1 + p * (float)Math.cos(r); + out[o + 1] = y1 + p * (float)Math.sin(r); out[o + 2] = r; } @@ -420,7 +420,7 @@ public class PathConstraint implements Constraint { float x = x1 * uuu + cx1 * uut3 + cx2 * utt3 + x2 * ttt, y = y1 * uuu + cy1 * uut3 + cy2 * utt3 + y2 * ttt; out[o] = x; out[o + 1] = y; - if (tangents) out[o + 2] = atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); + if (tangents) out[o + 2] = (float)Math.atan2(y - (y1 * uu + cy1 * ut * 2 + cy2 * tt), x - (x1 * uu + cx1 * ut * 2 + cx2 * tt)); } public int getOrder () { diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java index cd4a12b95..0db2e371c 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/TransformConstraint.java @@ -30,7 +30,7 @@ package com.esotericsoftware.spine; -import static com.badlogic.gdx.math.MathUtils.*; +import static com.esotericsoftware.spine.utils.TrigUtils.*; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.utils.Array; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java index 08981f758..b2b28162f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/attachments/RegionAttachment.java @@ -94,8 +94,8 @@ public class RegionAttachment extends Attachment { localX2 *= scaleX; localY2 *= scaleY; float rotation = getRotation(); - float cos = MathUtils.cosDeg(rotation); - float sin = MathUtils.sinDeg(rotation); + float cos = (float)Math.cos(MathUtils.degRad * rotation); + float sin = (float)Math.sin(MathUtils.degRad * rotation); float x = getX(); float y = getY(); float localXCos = localX * cos + x; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TrigUtils.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TrigUtils.java new file mode 100644 index 000000000..581d56794 --- /dev/null +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/utils/TrigUtils.java @@ -0,0 +1,60 @@ +/****************************************************************************** + * Spine Runtimes Software License v2.5 + * + * Copyright (c) 2013-2016, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable, and + * non-transferable license to use, install, execute, and perform the Spine + * Runtimes software and derivative works solely for personal or internal + * use. Without the written permission of Esoteric Software (see Section 2 of + * the Spine Software License Agreement), you may not (a) modify, translate, + * adapt, or develop new applications using the Spine Runtimes or otherwise + * create derivative works or improvements of the Spine Runtimes or (b) remove, + * delete, alter, or obscure any trademarks or any copyright, trademark, patent, + * or other intellectual property or proprietary rights notices on or in the + * Software, including any copy thereof. Redistributions in binary or source + * form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO + * EVENT SHALL ESOTERIC SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, BUSINESS INTERRUPTION, OR LOSS OF + * USE, DATA, OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +package com.esotericsoftware.spine.utils; + +public class TrigUtils { + static public final float PI = 3.1415927f; + static public final float PI2 = PI * 2; + static public final float radiansToDegrees = 180f / PI; + static public final float radDeg = radiansToDegrees; + static public final float degreesToRadians = PI / 180; + static public final float degRad = degreesToRadians; + + public static float cosDeg(float angle) { + return (float)Math.cos(angle * degRad); + } + + public static float sinDeg(float angle) { + return (float)Math.sin(angle * degRad); + } + + public static float cos(float angle) { + return (float)Math.cos(angle); + } + + public static float sin(float angle) { + return (float)Math.sin(angle); + } + + public static float atan2(float y, float x) { + return (float)Math.atan2(y, x); + } +}