From 7823833bb4ca973fb032dd200c05be1e284a9224 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Wed, 13 Apr 2016 21:14:59 +0200 Subject: [PATCH] Minor clean up. --- spine-csharp/spine-csharp.csproj | 1 + spine-csharp/src/Animation.cs | 6 +-- .../src/Attachments/IFfdAttachment.cs | 33 ++++++++++++++++- spine-csharp/src/IkConstraint.cs | 22 +++++------ spine-csharp/src/SkeletonBinary.cs | 35 ++++++++---------- spine-csharp/src/SkeletonJson.cs | 8 ++-- .../esotericsoftware/spine/IkConstraint.java | 22 +++++------ .../spine/SkeletonBinary.java | 2 +- .../esotericsoftware/spine/SkeletonJson.java | 3 +- spine-xna/example/data/raptor.skel | Bin 42077 -> 42782 bytes spine-xna/example/src/ExampleGame.cs | 2 +- 11 files changed, 80 insertions(+), 54 deletions(-) diff --git a/spine-csharp/spine-csharp.csproj b/spine-csharp/spine-csharp.csproj index a0b8effbe..8491dd148 100644 --- a/spine-csharp/spine-csharp.csproj +++ b/spine-csharp/spine-csharp.csproj @@ -70,6 +70,7 @@ + diff --git a/spine-csharp/src/Animation.cs b/spine-csharp/src/Animation.cs index 4953d23ef..c77e34e05 100644 --- a/spine-csharp/src/Animation.cs +++ b/spine-csharp/src/Animation.cs @@ -548,7 +548,7 @@ namespace Spine { } } - public class FFDTimeline : CurveTimeline { + public class FfdTimeline : CurveTimeline { internal int slotIndex; internal float[] frames; private float[][] frameVertices; @@ -559,7 +559,7 @@ namespace Spine { public float[][] Vertices { get { return frameVertices; } set { frameVertices = value; } } public Attachment Attachment { get { return attachment; } set { attachment = value; } } - public FFDTimeline (int frameCount) + public FfdTimeline (int frameCount) : base(frameCount) { frames = new float[frameCount]; frameVertices = new float[frameCount][]; @@ -573,7 +573,7 @@ namespace Spine { override public void Apply (Skeleton skeleton, float lastTime, float time, ExposedList firedEvents, float alpha) { Slot slot = skeleton.slots.Items[slotIndex]; - IFfdAttachment ffdAttachment = slot.attachment as IFfdAttachment; // == null if not FfdAttachment. + IFfdAttachment ffdAttachment = slot.attachment as IFfdAttachment; if (ffdAttachment == null || !ffdAttachment.ApplyFFD(attachment)) return; float[] frames = this.frames; diff --git a/spine-csharp/src/Attachments/IFfdAttachment.cs b/spine-csharp/src/Attachments/IFfdAttachment.cs index 8e234f3a2..bdc87f7de 100644 --- a/spine-csharp/src/Attachments/IFfdAttachment.cs +++ b/spine-csharp/src/Attachments/IFfdAttachment.cs @@ -1,4 +1,35 @@ -namespace Spine { +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.3 + * + * Copyright (c) 2013-2015, 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 (the "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 otherwise create derivative works, improvements of the + * Software or develop new applications using the Software 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; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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. + *****************************************************************************/ + +namespace Spine { public interface IFfdAttachment { bool ApplyFFD (Attachment sourceAttachment); } diff --git a/spine-csharp/src/IkConstraint.cs b/spine-csharp/src/IkConstraint.cs index c5212850c..cb3b6938d 100644 --- a/spine-csharp/src/IkConstraint.cs +++ b/spine-csharp/src/IkConstraint.cs @@ -99,18 +99,18 @@ namespace Spine { static public void Apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, float alpha) { if (alpha == 0) return; float px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY; - int offset1, offset2, sign2; + int os1, os2, s2; if (psx < 0) { psx = -psx; - offset1 = 180; - sign2 = -1; + os1 = 180; + s2 = -1; } else { - offset1 = 0; - sign2 = 1; + os1 = 0; + s2 = 1; } if (psy < 0) { psy = -psy; - sign2 = -sign2; + s2 = -s2; } float cx = child.x, cy = child.y, csx = child.scaleX; bool u = Math.Abs(psx - psy) <= 0.0001f; @@ -121,9 +121,9 @@ namespace Spine { } if (csx < 0) { csx = -csx; - offset2 = 180; + os2 = 180; } else - offset2 = 0; + os2 = 0; Bone pp = parent.parent; float tx, ty, dx, dy; if (pp == null) { @@ -208,9 +208,9 @@ namespace Spine { } } outer: - float oo = MathUtils.Atan2(cy, cx) * sign2; - a1 = (a1 - oo) * MathUtils.radDeg + offset1; - a2 = (a2 + oo) * MathUtils.radDeg * sign2 + offset2; + float os = MathUtils.Atan2(cy, cx) * s2; + a1 = (a1 - os) * MathUtils.radDeg + os1; + a2 = (a2 + os) * MathUtils.radDeg * s2 + os2; if (a1 > 180) a1 -= 360; else if (a1 < -180) a1 += 360; if (a2 > 180) a2 -= 360; diff --git a/spine-csharp/src/SkeletonBinary.cs b/spine-csharp/src/SkeletonBinary.cs index f63367aaa..4c065e3f4 100644 --- a/spine-csharp/src/SkeletonBinary.cs +++ b/spine-csharp/src/SkeletonBinary.cs @@ -50,11 +50,10 @@ namespace Spine { public const int CURVE_STEPPED = 1; public const int CURVE_BEZIER = 2; - private AttachmentLoader attachmentLoader; public float Scale { get; set; } - private byte[] bytes = new byte[32]; - private byte[] buffer = new byte[4]; + private AttachmentLoader attachmentLoader; + private byte[] buffer = new byte[32]; private List linkedMeshes = new List(); public SkeletonBinary (params Atlas[] atlasArray) @@ -358,7 +357,7 @@ namespace Spine { for (int i = 0; i < vertexCount; i++) { int boneCount = (int)ReadFloat(input); bones.Add(boneCount); - for (int ii = 0; i < boneCount; ii++) { + for (int ii = 0; ii < boneCount; ii++) { bones.Add((int)ReadFloat(input)); weights.Add(ReadFloat(input) * scale); weights.Add(ReadFloat(input) * scale); @@ -554,7 +553,7 @@ namespace Spine { for (int iii = 0, nnn = ReadVarint(input, true); iii < nnn; iii++) { Attachment attachment = skin.GetAttachment(slotIndex, ReadString(input)); int frameCount = ReadVarint(input, true); - FFDTimeline timeline = new FFDTimeline(frameCount); + FfdTimeline timeline = new FfdTimeline(frameCount); timeline.slotIndex = slotIndex; timeline.attachment = attachment; for (int frameIndex = 0; frameIndex < frameCount; frameIndex++) { @@ -698,9 +697,7 @@ namespace Spine { if ((b & 0x80) != 0) { b = input.ReadByte(); result |= (b & 0x7F) << 21; - if ((b & 0x80) != 0) { - result |= (input.ReadByte() & 0x7F) << 28; - } + if ((b & 0x80) != 0) result |= (input.ReadByte() & 0x7F) << 28; } } } @@ -716,20 +713,18 @@ namespace Spine { return ""; } byteCount--; - byte[] bytes = this.bytes; - if (bytes.Length < byteCount) bytes = new byte[byteCount]; - ReadFully(input, bytes, 0, byteCount); - return System.Text.Encoding.UTF8.GetString(bytes, 0, byteCount); + byte[] buffer = this.buffer; + if (buffer.Length < byteCount) buffer = new byte[byteCount]; + ReadFully(input, buffer, 0, byteCount); + return System.Text.Encoding.UTF8.GetString(buffer, 0, byteCount); } - private static void ReadFully (Stream input, byte[] b, int off, int len) { - while (len > 0) { - int count = input.Read(b, off, len); - if (count <= 0) { - throw new EndOfStreamException(); - } - off += count; - len -= count; + private static void ReadFully (Stream input, byte[] buffer, int offset, int length) { + while (length > 0) { + int count = input.Read(buffer, offset, length); + if (count <= 0) throw new EndOfStreamException(); + offset += count; + length -= count; } } } diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index 8c22b8d6e..84691e890 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -44,8 +44,9 @@ using Windows.Storage; namespace Spine { public class SkeletonJson { - private AttachmentLoader attachmentLoader; public float Scale { get; set; } + + private AttachmentLoader attachmentLoader; private List linkedMeshes = new List(); public SkeletonJson (params Atlas[] atlasArray) @@ -365,12 +366,11 @@ namespace Spine { for (int i = 0, n = vertices.Length; i < n;) { int boneCount = (int)vertices[i++]; bones.Add(boneCount); - for (int nn = i + boneCount * 4; i < nn;) { + for (int nn = i + boneCount * 4; i < nn; i += 4) { bones.Add((int)vertices[i]); weights.Add(vertices[i + 1] * scale); weights.Add(vertices[i + 2] * scale); weights.Add(vertices[i + 3]); - i += 4; } } mesh.bones = bones.ToArray(); @@ -576,7 +576,7 @@ namespace Spine { int slotIndex = skeletonData.FindSlotIndex(slotMap.Key); foreach (KeyValuePair meshMap in (Dictionary)slotMap.Value) { var values = (List)meshMap.Value; - var timeline = new FFDTimeline(values.Count); + var timeline = new FfdTimeline(values.Count); Attachment attachment = skin.GetAttachment(slotIndex, meshMap.Key); if (attachment == null) throw new Exception("FFD attachment not found: " + meshMap.Key); timeline.slotIndex = slotIndex; 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 9570052e3..57bc8dbb6 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/IkConstraint.java @@ -138,18 +138,18 @@ public class IkConstraint implements Updatable { static public void apply (Bone parent, Bone child, float targetX, float targetY, int bendDir, float alpha) { if (alpha == 0) return; float px = parent.x, py = parent.y, psx = parent.scaleX, psy = parent.scaleY; - int offset1, offset2, sign2; + int os1, os2, s2; if (psx < 0) { psx = -psx; - offset1 = 180; - sign2 = -1; + os1 = 180; + s2 = -1; } else { - offset1 = 0; - sign2 = 1; + os1 = 0; + s2 = 1; } if (psy < 0) { psy = -psy; - sign2 = -sign2; + s2 = -s2; } float cx = child.x, cy = child.y, csx = child.appliedScaleX; boolean u = Math.abs(psx - psy) <= 0.0001f; @@ -160,9 +160,9 @@ public class IkConstraint implements Updatable { } if (csx < 0) { csx = -csx; - offset2 = 180; + os2 = 180; } else - offset2 = 0; + os2 = 0; Bone pp = parent.parent; float tx, ty, dx, dy; if (pp == null) { @@ -248,9 +248,9 @@ public class IkConstraint implements Updatable { a2 = maxAngle * bendDir; } } - float o = atan2(cy, cx) * sign2; - a1 = (a1 - o) * radDeg + offset1; - a2 = (a2 + o) * radDeg * sign2 + offset2; + float o = atan2(cy, cx) * s2; + a1 = (a1 - o) * radDeg + os1; + a2 = (a2 + o) * radDeg * s2 + os2; if (a1 > 180) a1 -= 360; else if (a1 < -180) a1 += 360; diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java index 76ceaf43d..862020c5f 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonBinary.java @@ -376,7 +376,7 @@ public class SkeletonBinary { for (int i = 0; i < vertexCount; i++) { int boneCount = (int)input.readFloat(); bones.add(boneCount); - for (int ii = 0, nn = boneCount; ii < nn; ii++) { + for (int ii = 0; ii < boneCount; ii++) { bones.add((int)input.readFloat()); weights.add(input.readFloat() * scale); weights.add(input.readFloat() * scale); diff --git a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java index cf6444ea2..8e284f45d 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -328,12 +328,11 @@ public class SkeletonJson { for (int i = 0, n = vertices.length; i < n;) { int boneCount = (int)vertices[i++]; bones.add(boneCount); - for (int nn = i + boneCount * 4; i < nn;) { + for (int nn = i + boneCount * 4; i < nn; i += 4) { bones.add((int)vertices[i]); weights.add(vertices[i + 1] * scale); weights.add(vertices[i + 2] * scale); weights.add(vertices[i + 3]); - i += 4; } } mesh.setBones(bones.toArray()); diff --git a/spine-xna/example/data/raptor.skel b/spine-xna/example/data/raptor.skel index 8ecd731ae0cf63254cfc6bb68342c9177c05a8ef..a853b905fa18c350e7e129a4a6201cfe7152ad63 100644 GIT binary patch delta 21532 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 QU>srM@ey@jS_QBF2P-|vrT_o{ diff --git a/spine-xna/example/src/ExampleGame.cs b/spine-xna/example/src/ExampleGame.cs index b0527d781..9c514104a 100644 --- a/spine-xna/example/src/ExampleGame.cs +++ b/spine-xna/example/src/ExampleGame.cs @@ -125,7 +125,7 @@ namespace Spine { } skeleton.X = 400; - skeleton.Y = 690; + skeleton.Y = 580; skeleton.UpdateWorldTransform(); headSlot = skeleton.FindSlot("head");