cc.game.once(cc.game.EVENT_ENGINE_INITED, function () {

	cc.js.mixin(sp.Skeleton.prototype, {
		update(dt) {
			// if (CC_EDITOR) return;

			if (CC_EDITOR) {
				cc.engine._animatingInEditMode = 1;
				cc.engine.animatingInEditMode = 1;
			}

			if (this.paused) return;

			dt *= this.timeScale * sp.timeScale;

			if (this.isAnimationCached()) {

				// Cache mode and has animation queue.
				if (this._isAniComplete) {
					if (this._animationQueue.length === 0 && !this._headAniInfo) {
						let frameCache = this._frameCache;
						if (frameCache && frameCache.isInvalid()) {
							frameCache.updateToFrame();
							let frames = frameCache.frames;
							this._curFrame = frames[frames.length - 1];
						}
						return;
					}
					if (!this._headAniInfo) {
						this._headAniInfo = this._animationQueue.shift();
					}
					this._accTime += dt;
					if (this._accTime > this._headAniInfo.delay) {
						let aniInfo = this._headAniInfo;
						this._headAniInfo = null;
						this.setAnimation(0, aniInfo.animationName, aniInfo.loop);
					}
					return;
				}

				this._updateCache(dt);
			} else {
				this._updateRealtime(dt);
			}
		}
	});
});