11var TWEEN_CONST = require ( '../const' ) ;
22
3- // TweenData has reached the end. Now it needs to decide what action to take.
4- // It can either hold, yoyo, repeat or complete.
5- var ProcessRepeat = function ( tween , tweenData , skipHold )
3+ // Was PLAYING_FORWARD and has hit the end
4+ var SetStateFromEnd = function ( tween , tweenData )
65{
7- // Do we hold?
8- if ( tweenData . hold > 0 && skipHold === false )
9- {
10- tweenData . elapsed = tweenData . hold ;
11-
12- return TWEEN_CONST . HOLD ;
13- }
14- else if ( tweenData . yoyo && tweenData . state === TWEEN_CONST . PLAYING_FORWARD )
6+ if ( tweenData . yoyo )
157 {
168 // Playing forward and we have a yoyo
179
@@ -49,6 +41,38 @@ var ProcessRepeat = function (tween, tweenData, skipHold)
4941 return TWEEN_CONST . COMPLETE ;
5042} ;
5143
44+ // Was PLAYING_BACKWARD and has hit the start
45+ var SetStateFromStart = function ( tween , tweenData )
46+ {
47+ if ( tweenData . repeatCounter > 0 )
48+ {
49+ // No hold or yoyo, but we do have a repeat
50+ tweenData . repeatCounter -- ;
51+
52+ // Reset the elapsed
53+ tween . current = tween . start ;
54+
55+ tweenData . elapsed = 0 ;
56+ tweenData . progress = 0 ;
57+
58+ // Delay?
59+ if ( tweenData . repeatDelay > 0 )
60+ {
61+ tweenData . elapsed = tweenData . repeatDelay ;
62+
63+ tween . target [ tween . key ] = tween . current ;
64+
65+ return TWEEN_CONST . REPEAT_DELAY ;
66+ }
67+ else
68+ {
69+ return TWEEN_CONST . PLAYING_FORWARD ;
70+ }
71+ }
72+
73+ return TWEEN_CONST . COMPLETE ;
74+ } ;
75+
5276// Delta is either a value in ms, or 1 if Tween.useFrames is true
5377var UpdateTweenData = function ( tween , tweenData , timestep , delta )
5478{
@@ -67,16 +91,17 @@ var UpdateTweenData = function (tween, tweenData, timestep, delta)
6791 elapsed = duration ;
6892 }
6993
94+ var forward = ( tweenData . state === TWEEN_CONST . PLAYING_FORWARD ) ;
7095 var progress = elapsed / duration ;
7196 var v ;
7297
73- if ( tweenData . state === TWEEN_CONST . PLAYING_BACKWARD )
98+ if ( forward )
7499 {
75- v = tweenData . ease ( 1 - progress ) ;
100+ v = tweenData . ease ( progress ) ;
76101 }
77102 else
78103 {
79- v = tweenData . ease ( progress ) ;
104+ v = tweenData . ease ( 1 - progress ) ;
80105 }
81106
82107 tween . current = tween . start + ( ( tween . end - tween . start ) * v ) ;
@@ -88,7 +113,24 @@ var UpdateTweenData = function (tween, tweenData, timestep, delta)
88113
89114 if ( progress === 1 )
90115 {
91- tweenData . state = ProcessRepeat ( tween , tweenData , false ) ;
116+ if ( forward )
117+ {
118+ // Do we hold?
119+ if ( tweenData . hold > 0 )
120+ {
121+ tweenData . elapsed = tweenData . hold ;
122+
123+ tweenData . state = TWEEN_CONST . HOLD ;
124+ }
125+ else
126+ {
127+ tweenData . state = SetStateFromEnd ( tween , tweenData ) ;
128+ }
129+ }
130+ else
131+ {
132+ tweenData . state = SetStateFromStart ( tween , tweenData ) ;
133+ }
92134 }
93135
94136 break ;
@@ -125,8 +167,7 @@ var UpdateTweenData = function (tween, tweenData, timestep, delta)
125167
126168 if ( tweenData . elapsed <= 0 )
127169 {
128- tweenData . state = TWEEN_CONST . PLAYING_FORWARD ;
129- tweenData . state = ProcessRepeat ( tween , tweenData , true ) ;
170+ tweenData . state = SetStateFromEnd ( tween , tweenData ) ;
130171 }
131172
132173 break ;
0 commit comments