AnimationItem player refactored
diff --git a/player/js/animation/AnimationItem.js b/player/js/animation/AnimationItem.js
index 27110da..2420a14 100644
--- a/player/js/animation/AnimationItem.js
+++ b/player/js/animation/AnimationItem.js
@@ -25,7 +25,6 @@
this.segmentPos = 0;
this.subframeEnabled = subframeEnabled;
this.segments = [];
- this.pendingSegment = false;
this._idle = true;
this.projectInterface = ProjectInterface();
};
@@ -315,7 +314,9 @@
if(this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted){
this.currentFrame = this.timeCompleted;
}
+ //console.log(this.currentFrame)
this.trigger('enterFrame');
+ // console.log('gotoFrame: ', this.currentFrame )
this.renderFrame();
};
@@ -346,10 +347,8 @@
}
if(this.isPaused === false){
this.isPaused = true;
- if(!this.pendingSegment){
- this._idle = true;
- this.trigger('_idle');
- }
+ this._idle = true;
+ this.trigger('_idle');
}
};
@@ -369,9 +368,8 @@
return;
}
this.pause();
- this.currentFrame = this.currentRawFrame = 0;
this.playCount = 0;
- this.gotoFrame();
+ this.setCurrentRawFrameValue(0);
};
AnimationItem.prototype.goToAndStop = function (value, isFrame, name) {
@@ -392,32 +390,42 @@
};
AnimationItem.prototype.advanceTime = function (value) {
- if(this.pendingSegment){
- this.pendingSegment = false;
- this.adjustSegment(this.segments.shift());
- if(this.isPaused){
- this.play();
- }
- return;
- }
if (this.isPaused === true || this.isLoaded === false) {
return;
}
- this.setCurrentRawFrameValue(this.currentRawFrame + value * this.frameModifier);
-};
-
-AnimationItem.prototype.updateAnimation = function (perc) {
- this.setCurrentRawFrameValue(this.totalFrames * perc);
-};
-
-AnimationItem.prototype.moveFrame = function (value, name) {
- if(name && this.name != name){
- return;
+ var nextValue = this.currentRawFrame + value * this.frameModifier;
+ var _isComplete = false;
+ if (nextValue >= this.totalFrames) {
+ if(!this.checkSegments(nextValue % this.totalFrames)) {
+ if (this.loop && !(++this.playCount === this.loop)) {
+ this.setCurrentRawFrameValue(nextValue % this.totalFrames);
+ this.trigger('loopComplete');
+ } else {
+ _isComplete = true;
+ nextValue = this.totalFrames;
+ }
+ }
+ } else if(nextValue < 0) {
+ if(!this.checkSegments(nextValue % this.totalFrames)) {
+ if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {
+ this.setCurrentRawFrameValue(this.totalFrames + (nextValue % this.totalFrames));
+ this.trigger('loopComplete');
+ } else {
+ _isComplete = true;
+ nextValue = 0;
+ }
+ }
+ } else {
+ this.setCurrentRawFrameValue(nextValue);
}
- this.setCurrentRawFrameValue(this.currentRawFrame+value);
+ if (_isComplete) {
+ this.setCurrentRawFrameValue(nextValue);
+ this.pause();
+ this.trigger('complete');
+ }
};
-AnimationItem.prototype.adjustSegment = function(arr){
+AnimationItem.prototype.adjustSegment = function(arr, offset){
this.playCount = 0;
if(arr[1] < arr[0]){
if(this.frameModifier > 0){
@@ -429,7 +437,7 @@
}
this.totalFrames = arr[0] - arr[1];
this.firstFrame = arr[1];
- this.setCurrentRawFrameValue(this.totalFrames - 0.001);
+ this.setCurrentRawFrameValue(this.totalFrames - 0.001 - offset);
} else if(arr[1] > arr[0]){
if(this.frameModifier < 0){
if(this.playSpeed < 0){
@@ -440,7 +448,7 @@
}
this.totalFrames = arr[1] - arr[0];
this.firstFrame = arr[0];
- this.setCurrentRawFrameValue(0.001);
+ this.setCurrentRawFrameValue(0.001 + offset);
}
this.trigger('segmentStart');
};
@@ -471,7 +479,7 @@
this.segments.push(arr);
}
if(forceFlag){
- this.adjustSegment(this.segments.shift());
+ this.checkSegments(0);
}
if(this.isPaused){
this.play();
@@ -483,13 +491,16 @@
this.segments.push([this.animationData.ip,this.animationData.op]);
//this.segments.push([this.animationData.ip*this.frameRate,Math.floor(this.animationData.op - this.animationData.ip+this.animationData.ip*this.frameRate)]);
if(forceFlag){
- this.adjustSegment(this.segments.shift());
+ this.checkSegments(0);
}
};
-AnimationItem.prototype.checkSegments = function(){
- if(this.segments.length){
- this.pendingSegment = true;
+AnimationItem.prototype.checkSegments = function(offset){
+ if(this.segments.length) {
+ //console.log(this.currentRawFrame % lastFrame)
+ this.adjustSegment(this.segments.shift(), offset);
+ return true;
}
+ return false;
};
AnimationItem.prototype.remove = function (name) {
@@ -512,43 +523,7 @@
AnimationItem.prototype.setCurrentRawFrameValue = function(value){
this.currentRawFrame = value;
- //console.log(this.totalFrames);
- var _completeFlag = false;
- if (this.currentRawFrame >= this.totalFrames) {
- this.checkSegments();
- if(this.loop === false){
- this.currentRawFrame = this.totalFrames;
- _completeFlag = true;
- }else{
- this.trigger('loopComplete');
- this.playCount += 1;
- if((this.loop !== true && this.playCount == this.loop) || this.pendingSegment){
- this.currentRawFrame = this.totalFrames;
- _completeFlag = true;
- } else {
- this.currentRawFrame = this.currentRawFrame % this.totalFrames;
- }
- }
- } else if (this.currentRawFrame < 0) {
- this.checkSegments();
- this.playCount -= 1;
- if(this.playCount < 0){
- this.playCount = 0;
- }
- if(this.loop === false || this.pendingSegment){
- this.currentRawFrame = 0;
- _completeFlag = true;
- }else{
- this.trigger('loopComplete');
- this.currentRawFrame = (this.totalFrames + this.currentRawFrame) % this.totalFrames;
- }
- }
-
this.gotoFrame();
- if(_completeFlag) {
- this.pause();
- this.trigger('complete');
- }
};
AnimationItem.prototype.setSpeed = function (val) {