Skip to content

Commit b0e6d88

Browse files
committed
Removed onRefresh and swapped for the more concise and powerful getStart and getEnd property callbacks
1 parent b7520ab commit b0e6d88

7 files changed

Lines changed: 101 additions & 78 deletions

File tree

v3/src/tween/builder/GetValueOp.js

Lines changed: 82 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,29 @@
1-
var GetValueOp = function (key, value)
1+
function hasGetStart (def)
22
{
3-
var valueCallback;
4-
var t = typeof(value);
3+
return (!!def.getStart && typeof def.getStart === 'function');
4+
}
5+
6+
function hasGetEnd (def)
7+
{
8+
return (!!def.getEnd && typeof def.getEnd === 'function');
9+
}
10+
11+
function hasGetters (def)
12+
{
13+
return hasGetStart(def) || hasGetEnd(def);
14+
}
15+
16+
var GetValueOp = function (key, propertyValue)
17+
{
18+
var callbacks;
19+
20+
// The returned value sets what the property will be at the END of the Tween (usually called at the start of the Tween)
21+
var getEnd = function (target, key, value) { return value; };
22+
23+
// The returned value sets what the property will be at the START of the Tween (usually called at the end of the Tween)
24+
var getStart = function (target, key, value) { return value; };
25+
26+
var t = typeof(propertyValue);
527

628
if (t === 'number')
729
{
@@ -10,9 +32,9 @@ var GetValueOp = function (key, value)
1032
// y: 300
1133
// }
1234

13-
valueCallback = function ()
35+
getEnd = function ()
1436
{
15-
return value;
37+
return propertyValue;
1638
};
1739
}
1840
else if (t === 'string')
@@ -24,69 +46,105 @@ var GetValueOp = function (key, value)
2446
// w: '/=2'
2547
// }
2648

27-
var op = value[0];
28-
var num = parseFloat(value.substr(2));
49+
var op = propertyValue[0];
50+
var num = parseFloat(propertyValue.substr(2));
2951

3052
switch (op)
3153
{
3254
case '+':
33-
valueCallback = function (i)
55+
getEnd = function (target, key, value)
3456
{
35-
return i + num;
57+
return value + num;
3658
};
3759
break;
3860

3961
case '-':
40-
valueCallback = function (i)
62+
getEnd = function (target, key, value)
4163
{
42-
return i - num;
64+
return value - num;
4365
};
4466
break;
4567

4668
case '*':
47-
valueCallback = function (i)
69+
getEnd = function (target, key, value)
4870
{
49-
return i * num;
71+
return value * num;
5072
};
5173
break;
5274

5375
case '/':
54-
valueCallback = function (i)
76+
getEnd = function (target, key, value)
5577
{
56-
return i / num;
78+
return value / num;
5779
};
5880
break;
5981

6082
default:
61-
valueCallback = function ()
83+
getEnd = function ()
6284
{
63-
return parseFloat(value);
85+
return parseFloat(propertyValue);
6486
};
6587
}
6688
}
6789
else if (t === 'function')
6890
{
91+
// The same as setting just the getEnd function and no getStart
92+
6993
// props: {
70-
// x: function (i, target, key) { return i + 50); },
94+
// x: function (target, key, value) { return value + 50); },
7195
// }
7296

73-
valueCallback = function (i, target, key)
97+
getEnd = propertyValue;
98+
}
99+
else if (t === 'object' && hasGetters(propertyValue))
100+
{
101+
/*
102+
x: {
103+
// Called at the start of the Tween. The returned value sets what the property will be at the END of the Tween.
104+
getEnd: function (target, key, value)
105+
{
106+
return value;
107+
},
108+
109+
// Called at the end of the Tween. The returned value sets what the property will be at the START of the Tween.
110+
getStart: function (target, key, value)
111+
{
112+
return value;
113+
}
114+
}
115+
*/
116+
117+
if (hasGetEnd(propertyValue))
74118
{
75-
return value(i, target, key);
76-
};
119+
getEnd = propertyValue.getEnd;
120+
}
121+
122+
if (hasGetStart(propertyValue))
123+
{
124+
getStart = propertyValue.getStart;
125+
}
77126
}
78-
else if (value.hasOwnProperty('value'))
127+
else if (propertyValue.hasOwnProperty('value'))
79128
{
80129
// Value may still be a string, function or a number
81130
// props: {
82131
// x: { value: 400, ... },
83132
// y: { value: 300, ... }
84133
// }
85134

86-
valueCallback = GetValueOp(key, value.value);
135+
callbacks = GetValueOp(key, propertyValue.value);
136+
}
137+
138+
// If callback not set by the else if block above then set it here and return it
139+
if (!callbacks)
140+
{
141+
callbacks = {
142+
getEnd: getEnd,
143+
getStart: getStart
144+
};
87145
}
88146

89-
return valueCallback;
147+
return callbacks;
90148
};
91149

92150
module.exports = GetValueOp;

v3/src/tween/builder/TweenBuilder.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,13 @@ var TweenBuilder = function (parent, config, defaults)
4646
// Create 1 TweenData per target, per property
4747
for (var t = 0; t < targets.length; t++)
4848
{
49+
var ops = GetValueOp(key, value);
50+
4951
var tweenData = TweenData(
5052
targets[t],
5153
key,
52-
GetValueOp(key, value),
54+
ops.getEnd,
55+
ops.getStart,
5356
GetEaseFunction(GetValue(value, 'ease', ease), easeParams),
5457
GetNewValue(value, 'delay', delay),
5558
GetNewValue(value, 'duration', duration),

v3/src/tween/tween/ReservedProps.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ module.exports = [
3636
'onLoop',
3737
'onLoopParams',
3838
'onLoopScope',
39-
'onRefresh',
40-
'onRefreshParams',
41-
'onRefreshScope',
4239
'onRepeat',
4340
'onRepeatParams',
4441
'onRepeatScope',

v3/src/tween/tween/Tween.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,6 @@ var Tween = new Class({
8383
this.callbacks = {
8484
onComplete: null,
8585
onLoop: null,
86-
onRefresh: null,
8786
onRepeat: null,
8887
onStart: null,
8988
onUpdate: null,
@@ -132,7 +131,6 @@ var Tween = new Class({
132131
Tween.TYPES = [
133132
'onComplete',
134133
'onLoop',
135-
'onRefresh',
136134
'onRepeat',
137135
'onStart',
138136
'onUpdate',

v3/src/tween/tween/TweenData.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
var TweenData = function (target, key, value, ease, delay, duration, yoyo, hold, repeat, repeatDelay, flipX, flipY)
1+
var TweenData = function (target, key, getEnd, getStart, ease, delay, duration, yoyo, hold, repeat, repeatDelay, flipX, flipY)
22
{
33
return {
44

@@ -8,8 +8,11 @@ var TweenData = function (target, key, value, ease, delay, duration, yoyo, hold,
88
// The property of the target to tween
99
key: key,
1010

11-
// A function to call when starting the tween, populates the 'start' and 'end' values
12-
value: value,
11+
// The returned value sets what the property will be at the END of the Tween.
12+
getEndValue: getEnd,
13+
14+
// The returned value sets what the property will be at the START of the Tween.
15+
getStartValue: getStart,
1316

1417
// The ease function this tween uses.
1518
ease: ease,

v3/src/tween/tween/components/ResetTweenData.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,12 @@ var ResetTweenData = function (resetFromLoop)
1515

1616
if (resetFromLoop)
1717
{
18-
var onRefresh = this.callbacks.onRefresh;
18+
tweenData.start = tweenData.getStartValue(tweenData.target, tweenData.key, tweenData.start);
1919

20-
if (onRefresh)
21-
{
22-
tweenData.start = onRefresh.func.call(onRefresh.scope, tweenData.target, tweenData.key, tweenData.start, true);
23-
}
20+
tweenData.end = tweenData.getEndValue(tweenData.target, tweenData.key, tweenData.end);
2421

2522
tweenData.current = tweenData.start;
2623

27-
tweenData.end = tweenData.value(tweenData.start, tweenData.target, tweenData.key);
28-
2924
tweenData.state = TWEEN_CONST.PLAYING_FORWARD;
3025
}
3126
else if (tweenData.delay > 0)

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

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,7 @@ var SetStateFromEnd = function (tween, tweenData)
3232
onYoyo.func.apply(onYoyo.scope, onYoyo.params);
3333
}
3434

35-
// Do we update the start value before returning to it?
36-
var onRefresh = tween.callbacks.onRefresh;
37-
38-
if (onRefresh)
39-
{
40-
tweenData.start = onRefresh.func.call(onRefresh.scope, tweenData.target, tweenData.key, tweenData.start, false);
41-
}
35+
tweenData.start = tweenData.getStartValue(tweenData.target, tweenData.key, tweenData.start);
4236

4337
return TWEEN_CONST.PLAYING_BACKWARD;
4438
}
@@ -72,16 +66,9 @@ var SetStateFromEnd = function (tween, tweenData)
7266
onRepeat.func.apply(onRepeat.scope, onRepeat.params);
7367
}
7468

75-
// Do we update the start value before returning to it?
76-
var onRefresh = tween.callbacks.onRefresh;
77-
78-
if (onRefresh)
79-
{
80-
tweenData.start = onRefresh.func.call(onRefresh.scope, tweenData.target, tweenData.key, tweenData.start, false);
81-
}
69+
tweenData.start = tweenData.getStartValue(tweenData.target, tweenData.key, tweenData.start);
8270

83-
// Reset the destination value, in case it's dynamic
84-
tweenData.end = tweenData.value(tweenData.start, tweenData.target, tweenData.key);
71+
tweenData.end = tweenData.getEndValue(tweenData.target, tweenData.key, tweenData.end);
8572

8673
// Delay?
8774
if (tweenData.repeatDelay > 0)
@@ -133,16 +120,7 @@ var SetStateFromStart = function (tween, tweenData)
133120
onRepeat.func.apply(onRepeat.scope, onRepeat.params);
134121
}
135122

136-
// Do we want to refresh the start value now we're sitting on it?
137-
var onRefresh = tween.callbacks.onRefresh;
138-
139-
if (onRefresh)
140-
{
141-
tweenData.start = onRefresh.func.call(onRefresh.scope, tweenData.target, tweenData.key, tweenData.start, true);
142-
}
143-
144-
// Reset the destination value, in case it's dynamic
145-
tweenData.end = tweenData.value(tweenData.start, tweenData.target, tweenData.key);
123+
tweenData.end = tweenData.getEndValue(tweenData.target, tweenData.key, tweenData.end);
146124

147125
// Delay?
148126
if (tweenData.repeatDelay > 0)
@@ -274,20 +252,11 @@ var UpdateTweenData = function (tween, tweenData, delta)
274252

275253
case TWEEN_CONST.PENDING_RENDER:
276254

277-
tweenData.start = tweenData.target[tweenData.key];
278-
279-
var onRefresh = tween.callbacks.onRefresh;
280-
281-
if (onRefresh)
282-
{
283-
tweenData.start = onRefresh.func.call(onRefresh.scope, tweenData.target, tweenData.key, tweenData.start, true);
284-
}
255+
tweenData.start = tweenData.getStartValue(tweenData.target, tweenData.key, tweenData.target[tweenData.key]);
285256

286-
tweenData.current = tweenData.start;
257+
tweenData.end = tweenData.getEndValue(tweenData.target, tweenData.key, tweenData.start);
287258

288-
tweenData.end = tweenData.value(tweenData.start, tweenData.target, tweenData.key);
289-
290-
tweenData.target[tweenData.key] = tweenData.current;
259+
tweenData.target[tweenData.key] = tweenData.start;
291260

292261
tweenData.state = TWEEN_CONST.PLAYING_FORWARD;
293262

0 commit comments

Comments
 (0)