11var TWEEN_CONST = require ( '../const' ) ;
22
3- var SetStateFromEnd = function ( tween , tweenData )
3+ var SetStateFromEnd = function ( tween , tweenData , diff )
44{
55 if ( tweenData . yoyo )
66 {
77 // We've hit the end of a Playing Forward TweenData and we have a yoyo
88
9- tweenData . progress = 0 ;
10- tweenData . elapsed = 0 ;
9+ // Account for any extra time we got from the previous frame
10+ tweenData . elapsed = diff ;
11+ tweenData . progress = diff / tweenData . duration ;
1112
1213 if ( tweenData . flipX )
1314 {
@@ -43,8 +44,12 @@ var SetStateFromEnd = function (tween, tweenData)
4344
4445 tweenData . repeatCounter -- ;
4546
46- tweenData . elapsed = 0 ;
47- tweenData . progress = 0 ;
47+ // Account for any extra time we got from the previous frame
48+ tweenData . elapsed = diff ;
49+ tweenData . progress = diff / tweenData . duration ;
50+
51+ // tweenData.elapsed = 0;
52+ // tweenData.progress = 0;
4853
4954 if ( tweenData . flipX )
5055 {
@@ -73,7 +78,7 @@ var SetStateFromEnd = function (tween, tweenData)
7378 // Delay?
7479 if ( tweenData . repeatDelay > 0 )
7580 {
76- tweenData . elapsed = tweenData . repeatDelay ;
81+ tweenData . elapsed = tweenData . repeatDelay - diff ;
7782
7883 tweenData . current = tweenData . start ;
7984
@@ -91,14 +96,18 @@ var SetStateFromEnd = function (tween, tweenData)
9196} ;
9297
9398// Was PLAYING_BACKWARD and has hit the start
94- var SetStateFromStart = function ( tween , tweenData )
99+ var SetStateFromStart = function ( tween , tweenData , diff )
95100{
96101 if ( tweenData . repeatCounter > 0 )
97102 {
98103 tweenData . repeatCounter -- ;
99104
100- tweenData . elapsed = 0 ;
101- tweenData . progress = 0 ;
105+ // Account for any extra time we got from the previous frame
106+ tweenData . elapsed = diff ;
107+ tweenData . progress = diff / tweenData . duration ;
108+
109+ // tweenData.elapsed = 0;
110+ // tweenData.progress = 0;
102111
103112 if ( tweenData . flipX )
104113 {
@@ -125,7 +134,7 @@ var SetStateFromStart = function (tween, tweenData)
125134 // Delay?
126135 if ( tweenData . repeatDelay > 0 )
127136 {
128- tweenData . elapsed = tweenData . repeatDelay ;
137+ tweenData . elapsed = tweenData . repeatDelay - diff ;
129138
130139 tweenData . current = tweenData . start ;
131140
@@ -152,11 +161,13 @@ var UpdateTweenData = function (tween, tweenData, delta)
152161
153162 var elapsed = tweenData . elapsed ;
154163 var duration = tweenData . duration ;
164+ var diff = 0 ;
155165
156166 elapsed += delta ;
157167
158168 if ( elapsed > duration )
159169 {
170+ diff = elapsed - duration ;
160171 elapsed = duration ;
161172 }
162173
@@ -196,18 +207,18 @@ var UpdateTweenData = function (tween, tweenData, delta)
196207 {
197208 if ( tweenData . hold > 0 )
198209 {
199- tweenData . elapsed = tweenData . hold ;
210+ tweenData . elapsed = tweenData . hold - diff ;
200211
201212 tweenData . state = TWEEN_CONST . HOLD_DELAY ;
202213 }
203214 else
204215 {
205- tweenData . state = SetStateFromEnd ( tween , tweenData ) ;
216+ tweenData . state = SetStateFromEnd ( tween , tweenData , diff ) ;
206217 }
207218 }
208219 else
209220 {
210- tweenData . state = SetStateFromStart ( tween , tweenData ) ;
221+ tweenData . state = SetStateFromStart ( tween , tweenData , diff ) ;
211222 }
212223 }
213224
0 commit comments