From 7df74c2fa4e7447b6b91aa7e949079e964f0ced4 Mon Sep 17 00:00:00 2001 From: Nathan Sweet Date: Thu, 3 Jun 2021 21:42:35 -0400 Subject: [PATCH] Various fixes, clean up. * Added missing CurveTimeline#shrink calls. c and cpp got BOZO comments until the method is added. * SkeletonJson#readCurve clean up. * ts, use shorthand for null checks. * csharp, don't use unnecessary hasNext local. --- spine-as3/spine-as3/src/spine/SkeletonJson.as | 71 +- spine-c/spine-c/src/spine/SkeletonJson.c | 879 +++++++++--------- .../spine-cpp/src/spine/CurveTimeline.cpp | 1 - .../spine-cpp/src/spine/SkeletonJson.cpp | 698 +++++++------- spine-csharp/src/SkeletonJson.cs | 72 +- .../esotericsoftware/spine/SkeletonJson.java | 33 +- spine-ts/canvas/src/SkeletonRenderer.ts | 2 +- spine-ts/core/src/Animation.ts | 26 +- spine-ts/core/src/AnimationState.ts | 94 +- spine-ts/core/src/AnimationStateData.ts | 10 +- spine-ts/core/src/AtlasAttachmentLoader.ts | 4 +- spine-ts/core/src/Bone.ts | 8 +- spine-ts/core/src/BoneData.ts | 2 +- spine-ts/core/src/Event.ts | 2 +- spine-ts/core/src/IkConstraint.ts | 4 +- spine-ts/core/src/PathConstraint.ts | 4 +- spine-ts/core/src/SharedAssetManager.ts | 16 +- spine-ts/core/src/Skeleton.ts | 67 +- spine-ts/core/src/SkeletonBinary.ts | 40 +- spine-ts/core/src/SkeletonBounds.ts | 4 +- spine-ts/core/src/SkeletonClipping.ts | 6 +- spine-ts/core/src/SkeletonData.ts | 28 +- spine-ts/core/src/SkeletonJson.ts | 196 ++-- spine-ts/core/src/Skin.ts | 24 +- spine-ts/core/src/Slot.ts | 10 +- spine-ts/core/src/SlotData.ts | 4 +- spine-ts/core/src/TextureAtlas.ts | 17 +- spine-ts/core/src/TransformConstraint.ts | 4 +- spine-ts/core/src/attachments/Attachment.ts | 8 +- .../core/src/attachments/MeshAttachment.ts | 12 +- spine-ts/player/src/Player.ts | 4 +- spine-ts/threejs/src/SkeletonMesh.ts | 10 +- spine-ts/webgl/src/Input.ts | 4 +- spine-ts/webgl/src/Mesh.ts | 2 +- spine-ts/webgl/src/SceneRenderer.ts | 11 +- spine-ts/webgl/src/SkeletonDebugRenderer.ts | 2 +- spine-ts/webgl/src/SkeletonRenderer.ts | 8 +- 37 files changed, 1219 insertions(+), 1168 deletions(-) diff --git a/spine-as3/spine-as3/src/spine/SkeletonJson.as b/spine-as3/spine-as3/src/spine/SkeletonJson.as index c923f4cb7..a83662b3f 100644 --- a/spine-as3/spine-as3/src/spine/SkeletonJson.as +++ b/spine-as3/spine-as3/src/spine/SkeletonJson.as @@ -464,8 +464,11 @@ package spine { for (frame = 0, bezier = 0;; frame++) { rgbaTimeline.setFrame(frame, time, rgba.r, rgba.g, rgba.b, rgba.a); - if (timelineMap.length == frame + 1) break; nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); var newRgba : Color = Color.fromString(nextMap.color); curve = keyMap.curve; @@ -479,7 +482,6 @@ package spine { rgba = newRgba; keyMap = nextMap; } - timelines.push(rgbaTimeline); } else if (timelineName == "rgb") { @@ -490,8 +492,11 @@ package spine { for (frame = 0, bezier = 0;; frame++) { rgbTimeline.setFrame(frame, time, rgb.r, rgb.g, rgb.b); - if (timelineMap.length == frame + 1) break; nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); var newRgb : Color = Color.fromString(nextMap.color); curve = keyMap.curve; @@ -504,7 +509,6 @@ package spine { rgb = newRgb; keyMap = nextMap; } - timelines.push(rgbTimeline); } else if (timelineName == "alpha") { @@ -519,8 +523,11 @@ package spine { for (frame = 0, bezier = 0;; frame++) { rgba2Timeline.setFrame(frame, time, lighta.r, lighta.g, lighta.b, lighta.a, darka.r, darka.g, darka.b); - if (timelineMap.length == frame + 1) break; nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); var newLighta : Color = Color.fromString(nextMap.light); var newDarka : Color = Color.fromString(nextMap.dark); @@ -539,7 +546,6 @@ package spine { darka = newDarka; keyMap = nextMap; } - timelines.push(rgba2Timeline); } else if (timelineName == "rgb2") { @@ -552,8 +558,11 @@ package spine { for (frame = 0, bezier = 0;; frame++) { rgb2Timeline.setFrame(frame, time, light.r, light.g, light.b, dark.r, dark.g, dark.b); - if (timelineMap.length == frame + 1) break; nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); var newLight : Color = Color.fromString(nextMap.light); var newDark : Color = Color.fromString(nextMap.dark); @@ -571,7 +580,6 @@ package spine { dark = newDark; keyMap = nextMap; } - timelines.push(rgb2Timeline); } else @@ -641,7 +649,10 @@ package spine { for (frame = 0, bezier = 0;; frame++) { ikTimeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false)); nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); var mix2 : Number = getNumber(nextMap, "mix", 1); @@ -684,7 +695,10 @@ package spine { for (frame = 0, bezier = 0;; frame++) { transformTimeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); mixRotate2 = getNumber(nextMap, "mixRotate", 1); @@ -743,7 +757,10 @@ package spine { for (frame = 0, bezier = 0;; frame++) { mixTimeline.setFrame(frame, time, mixRotate, mixX, mixY); nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); mixRotate2 = getNumber(nextMap, "mixRotate", 1); mixX2 = getNumber(nextMap, "mixX", 1); @@ -811,7 +828,10 @@ package spine { deformTimeline.setFrame(frame, time, deform); nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } time2 = getNumber(nextMap, "time", 0); curve = keyMap.curve; if (curve) bezier = readCurve(curve, deformTimeline, bezier, frame, 0, time, time2, 0, 1, 1); @@ -824,13 +844,12 @@ package spine { } // Draw order timelines. - var drawOrdersMap : Array = map["drawOrder"]; - if (!drawOrdersMap) drawOrdersMap = map["draworder"]; - if (drawOrdersMap) { - var drawOrderTimeline : DrawOrderTimeline = new DrawOrderTimeline(drawOrdersMap.length); + var drawOrdersp : Array = map["drawOrder"]; + if (drawOrders) { + var drawOrderTimeline : DrawOrderTimeline = new DrawOrderTimeline(drawOrders.length); var slotCount : int = skeletonData.slots.length; frame = 0; - for each (var drawOrderMap : Object in drawOrdersMap) { + for each (var drawOrderMap : Object in drawOrders) { var drawOrder : Vector. = null; var offsets : Array = drawOrderMap["offsets"]; if (offsets) { @@ -884,7 +903,6 @@ package spine { var duration : Number = 0; for (i = 0, n = timelines.length; i < n; i++) duration = Math.max(duration, timelines[i].getDuration()); - if (isNaN(duration)) throw new Error("Animation duration is NaN."); skeletonData.animations.push(new Animation(name, timelines, duration)); } @@ -906,6 +924,7 @@ package spine { value = value2; keyMap = nextMap; } + timeline.shrink(bezier); return timeline; } @@ -940,15 +959,15 @@ package spine { value1 : Number, value2 : Number, scale : Number) : int { if (curve == "stepped") { if (value != 0) timeline.setStepped(frame); - } else { - var i : int = value << 2; - var cx1 : Number = curve[i++]; - var cy1 : Number = curve[i++] * scale; - var cx2 : Number = curve[i++]; - var cy2 : Number = curve[i++] * scale; - timeline.setBezier(bezier++, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier; } - return bezier; + var i : int = value << 2; + var cx1 : Number = curve[i]; + var cy1 : Number = curve[i + 1] * scale; + var cx2 : Number = curve[i + 2]; + var cy2 : Number = curve[i + 3] * scale; + timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } static private function getValue(map : Object, property : String, defaultValue : Object) : Object { diff --git a/spine-c/spine-c/src/spine/SkeletonJson.c b/spine-c/spine-c/src/spine/SkeletonJson.c index b457e9697..076bf1a7c 100644 --- a/spine-c/spine-c/src/spine/SkeletonJson.c +++ b/spine-c/spine-c/src/spine/SkeletonJson.c @@ -105,82 +105,84 @@ static float toColor (const char* value, int index) { } static void toColor2(spColor *color, const char *value, int /*bool*/ hasAlpha) { - color->r = toColor(value, 0); - color->g = toColor(value, 1); - color->b = toColor(value, 2); - if (hasAlpha) color->a = toColor(value, 3); + color->r = toColor(value, 0); + color->g = toColor(value, 1); + color->b = toColor(value, 2); + if (hasAlpha) color->a = toColor(value, 3); } static void setBezier (spCurveTimeline *timeline, int frame, int value, int bezier, float time1, float value1, float cx1, float cy1, - float cx2, float cy2, float time2, float value2) { - spTimeline_setBezier(SUPER(timeline), bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + float cx2, float cy2, float time2, float value2) { + spTimeline_setBezier(SUPER(timeline), bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); } static int readCurve (Json *curve, spCurveTimeline *timeline, int bezier, int frame, int value, float time1, float time2, - float value1, float value2, float scale) { - if (curve->type == Json_String && strcmp(curve->valueString, "stepped") == 0) { - spCurveTimeline_setStepped(timeline, frame); - } else { - float cx1, cy1, cx2, cy2; - curve = Json_getItemAtIndex(curve, value << 2); - cx1 = curve->valueFloat; - curve = curve->next; - cy1 = curve->valueFloat * scale; - curve = curve->next; - cx2 = curve->valueFloat; - curve = curve->next; - cy2 = curve->valueFloat * scale; - setBezier(timeline, frame, value, bezier++, time1, value1, cx1, cy1, cx2, cy2, time2, value2); - } - return bezier; + float value1, float value2, float scale) { + float cx1, cy1, cx2, cy2; + if (curve->type == Json_String && strcmp(curve->valueString, "stepped") == 0) { + if (value != 0) spCurveTimeline_setStepped(timeline, frame); + return bezier; + } + curve = Json_getItemAtIndex(curve, value << 2); + cx1 = curve->valueFloat; + curve = curve->next; + cy1 = curve->valueFloat * scale; + curve = curve->next; + cx2 = curve->valueFloat; + curve = curve->next; + cy2 = curve->valueFloat * scale; + setBezier(timeline, frame, value, bezier, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } static spTimeline *readTimeline (Json *keyMap, spCurveTimeline1 *timeline, float defaultValue, float scale) { - float time = Json_getFloat(keyMap, "time", 0); - float value = Json_getFloat(keyMap, "value", defaultValue) * scale; - int frame, bezier = 0; - for (frame = 0;; frame++) { - Json *nextMap, *curve; - float time2, value2; - spCurveTimeline1_setFrame(timeline, frame, time, value); - nextMap = keyMap->next; - if (nextMap == NULL) break; - time2 = Json_getFloat(nextMap, "time", 0); - value2 = Json_getFloat(nextMap, "value", defaultValue) * scale; - curve = Json_getItem(keyMap, "curve"); - if (curve != NULL) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); - time = time2; - value = value2; - keyMap = nextMap; - } - return SUPER(timeline); + float time = Json_getFloat(keyMap, "time", 0); + float value = Json_getFloat(keyMap, "value", defaultValue) * scale; + int frame, bezier = 0; + for (frame = 0;; frame++) { + Json *nextMap, *curve; + float time2, value2; + spCurveTimeline1_setFrame(timeline, frame, time, value); + nextMap = keyMap->next; + if (nextMap == NULL) break; + time2 = Json_getFloat(nextMap, "time", 0); + value2 = Json_getFloat(nextMap, "value", defaultValue) * scale; + curve = Json_getItem(keyMap, "curve"); + if (curve != NULL) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); + time = time2; + value = value2; + keyMap = nextMap; + } + // timeline.shrink(); // BOZO + return SUPER(timeline); } static spTimeline *readTimeline2 (Json *keyMap, spCurveTimeline2 *timeline, const char *name1, const char *name2, float defaultValue, float scale) { - float time = Json_getFloat(keyMap, "time", 0); - float value1 = Json_getFloat(keyMap, name1, defaultValue) * scale; - float value2 = Json_getFloat(keyMap, name2, defaultValue) * scale; - int frame, bezier = 0; - for (frame = 0;; frame++) { - Json *nextMap, *curve; - float time2, nvalue1, nvalue2; - spCurveTimeline2_setFrame(timeline, frame, time, value1, value2); - nextMap = keyMap->next; - if (nextMap == NULL) break; - time2 = Json_getFloat(nextMap, "time", 0); - nvalue1 = Json_getFloat(nextMap, name1, defaultValue) * scale; - nvalue2 = Json_getFloat(nextMap, name2, defaultValue) * scale; - curve = Json_getItem(keyMap, "curve"); - if (curve != NULL) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); - } - time = time2; - value1 = nvalue1; - value2 = nvalue2; - keyMap = nextMap; - } - return SUPER(timeline); + float time = Json_getFloat(keyMap, "time", 0); + float value1 = Json_getFloat(keyMap, name1, defaultValue) * scale; + float value2 = Json_getFloat(keyMap, name2, defaultValue) * scale; + int frame, bezier = 0; + for (frame = 0;; frame++) { + Json *nextMap, *curve; + float time2, nvalue1, nvalue2; + spCurveTimeline2_setFrame(timeline, frame, time, value1, value2); + nextMap = keyMap->next; + if (nextMap == NULL) break; + time2 = Json_getFloat(nextMap, "time", 0); + nvalue1 = Json_getFloat(nextMap, name1, defaultValue) * scale; + nvalue2 = Json_getFloat(nextMap, name2, defaultValue) * scale; + curve = Json_getItem(keyMap, "curve"); + if (curve != NULL) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + keyMap = nextMap; + } + // timeline.shrink(); // BOZO + return SUPER(timeline); } @@ -209,17 +211,17 @@ static void _spSkeletonJson_addLinkedMesh (spSkeletonJson* self, spMeshAttachmen } static void cleanUpTimelines(spTimelineArray *timelines) { - int i, n; - for (i = 0, n = timelines->size; i < n; i++) { - spTimeline_dispose(timelines->items[i]); - } - spTimelineArray_dispose(timelines); + int i, n; + for (i = 0, n = timelines->size; i < n; i++) { + spTimeline_dispose(timelines->items[i]); + } + spTimelineArray_dispose(timelines); } static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* root, spSkeletonData *skeletonData) { - spTimelineArray *timelines = spTimelineArray_create(8); + spTimelineArray *timelines = spTimelineArray_create(8); - float scale = self->scale, duration; + float scale = self->scale, duration; Json* bones = Json_getItem(root, "bones"); Json* slots = Json_getItem(root, "slots"); Json* ik = Json_getItem(root, "ik"); @@ -233,359 +235,379 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r spColor color, color2, newColor, newColor2; /* Slot timelines. */ - for (slotMap = slots ? slots->child : 0; slotMap; slotMap = slotMap->next) { - int slotIndex = spSkeletonData_findSlotIndex(skeletonData, slotMap->name); - if (slotIndex == -1) { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Slot not found: ", slotMap->name); - return NULL; - } + for (slotMap = slots ? slots->child : 0; slotMap; slotMap = slotMap->next) { + int slotIndex = spSkeletonData_findSlotIndex(skeletonData, slotMap->name); + if (slotIndex == -1) { + cleanUpTimelines(timelines); + _spSkeletonJson_setError(self, NULL, "Slot not found: ", slotMap->name); + return NULL; + } - for (timelineMap = slotMap->child; timelineMap; timelineMap = timelineMap->next) { - if (strcmp(timelineMap->name, "attachment") == 0) { - int frameCount = timelineMap->size; - spAttachmentTimeline *timeline = spAttachmentTimeline_create(frameCount, slotIndex); - for (keyMap = timelineMap->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { - spAttachmentTimeline_setFrame(timeline, frame, Json_getFloat(keyMap, "time", 0), Json_getItem(keyMap, "name")->valueString); - } - spTimelineArray_add(timelines, SUPER(timeline)); + for (timelineMap = slotMap->child; timelineMap; timelineMap = timelineMap->next) { + if (strcmp(timelineMap->name, "attachment") == 0) { + int frameCount = timelineMap->size; + spAttachmentTimeline *timeline = spAttachmentTimeline_create(frameCount, slotIndex); + for (keyMap = timelineMap->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { + spAttachmentTimeline_setFrame(timeline, frame, Json_getFloat(keyMap, "time", 0), Json_getItem(keyMap, "name")->valueString); + } + spTimelineArray_add(timelines, SUPER(timeline)); - } else if (strcmp(timelineMap->name, "rgba") == 0) { - float time; - int frameCount = timelineMap->size; - int bezierCount = frameCount << 2; - spRGBATimeline *timeline = spRGBATimeline_create(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "color", 0), 1); + } else if (strcmp(timelineMap->name, "rgba") == 0) { + float time; + int frameCount = timelineMap->size; + int bezierCount = frameCount << 2; + spRGBATimeline *timeline = spRGBATimeline_create(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->child; + time = Json_getFloat(keyMap, "time", 0); + toColor2(&color, Json_getString(keyMap, "color", 0), 1); - for (frame = 0, bezier = 0;;++frame) { - float time2; - spRGBATimeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a); - nextMap = keyMap->next; - if (!nextMap) break; - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "color", 0), 1); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color.a, newColor.a, 1); - } - time = time2; - color = newColor; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (strcmp(timelineMap->name, "rgb") == 0) { - float time; - int frameCount = timelineMap->size; - int bezierCount = frameCount * 3; - spRGBTimeline *timeline = spRGBTimeline_create(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "color", 0), 1); + for (frame = 0, bezier = 0;;++frame) { + float time2; + spRGBATimeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + time2 = Json_getFloat(nextMap, "time", 0); + toColor2(&newColor, Json_getString(nextMap, "color", 0), 1); + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color.a, newColor.a, 1); + } + time = time2; + color = newColor; + keyMap = nextMap; + } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } else if (strcmp(timelineMap->name, "rgb") == 0) { + float time; + int frameCount = timelineMap->size; + int bezierCount = frameCount * 3; + spRGBTimeline *timeline = spRGBTimeline_create(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->child; + time = Json_getFloat(keyMap, "time", 0); + toColor2(&color, Json_getString(keyMap, "color", 0), 1); - for (frame = 0, bezier = 0;;++frame) { - float time2; - spRGBTimeline_setFrame(timeline, frame, time, color.r, color.g, color.b); - nextMap = keyMap->next; - if (!nextMap) break; - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "color", 0), 1); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); - } - time = time2; - color = newColor; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (strcmp(timelineMap->name, "alpha") == 0) { - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(spAlphaTimeline_create(timelineMap->size, timelineMap->size, slotIndex)), 0, 1)); - } else if (strcmp(timelineMap->name, "rgba2") == 0) { - float time; - int frameCount = timelineMap->size; - int bezierCount = frameCount * 7; - spRGBA2Timeline *timeline = spRGBA2Timeline_create(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "light", 0), 1); - toColor2(&color2, Json_getString(keyMap, "dark", 0), 0); + for (frame = 0, bezier = 0;;++frame) { + float time2; + spRGBTimeline_setFrame(timeline, frame, time, color.r, color.g, color.b); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + time2 = Json_getFloat(nextMap, "time", 0); + toColor2(&newColor, Json_getString(nextMap, "color", 0), 1); + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); + } + time = time2; + color = newColor; + keyMap = nextMap; + } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } else if (strcmp(timelineMap->name, "alpha") == 0) { + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(spAlphaTimeline_create(timelineMap->size, timelineMap->size, slotIndex)), 0, 1)); + } else if (strcmp(timelineMap->name, "rgba2") == 0) { + float time; + int frameCount = timelineMap->size; + int bezierCount = frameCount * 7; + spRGBA2Timeline *timeline = spRGBA2Timeline_create(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->child; + time = Json_getFloat(keyMap, "time", 0); + toColor2(&color, Json_getString(keyMap, "light", 0), 1); + toColor2(&color2, Json_getString(keyMap, "dark", 0), 0); - for (frame = 0, bezier = 0;;++frame) { - float time2; - spRGBA2Timeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a, color2.g, color2.g, color2.b); - nextMap = keyMap->next; - if (!nextMap) break; - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "light", 0), 1); - toColor2(&newColor2, Json_getString(nextMap, "dark", 0), 0); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color.a, newColor.a, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, color2.r, newColor2.r, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, color2.g, newColor2.g, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 6, time, time2, color2.b, newColor2.b, 1); - } - time = time2; - color = newColor; - color2 = newColor2; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else if (strcmp(timelineMap->name, "rgb2") == 0) { - float time; - int frameCount = timelineMap->size; - int bezierCount = frameCount * 7; - spRGBA2Timeline *timeline = spRGBA2Timeline_create(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->child; - time = Json_getFloat(keyMap, "time", 0); - toColor2(&color, Json_getString(keyMap, "light", 0), 0); - toColor2(&color2, Json_getString(keyMap, "dark", 0), 0); + for (frame = 0, bezier = 0;;++frame) { + float time2; + spRGBA2Timeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a, color2.g, color2.g, color2.b); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + time2 = Json_getFloat(nextMap, "time", 0); + toColor2(&newColor, Json_getString(nextMap, "light", 0), 1); + toColor2(&newColor2, Json_getString(nextMap, "dark", 0), 0); + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color.a, newColor.a, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, color2.r, newColor2.r, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, color2.g, newColor2.g, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 6, time, time2, color2.b, newColor2.b, 1); + } + time = time2; + color = newColor; + color2 = newColor2; + keyMap = nextMap; + } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } else if (strcmp(timelineMap->name, "rgb2") == 0) { + float time; + int frameCount = timelineMap->size; + int bezierCount = frameCount * 7; + spRGBA2Timeline *timeline = spRGBA2Timeline_create(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->child; + time = Json_getFloat(keyMap, "time", 0); + toColor2(&color, Json_getString(keyMap, "light", 0), 0); + toColor2(&color2, Json_getString(keyMap, "dark", 0), 0); - for (frame = 0, bezier = 0;;++frame) { - float time2; - spRGBA2Timeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b); - nextMap = keyMap->next; - if (!nextMap) break; - time2 = Json_getFloat(nextMap, "time", 0); - toColor2(&newColor, Json_getString(nextMap, "light", 0), 0); - toColor2(&newColor2, Json_getString(nextMap, "dark", 0), 0); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color2.r, newColor2.r, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, color2.g, newColor2.g, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, color2.b, newColor2.b, 1); - } - time = time2; - color = newColor; - color2 = newColor2; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } else { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Invalid timeline type for a slot: ", timelineMap->name); - return NULL; - } - } - } + for (frame = 0, bezier = 0;;++frame) { + float time2; + spRGBA2Timeline_setFrame(timeline, frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + time2 = Json_getFloat(nextMap, "time", 0); + toColor2(&newColor, Json_getString(nextMap, "light", 0), 0); + toColor2(&newColor2, Json_getString(nextMap, "dark", 0), 0); + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, color2.r, newColor2.r, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, color2.g, newColor2.g, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, color2.b, newColor2.b, 1); + } + time = time2; + color = newColor; + color2 = newColor2; + keyMap = nextMap; + } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } else { + cleanUpTimelines(timelines); + _spSkeletonJson_setError(self, NULL, "Invalid timeline type for a slot: ", timelineMap->name); + return NULL; + } + } + } /* Bone timelines. */ - for (boneMap = bones ? bones->child : 0; boneMap; boneMap = boneMap->next) { + for (boneMap = bones ? bones->child : 0; boneMap; boneMap = boneMap->next) { - int boneIndex = spSkeletonData_findBoneIndex(skeletonData, boneMap->name); - if (boneIndex == -1) { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Bone not found: ", boneMap->name); - return NULL; - } + int boneIndex = spSkeletonData_findBoneIndex(skeletonData, boneMap->name); + if (boneIndex == -1) { + cleanUpTimelines(timelines); + _spSkeletonJson_setError(self, NULL, "Bone not found: ", boneMap->name); + return NULL; + } - for (timelineMap = boneMap->child; timelineMap; timelineMap = timelineMap->next) { - if (timelineMap->size == 0) continue; + for (timelineMap = boneMap->child; timelineMap; timelineMap = timelineMap->next) { + if (timelineMap->size == 0) continue; - if (strcmp(timelineMap->name, "rotate") == 0) { - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(spRotateTimeline_create(timelineMap->size, timelineMap->size, boneIndex)), 0, 1)); - } else if (strcmp(timelineMap->name, "translate") == 0) { - spTranslateTimeline *timeline = spTranslateTimeline_create(timelineMap->size, timelineMap->size << 1, boneIndex); - spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 0, scale)); - } else if (strcmp(timelineMap->name, "translatex") == 0) { - spTranslateXTimeline *timeline = spTranslateXTimeline_create(timelineMap->size, timelineMap->size, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, scale)); - } else if (strcmp(timelineMap->name, "translatey") == 0) { - spTranslateYTimeline *timeline = spTranslateYTimeline_create(timelineMap->size, timelineMap->size, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, scale)); - } else if (strcmp(timelineMap->name, "scale") == 0) { - spScaleTimeline *timeline = spScaleTimeline_create(timelineMap->size, timelineMap->size << 1, boneIndex); - spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 1, 1)); - } else if (strcmp(timelineMap->name, "scalex") == 0) { - spScaleXTimeline *timeline = spScaleXTimeline_create(timelineMap->size, timelineMap->size, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 1, 1)); - } else if (strcmp(timelineMap->name, "scaley") == 0) { - spScaleYTimeline *timeline = spScaleYTimeline_create(timelineMap->size, timelineMap->size, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 1, 1)); - } else if (strcmp(timelineMap->name, "shear") == 0) { - spShearTimeline *timeline = spShearTimeline_create(timelineMap->size, timelineMap->size << 1, boneIndex); - spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 0, 1)); - } else if (strcmp(timelineMap->name, "shearx") == 0) { - spShearXTimeline *timeline = spShearXTimeline_create(timelineMap->size, timelineMap->size, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, 1)); - } else if (strcmp(timelineMap->name, "sheary") == 0) { - spShearYTimeline *timeline = spShearYTimeline_create(timelineMap->size, timelineMap->size, boneIndex); - spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, 1)); - } else { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Invalid timeline type for a bone: ", timelineMap->name); - return NULL; - } - } - } + if (strcmp(timelineMap->name, "rotate") == 0) { + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(spRotateTimeline_create(timelineMap->size, timelineMap->size, boneIndex)), 0, 1)); + } else if (strcmp(timelineMap->name, "translate") == 0) { + spTranslateTimeline *timeline = spTranslateTimeline_create(timelineMap->size, timelineMap->size << 1, boneIndex); + spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 0, scale)); + } else if (strcmp(timelineMap->name, "translatex") == 0) { + spTranslateXTimeline *timeline = spTranslateXTimeline_create(timelineMap->size, timelineMap->size, boneIndex); + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, scale)); + } else if (strcmp(timelineMap->name, "translatey") == 0) { + spTranslateYTimeline *timeline = spTranslateYTimeline_create(timelineMap->size, timelineMap->size, boneIndex); + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, scale)); + } else if (strcmp(timelineMap->name, "scale") == 0) { + spScaleTimeline *timeline = spScaleTimeline_create(timelineMap->size, timelineMap->size << 1, boneIndex); + spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 1, 1)); + } else if (strcmp(timelineMap->name, "scalex") == 0) { + spScaleXTimeline *timeline = spScaleXTimeline_create(timelineMap->size, timelineMap->size, boneIndex); + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 1, 1)); + } else if (strcmp(timelineMap->name, "scaley") == 0) { + spScaleYTimeline *timeline = spScaleYTimeline_create(timelineMap->size, timelineMap->size, boneIndex); + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 1, 1)); + } else if (strcmp(timelineMap->name, "shear") == 0) { + spShearTimeline *timeline = spShearTimeline_create(timelineMap->size, timelineMap->size << 1, boneIndex); + spTimelineArray_add(timelines, readTimeline2(timelineMap->child, SUPER(timeline), "x", "y", 0, 1)); + } else if (strcmp(timelineMap->name, "shearx") == 0) { + spShearXTimeline *timeline = spShearXTimeline_create(timelineMap->size, timelineMap->size, boneIndex); + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, 1)); + } else if (strcmp(timelineMap->name, "sheary") == 0) { + spShearYTimeline *timeline = spShearYTimeline_create(timelineMap->size, timelineMap->size, boneIndex); + spTimelineArray_add(timelines, readTimeline(timelineMap->child, SUPER(timeline), 0, 1)); + } else { + cleanUpTimelines(timelines); + _spSkeletonJson_setError(self, NULL, "Invalid timeline type for a bone: ", timelineMap->name); + return NULL; + } + } + } /* IK constraint timelines. */ - for (constraintMap = ik ? ik->child : 0; constraintMap; constraintMap = constraintMap->next) { - spIkConstraintData *constraint; - spIkConstraintTimeline *timeline; - int constraintIndex; - float time, mix, softness; - keyMap = constraintMap->child; - if (keyMap == NULL) continue; + for (constraintMap = ik ? ik->child : 0; constraintMap; constraintMap = constraintMap->next) { + spIkConstraintData *constraint; + spIkConstraintTimeline *timeline; + int constraintIndex; + float time, mix, softness; + keyMap = constraintMap->child; + if (keyMap == NULL) continue; - constraint = spSkeletonData_findIkConstraint(skeletonData, constraintMap->name); - constraintIndex = spSkeletonData_findIkConstraintIndex(skeletonData, constraint->name); - timeline = spIkConstraintTimeline_create(constraintMap->size, constraintMap->size << 1, constraintIndex); + constraint = spSkeletonData_findIkConstraint(skeletonData, constraintMap->name); + constraintIndex = spSkeletonData_findIkConstraintIndex(skeletonData, constraint->name); + timeline = spIkConstraintTimeline_create(constraintMap->size, constraintMap->size << 1, constraintIndex); - time = Json_getFloat(keyMap, "time", 0); - mix = Json_getFloat(keyMap, "mix", 1); - softness = Json_getFloat(keyMap, "softness", 0) * scale; + time = Json_getFloat(keyMap, "time", 0); + mix = Json_getFloat(keyMap, "mix", 1); + softness = Json_getFloat(keyMap, "softness", 0) * scale; - for (frame = 0, bezier = 0;; frame++) { - float time2, mix2, softness2; - int bendDirection = Json_getInt(keyMap, "bendPositive", 1) ? 1 : -1; - spIkConstraintTimeline_setFrame(timeline, frame, time, mix, softness, bendDirection, Json_getInt(keyMap, "compress", 0) ? 1 : 0, Json_getInt(keyMap, "stretch", 0) ? 1 : 0); - nextMap = keyMap->next; - if (!nextMap) break; + for (frame = 0, bezier = 0;; frame++) { + float time2, mix2, softness2; + int bendDirection = Json_getInt(keyMap, "bendPositive", 1) ? 1 : -1; + spIkConstraintTimeline_setFrame(timeline, frame, time, mix, softness, bendDirection, Json_getInt(keyMap, "compress", 0) ? 1 : 0, Json_getInt(keyMap, "stretch", 0) ? 1 : 0); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } - time2 = Json_getFloat(nextMap, "time", 0); - mix2 = Json_getFloat(nextMap, "mix", 1); - softness2 = Json_getFloat(nextMap, "softness", 0) * scale; - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mix, mix2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, softness, softness2, scale); - } + time2 = Json_getFloat(nextMap, "time", 0); + mix2 = Json_getFloat(nextMap, "mix", 1); + softness2 = Json_getFloat(nextMap, "softness", 0) * scale; + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mix, mix2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, softness, softness2, scale); + } - time = time2; - mix = mix2; - softness = softness2; - keyMap = nextMap; - } + time = time2; + mix = mix2; + softness = softness2; + keyMap = nextMap; + } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } /* Transform constraint timelines. */ - for (constraintMap = transform ? transform->child : 0; constraintMap; constraintMap = constraintMap->next) { - spTransformConstraintData *constraint; - spTransformConstraintTimeline *timeline; - int constraintIndex; - float time, mixRotate, mixShearY, mixX, mixY, mixScaleX, mixScaleY; - keyMap = constraintMap->child; - if (keyMap == NULL) continue; + for (constraintMap = transform ? transform->child : 0; constraintMap; constraintMap = constraintMap->next) { + spTransformConstraintData *constraint; + spTransformConstraintTimeline *timeline; + int constraintIndex; + float time, mixRotate, mixShearY, mixX, mixY, mixScaleX, mixScaleY; + keyMap = constraintMap->child; + if (keyMap == NULL) continue; - constraint = spSkeletonData_findTransformConstraint(skeletonData, constraintMap->name); - constraintIndex = spSkeletonData_findTransformConstraintIndex(skeletonData, constraint->name); - timeline = spTransformConstraintTimeline_create(constraintMap->size, constraintMap->size << 2, constraintIndex); + constraint = spSkeletonData_findTransformConstraint(skeletonData, constraintMap->name); + constraintIndex = spSkeletonData_findTransformConstraintIndex(skeletonData, constraint->name); + timeline = spTransformConstraintTimeline_create(constraintMap->size, constraintMap->size << 2, constraintIndex); - time = Json_getFloat(keyMap, "time", 0); - mixRotate = Json_getFloat(keyMap, "mixRotate", 1); - mixShearY = Json_getFloat(keyMap, "mixShearY", 1); - mixX = Json_getFloat(keyMap, "mixX", 1); - mixY = Json_getFloat(keyMap, "mixY", mixX); - mixScaleX = Json_getFloat(keyMap, "mixScaleX", 1); - mixScaleY = Json_getFloat(keyMap, "mixScaleY", mixScaleX); + time = Json_getFloat(keyMap, "time", 0); + mixRotate = Json_getFloat(keyMap, "mixRotate", 1); + mixShearY = Json_getFloat(keyMap, "mixShearY", 1); + mixX = Json_getFloat(keyMap, "mixX", 1); + mixY = Json_getFloat(keyMap, "mixY", mixX); + mixScaleX = Json_getFloat(keyMap, "mixScaleX", 1); + mixScaleY = Json_getFloat(keyMap, "mixScaleY", mixScaleX); - for (frame = 0, bezier = 0;; frame++) { - float time2, mixRotate2, mixShearY2, mixX2, mixY2, mixScaleX2, mixScaleY2; - spTransformConstraintTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); - nextMap = keyMap->next; - if (!nextMap) break; + for (frame = 0, bezier = 0;; frame++) { + float time2, mixRotate2, mixShearY2, mixX2, mixY2, mixScaleX2, mixScaleY2; + spTransformConstraintTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } - time2 = Json_getFloat(nextMap, "time", 0); - mixRotate2 = Json_getFloat(nextMap, "mixRotate", 1); - mixShearY2 = Json_getFloat(nextMap, "mixShearY", 1); - mixX2 = Json_getFloat(nextMap, "mixX", 1); - mixY2 = Json_getFloat(nextMap, "mixY", mixX2); - mixScaleX2 = Json_getFloat(nextMap, "mixScaleX", 1); - mixScaleY2 = Json_getFloat(nextMap, "mixScaleY", mixScaleX2); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, mixX, mixX2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, mixY, mixY2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); - } + time2 = Json_getFloat(nextMap, "time", 0); + mixRotate2 = Json_getFloat(nextMap, "mixRotate", 1); + mixShearY2 = Json_getFloat(nextMap, "mixShearY", 1); + mixX2 = Json_getFloat(nextMap, "mixX", 1); + mixY2 = Json_getFloat(nextMap, "mixY", mixX2); + mixScaleX2 = Json_getFloat(nextMap, "mixScaleX", 1); + mixScaleY2 = Json_getFloat(nextMap, "mixScaleY", mixScaleX2); + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, mixY, mixY2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - mixScaleX = mixScaleX2; - mixScaleY = mixScaleY2; - mixScaleX = mixScaleX2; - keyMap = nextMap; - } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixScaleX = mixScaleX2; + keyMap = nextMap; + } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } /** Path constraint timelines. */ - for (constraintMap = paths ? paths->child : 0; constraintMap; constraintMap = constraintMap->next) { - spPathConstraintData *data = spSkeletonData_findPathConstraint(skeletonData, constraintMap->name); - int index; - if (!data) { - cleanUpTimelines(timelines); - _spSkeletonJson_setError(self, NULL, "Path constraint not found: ", constraintMap->name); - return NULL; - } - index = spSkeletonData_findPathConstraintIndex(skeletonData, data->name); - for (timelineMap = constraintMap->child; timelineMap; timelineMap = timelineMap->next) { - const char *timelineName; - keyMap = timelineMap->child; - if (keyMap == NULL) continue; - timelineName = timelineMap->name; - if (strcmp(timelineName, "position") == 0 ) { - spPathConstraintPositionTimeline *timeline = spPathConstraintPositionTimeline_create(timelineMap->size, timelineMap->size, index); - spTimelineArray_add(timelines, readTimeline(keyMap, SUPER(timeline), 0, data->positionMode == SP_POSITION_MODE_FIXED ? scale : 1)); - } else if (strcmp(timelineName, "spacing") == 0) { - spCurveTimeline1 *timeline = SUPER(spPathConstraintSpacingTimeline_create(timelineMap->size, timelineMap->size, index)); - spTimelineArray_add(timelines, readTimeline(keyMap, timeline, 0, - data->spacingMode == SP_SPACING_MODE_LENGTH || data->spacingMode == SP_SPACING_MODE_FIXED ? scale : 1)); - } else if (strcmp(timelineName, "mix") == 0) { - spPathConstraintMixTimeline *timeline = spPathConstraintMixTimeline_create(timelineMap->size, timelineMap->size * 3, index); - float time = Json_getFloat(keyMap, "time", 0); - float mixRotate = Json_getFloat(keyMap, "mixRotate", 1); - float mixX = Json_getFloat(keyMap, "mixX", 1); - float mixY = Json_getFloat(keyMap, "mixY", mixX); - for (frame = 0, bezier = 0;; frame++) { - float time2, mixRotate2, mixX2, mixY2; - spPathConstraintMixTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY); - nextMap = keyMap->next; - if (nextMap == NULL) { - break; - } - time2 = Json_getFloat(nextMap, "time", 0); - mixRotate2 = Json_getFloat(nextMap, "mixRotate", 1); - mixX2 = Json_getFloat(nextMap, "mixX", 1); - mixY2 = Json_getFloat(nextMap, "mixY", mixX2); - curve = Json_getItem(keyMap, "curve"); - if (curve != NULL) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, mixX, mixX2, 1); - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, mixY, mixY2, 1); - } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - keyMap = nextMap; - } - spTimelineArray_add(timelines, SUPER(SUPER(timeline))); - } - } - } + for (constraintMap = paths ? paths->child : 0; constraintMap; constraintMap = constraintMap->next) { + spPathConstraintData *data = spSkeletonData_findPathConstraint(skeletonData, constraintMap->name); + int index; + if (!data) { + cleanUpTimelines(timelines); + _spSkeletonJson_setError(self, NULL, "Path constraint not found: ", constraintMap->name); + return NULL; + } + index = spSkeletonData_findPathConstraintIndex(skeletonData, data->name); + for (timelineMap = constraintMap->child; timelineMap; timelineMap = timelineMap->next) { + const char *timelineName; + keyMap = timelineMap->child; + if (keyMap == NULL) continue; + timelineName = timelineMap->name; + if (strcmp(timelineName, "position") == 0 ) { + spPathConstraintPositionTimeline *timeline = spPathConstraintPositionTimeline_create(timelineMap->size, timelineMap->size, index); + spTimelineArray_add(timelines, readTimeline(keyMap, SUPER(timeline), 0, data->positionMode == SP_POSITION_MODE_FIXED ? scale : 1)); + } else if (strcmp(timelineName, "spacing") == 0) { + spCurveTimeline1 *timeline = SUPER(spPathConstraintSpacingTimeline_create(timelineMap->size, timelineMap->size, index)); + spTimelineArray_add(timelines, readTimeline(keyMap, timeline, 0, + data->spacingMode == SP_SPACING_MODE_LENGTH || data->spacingMode == SP_SPACING_MODE_FIXED ? scale : 1)); + } else if (strcmp(timelineName, "mix") == 0) { + spPathConstraintMixTimeline *timeline = spPathConstraintMixTimeline_create(timelineMap->size, timelineMap->size * 3, index); + float time = Json_getFloat(keyMap, "time", 0); + float mixRotate = Json_getFloat(keyMap, "mixRotate", 1); + float mixX = Json_getFloat(keyMap, "mixX", 1); + float mixY = Json_getFloat(keyMap, "mixY", mixX); + for (frame = 0, bezier = 0;; frame++) { + float time2, mixRotate2, mixX2, mixY2; + spPathConstraintMixTimeline_setFrame(timeline, frame, time, mixRotate, mixX, mixY); + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + + time2 = Json_getFloat(nextMap, "time", 0); + mixRotate2 = Json_getFloat(nextMap, "mixRotate", 1); + mixX2 = Json_getFloat(nextMap, "mixX", 1); + mixY2 = Json_getFloat(nextMap, "mixY", mixX2); + curve = Json_getItem(keyMap, "curve"); + if (curve != NULL) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + keyMap = nextMap; + } + spTimelineArray_add(timelines, SUPER(SUPER(timeline))); + } + } + } /* Deform timelines. */ for (constraintMap = deformJson ? deformJson->child : 0; constraintMap; constraintMap = constraintMap->next) { @@ -595,10 +617,10 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r for (timelineMap = slotMap->child; timelineMap; timelineMap = timelineMap->next) { float* tempDeform; - spVertexAttachment* attachment; - int weighted, deformLength; - spDeformTimeline *timeline; - float time; + spVertexAttachment* attachment; + int weighted, deformLength; + spDeformTimeline *timeline; + float time; keyMap = timelineMap->child; if (keyMap == NULL) continue; @@ -614,8 +636,8 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r timeline = spDeformTimeline_create(timelineMap->size, deformLength, timelineMap->size, slotIndex, attachment); time = Json_getFloat(keyMap, "time", 0); - for (frame = 0, bezier = 0;; frame++) { - Json *vertices = Json_getItem(keyMap, "vertices"); + for (frame = 0, bezier = 0;; frame++) { + Json *vertices = Json_getItem(keyMap, "vertices"); float* deform; float time2; @@ -645,15 +667,18 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r } } spDeformTimeline_setFrame(timeline, frame, time, deform); - nextMap = keyMap->next; - if (!nextMap) break; - time2 = Json_getFloat(nextMap, "time", 0); - curve = Json_getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, 0, 1, 1); - } - time = time2; - keyMap = nextMap; + nextMap = keyMap->next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + time2 = Json_getFloat(nextMap, "time", 0); + curve = Json_getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, SUPER(timeline), bezier, frame, 0, time, time2, 0, 1, 1); + } + time = time2; + keyMap = nextMap; } FREE(tempDeform); @@ -665,8 +690,8 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r /* Draw order timeline. */ if (drawOrderJson) { spDrawOrderTimeline* timeline = spDrawOrderTimeline_create(drawOrderJson->size, skeletonData->slotsCount); - for (keyMap = drawOrderJson->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { - int ii; + for (keyMap = drawOrderJson->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { + int ii; int* drawOrder = 0; Json* offsets = Json_getItem(keyMap, "offsets"); if (offsets) { @@ -704,14 +729,14 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r FREE(drawOrder); } - spTimelineArray_add(timelines, SUPER(timeline)); + spTimelineArray_add(timelines, SUPER(timeline)); } /* Event timeline. */ if (events) { spEventTimeline* timeline = spEventTimeline_create(events->size); - for (keyMap = events->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { - spEvent* event; + for (keyMap = events->child, frame = 0; keyMap; keyMap = keyMap->next, ++frame) { + spEvent* event; const char* stringValue; spEventData* eventData = spSkeletonData_findEvent(skeletonData, Json_getString(keyMap, "name", 0)); if (!eventData) { @@ -733,9 +758,9 @@ static spAnimation* _spSkeletonJson_readAnimation (spSkeletonJson* self, Json* r spTimelineArray_add(timelines, SUPER(timeline)); } - duration = 0; + duration = 0; for (i = 0, n = timelines->size; i < n; i++) { - duration = MAX(duration, spTimeline_getDuration(timelines->items[i])); + duration = MAX(duration, spTimeline_getDuration(timelines->items[i])); } return spAnimation_create(root->name, timelines, duration); } @@ -827,11 +852,11 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha if (skeleton) { MALLOC_STR(skeletonData->hash, Json_getString(skeleton, "hash", 0)); MALLOC_STR(skeletonData->version, Json_getString(skeleton, "spine", 0)); - if (strcmp(skeletonData->version, "3.8.75") == 0) { - spSkeletonData_dispose(skeletonData); - _spSkeletonJson_setError(self, root, "Unsupported skeleton data, please export with a newer version of Spine.", ""); - return 0; - } + if (strcmp(skeletonData->version, "3.8.75") == 0) { + spSkeletonData_dispose(skeletonData); + _spSkeletonJson_setError(self, root, "Unsupported skeleton data, please export with a newer version of Spine.", ""); + return 0; + } skeletonData->x = Json_getFloat(skeleton, "x", 0); skeletonData->y = Json_getFloat(skeleton, "y", 0); skeletonData->width = Json_getFloat(skeleton, "width", 0); @@ -1022,11 +1047,11 @@ spSkeletonData* spSkeletonJson_readSkeletonData (spSkeletonJson* self, const cha data->offsetScaleY = Json_getFloat(constraintMap, "scaleY", 0); data->offsetShearY = Json_getFloat(constraintMap, "shearY", 0); - data->mixX = Json_getFloat(constraintMap, "mixX", 1); - data->mixY = Json_getFloat(constraintMap, "mixY", data->mixX); - data->mixScaleX = Json_getFloat(constraintMap, "mixScaleX", 1); - data->mixScaleY = Json_getFloat(constraintMap, "mixScaleY", data->mixScaleX); - data->mixShearY = Json_getFloat(constraintMap, "mixShearY", 1); + data->mixX = Json_getFloat(constraintMap, "mixX", 1); + data->mixY = Json_getFloat(constraintMap, "mixY", data->mixX); + data->mixScaleX = Json_getFloat(constraintMap, "mixScaleX", 1); + data->mixScaleY = Json_getFloat(constraintMap, "mixScaleY", data->mixScaleX); + data->mixShearY = Json_getFloat(constraintMap, "mixShearY", 1); skeletonData->transformConstraints[i] = data; } diff --git a/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp b/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp index 50156ccc1..e2b5575fb 100644 --- a/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp +++ b/spine-cpp/spine-cpp/src/spine/CurveTimeline.cpp @@ -94,7 +94,6 @@ float CurveTimeline::getBezierValue(float time, size_t frame, size_t valueOffset RTTI_IMPL(CurveTimeline1, CurveTimeline) - CurveTimeline1::CurveTimeline1(size_t frameCount, size_t bezierCount): CurveTimeline(frameCount, CurveTimeline1::ENTRIES, bezierCount) { } diff --git a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp index d5e9ec1c0..5dccedbf7 100644 --- a/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp +++ b/spine-cpp/spine-cpp/src/spine/SkeletonJson.cpp @@ -80,28 +80,28 @@ using namespace spine; static float toColor(const char *value, size_t index) { - char digits[3]; - char *error; - int color; + char digits[3]; + char *error; + int color; - if (index >= strlen(value) / 2) return -1; + if (index >= strlen(value) / 2) return -1; - value += index * 2; + value += index * 2; - digits[0] = *value; - digits[1] = *(value + 1); - digits[2] = '\0'; - color = (int) strtoul(digits, &error, 16); - if (*error != 0) return -1; + digits[0] = *value; + digits[1] = *(value + 1); + digits[2] = '\0'; + color = (int) strtoul(digits, &error, 16); + if (*error != 0) return -1; - return color / (float) 255; + return color / (float) 255; } static void toColor(Color &color, const char *value, bool hasAlpha) { - color.r = toColor(value, 0); - color.g = toColor(value, 1); - color.b = toColor(value, 2); - if (hasAlpha) color.a = toColor(value, 3); + color.r = toColor(value, 0); + color.g = toColor(value, 1); + color.b = toColor(value, 2); + if (hasAlpha) color.a = toColor(value, 3); } SkeletonJson::SkeletonJson(Atlas *atlas) : _attachmentLoader(new(__FILE__, __LINE__) AtlasAttachmentLoader(atlas)), @@ -750,69 +750,71 @@ SkeletonData *SkeletonJson::readSkeletonData(const char *json) { void SkeletonJson::setBezier (CurveTimeline *timeline, int frame, int value, int bezier, float time1, float value1, float cx1, float cy1, float cx2, float cy2, float time2, float value2) { - timeline->setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + timeline->setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); } int SkeletonJson::readCurve (Json *curve, CurveTimeline *timeline, int bezier, int frame, int value, float time1, float time2, - float value1, float value2, float scale) { - if (curve->_type == Json::JSON_STRING && strcmp(curve->_valueString, "stepped") == 0) { - timeline->setStepped(frame); - } else { - curve = Json::getItem(curve, value << 2); - float cx1 = curve->_valueFloat; - curve = curve->_next; - float cy1 = curve->_valueFloat * scale; - curve = curve->_next; - float cx2 = curve->_valueFloat; - curve = curve->_next; - float cy2 = curve->_valueFloat * scale; - setBezier(timeline, frame, value, bezier++, time1, value1, cx1, cy1, cx2, cy2, time2, value2); - } - return bezier; + float value1, float value2, float scale) { + if (curve->_type == Json::JSON_STRING && strcmp(curve->_valueString, "stepped") == 0) { + timeline->setStepped(frame); + return bezier; + } + curve = Json::getItem(curve, value << 2); + float cx1 = curve->_valueFloat; + curve = curve->_next; + float cy1 = curve->_valueFloat * scale; + curve = curve->_next; + float cx2 = curve->_valueFloat; + curve = curve->_next; + float cy2 = curve->_valueFloat * scale; + setBezier(timeline, frame, value, bezier, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } Timeline *SkeletonJson::readTimeline (Json *keyMap, CurveTimeline1 *timeline, float defaultValue, float scale) { - float time = Json::getFloat(keyMap, "time", 0); - float value = Json::getFloat(keyMap, "value", defaultValue) * scale; - int bezier = 0; - for (int frame = 0;; frame++) { - timeline->setFrame(frame, time, value); - Json* nextMap = keyMap->_next; - if (nextMap == NULL) break; - float time2 = Json::getFloat(nextMap, "time", 0); - float value2 = Json::getFloat(nextMap, "value", defaultValue) * scale; - Json* curve = Json::getItem(keyMap, "curve"); - if (curve != NULL) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); - time = time2; - value = value2; - keyMap = nextMap; - } - return timeline; + float time = Json::getFloat(keyMap, "time", 0); + float value = Json::getFloat(keyMap, "value", defaultValue) * scale; + int bezier = 0; + for (int frame = 0;; frame++) { + timeline->setFrame(frame, time, value); + Json* nextMap = keyMap->_next; + if (!nextMap) break; + float time2 = Json::getFloat(nextMap, "time", 0); + float value2 = Json::getFloat(nextMap, "value", defaultValue) * scale; + Json* curve = Json::getItem(keyMap, "curve"); + if (curve != NULL) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value, value2, scale); + time = time2; + value = value2; + keyMap = nextMap; + } + // timeline.shrink(); // BOZO + return timeline; } Timeline *SkeletonJson::readTimeline (Json *keyMap, CurveTimeline2 *timeline, const char *name1, const char *name2, float defaultValue, float scale) { - float time = Json::getFloat(keyMap, "time", 0); - float value1 = Json::getFloat(keyMap, name1, defaultValue) * scale; - float value2 = Json::getFloat(keyMap, name2, defaultValue) * scale; - int bezier = 0; - for (int frame = 0;; frame++) { - timeline->setFrame(frame, time, value1, value2); - Json *nextMap = keyMap->_next; - if (nextMap == NULL) break; - float time2 = Json::getFloat(nextMap, "time", 0); - float nvalue1 = Json::getFloat(nextMap, name1, defaultValue) * scale; - float nvalue2 = Json::getFloat(nextMap, name2, defaultValue) * scale; - Json *curve = Json::getItem(keyMap, "curve"); - if (curve != NULL) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); - } - time = time2; - value1 = nvalue1; - value2 = nvalue2; - keyMap = nextMap; - } - return timeline; + float time = Json::getFloat(keyMap, "time", 0); + float value1 = Json::getFloat(keyMap, name1, defaultValue) * scale; + float value2 = Json::getFloat(keyMap, name2, defaultValue) * scale; + int bezier = 0; + for (int frame = 0;; frame++) { + timeline->setFrame(frame, time, value1, value2); + Json *nextMap = keyMap->_next; + if (!nextMap) break; + float time2 = Json::getFloat(nextMap, "time", 0); + float nvalue1 = Json::getFloat(nextMap, name1, defaultValue) * scale; + float nvalue2 = Json::getFloat(nextMap, name2, defaultValue) * scale; + Json *curve = Json::getItem(keyMap, "curve"); + if (curve != NULL) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); + } + time = time2; + value1 = nvalue1; + value2 = nvalue2; + keyMap = nextMap; + } + // timeline.shrink(); // BOZO + return timeline; } Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { @@ -827,7 +829,7 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { Json *events = Json::getItem(root, "events"); Json *boneMap, *slotMap, *constraintMap, *keyMap, *nextMap, *curve; int frame, bezier; - Color color, color2, newColor, newColor2; + Color color, color2, newColor, newColor2; /** Slot timelines. */ for (slotMap = slots ? slots->_child : 0; slotMap; slotMap = slotMap->_next) { @@ -840,7 +842,7 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { for (Json *timelineMap = slotMap->_child; timelineMap; timelineMap = timelineMap->_next) { if (strcmp(timelineMap->_name, "attachment") == 0) { - int frameCount = timelineMap->_size; + int frameCount = timelineMap->_size; AttachmentTimeline *timeline = new(__FILE__, __LINE__) AttachmentTimeline(frameCount, slotIndex); for (keyMap = timelineMap->_child, frame = 0; keyMap; keyMap = keyMap->_next, ++frame) { timeline->setFrame(frame, Json::getFloat(keyMap, "time", 0), Json::getItem(keyMap, "name")->_valueString); @@ -848,121 +850,133 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { timelines.add(timeline); } else if (strcmp(timelineMap->_name, "rgba") == 0) { - int frameCount = timelineMap->_size; - int bezierCount = frameCount << 2; + int frameCount = timelineMap->_size; + int bezierCount = frameCount << 2; RGBATimeline *timeline = new(__FILE__, __LINE__) RGBATimeline(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->_child; - float time = Json::getFloat(keyMap, "time", 0); - toColor(color, Json::getString(keyMap, "color", 0), true); + keyMap = timelineMap->_child; + float time = Json::getFloat(keyMap, "time", 0); + toColor(color, Json::getString(keyMap, "color", 0), true); for (frame = 0, bezier = 0;;++frame) { timeline->setFrame(frame, time, color.r, color.g, color.b, color.a); nextMap = keyMap->_next; - if (!nextMap) break; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } float time2 = Json::getFloat(nextMap, "time", 0); - toColor(newColor, Json::getString(nextMap, "color", 0), true); - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); - bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1); - } - time = time2; - color = newColor; - keyMap = nextMap; + toColor(newColor, Json::getString(nextMap, "color", 0), true); + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1); + } + time = time2; + color = newColor; + keyMap = nextMap; } timelines.add(timeline); } else if (strcmp(timelineMap->_name, "rgb") == 0) { - int frameCount = timelineMap->_size; - int bezierCount = frameCount * 3; - RGBTimeline *timeline = new(__FILE__, __LINE__) RGBTimeline(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->_child; - float time = Json::getFloat(keyMap, "time", 0); - toColor(color, Json::getString(keyMap, "color", 0), false); + int frameCount = timelineMap->_size; + int bezierCount = frameCount * 3; + RGBTimeline *timeline = new(__FILE__, __LINE__) RGBTimeline(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->_child; + float time = Json::getFloat(keyMap, "time", 0); + toColor(color, Json::getString(keyMap, "color", 0), false); - for (frame = 0, bezier = 0;;++frame) { - timeline->setFrame(frame, time, color.r, color.g, color.b); - nextMap = keyMap->_next; - if (!nextMap) break; - float time2 = Json::getFloat(nextMap, "time", 0); - toColor(newColor, Json::getString(nextMap, "color", 0), false); - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); - } - time = time2; - color = newColor; - keyMap = nextMap; - } - timelines.add(timeline); - } else if (strcmp(timelineMap->_name, "alpha") == 0) { - timelines.add(readTimeline(timelineMap->_child, new (__FILE__, __LINE__) AlphaTimeline(timelineMap->_size, timelineMap->_size, slotIndex), 0, 1)); - } else if (strcmp(timelineMap->_name, "rgba2") == 0) { - int frameCount = timelineMap->_size; - int bezierCount = frameCount * 7; - RGBA2Timeline *timeline = new(__FILE__, __LINE__) RGBA2Timeline(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->_child; - float time = Json::getFloat(keyMap, "time", 0); - toColor(color, Json::getString(keyMap, "light", 0), true); - toColor(color2, Json::getString(keyMap, "dark", 0), false); + for (frame = 0, bezier = 0;;++frame) { + timeline->setFrame(frame, time, color.r, color.g, color.b); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + float time2 = Json::getFloat(nextMap, "time", 0); + toColor(newColor, Json::getString(nextMap, "color", 0), false); + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + } + time = time2; + color = newColor; + keyMap = nextMap; + } + timelines.add(timeline); + } else if (strcmp(timelineMap->_name, "alpha") == 0) { + timelines.add(readTimeline(timelineMap->_child, new (__FILE__, __LINE__) AlphaTimeline(timelineMap->_size, timelineMap->_size, slotIndex), 0, 1)); + } else if (strcmp(timelineMap->_name, "rgba2") == 0) { + int frameCount = timelineMap->_size; + int bezierCount = frameCount * 7; + RGBA2Timeline *timeline = new(__FILE__, __LINE__) RGBA2Timeline(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->_child; + float time = Json::getFloat(keyMap, "time", 0); + toColor(color, Json::getString(keyMap, "light", 0), true); + toColor(color2, Json::getString(keyMap, "dark", 0), false); - for (frame = 0, bezier = 0;;++frame) { - timeline->setFrame(frame, time, color.r, color.g, color.b, color.a, color2.g, color2.g, color2.b); - nextMap = keyMap->_next; - if (!nextMap) break; - float time2 = Json::getFloat(nextMap, "time", 0); - toColor(newColor, Json::getString(nextMap, "light", 0), true); - toColor(newColor2, Json::getString(nextMap, "dark", 0), false); - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); - bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1); - bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1); - bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1); - bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1); - } - time = time2; - color = newColor; - color2 = newColor2; - keyMap = nextMap; - } - timelines.add(timeline); - } else if (strcmp(timelineMap->_name, "rgb2") == 0) { - int frameCount = timelineMap->_size; - int bezierCount = frameCount * 7; - RGBA2Timeline *timeline = new(__FILE__, __LINE__) RGBA2Timeline(frameCount, bezierCount, slotIndex); - keyMap = timelineMap->_child; - float time = Json::getFloat(keyMap, "time", 0); - toColor(color, Json::getString(keyMap, "light", 0), false); - toColor(color2, Json::getString(keyMap, "dark", 0), false); + for (frame = 0, bezier = 0;;++frame) { + timeline->setFrame(frame, time, color.r, color.g, color.b, color.a, color2.g, color2.g, color2.b); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + float time2 = Json::getFloat(nextMap, "time", 0); + toColor(newColor, Json::getString(nextMap, "light", 0), true); + toColor(newColor2, Json::getString(nextMap, "dark", 0), false); + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color.a, newColor.a, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.r, newColor2.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.g, newColor2.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 6, time, time2, color2.b, newColor2.b, 1); + } + time = time2; + color = newColor; + color2 = newColor2; + keyMap = nextMap; + } + timelines.add(timeline); + } else if (strcmp(timelineMap->_name, "rgb2") == 0) { + int frameCount = timelineMap->_size; + int bezierCount = frameCount * 7; + RGBA2Timeline *timeline = new(__FILE__, __LINE__) RGBA2Timeline(frameCount, bezierCount, slotIndex); + keyMap = timelineMap->_child; + float time = Json::getFloat(keyMap, "time", 0); + toColor(color, Json::getString(keyMap, "light", 0), false); + toColor(color2, Json::getString(keyMap, "dark", 0), false); - for (frame = 0, bezier = 0;;++frame) { - timeline->setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b); - nextMap = keyMap->_next; - if (!nextMap) break; - float time2 = Json::getFloat(nextMap, "time", 0); - toColor(newColor, Json::getString(nextMap, "light", 0), false); - toColor(newColor2, Json::getString(nextMap, "dark", 0), false); - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); - bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); - bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1); - bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1); - bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1); - } - time = time2; - color = newColor; - color2 = newColor2; - keyMap = nextMap; - } - timelines.add(timeline); + for (frame = 0, bezier = 0;;++frame) { + timeline->setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + float time2 = Json::getFloat(nextMap, "time", 0); + toColor(newColor, Json::getString(nextMap, "light", 0), false); + toColor(newColor2, Json::getString(nextMap, "dark", 0), false); + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, color.r, newColor.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, color.g, newColor.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, color.b, newColor.b, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, color2.r, newColor2.r, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, color2.g, newColor2.g, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, color2.b, newColor2.b, 1); + } + time = time2; + color = newColor; + color2 = newColor2; + keyMap = nextMap; + } + timelines.add(timeline); } else { ContainerUtil::cleanUpVectorOfPointers(timelines); setError(NULL, "Invalid timeline type for a slot: ", timelineMap->_name); @@ -983,185 +997,192 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { } for (timelineMap = boneMap->_child; timelineMap; timelineMap = timelineMap->_next) { - if (timelineMap->_size == 0) continue; + if (timelineMap->_size == 0) continue; - if (strcmp(timelineMap->_name, "rotate") == 0) { - timelines.add(readTimeline(timelineMap->_child, new RotateTimeline(timelineMap->_size, timelineMap->_size, boneIndex), 0, 1)); - } else if (strcmp(timelineMap->_name, "translate") == 0) { - TranslateTimeline *timeline = new TranslateTimeline(timelineMap->_size, timelineMap->_size << 1, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, "x", "y", 0, _scale)); - } else if (strcmp(timelineMap->_name, "translatex") == 0) { - TranslateXTimeline *timeline = new TranslateXTimeline(timelineMap->_size, timelineMap->_size, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, 0, _scale)); - } else if (strcmp(timelineMap->_name, "translatey") == 0) { - TranslateYTimeline *timeline = new TranslateYTimeline(timelineMap->_size, timelineMap->_size, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, 0, _scale)); - } else if (strcmp(timelineMap->_name, "scale") == 0) { - ScaleTimeline *timeline = new (__FILE__, __LINE__) ScaleTimeline(timelineMap->_size, timelineMap->_size << 1, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, "x", "y", 1, 1)); - } else if (strcmp(timelineMap->_name, "scalex") == 0) { - ScaleXTimeline *timeline = new (__FILE__, __LINE__) ScaleXTimeline(timelineMap->_size, timelineMap->_size, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, 1, 1)); - } else if (strcmp(timelineMap->_name, "scaley") == 0) { - ScaleYTimeline *timeline = new (__FILE__, __LINE__) ScaleYTimeline(timelineMap->_size, timelineMap->_size, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, 1, 1)); - } else if (strcmp(timelineMap->_name, "shear") == 0) { - ShearTimeline *timeline = new (__FILE__, __LINE__) ShearTimeline(timelineMap->_size, timelineMap->_size << 1, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, "x", "y", 0, 1)); - } else if (strcmp(timelineMap->_name, "shearx") == 0) { - ShearXTimeline *timeline = new (__FILE__, __LINE__) ShearXTimeline(timelineMap->_size, timelineMap->_size, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, 0, 1)); - } else if (strcmp(timelineMap->_name, "sheary") == 0) { - ShearYTimeline *timeline = new (__FILE__, __LINE__) ShearYTimeline(timelineMap->_size, timelineMap->_size, boneIndex); - timelines.add(readTimeline(timelineMap->_child, timeline, 0, 1)); - } else { - ContainerUtil::cleanUpVectorOfPointers(timelines); - setError(NULL, "Invalid timeline type for a bone: ", timelineMap->_name); - return NULL; - } + if (strcmp(timelineMap->_name, "rotate") == 0) { + timelines.add(readTimeline(timelineMap->_child, new RotateTimeline(timelineMap->_size, timelineMap->_size, boneIndex), 0, 1)); + } else if (strcmp(timelineMap->_name, "translate") == 0) { + TranslateTimeline *timeline = new TranslateTimeline(timelineMap->_size, timelineMap->_size << 1, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, "x", "y", 0, _scale)); + } else if (strcmp(timelineMap->_name, "translatex") == 0) { + TranslateXTimeline *timeline = new TranslateXTimeline(timelineMap->_size, timelineMap->_size, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, 0, _scale)); + } else if (strcmp(timelineMap->_name, "translatey") == 0) { + TranslateYTimeline *timeline = new TranslateYTimeline(timelineMap->_size, timelineMap->_size, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, 0, _scale)); + } else if (strcmp(timelineMap->_name, "scale") == 0) { + ScaleTimeline *timeline = new (__FILE__, __LINE__) ScaleTimeline(timelineMap->_size, timelineMap->_size << 1, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, "x", "y", 1, 1)); + } else if (strcmp(timelineMap->_name, "scalex") == 0) { + ScaleXTimeline *timeline = new (__FILE__, __LINE__) ScaleXTimeline(timelineMap->_size, timelineMap->_size, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, 1, 1)); + } else if (strcmp(timelineMap->_name, "scaley") == 0) { + ScaleYTimeline *timeline = new (__FILE__, __LINE__) ScaleYTimeline(timelineMap->_size, timelineMap->_size, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, 1, 1)); + } else if (strcmp(timelineMap->_name, "shear") == 0) { + ShearTimeline *timeline = new (__FILE__, __LINE__) ShearTimeline(timelineMap->_size, timelineMap->_size << 1, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, "x", "y", 0, 1)); + } else if (strcmp(timelineMap->_name, "shearx") == 0) { + ShearXTimeline *timeline = new (__FILE__, __LINE__) ShearXTimeline(timelineMap->_size, timelineMap->_size, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, 0, 1)); + } else if (strcmp(timelineMap->_name, "sheary") == 0) { + ShearYTimeline *timeline = new (__FILE__, __LINE__) ShearYTimeline(timelineMap->_size, timelineMap->_size, boneIndex); + timelines.add(readTimeline(timelineMap->_child, timeline, 0, 1)); + } else { + ContainerUtil::cleanUpVectorOfPointers(timelines); + setError(NULL, "Invalid timeline type for a bone: ", timelineMap->_name); + return NULL; + } } } /** IK constraint timelines. */ for (constraintMap = ik ? ik->_child : 0; constraintMap; constraintMap = constraintMap->_next) { - keyMap = constraintMap->_child; - if (keyMap == NULL) continue; + keyMap = constraintMap->_child; + if (keyMap == NULL) continue; IkConstraintData *constraint = skeletonData->findIkConstraint(constraintMap->_name); int constraintIndex = skeletonData->_ikConstraints.indexOf(constraint); IkConstraintTimeline *timeline = new(__FILE__, __LINE__) IkConstraintTimeline(constraintMap->_size, constraintMap->_size << 1, constraintIndex); - float time = Json::getFloat(keyMap, "time", 0); - float mix = Json::getFloat(keyMap, "mix", 1); - float softness = Json::getFloat(keyMap, "softness", 0) * _scale; + float time = Json::getFloat(keyMap, "time", 0); + float mix = Json::getFloat(keyMap, "mix", 1); + float softness = Json::getFloat(keyMap, "softness", 0) * _scale; - for (frame = 0, bezier = 0;; frame++) { - int bendDirection = Json::getBoolean(keyMap, "bendPositive", true) ? 1 : -1; - timeline->setFrame(frame, time, mix, softness, bendDirection, Json::getBoolean(keyMap, "compress", false), Json::getBoolean(keyMap, "stretch", false)); - nextMap = keyMap->_next; - if (!nextMap) break; + for (frame = 0, bezier = 0;; frame++) { + int bendDirection = Json::getBoolean(keyMap, "bendPositive", true) ? 1 : -1; + timeline->setFrame(frame, time, mix, softness, bendDirection, Json::getBoolean(keyMap, "compress", false), Json::getBoolean(keyMap, "stretch", false)); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } - float time2 = Json::getFloat(nextMap, "time", 0); - float mix2 = Json::getFloat(nextMap, "mix", 1); - float softness2 = Json::getFloat(nextMap, "softness", 0) * _scale; - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, _scale); - } + float time2 = Json::getFloat(nextMap, "time", 0); + float mix2 = Json::getFloat(nextMap, "mix", 1); + float softness2 = Json::getFloat(nextMap, "softness", 0) * _scale; + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mix, mix2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, softness, softness2, _scale); + } - time = time2; - mix = mix2; - softness = softness2; - keyMap = nextMap; - } + time = time2; + mix = mix2; + softness = softness2; + keyMap = nextMap; + } timelines.add(timeline); } /** Transform constraint timelines. */ for (constraintMap = transform ? transform->_child : 0; constraintMap; constraintMap = constraintMap->_next) { - keyMap = constraintMap->_child; - if (keyMap == NULL) continue; + keyMap = constraintMap->_child; + if (keyMap == NULL) continue; - TransformConstraintData *constraint = skeletonData->findTransformConstraint(constraintMap->_name); - int constraintIndex = skeletonData->_transformConstraints.indexOf(constraint); - TransformConstraintTimeline *timeline = new(__FILE__, __LINE__) TransformConstraintTimeline(constraintMap->_size, constraintMap->_size << 2, constraintIndex); + TransformConstraintData *constraint = skeletonData->findTransformConstraint(constraintMap->_name); + int constraintIndex = skeletonData->_transformConstraints.indexOf(constraint); + TransformConstraintTimeline *timeline = new(__FILE__, __LINE__) TransformConstraintTimeline(constraintMap->_size, constraintMap->_size << 2, constraintIndex); - float time = Json::getFloat(keyMap, "time", 0); - float mixRotate = Json::getFloat(keyMap, "mixRotate", 1); - float mixShearY = Json::getFloat(keyMap, "mixShearY", 1); - float mixX = Json::getFloat(keyMap, "mixX", 1); - float mixY = Json::getFloat(keyMap, "mixY", mixX); - float mixScaleX = Json::getFloat(keyMap, "mixScaleX", 1); - float mixScaleY = Json::getFloat(keyMap, "mixScaleY", mixScaleX); + float time = Json::getFloat(keyMap, "time", 0); + float mixRotate = Json::getFloat(keyMap, "mixRotate", 1); + float mixShearY = Json::getFloat(keyMap, "mixShearY", 1); + float mixX = Json::getFloat(keyMap, "mixX", 1); + float mixY = Json::getFloat(keyMap, "mixY", mixX); + float mixScaleX = Json::getFloat(keyMap, "mixScaleX", 1); + float mixScaleY = Json::getFloat(keyMap, "mixScaleY", mixScaleX); - for (frame = 0, bezier = 0;; frame++) { - timeline->setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); - nextMap = keyMap->_next; - if (!nextMap) break; + for (frame = 0, bezier = 0;; frame++) { + timeline->setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } - float time2 = Json::getFloat(nextMap, "time", 0); - float mixRotate2 = Json::getFloat(nextMap, "mixRotate", 1); - float mixShearY2 = Json::getFloat(nextMap, "mixShearY", 1); - float mixX2 = Json::getFloat(nextMap, "mixX", 1); - float mixY2 = Json::getFloat(nextMap, "mixY", mixX2); - float mixScaleX2 = Json::getFloat(nextMap, "mixScaleX", 1); - float mixScaleY2 = Json::getFloat(nextMap, "mixScaleY", mixScaleX2); - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); - } + float time2 = Json::getFloat(nextMap, "time", 0); + float mixRotate2 = Json::getFloat(nextMap, "mixRotate", 1); + float mixShearY2 = Json::getFloat(nextMap, "mixShearY", 1); + float mixX2 = Json::getFloat(nextMap, "mixX", 1); + float mixY2 = Json::getFloat(nextMap, "mixY", mixX2); + float mixScaleX2 = Json::getFloat(nextMap, "mixScaleX", 1); + float mixScaleY2 = Json::getFloat(nextMap, "mixScaleY", mixScaleX2); + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 3, time, time2, mixScaleX, mixScaleX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 4, time, time2, mixScaleY, mixScaleY2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 5, time, time2, mixShearY, mixShearY2, 1); + } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - mixScaleX = mixScaleX2; - mixScaleY = mixScaleY2; - mixScaleX = mixScaleX2; - keyMap = nextMap; - } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + mixScaleX = mixScaleX2; + mixScaleY = mixScaleY2; + mixScaleX = mixScaleX2; + keyMap = nextMap; + } - timelines.add(timeline); + timelines.add(timeline); } /** Path constraint timelines. */ for (constraintMap = paths ? paths->_child : 0; constraintMap; constraintMap = constraintMap->_next) { - PathConstraintData *data = skeletonData->findPathConstraint(constraintMap->_name); - if (!data) { - ContainerUtil::cleanUpVectorOfPointers(timelines); - setError(NULL, "Path constraint not found: ", constraintMap->_name); - return NULL; - } - int index = skeletonData->_pathConstraints.indexOf(data); - for (Json *timelineMap = constraintMap->_child; timelineMap; timelineMap = timelineMap->_next) { - keyMap = timelineMap->_child; - if (keyMap == NULL) continue; - const char *timelineName = timelineMap->_name; - if (strcmp(timelineName, "position") == 0 ) { - PathConstraintPositionTimeline *timeline = new (__FILE__, __LINE__) PathConstraintPositionTimeline(timelineMap->_size, timelineMap->_size, index); - timelines.add(readTimeline(keyMap, timeline, 0, data->_positionMode == PositionMode_Fixed ? _scale : 1)); - } else if (strcmp(timelineName, "spacing") == 0) { - CurveTimeline1 *timeline = new PathConstraintSpacingTimeline(timelineMap->_size, timelineMap->_size, index); - timelines.add(readTimeline(keyMap, timeline, 0, - data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed ? _scale : 1)); - } else if (strcmp(timelineName, "mix") == 0) { - PathConstraintMixTimeline *timeline = new PathConstraintMixTimeline(timelineMap->_size, timelineMap->_size * 3, index); - float time = Json::getFloat(keyMap, "time", 0); - float mixRotate = Json::getFloat(keyMap, "mixRotate", 1); - float mixX = Json::getFloat(keyMap, "mixX", 1); - float mixY = Json::getFloat(keyMap, "mixY", mixX); - for (frame = 0, bezier = 0;; frame++) { - timeline->setFrame(frame, time, mixRotate, mixX, mixY); - nextMap = keyMap->_next; - if (nextMap == NULL) { - break; - } - float time2 = Json::getFloat(nextMap, "time", 0); - float mixRotate2 = Json::getFloat(nextMap, "mixRotate", 1); - float mixX2 = Json::getFloat(nextMap, "mixX", 1); - float mixY2 = Json::getFloat(nextMap, "mixY", mixX2); - curve = Json::getItem(keyMap, "curve"); - if (curve != NULL) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); - bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); - } - time = time2; - mixRotate = mixRotate2; - mixX = mixX2; - mixY = mixY2; - keyMap = nextMap; - } - timelines.add(timeline); - } - } + PathConstraintData *data = skeletonData->findPathConstraint(constraintMap->_name); + if (!data) { + ContainerUtil::cleanUpVectorOfPointers(timelines); + setError(NULL, "Path constraint not found: ", constraintMap->_name); + return NULL; + } + int index = skeletonData->_pathConstraints.indexOf(data); + for (Json *timelineMap = constraintMap->_child; timelineMap; timelineMap = timelineMap->_next) { + keyMap = timelineMap->_child; + if (keyMap == NULL) continue; + const char *timelineName = timelineMap->_name; + if (strcmp(timelineName, "position") == 0 ) { + PathConstraintPositionTimeline *timeline = new (__FILE__, __LINE__) PathConstraintPositionTimeline(timelineMap->_size, timelineMap->_size, index); + timelines.add(readTimeline(keyMap, timeline, 0, data->_positionMode == PositionMode_Fixed ? _scale : 1)); + } else if (strcmp(timelineName, "spacing") == 0) { + CurveTimeline1 *timeline = new PathConstraintSpacingTimeline(timelineMap->_size, timelineMap->_size, index); + timelines.add(readTimeline(keyMap, timeline, 0, + data->_spacingMode == SpacingMode_Length || data->_spacingMode == SpacingMode_Fixed ? _scale : 1)); + } else if (strcmp(timelineName, "mix") == 0) { + PathConstraintMixTimeline *timeline = new PathConstraintMixTimeline(timelineMap->_size, timelineMap->_size * 3, index); + float time = Json::getFloat(keyMap, "time", 0); + float mixRotate = Json::getFloat(keyMap, "mixRotate", 1); + float mixX = Json::getFloat(keyMap, "mixX", 1); + float mixY = Json::getFloat(keyMap, "mixY", mixX); + for (frame = 0, bezier = 0;; frame++) { + timeline->setFrame(frame, time, mixRotate, mixX, mixY); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + float time2 = Json::getFloat(nextMap, "time", 0); + float mixRotate2 = Json::getFloat(nextMap, "mixRotate", 1); + float mixX2 = Json::getFloat(nextMap, "mixX", 1); + float mixY2 = Json::getFloat(nextMap, "mixY", mixX2); + curve = Json::getItem(keyMap, "curve"); + if (curve != NULL) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); + bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); + } + time = time2; + mixRotate = mixRotate2; + mixX = mixX2; + mixY = mixY2; + keyMap = nextMap; + } + timelines.add(timeline); + } + } } /** Deform timelines. */ @@ -1171,8 +1192,8 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { int slotIndex = skeletonData->findSlotIndex(slotMap->_name); Json *timelineMap; for (timelineMap = slotMap->_child; timelineMap; timelineMap = timelineMap->_next) { - keyMap = timelineMap->_child; - if (keyMap == NULL) continue; + keyMap = timelineMap->_child; + if (keyMap == NULL) continue; Attachment *baseAttachment = skin->getAttachment(slotIndex, timelineMap->_name); if (!baseAttachment) { @@ -1187,7 +1208,7 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { int deformLength = weighted ? verts.size() / 3 * 2 : verts.size(); DeformTimeline *timeline = new(__FILE__, __LINE__) DeformTimeline(timelineMap->_size, timelineMap->_size, slotIndex, attachment); - float time = Json::getFloat(keyMap, "time", 0); + float time = Json::getFloat(keyMap, "time", 0); for (frame = 0, bezier = 0;; frame++) { Json *vertices = Json::getItem(keyMap, "vertices"); Vector deformed; @@ -1217,16 +1238,19 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { } } } - timeline->setFrame(frame, time, deformed); - nextMap = keyMap->_next; - if (!nextMap) break; - float time2 = Json::getFloat(nextMap, "time", 0); - curve = Json::getItem(keyMap, "curve"); - if (curve) { - bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1); - } - time = time2; - keyMap = nextMap; + timeline->setFrame(frame, time, deformed); + nextMap = keyMap->_next; + if (!nextMap) { + // timeline.shrink(); // BOZO + break; + } + float time2 = Json::getFloat(nextMap, "time", 0); + curve = Json::getItem(keyMap, "curve"); + if (curve) { + bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1); + } + time = time2; + keyMap = nextMap; } timelines.add(timeline); } @@ -1307,7 +1331,7 @@ Animation *SkeletonJson::readAnimation(Json *root, SkeletonData *skeletonData) { float duration = 0; for (size_t i = 0; i < timelines.size(); i++) - duration = MathUtil::max(duration, timelines[i]->getDuration()); + duration = MathUtil::max(duration, timelines[i]->getDuration()); return new(__FILE__, __LINE__) Animation(String(root->_name), timelines, duration); } diff --git a/spine-csharp/src/SkeletonJson.cs b/spine-csharp/src/SkeletonJson.cs index c451b1e51..162d9cf27 100644 --- a/spine-csharp/src/SkeletonJson.cs +++ b/spine-csharp/src/SkeletonJson.cs @@ -559,8 +559,7 @@ namespace Spine { float a = ToColor(color, 3); for (int frame = 0, bezier = 0;; frame++) { timeline.SetFrame(frame, time, r, g, b, a); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -602,8 +601,7 @@ namespace Spine { float b = ToColor(color, 2, 6); for (int frame = 0, bezier = 0; ; frame++) { timeline.SetFrame(frame, time, r, g, b); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -652,8 +650,7 @@ namespace Spine { float b2 = ToColor(color, 2, 6); for (int frame = 0, bezier = 0; ; frame++) { timeline.SetFrame(frame, time, r, g, b, a, r2, g2, b2); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -709,8 +706,7 @@ namespace Spine { float b2 = ToColor(color, 2, 6); for (int frame = 0, bezier = 0; ; frame++) { timeline.SetFrame(frame, time, r, g, b, r2, g2, b2); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -762,8 +758,7 @@ namespace Spine { foreach (KeyValuePair timelineEntry in timelineMap) { var values = (List)timelineEntry.Value; var keyMapEnumerator = values.GetEnumerator(); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) continue; + if (!keyMapEnumerator.MoveNext()) continue; var timelineName = (string)timelineEntry.Key; if (timelineName == "rotate") timelines.Add(ReadTimeline(ref keyMapEnumerator, new RotateTimeline(values.Count, values.Count, boneIndex), 0, 1)); @@ -801,8 +796,7 @@ namespace Spine { foreach (KeyValuePair timelineMap in (Dictionary)map["ik"]) { var timelineMapValues = (List)timelineMap.Value; var keyMapEnumerator = timelineMapValues.GetEnumerator(); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) continue; + if (!keyMapEnumerator.MoveNext()) continue; var keyMap = (Dictionary)keyMapEnumerator.Current; IkConstraintData constraint = skeletonData.FindIkConstraint(timelineMap.Key); IkConstraintTimeline timeline = new IkConstraintTimeline(timelineMapValues.Count, timelineMapValues.Count << 1, @@ -812,8 +806,7 @@ namespace Spine { for (int frame = 0, bezier = 0; ; frame++) { timeline.SetFrame(frame, time, mix, softness, GetBoolean(keyMap, "bendPositive", true) ? 1 : -1, GetBoolean(keyMap, "compress", false), GetBoolean(keyMap, "stretch", false)); - hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -839,8 +832,7 @@ namespace Spine { foreach (KeyValuePair timelineMap in (Dictionary)map["transform"]) { var timelineMapValues = (List)timelineMap.Value; var keyMapEnumerator = timelineMapValues.GetEnumerator(); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) continue; + if (!keyMapEnumerator.MoveNext()) continue; var keyMap = (Dictionary)keyMapEnumerator.Current; TransformConstraintData constraint = skeletonData.FindTransformConstraint(timelineMap.Key); TransformConstraintTimeline timeline = new TransformConstraintTimeline(timelineMapValues.Count, timelineMapValues.Count << 2, @@ -851,8 +843,7 @@ namespace Spine { float mixScaleX = GetFloat(keyMap, "mixScaleX", 1), mixScaleY = GetFloat(keyMap, "mixScaleY", mixScaleX); for (int frame = 0, bezier = 0; ; frame++) { timeline.SetFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); - hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -893,8 +884,7 @@ namespace Spine { foreach (KeyValuePair timelineEntry in timelineMap) { var values = (List)timelineEntry.Value; var keyMapEnumerator = values.GetEnumerator(); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) continue; + if (!keyMapEnumerator.MoveNext()) continue; var timelineName = (string)timelineEntry.Key; if (timelineName == "position") { CurveTimeline1 timeline = new PathConstraintPositionTimeline(values.Count, values.Count, index); @@ -911,8 +901,7 @@ namespace Spine { float mixX = GetFloat(keyMap, "mixX", 1), mixY = GetFloat(keyMap, "mixY", mixX); for (int frame = 0, bezier = 0; ; frame++) { timeline.SetFrame(frame, time, mixRotate, mixX, mixY); - hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -948,8 +937,7 @@ namespace Spine { foreach (KeyValuePair timelineMap in (Dictionary)slotMap.Value) { var timelineMapValues = (List)timelineMap.Value; var keyMapEnumerator = timelineMapValues.GetEnumerator(); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) continue; + if (!keyMapEnumerator.MoveNext()) continue; var keyMap = (Dictionary)keyMapEnumerator.Current; VertexAttachment attachment = (VertexAttachment)skin.GetAttachment(slotIndex, timelineMap.Key); if (attachment == null) throw new Exception("Deform attachment not found: " + timelineMap.Key); @@ -979,8 +967,7 @@ namespace Spine { } timeline.SetFrame(frame, time, deform); - hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) { + if (!keyMapEnumerator.MoveNext()) { timeline.Shrink(bezier); break; } @@ -1000,8 +987,8 @@ namespace Spine { } // Draw order timeline. - if (map.ContainsKey("drawOrder") || map.ContainsKey("draworder")) { - var values = (List)map[map.ContainsKey("drawOrder") ? "drawOrder" : "draworder"]; + if (map.ContainsKey("drawOrder")) { + var values = (List)map["drawOrder"]; var timeline = new DrawOrderTimeline(values.Count); int slotCount = skeletonData.slots.Count; int frame = 0; @@ -1074,9 +1061,7 @@ namespace Spine { int bezier = 0; for (int frame = 0; ; frame++) { timeline.SetFrame(frame, time, value); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) - break; + if (!keyMapEnumerator.MoveNext()) break; var nextMap = (Dictionary)keyMapEnumerator.Current; float time2 = GetFloat(nextMap, "time", 0); float value2 = GetFloat(nextMap, "value", defaultValue) * scale; @@ -1101,9 +1086,7 @@ namespace Spine { int bezier = 0; for (int frame = 0; ; frame++) { timeline.SetFrame(frame, time, value1, value2); - bool hasNext = keyMapEnumerator.MoveNext(); - if (!hasNext) - break; + if (!keyMapEnumerator.MoveNext()) break; var nextMap = (Dictionary)keyMapEnumerator.Current; float time2 = GetFloat(nextMap, "time", 0); float nvalue1 = GetFloat(nextMap, name1, defaultValue) * scale, nvalue2 = GetFloat(nextMap, name2, defaultValue) * scale; @@ -1126,19 +1109,16 @@ namespace Spine { if (curve is string) { if (value != 0) timeline.SetStepped(frame); - } else { - var curveValues = (List)curve; - int index = value << 2; - float cx1 = (float)curveValues[index]; - ++index; - float cy1 = ((float)curveValues[index]) * scale; - ++index; - float cx2 = (float)curveValues[index]; - ++index; - float cy2 = (float)curveValues[index] * scale; - SetBezier(timeline, frame, value, bezier++, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } - return bezier; + var curveValues = (List)curve; + int i = value << 2; + float cx1 = (float)curveValues[i]; + float cy1 = (float)curveValues[i + 1] * scale; + float cx2 = (float)curveValues[i + 2]; + float cy2 = (float)curveValues[i + 3] * scale; + SetBezier(timeline, frame, value, bezier, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } static void SetBezier (CurveTimeline timeline, int frame, int value, int bezier, float time1, float value1, float cx1, float cy1, 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 b66d1613b..f54f5a65b 100644 --- a/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java +++ b/spine-libgdx/spine-libgdx/src/com/esotericsoftware/spine/SkeletonJson.java @@ -812,20 +812,20 @@ public class SkeletonJson extends SkeletonLoader { // Path constraint timelines. for (JsonValue constraintMap = map.getChild("path"); constraintMap != null; constraintMap = constraintMap.next) { - PathConstraintData data = skeletonData.findPathConstraint(constraintMap.name); - if (data == null) throw new SerializationException("Path constraint not found: " + constraintMap.name); - int index = skeletonData.pathConstraints.indexOf(data, true); + PathConstraintData constraint = skeletonData.findPathConstraint(constraintMap.name); + if (constraint == null) throw new SerializationException("Path constraint not found: " + constraintMap.name); + int index = skeletonData.pathConstraints.indexOf(constraint, true); for (JsonValue timelineMap = constraintMap.child; timelineMap != null; timelineMap = timelineMap.next) { JsonValue keyMap = timelineMap.child; if (keyMap == null) continue; String timelineName = timelineMap.name; if (timelineName.equals("position")) { CurveTimeline1 timeline = new PathConstraintPositionTimeline(timelineMap.size, timelineMap.size, index); - timelines.add(readTimeline(keyMap, timeline, 0, data.positionMode == PositionMode.fixed ? scale : 1)); + timelines.add(readTimeline(keyMap, timeline, 0, constraint.positionMode == PositionMode.fixed ? scale : 1)); } else if (timelineName.equals("spacing")) { CurveTimeline1 timeline = new PathConstraintSpacingTimeline(timelineMap.size, timelineMap.size, index); timelines.add(readTimeline(keyMap, timeline, 0, - data.spacingMode == SpacingMode.length || data.spacingMode == SpacingMode.fixed ? scale : 1)); + constraint.spacingMode == SpacingMode.length || constraint.spacingMode == SpacingMode.fixed ? scale : 1)); } else if (timelineName.equals("mix")) { PathConstraintMixTimeline timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, index); float time = keyMap.getFloat("time", 0); @@ -915,7 +915,6 @@ public class SkeletonJson extends SkeletonLoader { // Draw order timeline. JsonValue drawOrdersMap = map.get("drawOrder"); - if (drawOrdersMap == null) drawOrdersMap = map.get("draworder"); if (drawOrdersMap != null) { DrawOrderTimeline timeline = new DrawOrderTimeline(drawOrdersMap.size); int slotCount = skeletonData.slots.size; @@ -1027,18 +1026,18 @@ public class SkeletonJson extends SkeletonLoader { float value1, float value2, float scale) { if (curve.isString()) { if (value != 0) timeline.setStepped(frame); - } else { - curve = curve.get(value << 2); - float cx1 = curve.asFloat(); - curve = curve.next; - float cy1 = curve.asFloat() * scale; - curve = curve.next; - float cx2 = curve.asFloat(); - curve = curve.next; - float cy2 = curve.asFloat() * scale; - setBezier(timeline, frame, value, bezier++, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier; } - return bezier; + curve = curve.get(value << 2); + float cx1 = curve.asFloat(); + curve = curve.next; + float cy1 = curve.asFloat() * scale; + curve = curve.next; + float cx2 = curve.asFloat(); + curve = curve.next; + float cy2 = curve.asFloat() * scale; + setBezier(timeline, frame, value, bezier, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } static void setBezier (CurveTimeline timeline, int frame, int value, int bezier, float time1, float value1, float cx1, diff --git a/spine-ts/canvas/src/SkeletonRenderer.ts b/spine-ts/canvas/src/SkeletonRenderer.ts index ac392a9cc..2724b012b 100644 --- a/spine-ts/canvas/src/SkeletonRenderer.ts +++ b/spine-ts/canvas/src/SkeletonRenderer.ts @@ -140,7 +140,7 @@ module spine.canvas { texture = (mesh.region.renderObject).texture.getImage() as HTMLImageElement; } else continue; - if (texture != null) { + if (texture) { let slotBlendMode = slot.data.blendMode; if (slotBlendMode != blendMode) { blendMode = slotBlendMode; diff --git a/spine-ts/core/src/Animation.ts b/spine-ts/core/src/Animation.ts index 5695e2b4a..db55f5ff9 100644 --- a/spine-ts/core/src/Animation.ts +++ b/spine-ts/core/src/Animation.ts @@ -40,8 +40,8 @@ module spine { duration: number; constructor (name: string, timelines: Array, duration: number) { - if (name == null) throw new Error("name cannot be null."); - if (timelines == null) throw new Error("timelines cannot be null."); + if (!name) throw new Error("name cannot be null."); + if (!timelines) throw new Error("timelines cannot be null."); this.name = name; this.timelines = timelines; this.timelineIds = new StringSet(); @@ -62,7 +62,7 @@ module spine { * @param loop If true, the animation repeats after {@link #getDuration()}. * @param events May be null to ignore fired events. */ apply (skeleton: Skeleton, lastTime: number, time: number, loop: boolean, events: Array, alpha: number, blend: MixBlend, direction: MixDirection) { - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); if (loop && this.duration != 0) { time %= this.duration; @@ -1448,7 +1448,7 @@ module spine { } setAttachment(skeleton: Skeleton, slot: Slot, attachmentName: string) { - slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(this.slotIndex, attachmentName)); } } @@ -1557,7 +1557,7 @@ module spine { return; } deform.length = vertexCount; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions. let setupVertices = vertexAttachment.vertices; for (var i = 0; i < vertexCount; i++) @@ -1578,7 +1578,7 @@ module spine { if (alpha == 1) { if (blend == MixBlend.add) { let vertexAttachment = slotAttachment as VertexAttachment; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha. let setupVertices = vertexAttachment.vertices; for (let i = 0; i < vertexCount; i++) @@ -1594,7 +1594,7 @@ module spine { switch (blend) { case MixBlend.setup: { let vertexAttachment = slotAttachment as VertexAttachment; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha. let setupVertices = vertexAttachment.vertices; for (let i = 0; i < vertexCount; i++) { @@ -1615,7 +1615,7 @@ module spine { break; case MixBlend.add: let vertexAttachment = slotAttachment as VertexAttachment; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha. let setupVertices = vertexAttachment.vertices; for (let i = 0; i < vertexCount; i++) @@ -1639,7 +1639,7 @@ module spine { if (alpha == 1) { if (blend == MixBlend.add) { let vertexAttachment = slotAttachment as VertexAttachment; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha. let setupVertices = vertexAttachment.vertices; for (let i = 0; i < vertexCount; i++) { @@ -1663,7 +1663,7 @@ module spine { switch (blend) { case MixBlend.setup: { let vertexAttachment = slotAttachment as VertexAttachment; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha. let setupVertices = vertexAttachment.vertices; for (let i = 0; i < vertexCount; i++) { @@ -1688,7 +1688,7 @@ module spine { break; case MixBlend.add: let vertexAttachment = slotAttachment as VertexAttachment; - if (vertexAttachment.bones == null) { + if (!vertexAttachment.bones) { // Unweighted vertex positions, with alpha. let setupVertices = vertexAttachment.vertices; for (let i = 0; i < vertexCount; i++) { @@ -1732,7 +1732,7 @@ module spine { /** Fires events for frames > `lastTime` and <= `time`. */ apply (skeleton: Skeleton, lastTime: number, time: number, firedEvents: Array, alpha: number, blend: MixBlend, direction: MixDirection) { - if (firedEvents == null) return; + if (!firedEvents) return; let frames = this.frames; let frameCount = this.frames.length; @@ -1796,7 +1796,7 @@ module spine { } let drawOrderToSetupIndex = this.drawOrders[Timeline.search(this.frames, time)]; - if (drawOrderToSetupIndex == null) + if (!drawOrderToSetupIndex) Utils.arrayCopy(skeleton.slots, 0, skeleton.drawOrder, 0, skeleton.slots.length); else { let drawOrder: Array = skeleton.drawOrder; diff --git a/spine-ts/core/src/AnimationState.ts b/spine-ts/core/src/AnimationState.ts index 19a2a3248..52f679932 100644 --- a/spine-ts/core/src/AnimationState.ts +++ b/spine-ts/core/src/AnimationState.ts @@ -35,7 +35,7 @@ module spine { * See [Applying Animations](http://esotericsoftware.com/spine-applying-animations/) in the Spine Runtimes Guide. */ export class AnimationState { private static emptyAnimation(): Animation { - if (_emptyAnimation == null) _emptyAnimation = new Animation("", [], 0); + if (!_emptyAnimation) _emptyAnimation = new Animation("", [], 0); return _emptyAnimation; } @@ -70,7 +70,7 @@ module spine { let tracks = this.tracks; for (let i = 0, n = tracks.length; i < n; i++) { let current = tracks[i]; - if (current == null) continue; + if (!current) continue; current.animationLast = current.nextAnimationLast; current.trackLast = current.nextTrackLast; @@ -85,7 +85,7 @@ module spine { } let next = current.next; - if (next != null) { + if (next) { // When the next entry's delay is passed, change to the next entry, preserving leftover time. let nextTime = current.trackLast - next.delay; if (nextTime >= 0) { @@ -93,24 +93,24 @@ module spine { next.trackTime += current.timeScale == 0 ? 0 : (nextTime / current.timeScale + delta) * next.timeScale; current.trackTime += currentDelta; this.setCurrent(i, next, true); - while (next.mixingFrom != null) { + while (next.mixingFrom) { next.mixTime += delta; next = next.mixingFrom; } continue; } - } else if (current.trackLast >= current.trackEnd && current.mixingFrom == null) { + } else if (current.trackLast >= current.trackEnd && !current.mixingFrom) { tracks[i] = null; this.queue.end(current); this.disposeNext(current); continue; } - if (current.mixingFrom != null && this.updateMixingFrom(current, delta)) { + if (current.mixingFrom && this.updateMixingFrom(current, delta)) { // End mixing from entries once all have completed. let from = current.mixingFrom; current.mixingFrom = null; - if (from != null) from.mixingTo = null; - while (from != null) { + if (from) from.mixingTo = null; + while (from) { this.queue.end(from); from = from.mixingFrom; } @@ -125,7 +125,7 @@ module spine { /** Returns true when all mixing from entries are complete. */ updateMixingFrom (to: TrackEntry, delta: number): boolean { let from = to.mixingFrom; - if (from == null) return true; + if (!from) return true; let finished = this.updateMixingFrom(from, delta); @@ -137,7 +137,7 @@ module spine { // Require totalAlpha == 0 to ensure mixing is complete, unless mixDuration == 0 (the transition is a single frame). if (from.totalAlpha == 0 || to.mixDuration == 0) { to.mixingFrom = from.mixingFrom; - if (from.mixingFrom != null) from.mixingFrom.mixingTo = to; + if (from.mixingFrom) from.mixingFrom.mixingTo = to; to.interruptAlpha = from.interruptAlpha; this.queue.end(from); } @@ -153,7 +153,7 @@ module spine { * animation state can be applied to multiple skeletons to pose them identically. * @returns True if any animations were applied. */ apply (skeleton: Skeleton) : boolean { - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); if (this.animationsChanged) this._animationsChanged(); let events = this.events; @@ -162,15 +162,15 @@ module spine { for (let i = 0, n = tracks.length; i < n; i++) { let current = tracks[i]; - if (current == null || current.delay > 0) continue; + if (!current || current.delay > 0) continue; applied = true; let blend: MixBlend = i == 0 ? MixBlend.first : current.mixBlend; // Apply mixing from entries first. let mix = current.alpha; - if (current.mixingFrom != null) + if (current.mixingFrom) mix *= this.applyMixingFrom(current, skeleton, blend); - else if (current.trackTime >= current.trackEnd && current.next == null) + else if (current.trackTime >= current.trackEnd && !current.next) mix = 0; // Apply current entry. @@ -229,7 +229,7 @@ module spine { var slot = slots[i]; if (slot.attachmentState == setupState) { var attachmentName = slot.data.attachmentName; - slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); } } this.unkeyedState += 2; // Increasing after each use avoids the need to reset attachmentState for every slot. @@ -240,7 +240,7 @@ module spine { applyMixingFrom (to: TrackEntry, skeleton: Skeleton, blend: MixBlend) { let from = to.mixingFrom; - if (from.mixingFrom != null) this.applyMixingFrom(from, skeleton, blend); + if (from.mixingFrom) this.applyMixingFrom(from, skeleton, blend); let mix = 0; if (to.mixDuration == 0) { // Single frame mix to undo mixingFrom changes. @@ -343,7 +343,7 @@ module spine { } setAttachment (skeleton: Skeleton, slot: Slot, attachmentName: string, attachments: boolean) { - slot.setAttachment(attachmentName == null ? null : skeleton.getAttachment(slot.data.index, attachmentName)); + slot.setAttachment(!attachmentName ? null : skeleton.getAttachment(slot.data.index, attachmentName)); if (attachments) slot.attachmentState = this.unkeyedState + CURRENT; } @@ -458,7 +458,7 @@ module spine { clearTrack (trackIndex: number) { if (trackIndex >= this.tracks.length) return; let current = this.tracks[trackIndex]; - if (current == null) return; + if (!current) return; this.queue.end(current); @@ -467,7 +467,7 @@ module spine { let entry = current; while (true) { let from = entry.mixingFrom; - if (from == null) break; + if (!from) break; this.queue.end(from); entry.mixingFrom = null; entry.mixingTo = null; @@ -489,14 +489,14 @@ module spine { this.tracks[index] = current; current.previous = null; - if (from != null) { + if (from) { if (interrupt) this.queue.interrupt(from); current.mixingFrom = from; from.mixingTo = current; current.mixTime = 0; // Store the interrupted mix percentage. - if (from.mixingFrom != null && from.mixDuration > 0) + if (from.mixingFrom && from.mixDuration > 0) current.interruptAlpha *= Math.min(1, from.mixTime / from.mixDuration); from.timelinesRotation.length = 0; // Reset rotation for mixing out, in case entry was mixed in. @@ -510,7 +510,7 @@ module spine { * See {@link #setAnimationWith()}. */ setAnimation (trackIndex: number, animationName: string, loop: boolean) { let animation = this.data.skeletonData.findAnimation(animationName); - if (animation == null) throw new Error("Animation not found: " + animationName); + if (!animation) throw new Error("Animation not found: " + animationName); return this.setAnimationWith(trackIndex, animation, loop); } @@ -521,10 +521,10 @@ module spine { * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept * after the {@link AnimationStateListener#dispose()} event occurs. */ setAnimationWith (trackIndex: number, animation: Animation, loop: boolean) { - if (animation == null) throw new Error("animation cannot be null."); + if (!animation) throw new Error("animation cannot be null."); let interrupt = true; let current = this.expandToIndex(trackIndex); - if (current != null) { + if (current) { if (current.nextTrackLast == -1) { // Don't mix from an entry that was never applied. this.tracks[trackIndex] = current.mixingFrom; @@ -547,7 +547,7 @@ module spine { * See {@link #addAnimationWith()}. */ addAnimation (trackIndex: number, animationName: string, loop: boolean, delay: number) { let animation = this.data.skeletonData.findAnimation(animationName); - if (animation == null) throw new Error("Animation not found: " + animationName); + if (!animation) throw new Error("Animation not found: " + animationName); return this.addAnimationWith(trackIndex, animation, loop, delay); } @@ -560,17 +560,17 @@ module spine { * @returns A track entry to allow further customization of animation playback. References to the track entry must not be kept * after the {@link AnimationStateListener#dispose()} event occurs. */ addAnimationWith (trackIndex: number, animation: Animation, loop: boolean, delay: number) { - if (animation == null) throw new Error("animation cannot be null."); + if (!animation) throw new Error("animation cannot be null."); let last = this.expandToIndex(trackIndex); - if (last != null) { - while (last.next != null) + if (last) { + while (last.next) last = last.next; } let entry = this.trackEntry(trackIndex, animation, loop, last); - if (last == null) { + if (!last) { this.setCurrent(trackIndex, entry, true); this.queue.drain(); } else { @@ -619,7 +619,7 @@ module spine { let entry = this.addAnimationWith(trackIndex, AnimationState.emptyAnimation(), false, delay <= 0 ? 1 : delay); entry.mixDuration = mixDuration; entry.trackEnd = mixDuration; - if (delay <= 0 && entry.previous != null) entry.delay = entry.previous.getTrackComplete() - entry.mixDuration; + if (delay <= 0 && entry.previous) entry.delay = entry.previous.getTrackComplete() - entry.mixDuration; return entry; } @@ -630,7 +630,7 @@ module spine { this.queue.drainDisabled = true; for (let i = 0, n = this.tracks.length; i < n; i++) { let current = this.tracks[i]; - if (current != null) this.setEmptyAnimation(current.trackIndex, mixDuration); + if (current) this.setEmptyAnimation(current.trackIndex, mixDuration); } this.queue.drainDisabled = oldDrainDisabled; this.queue.drain(); @@ -670,14 +670,14 @@ module spine { entry.alpha = 1; entry.interruptAlpha = 1; entry.mixTime = 0; - entry.mixDuration = last == null ? 0 : this.data.getMix(last.animation, animation); + entry.mixDuration = !last ? 0 : this.data.getMix(last.animation, animation); entry.mixBlend = MixBlend.replace; return entry; } disposeNext (entry: TrackEntry) { let next = entry.next; - while (next != null) { + while (next) { this.queue.dispose(next); next = next.next; } @@ -691,14 +691,14 @@ module spine { for (let i = 0, n = this.tracks.length; i < n; i++) { let entry = this.tracks[i]; - if (entry == null) continue; - while (entry.mixingFrom != null) + if (!entry) continue; + while (entry.mixingFrom) entry = entry.mixingFrom; do { - if (entry.mixingFrom == null || entry.mixBlend != MixBlend.add) this.computeHold(entry); + if (!entry.mixingFrom || entry.mixBlend != MixBlend.add) this.computeHold(entry); entry = entry.mixingTo; - } while (entry != null) + } while (entry) } } @@ -712,7 +712,7 @@ module spine { timelineHoldMix.length = 0; let propertyIDs = this.propertyIDs; - if (to != null && to.holdPrevious) { + if (to && to.holdPrevious) { for (let i = 0; i < timelinesCount; i++) timelineMode[i] = propertyIDs.addAll(timelines[i].getPropertyIds()) ? HOLD_FIRST : HOLD_SUBSEQUENT; return; @@ -724,11 +724,11 @@ module spine { let ids = timeline.getPropertyIds(); if (!propertyIDs.addAll(ids)) timelineMode[i] = SUBSEQUENT; - else if (to == null || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline + else if (!to || timeline instanceof AttachmentTimeline || timeline instanceof DrawOrderTimeline || timeline instanceof EventTimeline || !to.animation.hasTimeline(ids)) { timelineMode[i] = FIRST; } else { - for (let next = to.mixingTo; next != null; next = next.mixingTo) { + for (let next = to.mixingTo; next; next = next.mixingTo) { if (next.animation.hasTimeline(ids)) continue; if (entry.mixDuration > 0) { timelineMode[i] = HOLD_MIX; @@ -750,7 +750,7 @@ module spine { /** Adds a listener to receive events for all track entries. */ addListener (listener: AnimationStateListener) { - if (listener == null) throw new Error("listener cannot be null."); + if (!listener) throw new Error("listener cannot be null."); this.listeners.push(listener); } @@ -1042,34 +1042,34 @@ module spine { let entry = objects[i + 1] as TrackEntry; switch (type) { case EventType.start: - if (entry.listener != null && entry.listener.start) entry.listener.start(entry); + if (entry.listener && entry.listener.start) entry.listener.start(entry); for (let ii = 0; ii < listeners.length; ii++) if (listeners[ii].start) listeners[ii].start(entry); break; case EventType.interrupt: - if (entry.listener != null && entry.listener.interrupt) entry.listener.interrupt(entry); + if (entry.listener && entry.listener.interrupt) entry.listener.interrupt(entry); for (let ii = 0; ii < listeners.length; ii++) if (listeners[ii].interrupt) listeners[ii].interrupt(entry); break; case EventType.end: - if (entry.listener != null && entry.listener.end) entry.listener.end(entry); + if (entry.listener && entry.listener.end) entry.listener.end(entry); for (let ii = 0; ii < listeners.length; ii++) if (listeners[ii].end) listeners[ii].end(entry); // Fall through. case EventType.dispose: - if (entry.listener != null && entry.listener.dispose) entry.listener.dispose(entry); + if (entry.listener && entry.listener.dispose) entry.listener.dispose(entry); for (let ii = 0; ii < listeners.length; ii++) if (listeners[ii].dispose) listeners[ii].dispose(entry); this.animState.trackEntryPool.free(entry); break; case EventType.complete: - if (entry.listener != null && entry.listener.complete) entry.listener.complete(entry); + if (entry.listener && entry.listener.complete) entry.listener.complete(entry); for (let ii = 0; ii < listeners.length; ii++) if (listeners[ii].complete) listeners[ii].complete(entry); break; case EventType.event: let event = objects[i++ + 2] as Event; - if (entry.listener != null && entry.listener.event) entry.listener.event(entry, event); + if (entry.listener && entry.listener.event) entry.listener.event(entry, event); for (let ii = 0; ii < listeners.length; ii++) if (listeners[ii].event) listeners[ii].event(entry, event); break; diff --git a/spine-ts/core/src/AnimationStateData.ts b/spine-ts/core/src/AnimationStateData.ts index 1efe22af5..d45158e8c 100644 --- a/spine-ts/core/src/AnimationStateData.ts +++ b/spine-ts/core/src/AnimationStateData.ts @@ -40,7 +40,7 @@ module spine { defaultMix = 0; constructor (skeletonData: SkeletonData) { - if (skeletonData == null) throw new Error("skeletonData cannot be null."); + if (!skeletonData) throw new Error("skeletonData cannot be null."); this.skeletonData = skeletonData; } @@ -49,9 +49,9 @@ module spine { * See {@link #setMixWith()}. */ setMix (fromName: string, toName: string, duration: number) { let from = this.skeletonData.findAnimation(fromName); - if (from == null) throw new Error("Animation not found: " + fromName); + if (!from) throw new Error("Animation not found: " + fromName); let to = this.skeletonData.findAnimation(toName); - if (to == null) throw new Error("Animation not found: " + toName); + if (!to) throw new Error("Animation not found: " + toName); this.setMixWith(from, to, duration); } @@ -59,8 +59,8 @@ module spine { * * See {@link TrackEntry#mixDuration}. */ setMixWith (from: Animation, to: Animation, duration: number) { - if (from == null) throw new Error("from cannot be null."); - if (to == null) throw new Error("to cannot be null."); + if (!from) throw new Error("from cannot be null."); + if (!to) throw new Error("to cannot be null."); let key = from.name + "." + to.name; this.animationToMixTime[key] = duration; } diff --git a/spine-ts/core/src/AtlasAttachmentLoader.ts b/spine-ts/core/src/AtlasAttachmentLoader.ts index 5aa0f5f3b..06f71363c 100644 --- a/spine-ts/core/src/AtlasAttachmentLoader.ts +++ b/spine-ts/core/src/AtlasAttachmentLoader.ts @@ -41,7 +41,7 @@ module spine { newRegionAttachment (skin: Skin, name: string, path: string): RegionAttachment { let region = this.atlas.findRegion(path); - if (region == null) throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); + if (!region) throw new Error("Region not found in atlas: " + path + " (region attachment: " + name + ")"); region.renderObject = region; let attachment = new RegionAttachment(name); attachment.setRegion(region); @@ -50,7 +50,7 @@ module spine { newMeshAttachment (skin: Skin, name: string, path: string) : MeshAttachment { let region = this.atlas.findRegion(path); - if (region == null) throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); + if (!region) throw new Error("Region not found in atlas: " + path + " (mesh attachment: " + name + ")"); region.renderObject = region; let attachment = new MeshAttachment(name); attachment.region = region; diff --git a/spine-ts/core/src/Bone.ts b/spine-ts/core/src/Bone.ts index c30b6c9d0..353657182 100644 --- a/spine-ts/core/src/Bone.ts +++ b/spine-ts/core/src/Bone.ts @@ -112,8 +112,8 @@ module spine { /** @param parent May be null. */ constructor (data: BoneData, skeleton: Skeleton, parent: Bone) { - if (data == null) throw new Error("data cannot be null."); - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!data) throw new Error("data cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); this.data = data; this.skeleton = skeleton; this.parent = parent; @@ -153,7 +153,7 @@ module spine { this.ashearY = shearY; let parent = this.parent; - if (parent == null) { // Root bone. + if (!parent) { // Root bone. let skeleton = this.skeleton; let rotationY = rotation + 90 + shearY; let sx = skeleton.scaleX; @@ -294,7 +294,7 @@ module spine { * calling this method is equivalent to the local transform used to compute the world transform, but may not be identical. */ updateAppliedTransform () { let parent = this.parent; - if (parent == null) { + if (!parent) { this.ax = this.worldX; this.ay = this.worldY; this.arotation = Math.atan2(this.c, this.a) * MathUtils.radDeg; diff --git a/spine-ts/core/src/BoneData.ts b/spine-ts/core/src/BoneData.ts index 8982a64c0..5cd5003cd 100644 --- a/spine-ts/core/src/BoneData.ts +++ b/spine-ts/core/src/BoneData.ts @@ -78,7 +78,7 @@ module spine { constructor (index: number, name: string, parent: BoneData) { if (index < 0) throw new Error("index must be >= 0."); - if (name == null) throw new Error("name cannot be null."); + if (!name) throw new Error("name cannot be null."); this.index = index; this.name = name; this.parent = parent; diff --git a/spine-ts/core/src/Event.ts b/spine-ts/core/src/Event.ts index da965f9ef..0d0aa8853 100644 --- a/spine-ts/core/src/Event.ts +++ b/spine-ts/core/src/Event.ts @@ -44,7 +44,7 @@ module spine { balance: number; constructor (time: number, data: EventData) { - if (data == null) throw new Error("data cannot be null."); + if (!data) throw new Error("data cannot be null."); this.time = time; this.data = data; } diff --git a/spine-ts/core/src/IkConstraint.ts b/spine-ts/core/src/IkConstraint.ts index 997511a4c..b931d3fa5 100644 --- a/spine-ts/core/src/IkConstraint.ts +++ b/spine-ts/core/src/IkConstraint.ts @@ -61,8 +61,8 @@ module spine { active = false; constructor (data: IkConstraintData, skeleton: Skeleton) { - if (data == null) throw new Error("data cannot be null."); - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!data) throw new Error("data cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); this.data = data; this.mix = data.mix; this.softness = data.softness; diff --git a/spine-ts/core/src/PathConstraint.ts b/spine-ts/core/src/PathConstraint.ts index 70e3c0c31..0d9cec2dd 100644 --- a/spine-ts/core/src/PathConstraint.ts +++ b/spine-ts/core/src/PathConstraint.ts @@ -65,8 +65,8 @@ module spine { active = false; constructor (data: PathConstraintData, skeleton: Skeleton) { - if (data == null) throw new Error("data cannot be null."); - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!data) throw new Error("data cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); this.data = data; this.bones = new Array(); for (let i = 0, n = data.bones.length; i < n; i++) diff --git a/spine-ts/core/src/SharedAssetManager.ts b/spine-ts/core/src/SharedAssetManager.ts index f97af6a5f..c919a3565 100644 --- a/spine-ts/core/src/SharedAssetManager.ts +++ b/spine-ts/core/src/SharedAssetManager.ts @@ -58,11 +58,11 @@ module spine { private queueAsset(clientId: string, textureLoader: (image: HTMLImageElement | ImageBitmap) => any, path: string): boolean { let clientAssets = this.clientAssets[clientId]; - if (clientAssets === null || clientAssets === undefined) { + if (!clientAssets) { clientAssets = new Assets(clientId); this.clientAssets[clientId] = clientAssets; } - if (textureLoader !== null) clientAssets.textureLoader = textureLoader; + if (textureLoader) clientAssets.textureLoader = textureLoader; clientAssets.toLoad.push(path); // check if already queued, in which case we can skip actual @@ -150,7 +150,7 @@ module spine { get (clientId: string, path: string) { path = this.pathPrefix + path; let clientAssets = this.clientAssets[clientId]; - if (clientAssets === null || clientAssets === undefined) return true; + if (!clientAssets) return true; return clientAssets.assets[path]; } @@ -161,12 +161,11 @@ module spine { for (let i = 0; i < clientAssets.toLoad.length; i++) { let path = clientAssets.toLoad[i]; let asset = clientAssets.assets[path]; - if (asset === null || asset === undefined) { + if (!asset) { let rawAsset = this.rawAssets[path]; - if (rawAsset === null || rawAsset === undefined) continue; + if (!rawAsset) continue; - if (isWebWorker) - { + if (isWebWorker) { if (rawAsset instanceof ImageBitmap) { clientAssets.assets[path] = clientAssets.textureLoader(rawAsset); } else { @@ -185,10 +184,9 @@ module spine { isLoadingComplete (clientId: string): boolean { let clientAssets = this.clientAssets[clientId]; - if (clientAssets === null || clientAssets === undefined) return true; + if (!clientAssets) return true; this.updateClientAssets(clientAssets); return clientAssets.toLoad.length == clientAssets.loaded(); - } /*remove (clientId: string, path: string) { diff --git a/spine-ts/core/src/Skeleton.ts b/spine-ts/core/src/Skeleton.ts index d4e34517b..7fc759fc9 100644 --- a/spine-ts/core/src/Skeleton.ts +++ b/spine-ts/core/src/Skeleton.ts @@ -83,14 +83,14 @@ module spine { y = 0; constructor (data: SkeletonData) { - if (data == null) throw new Error("data cannot be null."); + if (!data) throw new Error("data cannot be null."); this.data = data; this.bones = new Array(); for (let i = 0; i < data.bones.length; i++) { let boneData = data.bones[i]; let bone: Bone; - if (boneData.parent == null) + if (!boneData.parent) bone = new Bone(boneData, this, null); else { let parent = this.bones[boneData.parent.index]; @@ -145,7 +145,7 @@ module spine { bone.active = !bone.sorted; } - if (this.skin != null) { + if (this.skin) { let skinBones = this.skin.bones; for (let i = 0, n = this.skin.bones.length; i < n; i++) { let bone = this.bones[skinBones[i].index]; @@ -153,7 +153,7 @@ module spine { bone.sorted = false; bone.active = true; bone = bone.parent; - } while (bone != null); + } while (bone); } } @@ -194,7 +194,7 @@ module spine { } sortIkConstraint (constraint: IkConstraint) { - constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true))); if (!constraint.active) return; let target = constraint.target; @@ -219,14 +219,14 @@ module spine { } sortPathConstraint (constraint: PathConstraint) { - constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); + constraint.active = constraint.target.bone.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true))); if (!constraint.active) return; let slot = constraint.target; let slotIndex = slot.data.index; let slotBone = slot.bone; - if (this.skin != null) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); - if (this.data.defaultSkin != null && this.data.defaultSkin != this.skin) + if (this.skin) this.sortPathConstraintAttachment(this.skin, slotIndex, slotBone); + if (this.data.defaultSkin && this.data.defaultSkin != this.skin) this.sortPathConstraintAttachment(this.data.defaultSkin, slotIndex, slotBone); for (let i = 0, n = this.data.skins.length; i < n; i++) this.sortPathConstraintAttachment(this.data.skins[i], slotIndex, slotBone); @@ -248,7 +248,7 @@ module spine { } sortTransformConstraint (constraint: TransformConstraint) { - constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin != null && Utils.contains(this.skin.constraints, constraint.data, true))); + constraint.active = constraint.target.isActive() && (!constraint.data.skinRequired || (this.skin && Utils.contains(this.skin.constraints, constraint.data, true))); if (!constraint.active) return; this.sortBone(constraint.target); @@ -286,7 +286,7 @@ module spine { sortPathConstraintAttachmentWith (attachment: Attachment, slotBone: Bone) { if (!(attachment instanceof PathAttachment)) return; let pathBones = (attachment).bones; - if (pathBones == null) + if (!pathBones) this.sortBone(slotBone); else { let bones = this.bones; @@ -302,7 +302,7 @@ module spine { sortBone (bone: Bone) { if (bone.sorted) return; let parent = bone.parent; - if (parent != null) this.sortBone(parent); + if (parent) this.sortBone(parent); bone.sorted = true; this._updateCache.push(bone); } @@ -425,7 +425,7 @@ module spine { /** @returns May be null. */ findBone (boneName: string) { - if (boneName == null) throw new Error("boneName cannot be null."); + if (!boneName) throw new Error("boneName cannot be null."); let bones = this.bones; for (let i = 0, n = bones.length; i < n; i++) { let bone = bones[i]; @@ -436,7 +436,7 @@ module spine { /** @returns -1 if the bone was not found. */ findBoneIndex (boneName: string) { - if (boneName == null) throw new Error("boneName cannot be null."); + if (!boneName) throw new Error("boneName cannot be null."); let bones = this.bones; for (let i = 0, n = bones.length; i < n; i++) if (bones[i].data.name == boneName) return i; @@ -447,7 +447,7 @@ module spine { * repeatedly. * @returns May be null. */ findSlot (slotName: string) { - if (slotName == null) throw new Error("slotName cannot be null."); + if (!slotName) throw new Error("slotName cannot be null."); let slots = this.slots; for (let i = 0, n = slots.length; i < n; i++) { let slot = slots[i]; @@ -458,7 +458,7 @@ module spine { /** @returns -1 if the bone was not found. */ findSlotIndex (slotName: string) { - if (slotName == null) throw new Error("slotName cannot be null."); + if (!slotName) throw new Error("slotName cannot be null."); let slots = this.slots; for (let i = 0, n = slots.length; i < n; i++) if (slots[i].data.name == slotName) return i; @@ -470,7 +470,7 @@ module spine { * See {@link #setSkin()}. */ setSkinByName (skinName: string) { let skin = this.data.findSkin(skinName); - if (skin == null) throw new Error("Skin not found: " + skinName); + if (!skin) throw new Error("Skin not found: " + skinName); this.setSkin(skin); } @@ -486,17 +486,17 @@ module spine { * @param newSkin May be null. */ setSkin (newSkin: Skin) { if (newSkin == this.skin) return; - if (newSkin != null) { - if (this.skin != null) + if (newSkin) { + if (this.skin) newSkin.attachAll(this, this.skin); else { let slots = this.slots; for (let i = 0, n = slots.length; i < n; i++) { let slot = slots[i]; let name = slot.data.attachmentName; - if (name != null) { + if (name) { let attachment: Attachment = newSkin.getAttachment(i, name); - if (attachment != null) slot.setAttachment(attachment); + if (attachment) slot.setAttachment(attachment); } } } @@ -521,12 +521,12 @@ module spine { * See [Runtime skins](http://esotericsoftware.com/spine-runtime-skins) in the Spine Runtimes Guide. * @returns May be null. */ getAttachment (slotIndex: number, attachmentName: string): Attachment { - if (attachmentName == null) throw new Error("attachmentName cannot be null."); - if (this.skin != null) { + if (!attachmentName) throw new Error("attachmentName cannot be null."); + if (this.skin) { let attachment: Attachment = this.skin.getAttachment(slotIndex, attachmentName); - if (attachment != null) return attachment; + if (attachment) return attachment; } - if (this.data.defaultSkin != null) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); + if (this.data.defaultSkin) return this.data.defaultSkin.getAttachment(slotIndex, attachmentName); return null; } @@ -534,16 +534,15 @@ module spine { * {@link #getAttachment()}, then setting the slot's {@link Slot#attachment}. * @param attachmentName May be null to clear the slot's attachment. */ setAttachment (slotName: string, attachmentName: string) { - if (slotName == null) throw new Error("slotName cannot be null."); + if (!slotName) throw new Error("slotName cannot be null."); let slots = this.slots; for (let i = 0, n = slots.length; i < n; i++) { let slot = slots[i]; if (slot.data.name == slotName) { let attachment: Attachment = null; - if (attachmentName != null) { + if (attachmentName) { attachment = this.getAttachment(i, attachmentName); - if (attachment == null) - throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); + if (!attachment) throw new Error("Attachment not found: " + attachmentName + ", for slot: " + slotName); } slot.setAttachment(attachment); return; @@ -557,7 +556,7 @@ module spine { * than to call it repeatedly. * @return May be null. */ findIkConstraint (constraintName: string) { - if (constraintName == null) throw new Error("constraintName cannot be null."); + if (!constraintName) throw new Error("constraintName cannot be null."); let ikConstraints = this.ikConstraints; for (let i = 0, n = ikConstraints.length; i < n; i++) { let ikConstraint = ikConstraints[i]; @@ -570,7 +569,7 @@ module spine { * this method than to call it repeatedly. * @return May be null. */ findTransformConstraint (constraintName: string) { - if (constraintName == null) throw new Error("constraintName cannot be null."); + if (!constraintName) throw new Error("constraintName cannot be null."); let transformConstraints = this.transformConstraints; for (let i = 0, n = transformConstraints.length; i < n; i++) { let constraint = transformConstraints[i]; @@ -583,7 +582,7 @@ module spine { * than to call it repeatedly. * @return May be null. */ findPathConstraint (constraintName: string) { - if (constraintName == null) throw new Error("constraintName cannot be null."); + if (!constraintName) throw new Error("constraintName cannot be null."); let pathConstraints = this.pathConstraints; for (let i = 0, n = pathConstraints.length; i < n; i++) { let constraint = pathConstraints[i]; @@ -597,8 +596,8 @@ module spine { * @param size An output value, the width and height of the AABB. * @param temp Working memory to temporarily store attachments' computed world vertices. */ getBounds (offset: Vector2, size: Vector2, temp: Array = new Array(2)) { - if (offset == null) throw new Error("offset cannot be null."); - if (size == null) throw new Error("size cannot be null."); + if (!offset) throw new Error("offset cannot be null."); + if (!size) throw new Error("size cannot be null."); let drawOrder = this.drawOrder; let minX = Number.POSITIVE_INFINITY, minY = Number.POSITIVE_INFINITY, maxX = Number.NEGATIVE_INFINITY, maxY = Number.NEGATIVE_INFINITY; for (let i = 0, n = drawOrder.length; i < n; i++) { @@ -617,7 +616,7 @@ module spine { vertices = Utils.setArraySize(temp, verticesLength, 0); mesh.computeWorldVertices(slot, 0, verticesLength, vertices, 0, 2); } - if (vertices != null) { + if (vertices) { for (let ii = 0, nn = vertices.length; ii < nn; ii += 2) { let x = vertices[ii], y = vertices[ii + 1]; minX = Math.min(minX, x); diff --git a/spine-ts/core/src/SkeletonBinary.ts b/spine-ts/core/src/SkeletonBinary.ts index 9f55a02d6..473a2f13e 100644 --- a/spine-ts/core/src/SkeletonBinary.ts +++ b/spine-ts/core/src/SkeletonBinary.ts @@ -186,7 +186,7 @@ module spine { // Default skin. let defaultSkin = this.readSkin(input, skeletonData, true, nonessential); - if (defaultSkin != null) { + if (defaultSkin) { skeletonData.defaultSkin = defaultSkin; skeletonData.skins.push(defaultSkin); } @@ -203,10 +203,10 @@ module spine { n = this.linkedMeshes.length; for (let i = 0; i < n; i++) { let linkedMesh = this.linkedMeshes[i]; - let skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); - if (skin == null) throw new Error("Skin not found: " + linkedMesh.skin); + let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (!skin) throw new Error("Skin not found: " + linkedMesh.skin); let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); - if (parent == null) throw new Error("Parent mesh not found: " + linkedMesh.parent); + if (!parent) throw new Error("Parent mesh not found: " + linkedMesh.parent); linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent as VertexAttachment : linkedMesh.mesh; linkedMesh.mesh.setParentMesh(parent as MeshAttachment); linkedMesh.mesh.updateUVs(); @@ -221,7 +221,7 @@ module spine { data.floatValue = input.readFloat(); data.stringValue = input.readString(); data.audioPath = input.readString(); - if (data.audioPath != null) { + if (data.audioPath) { data.volume = input.readFloat(); data.balance = input.readFloat(); } @@ -264,7 +264,7 @@ module spine { for (let ii = 0, nn = input.readInt(true); ii < nn; ii++) { let name = input.readStringRef(); let attachment = this.readAttachment(input, skeletonData, skin, slotIndex, name, nonessential); - if (attachment != null) skin.setAttachment(slotIndex, name, attachment); + if (attachment) skin.setAttachment(slotIndex, name, attachment); } } return skin; @@ -274,7 +274,7 @@ module spine { let scale = this.scale; let name = input.readStringRef(); - if (name == null) name = attachmentName; + if (!name) name = attachmentName; switch (input.readByte()) { case AttachmentType.Region: { @@ -288,9 +288,9 @@ module spine { let height = input.readFloat(); let color = input.readInt32(); - if (path == null) path = name; + if (!path) path = name; let region = this.attachmentLoader.newRegionAttachment(skin, name, path); - if (region == null) return null; + if (!region) return null; region.path = path; region.x = x * scale; region.y = y * scale; @@ -309,7 +309,7 @@ module spine { let color = nonessential ? input.readInt32() : 0; let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); - if (box == null) return null; + if (!box) return null; box.worldVerticesLength = vertexCount << 1; box.vertices = vertices.vertices; box.bones = vertices.bones; @@ -332,9 +332,9 @@ module spine { height = input.readFloat(); } - if (path == null) path = name; + if (!path) path = name; let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); - if (mesh == null) return null; + if (!mesh) return null; mesh.path = path; Color.rgba8888ToColor(mesh.color, color); mesh.bones = vertices.bones; @@ -363,9 +363,9 @@ module spine { height = input.readFloat(); } - if (path == null) path = name; + if (!path) path = name; let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); - if (mesh == null) return null; + if (!mesh) return null; mesh.path = path; Color.rgba8888ToColor(mesh.color, color); if (nonessential) { @@ -386,7 +386,7 @@ module spine { let color = nonessential ? input.readInt32() : 0; let path = this.attachmentLoader.newPathAttachment(skin, name); - if (path == null) return null; + if (!path) return null; path.closed = closed; path.constantSpeed = constantSpeed; path.worldVerticesLength = vertexCount << 1; @@ -403,7 +403,7 @@ module spine { let color = nonessential ? input.readInt32() : 0; let point = this.attachmentLoader.newPointAttachment(skin, name); - if (point == null) return null; + if (!point) return null; point.x = x * scale; point.y = y * scale; point.rotation = rotation; @@ -417,7 +417,7 @@ module spine { let color = nonessential ? input.readInt32() : 0; let clip = this.attachmentLoader.newClippingAttachment(skin, name); - if (clip == null) return null; + if (!clip) return null; clip.endSlot = skeletonData.slots[endSlotIndex]; clip.worldVerticesLength = vertexCount << 1; clip.vertices = vertices.vertices; @@ -839,8 +839,8 @@ module spine { for (let iii = 0, nnn = input.readInt(true); iii < nnn; iii++) { let attachmentName = input.readStringRef(); let attachment = skin.getAttachment(slotIndex, attachmentName) as VertexAttachment; - if (attachment == null) throw Error("Vertex attachment not found: " + attachmentName); - let weighted = attachment.bones != null; + if (!attachment) throw Error("Vertex attachment not found: " + attachmentName); + let weighted = attachment.bones; let vertices = attachment.vertices; let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; @@ -932,7 +932,7 @@ module spine { event.intValue = input.readInt(false); event.floatValue = input.readFloat(); event.stringValue = input.readBoolean() ? input.readString() : eventData.stringValue; - if (event.data.audioPath != null) { + if (event.data.audioPath) { event.volume = input.readFloat(); event.balance = input.readFloat(); } diff --git a/spine-ts/core/src/SkeletonBounds.ts b/spine-ts/core/src/SkeletonBounds.ts index 9a9991b07..2a9085242 100644 --- a/spine-ts/core/src/SkeletonBounds.ts +++ b/spine-ts/core/src/SkeletonBounds.ts @@ -59,7 +59,7 @@ module spine { * @param updateAabb If true, the axis aligned bounding box containing all the polygons is computed. If false, the * SkeletonBounds AABB methods will always return true. */ update (skeleton: Skeleton, updateAabb: boolean) { - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); let boundingBoxes = this.boundingBoxes; let polygons = this.polygons; let polygonPool = this.polygonPool; @@ -212,7 +212,7 @@ module spine { /** Returns the polygon for the specified bounding box, or null. */ getPolygon (boundingBox: BoundingBoxAttachment) { - if (boundingBox == null) throw new Error("boundingBox cannot be null."); + if (!boundingBox) throw new Error("boundingBox cannot be null."); let index = this.boundingBoxes.indexOf(boundingBox); return index == -1 ? null : this.polygons[index]; } diff --git a/spine-ts/core/src/SkeletonClipping.ts b/spine-ts/core/src/SkeletonClipping.ts index b1b534734..79f8b55ec 100644 --- a/spine-ts/core/src/SkeletonClipping.ts +++ b/spine-ts/core/src/SkeletonClipping.ts @@ -40,7 +40,7 @@ module spine { private clippingPolygons: Array>; clipStart (slot: Slot, clip: ClippingAttachment): number { - if (this.clipAttachment != null) return 0; + if (this.clipAttachment) return 0; this.clipAttachment = clip; let n = clip.worldVerticesLength; @@ -60,11 +60,11 @@ module spine { } clipEndWithSlot (slot: Slot) { - if (this.clipAttachment != null && this.clipAttachment.endSlot == slot.data) this.clipEnd(); + if (this.clipAttachment && this.clipAttachment.endSlot == slot.data) this.clipEnd(); } clipEnd () { - if (this.clipAttachment == null) return; + if (!this.clipAttachment) return; this.clipAttachment = null; this.clippingPolygons = null; this.clippedVertices.length = 0; diff --git a/spine-ts/core/src/SkeletonData.ts b/spine-ts/core/src/SkeletonData.ts index 9d3e7c6f4..cd0b57e54 100644 --- a/spine-ts/core/src/SkeletonData.ts +++ b/spine-ts/core/src/SkeletonData.ts @@ -97,7 +97,7 @@ module spine { * multiple times. * @returns May be null. */ findBone (boneName: string) { - if (boneName == null) throw new Error("boneName cannot be null."); + if (!boneName) throw new Error("boneName cannot be null."); let bones = this.bones; for (let i = 0, n = bones.length; i < n; i++) { let bone = bones[i]; @@ -107,7 +107,7 @@ module spine { } findBoneIndex (boneName: string) { - if (boneName == null) throw new Error("boneName cannot be null."); + if (!boneName) throw new Error("boneName cannot be null."); let bones = this.bones; for (let i = 0, n = bones.length; i < n; i++) if (bones[i].name == boneName) return i; @@ -118,7 +118,7 @@ module spine { * multiple times. * @returns May be null. */ findSlot (slotName: string) { - if (slotName == null) throw new Error("slotName cannot be null."); + if (!slotName) throw new Error("slotName cannot be null."); let slots = this.slots; for (let i = 0, n = slots.length; i < n; i++) { let slot = slots[i]; @@ -128,7 +128,7 @@ module spine { } findSlotIndex (slotName: string) { - if (slotName == null) throw new Error("slotName cannot be null."); + if (!slotName) throw new Error("slotName cannot be null."); let slots = this.slots; for (let i = 0, n = slots.length; i < n; i++) if (slots[i].name == slotName) return i; @@ -139,7 +139,7 @@ module spine { * multiple times. * @returns May be null. */ findSkin (skinName: string) { - if (skinName == null) throw new Error("skinName cannot be null."); + if (!skinName) throw new Error("skinName cannot be null."); let skins = this.skins; for (let i = 0, n = skins.length; i < n; i++) { let skin = skins[i]; @@ -152,7 +152,7 @@ module spine { * multiple times. * @returns May be null. */ findEvent (eventDataName: string) { - if (eventDataName == null) throw new Error("eventDataName cannot be null."); + if (!eventDataName) throw new Error("eventDataName cannot be null."); let events = this.events; for (let i = 0, n = events.length; i < n; i++) { let event = events[i]; @@ -165,7 +165,7 @@ module spine { * call it multiple times. * @returns May be null. */ findAnimation (animationName: string) { - if (animationName == null) throw new Error("animationName cannot be null."); + if (!animationName) throw new Error("animationName cannot be null."); let animations = this.animations; for (let i = 0, n = animations.length; i < n; i++) { let animation = animations[i]; @@ -178,7 +178,7 @@ module spine { * than to call it multiple times. * @return May be null. */ findIkConstraint (constraintName: string) { - if (constraintName == null) throw new Error("constraintName cannot be null."); + if (!constraintName) throw new Error("constraintName cannot be null."); let ikConstraints = this.ikConstraints; for (let i = 0, n = ikConstraints.length; i < n; i++) { let constraint = ikConstraints[i]; @@ -191,7 +191,7 @@ module spine { * this method than to call it multiple times. * @return May be null. */ findTransformConstraint (constraintName: string) { - if (constraintName == null) throw new Error("constraintName cannot be null."); + if (!constraintName) throw new Error("constraintName cannot be null."); let transformConstraints = this.transformConstraints; for (let i = 0, n = transformConstraints.length; i < n; i++) { let constraint = transformConstraints[i]; @@ -204,7 +204,7 @@ module spine { * than to call it multiple times. * @return May be null. */ findPathConstraint (constraintName: string) { - if (constraintName == null) throw new Error("constraintName cannot be null."); + if (!constraintName) throw new Error("constraintName cannot be null."); let pathConstraints = this.pathConstraints; for (let i = 0, n = pathConstraints.length; i < n; i++) { let constraint = pathConstraints[i]; @@ -212,13 +212,5 @@ module spine { } return null; } - - findPathConstraintIndex (pathConstraintName: string) { - if (pathConstraintName == null) throw new Error("pathConstraintName cannot be null."); - let pathConstraints = this.pathConstraints; - for (let i = 0, n = pathConstraints.length; i < n; i++) - if (pathConstraints[i].name == pathConstraintName) return i; - return -1; - } } } diff --git a/spine-ts/core/src/SkeletonJson.ts b/spine-ts/core/src/SkeletonJson.ts index 16b431982..a3f624797 100644 --- a/spine-ts/core/src/SkeletonJson.ts +++ b/spine-ts/core/src/SkeletonJson.ts @@ -55,7 +55,7 @@ module spine { // Skeleton let skeletonMap = root.skeleton; - if (skeletonMap != null) { + if (skeletonMap) { skeletonData.hash = skeletonMap.hash; skeletonData.version = skeletonMap.spine; skeletonData.x = skeletonMap.x; @@ -73,9 +73,9 @@ module spine { let parent: BoneData = null; let parentName: string = getValue(boneMap, "parent", null); - if (parentName != null) { + if (parentName) { parent = skeletonData.findBone(parentName); - if (parent == null) throw new Error("Parent bone not found: " + parentName); + if (!parent) throw new Error("Parent bone not found: " + parentName); } let data = new BoneData(skeletonData.bones.length, boneMap.name, parent); data.length = getValue(boneMap, "length", 0) * scale; @@ -103,14 +103,14 @@ module spine { let slotName: string = slotMap.name; let boneName: string = slotMap.bone; let boneData = skeletonData.findBone(boneName); - if (boneData == null) throw new Error("Slot bone not found: " + boneName); + if (!boneData) throw new Error("Slot bone not found: " + boneName); let data = new SlotData(skeletonData.slots.length, slotName, boneData); let color: string = getValue(slotMap, "color", null); - if (color != null) data.color.setFromString(color); + if (color) data.color.setFromString(color); let dark: string = getValue(slotMap, "dark", null); - if (dark != null) data.darkColor = Color.fromString(dark); + if (dark) data.darkColor = Color.fromString(dark); data.attachmentName = getValue(slotMap, "attachment", null); data.blendMode = Utils.enumValue(BlendMode, getValue(slotMap, "blend", "normal")); @@ -126,16 +126,16 @@ module spine { data.order = getValue(constraintMap, "order", 0); data.skinRequired = getValue(constraintMap, "skin", false); - for (let j = 0; j < constraintMap.bones.length; j++) { - let boneName = constraintMap.bones[j]; + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + let boneName = constraintMap.bones[ii]; let bone = skeletonData.findBone(boneName); - if (bone == null) throw new Error("IK bone not found: " + boneName); + if (!bone) throw new Error("IK bone not found: " + boneName); data.bones.push(bone); } let targetName: string = constraintMap.target; data.target = skeletonData.findBone(targetName); - if (data.target == null) throw new Error("IK target bone not found: " + targetName); + if (!data.target) throw new Error("IK target bone not found: " + targetName); data.mix = getValue(constraintMap, "mix", 1); data.softness = getValue(constraintMap, "softness", 0) * scale; @@ -156,16 +156,16 @@ module spine { data.order = getValue(constraintMap, "order", 0); data.skinRequired = getValue(constraintMap, "skin", false); - for (let j = 0; j < constraintMap.bones.length; j++) { - let boneName = constraintMap.bones[j]; + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + let boneName = constraintMap.bones[ii]; let bone = skeletonData.findBone(boneName); - if (bone == null) throw new Error("Transform constraint bone not found: " + boneName); + if (!bone) throw new Error("Transform constraint bone not found: " + boneName); data.bones.push(bone); } let targetName: string = constraintMap.target; data.target = skeletonData.findBone(targetName); - if (data.target == null) throw new Error("Transform constraint target bone not found: " + targetName); + if (!data.target) throw new Error("Transform constraint target bone not found: " + targetName); data.local = getValue(constraintMap, "local", false); data.relative = getValue(constraintMap, "relative", false); @@ -195,16 +195,16 @@ module spine { data.order = getValue(constraintMap, "order", 0); data.skinRequired = getValue(constraintMap, "skin", false); - for (let j = 0; j < constraintMap.bones.length; j++) { - let boneName = constraintMap.bones[j]; + for (let ii = 0; ii < constraintMap.bones.length; ii++) { + let boneName = constraintMap.bones[ii]; let bone = skeletonData.findBone(boneName); - if (bone == null) throw new Error("Transform constraint bone not found: " + boneName); + if (!bone) throw new Error("Transform constraint bone not found: " + boneName); data.bones.push(bone); } let targetName: string = constraintMap.target; data.target = skeletonData.findSlot(targetName); - if (data.target == null) throw new Error("Path target slot not found: " + targetName); + if (!data.target) throw new Error("Path target slot not found: " + targetName); data.positionMode = Utils.enumValue(PositionMode, getValue(constraintMap, "positionMode", "Percent")); data.spacingMode = Utils.enumValue(SpacingMode, getValue(constraintMap, "spacingMode", "Length")); @@ -231,7 +231,7 @@ module spine { if (skinMap.bones) { for (let ii = 0; ii < skinMap.bones.length; ii++) { let bone = skeletonData.findBone(skinMap.bones[ii]); - if (bone == null) throw new Error("Skin bone not found: " + skinMap.bones[i]); + if (!bone) throw new Error("Skin bone not found: " + skinMap.bones[i]); skin.bones.push(bone); } } @@ -239,7 +239,7 @@ module spine { if (skinMap.ik) { for (let ii = 0; ii < skinMap.ik.length; ii++) { let constraint = skeletonData.findIkConstraint(skinMap.ik[ii]); - if (constraint == null) throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); + if (!constraint) throw new Error("Skin IK constraint not found: " + skinMap.ik[i]); skin.constraints.push(constraint); } } @@ -247,7 +247,7 @@ module spine { if (skinMap.transform) { for (let ii = 0; ii < skinMap.transform.length; ii++) { let constraint = skeletonData.findTransformConstraint(skinMap.transform[ii]); - if (constraint == null) throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); + if (!constraint) throw new Error("Skin transform constraint not found: " + skinMap.transform[i]); skin.constraints.push(constraint); } } @@ -255,18 +255,18 @@ module spine { if (skinMap.path) { for (let ii = 0; ii < skinMap.path.length; ii++) { let constraint = skeletonData.findPathConstraint(skinMap.path[ii]); - if (constraint == null) throw new Error("Skin path constraint not found: " + skinMap.path[i]); + if (!constraint) throw new Error("Skin path constraint not found: " + skinMap.path[i]); skin.constraints.push(constraint); } } for (let slotName in skinMap.attachments) { let slot = skeletonData.findSlot(slotName); - if (slot == null) throw new Error("Slot not found: " + slotName); + if (!slot) throw new Error("Slot not found: " + slotName); let slotMap = skinMap.attachments[slotName]; for (let entryName in slotMap) { let attachment = this.readAttachment(slotMap[entryName], skin, slot.index, entryName, skeletonData); - if (attachment != null) skin.setAttachment(slot.index, entryName, attachment); + if (attachment) skin.setAttachment(slot.index, entryName, attachment); } } skeletonData.skins.push(skin); @@ -277,10 +277,10 @@ module spine { // Linked meshes. for (let i = 0, n = this.linkedMeshes.length; i < n; i++) { let linkedMesh = this.linkedMeshes[i]; - let skin = linkedMesh.skin == null ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); - if (skin == null) throw new Error("Skin not found: " + linkedMesh.skin); + let skin = !linkedMesh.skin ? skeletonData.defaultSkin : skeletonData.findSkin(linkedMesh.skin); + if (!skin) throw new Error("Skin not found: " + linkedMesh.skin); let parent = skin.getAttachment(linkedMesh.slotIndex, linkedMesh.parent); - if (parent == null) throw new Error("Parent mesh not found: " + linkedMesh.parent); + if (!parent) throw new Error("Parent mesh not found: " + linkedMesh.parent); linkedMesh.mesh.deformAttachment = linkedMesh.inheritDeform ? parent : linkedMesh.mesh; linkedMesh.mesh.setParentMesh( parent); linkedMesh.mesh.updateUVs(); @@ -296,7 +296,7 @@ module spine { data.floatValue = getValue(eventMap, "float", 0); data.stringValue = getValue(eventMap, "string", ""); data.audioPath = getValue(eventMap, "audio", null); - if (data.audioPath != null) { + if (data.audioPath) { data.volume = getValue(eventMap, "volume", 1); data.balance = getValue(eventMap, "balance", 0); } @@ -323,7 +323,7 @@ module spine { case "region": { let path = getValue(map, "path", name); let region = this.attachmentLoader.newRegionAttachment(skin, name, path); - if (region == null) return null; + if (!region) return null; region.path = path; region.x = getValue(map, "x", 0) * scale; region.y = getValue(map, "y", 0) * scale; @@ -334,34 +334,34 @@ module spine { region.height = map.height * scale; let color: string = getValue(map, "color", null); - if (color != null) region.color.setFromString(color); + if (color) region.color.setFromString(color); region.updateOffset(); return region; } case "boundingbox": { let box = this.attachmentLoader.newBoundingBoxAttachment(skin, name); - if (box == null) return null; + if (!box) return null; this.readVertices(map, box, map.vertexCount << 1); let color: string = getValue(map, "color", null); - if (color != null) box.color.setFromString(color); + if (color) box.color.setFromString(color); return box; } case "mesh": case "linkedmesh": { let path = getValue(map, "path", name); let mesh = this.attachmentLoader.newMeshAttachment(skin, name, path); - if (mesh == null) return null; + if (!mesh) return null; mesh.path = path; let color = getValue(map, "color", null); - if (color != null) mesh.color.setFromString(color); + if (color) mesh.color.setFromString(color); mesh.width = getValue(map, "width", 0) * scale; mesh.height = getValue(map, "height", 0) * scale; let parent: string = getValue(map, "parent", null); - if (parent != null) { + if (parent) { this.linkedMeshes.push(new LinkedMesh(mesh, getValue(map, "skin", null), slotIndex, parent, getValue(map, "deform", true))); return mesh; } @@ -378,7 +378,7 @@ module spine { } case "path": { let path = this.attachmentLoader.newPathAttachment(skin, name); - if (path == null) return null; + if (!path) return null; path.closed = getValue(map, "closed", false); path.constantSpeed = getValue(map, "constantSpeed", true); @@ -391,28 +391,28 @@ module spine { path.lengths = lengths; let color: string = getValue(map, "color", null); - if (color != null) path.color.setFromString(color); + if (color) path.color.setFromString(color); return path; } case "point": { let point = this.attachmentLoader.newPointAttachment(skin, name); - if (point == null) return null; + if (!point) return null; point.x = getValue(map, "x", 0) * scale; point.y = getValue(map, "y", 0) * scale; point.rotation = getValue(map, "rotation", 0); let color = getValue(map, "color", null); - if (color != null) point.color.setFromString(color); + if (color) point.color.setFromString(color); return point; } case "clipping": { let clip = this.attachmentLoader.newClippingAttachment(skin, name); - if (clip == null) return null; + if (!clip) return null; let end = getValue(map, "end", null); - if (end != null) { + if (end) { let slot = skeletonData.findSlot(end); - if (slot == null) throw new Error("Clipping end slot not found: " + end); + if (!slot) throw new Error("Clipping end slot not found: " + end); clip.endSlot = slot; } @@ -420,7 +420,7 @@ module spine { this.readVertices(map, clip, vertexCount << 1); let color: string = getValue(map, "color", null); - if (color != null) clip.color.setFromString(color); + if (color) clip.color.setFromString(color); return clip; } } @@ -485,8 +485,11 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, color.r, color.g, color.b, color.a); - if (timelineMap.length == frame + 1) break; let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let newColor = Color.fromString(nextMap.color); let curve = keyMap.curve; @@ -511,8 +514,11 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, color.r, color.g, color.b); - if (timelineMap.length == frame + 1) break; let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let newColor = Color.fromString(nextMap.color); let curve = keyMap.curve; @@ -540,8 +546,11 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, color.r, color.g, color.b, color.a, color2.r, color2.g, color2.b); - if (timelineMap.length == frame + 1) break; let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let newColor = Color.fromString(nextMap.light); let newColor2 = Color.fromString(nextMap.dark); @@ -573,8 +582,11 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, color.r, color.g, color.b, color2.r, color2.g, color2.b); - if (timelineMap.length == frame + 1) break; let nextMap = timelineMap[frame + 1]; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let newColor = Color.fromString(nextMap.light); let newColor2 = Color.fromString(nextMap.dark); @@ -664,7 +676,10 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, mix, softness, getValue(keyMap, "bendPositive", true) ? 1 : -1, getValue(keyMap, "compress", false), getValue(keyMap, "stretch", false)); let nextMap = constraintMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let mix2 = getValue(nextMap, "mix", 1); @@ -706,7 +721,10 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, mixRotate, mixX, mixY, mixScaleX, mixScaleY, mixShearY); let nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let mixRotate2 = getValue(nextMap, "mixRotate", 1); @@ -742,22 +760,21 @@ module spine { if (map.path) { for (let constraintName in map.path) { let constraintMap = map.path[constraintName]; - let index = skeletonData.findPathConstraintIndex(constraintName); - if (index == -1) throw new Error("Path constraint not found: " + constraintName); - let data = skeletonData.pathConstraints[index]; + let constraint = skeletonData.findPathConstraint(constraintName); + let constraintIndex = skeletonData.pathConstraints.indexOf(constraint); for (let timelineName in constraintMap) { let timelineMap = constraintMap[timelineName]; let keyMap = timelineMap[0]; if (!keyMap) continue; if (timelineName === "position") { - let timeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, index); - timelines.push(readTimeline1(timelineMap, timeline, 0, data.positionMode == PositionMode.Fixed ? scale : 1)); + let timeline = new PathConstraintPositionTimeline(timelineMap.length, timelineMap.length, constraintIndex); + timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.positionMode == PositionMode.Fixed ? scale : 1)); } else if (timelineName === "spacing") { - let timeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, index); - timelines.push(readTimeline1(timelineMap, timeline, 0, data.spacingMode == SpacingMode.Length || data.spacingMode == SpacingMode.Fixed ? scale : 1)); + let timeline = new PathConstraintSpacingTimeline(timelineMap.length, timelineMap.length, constraintIndex); + timelines.push(readTimeline1(timelineMap, timeline, 0, constraint.spacingMode == SpacingMode.Length || constraint.spacingMode == SpacingMode.Fixed ? scale : 1)); } else if (timelineName === "mix") { - let timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, index); + let timeline = new PathConstraintMixTimeline(timelineMap.size, timelineMap.size * 3, constraintIndex); let time = getValue(keyMap, "time", 0); let mixRotate = getValue(keyMap, "mixRotate", 1); let mixX = getValue(keyMap, "mixX", 1); @@ -765,13 +782,16 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { timeline.setFrame(frame, time, mixRotate, mixX, mixY); let nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let mixRotate2 = getValue(nextMap, "mixRotate", 1); let mixX2 = getValue(nextMap, "mixX", 1); let mixY2 = getValue(nextMap, "mixY", mixX2); let curve = keyMap.curve; - if (curve != null) { + if (curve) { bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, mixRotate, mixRotate2, 1); bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, mixX, mixX2, 1); bezier = readCurve(curve, timeline, bezier, frame, 2, time, time2, mixY, mixY2, 1); @@ -793,7 +813,7 @@ module spine { for (let deformName in map.deform) { let deformMap = map.deform[deformName]; let skin = skeletonData.findSkin(deformName); - if (skin == null) throw new Error("Skin not found: " + deformName); + if (!skin) throw new Error("Skin not found: " + deformName); for (let slotName in deformMap) { let slotMap = deformMap[slotName]; let slotIndex = skeletonData.findSlotIndex(slotName); @@ -804,8 +824,8 @@ module spine { if (!keyMap) continue; let attachment = skin.getAttachment(slotIndex, timelineName); - if (attachment == null) throw new Error("Deform attachment not found: " + timelineMap.name); - let weighted = attachment.bones != null; + if (!attachment) throw new Error("Deform attachment not found: " + timelineMap.name); + let weighted = attachment.bones; let vertices = attachment.vertices; let deformLength = weighted ? vertices.length / 3 * 2 : vertices.length; @@ -814,7 +834,7 @@ module spine { for (let frame = 0, bezier = 0;; frame++) { let deform: ArrayLike; let verticesValue: Array = getValue(keyMap, "vertices", null); - if (verticesValue == null) + if (!verticesValue) deform = weighted ? Utils.newFloatArray(deformLength) : vertices; else { deform = Utils.newFloatArray(deformLength); @@ -832,7 +852,10 @@ module spine { timeline.setFrame(frame, time, deform); let nextMap = timelineMap[frame + 1]; - if (!nextMap) break; + if (!nextMap) { + timeline.shrink(bezier); + break; + } let time2 = getValue(nextMap, "time", 0); let curve = keyMap.curve; if (curve) bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, 0, 1, 1); @@ -846,22 +869,20 @@ module spine { } // Draw order timelines. - let drawOrderNode = map.drawOrder; - if (drawOrderNode == null) drawOrderNode = map.draworder; - if (drawOrderNode != null) { - let timeline = new DrawOrderTimeline(drawOrderNode.length); + if (map.drawOrder) { + let timeline = new DrawOrderTimeline(map.drawOrder.length); let slotCount = skeletonData.slots.length; let frame = 0; - for (let j = 0; j < drawOrderNode.length; j++, frame++) { - let drawOrderMap = drawOrderNode[j]; + for (let i = 0; i < map.drawOrder.length; i++, frame++) { + let drawOrderMap = map.drawOrder[i]; let drawOrder: Array = null; let offsets = getValue(drawOrderMap, "offsets", null); - if (offsets != null) { + if (offsets) { drawOrder = Utils.newArray(slotCount, -1); let unchanged = Utils.newArray(slotCount - offsets.length, 0); let originalIndex = 0, unchangedIndex = 0; - for (let i = 0; i < offsets.length; i++) { - let offsetMap = offsets[i]; + for (let ii = 0; ii < offsets.length; ii++) { + let offsetMap = offsets[ii]; let slotIndex = skeletonData.findSlotIndex(offsetMap.slot); if (slotIndex == -1) throw new Error("Slot not found: " + offsetMap.slot); // Collect unchanged items. @@ -874,8 +895,8 @@ module spine { while (originalIndex < slotCount) unchanged[unchangedIndex++] = originalIndex++; // Fill in unchanged items. - for (let i = slotCount - 1; i >= 0; i--) - if (drawOrder[i] == -1) drawOrder[i] = unchanged[--unchangedIndex]; + for (let ii = slotCount - 1; ii >= 0; ii--) + if (drawOrder[ii] == -1) drawOrder[ii] = unchanged[--unchangedIndex]; } timeline.setFrame(frame, getValue(drawOrderMap, "time", 0), drawOrder); } @@ -889,12 +910,12 @@ module spine { for (let i = 0; i < map.events.length; i++, frame++) { let eventMap = map.events[i]; let eventData = skeletonData.findEvent(eventMap.name); - if (eventData == null) throw new Error("Event not found: " + eventMap.name); + if (!eventData) throw new Error("Event not found: " + eventMap.name); let event = new Event(Utils.toSinglePrecision(getValue(eventMap, "time", 0)), eventData); event.intValue = getValue(eventMap, "int", eventData.intValue); event.floatValue = getValue(eventMap, "float", eventData.floatValue); event.stringValue = getValue(eventMap, "string", eventData.stringValue); - if (event.data.audioPath != null) { + if (event.data.audioPath) { event.volume = getValue(eventMap, "volume", 1); event.balance = getValue(eventMap, "balance", 0); } @@ -906,8 +927,6 @@ module spine { let duration = 0; for (let i = 0, n = timelines.length; i < n; i++) duration = Math.max(duration, timelines[i].getDuration()); - if (isNaN(duration)) throw new Error("Animation duration is NaN."); - skeletonData.animations.push(new Animation(name, timelines, duration)); } } @@ -944,6 +963,7 @@ module spine { value = value2; keyMap = nextMap; } + timeline.shrink(bezier); return timeline; } @@ -961,7 +981,7 @@ module spine { let nvalue1 = getValue(nextMap, name1, defaultValue) * scale; let nvalue2 = getValue(nextMap, name2, defaultValue) * scale; let curve = keyMap.curve; - if (curve != null) { + if (curve) { bezier = readCurve(curve, timeline, bezier, frame, 0, time, time2, value1, nvalue1, scale); bezier = readCurve(curve, timeline, bezier, frame, 1, time, time2, value2, nvalue2, scale); } @@ -978,15 +998,15 @@ module spine { value1: number, value2: number, scale: number) { if (curve == "stepped") { if (value != 0) timeline.setStepped(frame); - } else { - let i = value << 2; - let cx1 = curve[i++]; - let cy1 = curve[i++] * scale; - let cx2 = curve[i++]; - let cy2 = curve[i++] * scale; - timeline.setBezier(bezier++, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier; } - return bezier; + let i = value << 2; + let cx1 = curve[i]; + let cy1 = curve[i + 1] * scale; + let cx2 = curve[i + 2]; + let cy2 = curve[i + 3] * scale; + timeline.setBezier(bezier, frame, value, time1, value1, cx1, cy1, cx2, cy2, time2, value2); + return bezier + 1; } function getValue (map: any, property: string, defaultValue: any) { diff --git a/spine-ts/core/src/Skin.ts b/spine-ts/core/src/Skin.ts index fe8c700e3..542054cd0 100644 --- a/spine-ts/core/src/Skin.ts +++ b/spine-ts/core/src/Skin.ts @@ -46,13 +46,13 @@ module spine { constraints = new Array(); constructor (name: string) { - if (name == null) throw new Error("name cannot be null."); + if (!name) throw new Error("name cannot be null."); this.name = name; } /** Adds an attachment to the skin for the specified slot index and name. */ setAttachment (slotIndex: number, name: string, attachment: Attachment) { - if (attachment == null) throw new Error("attachment cannot be null."); + if (!attachment) throw new Error("attachment cannot be null."); let attachments = this.attachments; if (slotIndex >= attachments.length) attachments.length = slotIndex + 1; if (!attachments[slotIndex]) attachments[slotIndex] = { }; @@ -64,8 +64,8 @@ module spine { for(let i = 0; i < skin.bones.length; i++) { let bone = skin.bones[i]; let contained = false; - for (let j = 0; j < this.bones.length; j++) { - if (this.bones[j] == bone) { + for (let ii = 0; ii < this.bones.length; ii++) { + if (this.bones[ii] == bone) { contained = true; break; } @@ -76,8 +76,8 @@ module spine { for(let i = 0; i < skin.constraints.length; i++) { let constraint = skin.constraints[i]; let contained = false; - for (let j = 0; j < this.constraints.length; j++) { - if (this.constraints[j] == constraint) { + for (let ii = 0; ii < this.constraints.length; ii++) { + if (this.constraints[ii] == constraint) { contained = true; break; } @@ -98,8 +98,8 @@ module spine { for(let i = 0; i < skin.bones.length; i++) { let bone = skin.bones[i]; let contained = false; - for (let j = 0; j < this.bones.length; j++) { - if (this.bones[j] == bone) { + for (let ii = 0; ii < this.bones.length; ii++) { + if (this.bones[ii] == bone) { contained = true; break; } @@ -110,8 +110,8 @@ module spine { for(let i = 0; i < skin.constraints.length; i++) { let constraint = skin.constraints[i]; let contained = false; - for (let j = 0; j < this.constraints.length; j++) { - if (this.constraints[j] == constraint) { + for (let ii = 0; ii < this.constraints.length; ii++) { + if (this.constraints[ii] == constraint) { contained = true; break; } @@ -122,7 +122,7 @@ module spine { let attachments = skin.getAttachments(); for (let i = 0; i < attachments.length; i++) { var attachment = attachments[i]; - if (attachment.attachment == null) continue; + if (!attachment.attachment) continue; if (attachment.attachment instanceof MeshAttachment) { attachment.attachment = attachment.attachment.newLinkedMesh(); this.setAttachment(attachment.slotIndex, attachment.name, attachment.attachment); @@ -190,7 +190,7 @@ module spine { let skinAttachment:Attachment = dictionary[key]; if (slotAttachment == skinAttachment) { let attachment = this.getAttachment(slotIndex, key); - if (attachment != null) slot.setAttachment(attachment); + if (attachment) slot.setAttachment(attachment); break; } } diff --git a/spine-ts/core/src/Slot.ts b/spine-ts/core/src/Slot.ts index 79105422b..8744c1f4c 100644 --- a/spine-ts/core/src/Slot.ts +++ b/spine-ts/core/src/Slot.ts @@ -60,12 +60,12 @@ module spine { deform = new Array(); constructor (data: SlotData, bone: Bone) { - if (data == null) throw new Error("data cannot be null."); - if (bone == null) throw new Error("bone cannot be null."); + if (!data) throw new Error("data cannot be null."); + if (!bone) throw new Error("bone cannot be null."); this.data = data; this.bone = bone; this.color = new Color(); - this.darkColor = data.darkColor == null ? null : new Color(); + this.darkColor = !data.darkColor ? null : new Color(); this.setToSetupPose(); } @@ -106,8 +106,8 @@ module spine { /** Sets this slot to the setup pose. */ setToSetupPose () { this.color.setFromColor(this.data.color); - if (this.darkColor != null) this.darkColor.setFromColor(this.data.darkColor); - if (this.data.attachmentName == null) + if (this.darkColor) this.darkColor.setFromColor(this.data.darkColor); + if (!this.data.attachmentName) this.attachment = null; else { this.attachment = null; diff --git a/spine-ts/core/src/SlotData.ts b/spine-ts/core/src/SlotData.ts index 885dc3cb6..444ab13e1 100644 --- a/spine-ts/core/src/SlotData.ts +++ b/spine-ts/core/src/SlotData.ts @@ -56,8 +56,8 @@ module spine { constructor (index: number, name: string, boneData: BoneData) { if (index < 0) throw new Error("index must be >= 0."); - if (name == null) throw new Error("name cannot be null."); - if (boneData == null) throw new Error("boneData cannot be null."); + if (!name) throw new Error("name cannot be null."); + if (!boneData) throw new Error("boneData cannot be null."); this.index = index; this.name = name; this.boneData = boneData; diff --git a/spine-ts/core/src/TextureAtlas.ts b/spine-ts/core/src/TextureAtlas.ts index 80dc0addb..1d09f4674 100644 --- a/spine-ts/core/src/TextureAtlas.ts +++ b/spine-ts/core/src/TextureAtlas.ts @@ -37,8 +37,7 @@ module spine { } private load (atlasText: string, textureLoader: (path: string) => any) { - if (textureLoader == null) - throw new Error("textureLoader cannot be null."); + if (!textureLoader) throw new Error("textureLoader cannot be null."); let reader = new TextureAtlasReader(atlasText); let entry = new Array(4); @@ -107,11 +106,11 @@ module spine { let line = reader.readLine(); // Ignore empty lines before first entry. - while (line != null && line.trim().length == 0) + while (line && line.trim().length == 0) line = reader.readLine(); // Header entries. while (true) { - if (line == null || line.trim().length == 0) break; + if (!line || line.trim().length == 0) break; if (reader.readEntry(entry, line) == 0) break; // Silently ignore all header fields. line = reader.readLine(); } @@ -121,11 +120,11 @@ module spine { let values: number[][] = null; while (true) { - if (line == null) break; + if (!line) break; if (line.trim().length == 0) { page = null; line = reader.readLine(); - } else if (page == null) { + } else if (!page) { page = new TextureAtlasPage(); page.name = line.trim(); while (true) { @@ -151,7 +150,7 @@ module spine { if (field) field(); else { - if (names == null) { + if (!names) { names = []; values = []; } @@ -166,7 +165,7 @@ module spine { region.originalWidth = region.width; region.originalHeight = region.height; } - if (names != null && names.length > 0) { + if (names && names.length > 0) { region.names = names; region.values = values; names = null; @@ -218,7 +217,7 @@ module spine { } readEntry (entry: string[], line: string): number { - if (line == null) return 0; + if (!line) return 0; line = line.trim(); if (line.length == 0) return 0; diff --git a/spine-ts/core/src/TransformConstraint.ts b/spine-ts/core/src/TransformConstraint.ts index 19e547a05..a4b6603c7 100644 --- a/spine-ts/core/src/TransformConstraint.ts +++ b/spine-ts/core/src/TransformConstraint.ts @@ -50,8 +50,8 @@ module spine { active = false; constructor (data: TransformConstraintData, skeleton: Skeleton) { - if (data == null) throw new Error("data cannot be null."); - if (skeleton == null) throw new Error("skeleton cannot be null."); + if (!data) throw new Error("data cannot be null."); + if (!skeleton) throw new Error("skeleton cannot be null."); this.data = data; this.mixRotate = data.mixRotate; this.mixX = data.mixX; diff --git a/spine-ts/core/src/attachments/Attachment.ts b/spine-ts/core/src/attachments/Attachment.ts index ed4a1bb7d..a1c58117a 100644 --- a/spine-ts/core/src/attachments/Attachment.ts +++ b/spine-ts/core/src/attachments/Attachment.ts @@ -33,7 +33,7 @@ module spine { name: string; constructor (name: string) { - if (name == null) throw new Error("name cannot be null."); + if (!name) throw new Error("name cannot be null."); this.name = name; } @@ -86,7 +86,7 @@ module spine { let deformArray = slot.deform; let vertices = this.vertices; let bones = this.bones; - if (bones == null) { + if (!bones) { if (deformArray.length > 0) vertices = deformArray; let bone = slot.bone; let x = bone.worldX; @@ -140,13 +140,13 @@ module spine { /** Does not copy id (generated) or name (set on construction). **/ copyTo (attachment: VertexAttachment) { - if (this.bones != null) { + if (this.bones) { attachment.bones = new Array(this.bones.length); Utils.arrayCopy(this.bones, 0, attachment.bones, 0, this.bones.length); } else attachment.bones = null; - if (this.vertices != null) { + if (this.vertices) { attachment.vertices = Utils.newFloatArray(this.vertices.length); Utils.arrayCopy(this.vertices, 0, attachment.vertices, 0, this.vertices.length); } else diff --git a/spine-ts/core/src/attachments/MeshAttachment.ts b/spine-ts/core/src/attachments/MeshAttachment.ts index f427155c2..033289b55 100644 --- a/spine-ts/core/src/attachments/MeshAttachment.ts +++ b/spine-ts/core/src/attachments/MeshAttachment.ts @@ -76,7 +76,7 @@ module spine { * region. */ updateUVs () { let regionUVs = this.regionUVs; - if (this.uvs == null || this.uvs.length != regionUVs.length) this.uvs = Utils.newFloatArray(regionUVs.length); + if (!this.uvs || this.uvs.length != regionUVs.length) this.uvs = Utils.newFloatArray(regionUVs.length); let uvs = this.uvs; let n = this.uvs.length; let u = this.region.u, v = this.region.v, width = 0, height = 0; @@ -119,7 +119,7 @@ module spine { v -= (region.originalHeight - region.offsetY - region.height) / textureHeight; width = region.originalWidth / textureWidth; height = region.originalHeight / textureHeight; - } else if (this.region == null) { + } else if (!this.region) { u = v = 0; width = height = 1; } else { @@ -143,7 +143,7 @@ module spine { /** @param parentMesh May be null. */ setParentMesh (parentMesh: MeshAttachment) { this.parentMesh = parentMesh; - if (parentMesh != null) { + if (parentMesh) { this.bones = parentMesh.bones; this.vertices = parentMesh.vertices; this.worldVerticesLength = parentMesh.worldVerticesLength; @@ -155,7 +155,7 @@ module spine { } copy (): Attachment { - if (this.parentMesh != null) return this.newLinkedMesh(); + if (this.parentMesh) return this.newLinkedMesh(); let copy = new MeshAttachment(this.name); copy.region = this.region; @@ -172,7 +172,7 @@ module spine { copy.hullLength = this.hullLength; // Nonessential. - if (this.edges != null) { + if (this.edges) { copy.edges = new Array(this.edges.length); Utils.arrayCopy(this.edges, 0, copy.edges, 0, this.edges.length); } @@ -189,7 +189,7 @@ module spine { copy.path = this.path; copy.color.setFromColor(this.color); copy.deformAttachment = this.deformAttachment; - copy.setParentMesh(this.parentMesh != null ? this.parentMesh : this); + copy.setParentMesh(this.parentMesh ? this.parentMesh : this); copy.updateUVs(); return copy; } diff --git a/spine-ts/player/src/Player.ts b/spine-ts/player/src/Player.ts index 1145331de..0661920d0 100644 --- a/spine-ts/player/src/Player.ts +++ b/spine-ts/player/src/Player.ts @@ -735,7 +735,7 @@ module spine { this.loadingScreen.draw(this.assetManager.isLoadingComplete()); // Have we finished loading the asset? Then set things up - if (this.assetManager.isLoadingComplete() && this.skeleton == null) this.loadSkeleton(); + if (this.assetManager.isLoadingComplete() && !this.skeleton) this.loadSkeleton(); // Resize the canvas this.sceneRenderer.resize(webgl.ResizeMode.Expand); @@ -1025,7 +1025,7 @@ module spine { } }, dragged: (x, y) => { - if (target != null) { + if (target) { renderer.camera.screenToWorld(coords.set(x, y, 0), canvas.width, canvas.height); if (target.parent !== null) { target.parent.worldToLocal(temp2.set(coords.x - skeleton.x, coords.y - skeleton.y)); diff --git a/spine-ts/threejs/src/SkeletonMesh.ts b/spine-ts/threejs/src/SkeletonMesh.ts index e6ab41f3a..86e9b161c 100644 --- a/spine-ts/threejs/src/SkeletonMesh.ts +++ b/spine-ts/threejs/src/SkeletonMesh.ts @@ -191,7 +191,7 @@ module spine.threejs { continue; } else continue; - if (texture != null) { + if (texture) { let skeleton = slot.bone.skeleton; let skeletonColor = skeleton.color; let slotColor = slot.color; @@ -211,7 +211,7 @@ module spine.threejs { clipper.clipTriangles(vertices, numFloats, triangles, triangles.length, uvs, color, null, false); let clippedVertices = clipper.clippedVertices; let clippedTriangles = clipper.clippedTriangles; - if (this.vertexEffect != null) { + if (this.vertexEffect) { let vertexEffect = this.vertexEffect; let verts = clippedVertices; for (let v = 0, n = clippedVertices.length; v < n; v += vertexSize) { @@ -238,7 +238,7 @@ module spine.threejs { finalIndicesLength = clippedTriangles.length; } else { let verts = vertices; - if (this.vertexEffect != null) { + if (this.vertexEffect) { let vertexEffect = this.vertexEffect; for (let v = 0, u = 0, n = numFloats; v < n; v += vertexSize, u += 2) { tempPos.x = verts[v]; @@ -291,9 +291,7 @@ module spine.threejs { //} let batchMaterial = batch.material; - if (batchMaterial.uniforms.map.value == null) { - batchMaterial.uniforms.map.value = texture.texture; - } + if (!batchMaterial.uniforms.map.value) batchMaterial.uniforms.map.value = texture.texture; if (batchMaterial.uniforms.map.value != texture.texture) { batch.end(); batch = this.nextBatch(); diff --git a/spine-ts/webgl/src/Input.ts b/spine-ts/webgl/src/Input.ts index f4a25db38..d492d1920 100644 --- a/spine-ts/webgl/src/Input.ts +++ b/spine-ts/webgl/src/Input.ts @@ -110,7 +110,7 @@ module spine.webgl { element.addEventListener("mousemove", mouseMove, true); element.addEventListener("mouseup", mouseUp, true); element.addEventListener("touchstart", (ev: TouchEvent) => { - if (this.currTouch != null) return; + if (this.currTouch) return; var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) { @@ -182,7 +182,7 @@ module spine.webgl { ev.preventDefault(); }, false); element.addEventListener("touchmove", (ev: TouchEvent) => { - if (this.currTouch == null) return; + if (!this.currTouch) return; var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) { diff --git a/spine-ts/webgl/src/Mesh.ts b/spine-ts/webgl/src/Mesh.ts index 43142c92f..cde2f0035 100644 --- a/spine-ts/webgl/src/Mesh.ts +++ b/spine-ts/webgl/src/Mesh.ts @@ -186,7 +186,7 @@ module spine.webgl { export class TexCoordAttribute extends VertexAttribute { constructor (unit: number = 0) { - super(Shader.TEXCOORDS + (unit == 0? "": unit), VertexAttributeType.Float, 2); + super(Shader.TEXCOORDS + (unit == 0 ? "" : unit), VertexAttributeType.Float, 2); } } diff --git a/spine-ts/webgl/src/SceneRenderer.ts b/spine-ts/webgl/src/SceneRenderer.ts index ad624daf4..3b17af7bb 100644 --- a/spine-ts/webgl/src/SceneRenderer.ts +++ b/spine-ts/webgl/src/SceneRenderer.ts @@ -138,7 +138,7 @@ module spine.webgl { quad[i++] = 0; quad[i++] = 0; quad[i++] = 0; - quad[i++] = 0; + quad[i] = 0; } this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); } @@ -202,7 +202,7 @@ module spine.webgl { quad[i++] = 0; quad[i++] = 0; quad[i++] = 0; - quad[i++] = 0; + quad[i] = 0; } this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); } @@ -333,7 +333,7 @@ module spine.webgl { quad[i++] = 0; quad[i++] = 0; quad[i++] = 0; - quad[i++] = 0; + quad[i] = 0; } this.batcher.draw(texture, quad, this.QUAD_TRIANGLES); } @@ -397,7 +397,7 @@ module spine.webgl { quad[i++] = 0; quad[i++] = 0; quad[i++] = 0; - quad[i++] = 0; + quad[i] = 0; } this.batcher.draw(region.texture, quad, this.QUAD_TRIANGLES); } @@ -488,9 +488,8 @@ module spine.webgl { this.shapesShader.setUniform4x4f(Shader.MVP_MATRIX, this.camera.projectionView.values); this.shapes.begin(this.shapesShader); this.activeRenderer = this.shapes; - } else { + } else this.activeRenderer = this.skeletonDebugRenderer; - } } dispose () { diff --git a/spine-ts/webgl/src/SkeletonDebugRenderer.ts b/spine-ts/webgl/src/SkeletonDebugRenderer.ts index 878f23420..b7433b426 100644 --- a/spine-ts/webgl/src/SkeletonDebugRenderer.ts +++ b/spine-ts/webgl/src/SkeletonDebugRenderer.ts @@ -72,7 +72,7 @@ module spine.webgl { for (let i = 0, n = bones.length; i < n; i++) { let bone = bones[i]; if (ignoredBones && ignoredBones.indexOf(bone.data.name) > -1) continue; - if (bone.parent == null) continue; + if (!bone.parent) continue; let x = skeletonX + bone.data.length * bone.a + bone.worldX; let y = skeletonY + bone.data.length * bone.c + bone.worldY; shapes.rectLine(true, skeletonX + bone.worldX, skeletonY + bone.worldY, x, y, this.boneWidth * this.scale); diff --git a/spine-ts/webgl/src/SkeletonRenderer.ts b/spine-ts/webgl/src/SkeletonRenderer.ts index 631553eb6..efd244e67 100644 --- a/spine-ts/webgl/src/SkeletonRenderer.ts +++ b/spine-ts/webgl/src/SkeletonRenderer.ts @@ -131,7 +131,7 @@ module spine.webgl { continue; } - if (texture != null) { + if (texture) { let slotColor = slot.color; let finalColor = this.tempColor; finalColor.r = skeletonColor.r * slotColor.r * attachmentColor.r; @@ -144,7 +144,7 @@ module spine.webgl { finalColor.b *= finalColor.a; } let darkColor = this.tempColor2; - if (slot.darkColor == null) + if (!slot.darkColor) darkColor.set(0, 0, 0, 1.0); else { if (premultipliedAlpha) { @@ -167,7 +167,7 @@ module spine.webgl { clipper.clipTriangles(renderable.vertices, renderable.numFloats, triangles, triangles.length, uvs, finalColor, darkColor, twoColorTint); let clippedVertices = new Float32Array(clipper.clippedVertices); let clippedTriangles = clipper.clippedTriangles; - if (this.vertexEffect != null) { + if (this.vertexEffect) { let vertexEffect = this.vertexEffect; let verts = clippedVertices; if (!twoColorTint) { @@ -215,7 +215,7 @@ module spine.webgl { batcher.draw(texture, clippedVertices, clippedTriangles); } else { let verts = renderable.vertices; - if (this.vertexEffect != null) { + if (this.vertexEffect) { let vertexEffect = this.vertexEffect; if (!twoColorTint) { for (let v = 0, u = 0, n = renderable.numFloats; v < n; v += vertexSize, u += 2) {