Skip to content

Commit 6e611e9

Browse files
committed
Tween Timelines are now operational with absolute and relative offset support.
1 parent 44c88a8 commit 6e611e9

19 files changed

Lines changed: 748 additions & 236 deletions

v3/src/tween/builder/GetBoolean.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
var GetBoolean = function (source, key, defaultValue)
2+
{
3+
if (!source)
4+
{
5+
return defaultValue;
6+
}
7+
else if (source.hasOwnProperty(key))
8+
{
9+
return source[key];
10+
}
11+
else
12+
{
13+
return defaultValue;
14+
}
15+
};
16+
17+
module.exports = GetBoolean;
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var GetNewValue = function (source, key, defaultValue)
2+
{
3+
var valueCallback;
4+
5+
if (source.hasOwnProperty(key))
6+
{
7+
var t = typeof(source[key]);
8+
9+
if (t === 'function')
10+
{
11+
valueCallback = function (index, totalTargets, target)
12+
{
13+
return source[key](index, totalTargets, target);
14+
};
15+
}
16+
else
17+
{
18+
valueCallback = function ()
19+
{
20+
return source[key];
21+
};
22+
}
23+
}
24+
else if (typeof defaultValue === 'function')
25+
{
26+
valueCallback = defaultValue;
27+
}
28+
else
29+
{
30+
valueCallback = function ()
31+
{
32+
return defaultValue;
33+
};
34+
}
35+
36+
return valueCallback;
37+
};
38+
39+
module.exports = GetNewValue;

v3/src/tween/builder/GetProps.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
var RESERVED = require('../tween/ReservedProps');
2+
3+
var GetProps = function (config)
4+
{
5+
var key;
6+
var keys = [];
7+
8+
// First see if we have a props object
9+
10+
if (config.hasOwnProperty('props'))
11+
{
12+
for (key in config.props)
13+
{
14+
// Skip any property that starts with an underscore
15+
if (key.substr(0, 1) !== '_')
16+
{
17+
keys.push({ key: key, value: config.props[key] });
18+
}
19+
}
20+
}
21+
else
22+
{
23+
for (key in config)
24+
{
25+
// Skip any property that is in the ReservedProps list or that starts with an underscore
26+
if (RESERVED.indexOf(key) === -1 && key.substr(0, 1) !== '_')
27+
{
28+
keys.push({ key: key, value: config[key] });
29+
}
30+
}
31+
}
32+
33+
return keys;
34+
};
35+
36+
module.exports = GetProps;

v3/src/tween/builder/GetTargets.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
var GetValue = require('../../utils/object/GetValue');
2+
3+
var GetTargets = function (config)
4+
{
5+
var targets = GetValue(config, 'targets', null);
6+
7+
if (targets === null)
8+
{
9+
return targets;
10+
}
11+
12+
if (typeof targets === 'function')
13+
{
14+
targets = targets.call();
15+
}
16+
17+
if (!Array.isArray(targets))
18+
{
19+
targets = [ targets ];
20+
}
21+
22+
return targets;
23+
};
24+
25+
module.exports = GetTargets;

v3/src/tween/builder/GetTweens.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
var GetValue = require('../../utils/object/GetValue');
2+
3+
var GetTweens = function (config)
4+
{
5+
var tweens = GetValue(config, 'tweens', null);
6+
7+
if (typeof tweens === 'function')
8+
{
9+
tweens = tweens.call();
10+
}
11+
12+
if (!Array.isArray(tweens))
13+
{
14+
tweens = [ tweens ];
15+
}
16+
17+
return tweens;
18+
};
19+
20+
module.exports = GetTweens;

v3/src/tween/builder/GetValueOp.js

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
var GetValueOp = function (key, value)
2+
{
3+
var valueCallback;
4+
var t = typeof(value);
5+
6+
if (t === 'number')
7+
{
8+
// props: {
9+
// x: 400,
10+
// y: 300
11+
// }
12+
13+
valueCallback = function ()
14+
{
15+
return value;
16+
};
17+
}
18+
else if (t === 'string')
19+
{
20+
// props: {
21+
// x: '+=400',
22+
// y: '-=300',
23+
// z: '*=2',
24+
// w: '/=2'
25+
// }
26+
27+
var op = value[0];
28+
var num = parseFloat(value.substr(2));
29+
30+
switch (op)
31+
{
32+
case '+':
33+
valueCallback = function (i)
34+
{
35+
return i + num;
36+
};
37+
break;
38+
39+
case '-':
40+
valueCallback = function (i)
41+
{
42+
return i - num;
43+
};
44+
break;
45+
46+
case '*':
47+
valueCallback = function (i)
48+
{
49+
return i * num;
50+
};
51+
break;
52+
53+
case '/':
54+
valueCallback = function (i)
55+
{
56+
return i / num;
57+
};
58+
break;
59+
60+
default:
61+
valueCallback = function ()
62+
{
63+
return parseFloat(value);
64+
};
65+
}
66+
}
67+
else if (t === 'function')
68+
{
69+
// props: {
70+
// x: function (startValue, target, index, totalTargets) { return startValue + (index * 50); },
71+
// }
72+
73+
valueCallback = function (startValue, target, index, total)
74+
{
75+
return value(startValue, target, index, total);
76+
};
77+
}
78+
else if (value.hasOwnProperty('value'))
79+
{
80+
// Value may still be a string, function or a number
81+
// props: {
82+
// x: { value: 400, ... },
83+
// y: { value: 300, ... }
84+
// }
85+
86+
valueCallback = GetValueOp(key, value.value);
87+
}
88+
89+
return valueCallback;
90+
};
91+
92+
module.exports = GetValueOp;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
var Clone = require('../../utils/object/Clone');
2+
var Defaults = require('../tween/Defaults');
3+
var GetBoolean = require('./GetBoolean');
4+
var GetEaseFunction = require('./GetEaseFunction');
5+
var GetNewValue = require('./GetNewValue');
6+
var GetTargets = require('./GetTargets');
7+
var GetTweens = require('./GetTweens');
8+
var GetValue = require('../../utils/object/GetValue');
9+
var Timeline = require('../timeline/Timeline');
10+
var TweenBuilder = require('./TweenBuilder');
11+
12+
var TimelineBuilder = function (manager, config)
13+
{
14+
var defaults = Clone(Defaults);
15+
16+
var tweens = GetTweens(config);
17+
18+
if (tweens.length === 0)
19+
{
20+
return null;
21+
}
22+
23+
defaults.targets = GetTargets(config);
24+
25+
defaults.delay = GetNewValue(config, 'delay', defaults.delay);
26+
defaults.duration = GetNewValue(config, 'duration', defaults.duration);
27+
defaults.easeParams = GetValue(config, 'easeParams', defaults.easeParams);
28+
defaults.ease = GetEaseFunction(GetValue(config, 'ease', defaults.ease), defaults.easeParams);
29+
defaults.hold = GetNewValue(config, 'hold', defaults.hold);
30+
defaults.repeat = GetNewValue(config, 'repeat', defaults.repeat);
31+
defaults.repeatDelay = GetNewValue(config, 'repeatDelay', defaults.repeatDelay);
32+
defaults.startAt = GetNewValue(config, 'startAt', defaults.startAt);
33+
defaults.yoyo = GetBoolean(config, 'yoyo', defaults.yoyo);
34+
defaults.flipX = GetBoolean(config, 'flipX', defaults.flipX);
35+
defaults.flipY = GetBoolean(config, 'flipY', defaults.flipY);
36+
37+
var timeline = new Timeline(manager);
38+
39+
// Create the Tweens
40+
for (var i = 0; i < tweens.length; i++)
41+
{
42+
timeline.queue(TweenBuilder(manager, tweens[i], defaults));
43+
}
44+
45+
return timeline;
46+
};
47+
48+
module.exports = TimelineBuilder;

0 commit comments

Comments
 (0)