diff --git a/spine-as3/spine-as3/src/spine/animation/AnimationState.as b/spine-as3/spine-as3/src/spine/animation/AnimationState.as index ca07ba295..3be009a56 100644 --- a/spine-as3/spine-as3/src/spine/animation/AnimationState.as +++ b/spine-as3/spine-as3/src/spine/animation/AnimationState.as @@ -195,15 +195,14 @@ package spine.animation { } else { var timelineMode : Vector. = current.timelineMode; - var firstFrame : Boolean = current.timelinesRotation.length == 0; + var firstFrame : Boolean = current.timelinesRotation.length != timelineCount << 1; if (firstFrame) current.timelinesRotation.length = timelineCount << 1; - var timelinesRotation : Vector. = current.timelinesRotation; for (ii = 0; ii < timelineCount; ii++) { timeline = timelines[ii]; var timelineBlend : MixBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; if (timeline is RotateTimeline) - applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame); else if (timeline is AttachmentTimeline) applyAttachmentTimeline(AttachmentTimeline(timeline), skeleton, applyTime, timelineBlend, true); else @@ -267,7 +266,7 @@ package spine.animation { var timelineMode : Vector. = from.timelineMode; var timelineHoldMix : Vector. = from.timelineHoldMix; - var firstFrame : Boolean = from.timelinesRotation.length == 0; + var firstFrame : Boolean = from.timelinesRotation.length != timelineCount << 1; if (firstFrame) from.timelinesRotation.length = timelineCount << 1; var timelinesRotation : Vector. = from.timelinesRotation; diff --git a/spine-c/spine-c/src/spine/AnimationState.c b/spine-c/spine-c/src/spine/AnimationState.c index 0349632f5..0a29f4037 100644 --- a/spine-c/spine-c/src/spine/AnimationState.c +++ b/spine-c/spine-c/src/spine/AnimationState.c @@ -404,7 +404,7 @@ int spAnimationState_apply (spAnimationState* self, spSkeleton* skeleton) { } else { spIntArray* timelineMode = current->timelineMode; - firstFrame = current->timelinesRotationCount == 0; + firstFrame = current->timelinesRotationCount != timelineCount << 1; if (firstFrame) _spAnimationState_resizeTimelinesRotation(current, timelineCount << 1); timelinesRotation = current->timelinesRotation; @@ -498,7 +498,7 @@ float _spAnimationState_applyMixingFrom (spAnimationState* self, spTrackEntry* t timelineMode = from->timelineMode; timelineHoldMix = from->timelineHoldMix; - firstFrame = from->timelinesRotationCount == 0; + firstFrame = from->timelinesRotationCount != timelineCount << 1; if (firstFrame) _spAnimationState_resizeTimelinesRotation(from, timelineCount << 1); timelinesRotation = from->timelinesRotation; diff --git a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp index fc6e3d8b7..932803415 100644 --- a/spine-cpp/spine-cpp/src/spine/AnimationState.cpp +++ b/spine-cpp/spine-cpp/src/spine/AnimationState.cpp @@ -447,7 +447,7 @@ bool AnimationState::apply(Skeleton &skeleton) { } else { Vector &timelineMode = current._timelineMode; - bool firstFrame = current._timelinesRotation.size() == 0; + bool firstFrame = current._timelinesRotation.size() != timelines.size() << 1; if (firstFrame) current._timelinesRotation.setSize(timelines.size() << 1, 0); Vector &timelinesRotation = current._timelinesRotation; @@ -801,7 +801,7 @@ float AnimationState::applyMixingFrom(TrackEntry *to, Skeleton &skeleton, MixBle Vector &timelineMode = from->_timelineMode; Vector &timelineHoldMix = from->_timelineHoldMix; - bool firstFrame = from->_timelinesRotation.size() == 0; + bool firstFrame = from->_timelinesRotation.size() != timelines.size() << 1; if (firstFrame) from->_timelinesRotation.setSize(timelines.size() << 1, 0); Vector &timelinesRotation = from->_timelinesRotation; @@ -815,17 +815,17 @@ float AnimationState::applyMixingFrom(TrackEntry *to, Skeleton &skeleton, MixBle switch (timelineMode[i]) { case Subsequent: if (!drawOrder && (timeline->getRTTI().isExactly(DrawOrderTimeline::rtti))) continue; - timelineBlend = blend; + timelineBlend = blend; alpha = alphaMix; break; case First: timelineBlend = MixBlend_Setup; alpha = alphaMix; break; - case HoldSubsequent: - timelineBlend = blend; - alpha = alphaHold; - break; + case HoldSubsequent: + timelineBlend = blend; + alpha = alphaHold; + break; case HoldFirst: timelineBlend = MixBlend_Setup; alpha = alphaHold; @@ -840,11 +840,11 @@ float AnimationState::applyMixingFrom(TrackEntry *to, Skeleton &skeleton, MixBle if ((timeline->getRTTI().isExactly(RotateTimeline::rtti))) { applyRotateTimeline((RotateTimeline*)timeline, skeleton, applyTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); } else if (timeline->getRTTI().isExactly(AttachmentTimeline::rtti)) { - applyAttachmentTimeline(static_cast(timeline), skeleton, applyTime, timelineBlend, attachments); - } else { - if (drawOrder && timeline->getRTTI().isExactly(DrawOrderTimeline::rtti) && timelineBlend == MixBlend_Setup) - direction = MixDirection_In; - timeline->apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction); + applyAttachmentTimeline(static_cast(timeline), skeleton, applyTime, timelineBlend, attachments); + } else { + if (drawOrder && timeline->getRTTI().isExactly(DrawOrderTimeline::rtti) && timelineBlend == MixBlend_Setup) + direction = MixDirection_In; + timeline->apply(skeleton, animationLast, applyTime, events, alpha, timelineBlend, direction); } } } diff --git a/spine-ts/core/src/AnimationState.ts b/spine-ts/core/src/AnimationState.ts index 72d252138..19a2a3248 100644 --- a/spine-ts/core/src/AnimationState.ts +++ b/spine-ts/core/src/AnimationState.ts @@ -197,15 +197,14 @@ module spine { } else { let timelineMode = current.timelineMode; - let firstFrame = current.timelinesRotation.length == 0; - if (firstFrame) Utils.setArraySize(current.timelinesRotation, timelineCount << 1, null); - let timelinesRotation = current.timelinesRotation; + let firstFrame = current.timelinesRotation.length != timelineCount << 1; + if (firstFrame) current.timelinesRotation.length = timelineCount << 1; for (let ii = 0; ii < timelineCount; ii++) { let timeline = timelines[ii]; let timelineBlend = timelineMode[ii] == SUBSEQUENT ? blend : MixBlend.setup; if (timeline instanceof RotateTimeline) { - this.applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, timelinesRotation, ii << 1, firstFrame); + this.applyRotateTimeline(timeline, skeleton, applyTime, mix, timelineBlend, current.timelinesRotation, ii << 1, firstFrame); } else if (timeline instanceof AttachmentTimeline) { this.applyAttachmentTimeline(timeline, skeleton, applyTime, blend, true); } else { @@ -271,9 +270,8 @@ module spine { let timelineMode = from.timelineMode; let timelineHoldMix = from.timelineHoldMix; - let firstFrame = from.timelinesRotation.length == 0; - if (firstFrame) Utils.setArraySize(from.timelinesRotation, timelineCount << 1, null); - let timelinesRotation = from.timelinesRotation; + let firstFrame = from.timelinesRotation.length != timelineCount << 1; + if (firstFrame) from.timelinesRotation.length = timelineCount << 1; from.totalAlpha = 0; for (let i = 0; i < timelineCount; i++) { @@ -308,7 +306,7 @@ module spine { from.totalAlpha += alpha; if (timeline instanceof RotateTimeline) - this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, timelinesRotation, i << 1, firstFrame); + this.applyRotateTimeline(timeline, skeleton, applyTime, alpha, timelineBlend, from.timelinesRotation, i << 1, firstFrame); else if (timeline instanceof AttachmentTimeline) this.applyAttachmentTimeline(timeline, skeleton, applyTime, timelineBlend, attachments); else { @@ -708,9 +706,10 @@ module spine { let to = entry.mixingTo; let timelines = entry.animation.timelines; let timelinesCount = entry.animation.timelines.length; - let timelineMode = Utils.setArraySize(entry.timelineMode, timelinesCount); - entry.timelineHoldMix.length = 0; - let timelineHoldMix = Utils.setArraySize(entry.timelineHoldMix, timelinesCount); + let timelineMode = entry.timelineMode; + timelineMode.length = timelinesCount; + let timelineHoldMix = entry.timelineHoldMix; + timelineHoldMix.length = 0; let propertyIDs = this.propertyIDs; if (to != null && to.holdPrevious) { diff --git a/spine-ts/core/src/Utils.ts b/spine-ts/core/src/Utils.ts index 946fbe4d7..118fadca3 100644 --- a/spine-ts/core/src/Utils.ts +++ b/spine-ts/core/src/Utils.ts @@ -314,7 +314,6 @@ module spine { // This function is used to fix WebKit 602 specific issue described at http://esotericsoftware.com/forum/iOS-10-disappearing-graphics-10109 static webkit602BugfixHelper (alpha: number, blend: MixBlend) { - } static contains (array: Array, element: T, identity = true) {