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