Skip to content

Commit 8d07bff

Browse files
committed
Tweens now carry over the elapsed difference for more accurate timing for repeats and yoyos
1 parent e61889f commit 8d07bff

1 file changed

Lines changed: 24 additions & 13 deletions

File tree

v3/src/tween/tween/components/UpdateTweenData.js

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
var 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

Comments
 (0)