Skip to content

Commit 3205942

Browse files
committed
Fixed hold / delay / repeat issues.
1 parent 1a1e358 commit 3205942

3 files changed

Lines changed: 63 additions & 20 deletions

File tree

v3/src/checksum.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
var CHECKSUM = {
2-
build: '9f9dbde0-3b5a-11e7-8b24-4961194ce2cd'
2+
build: '5ba7bc90-3b63-11e7-9031-4dab81ef32d2'
33
};
44
module.exports = CHECKSUM;

v3/src/tween/ReservedProps.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
// RESERVED properties that a Tween config object uses
22

33
module.exports = [
4+
'completeDelay',
45
'delay',
56
'duration',
67
'ease',
7-
'elasticity',
8+
'hold',
89
'loop',
10+
'loopDelay',
911
'offset',
10-
'onCompleteDelay',
1112
'paused',
1213
'props',
1314
'repeat',
1415
'repeatDelay',
16+
'startAt',
1517
'targets',
1618
'useFrames',
1719
'yoyo'

v3/src/tween/components/UpdateTweenData.js

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
11
var 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
5377
var 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

Comments
 (0)