Skip to content

Commit aa94ba4

Browse files
committed
Moved the gen functions into Init.
Added Tween.totalDuration and populated it from CalcDuration. Seek now uses totalDuration for better results, but still doesn't cover delays.
1 parent 945fd3d commit aa94ba4

6 files changed

Lines changed: 82 additions & 38 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: '8af8f8b0-403b-11e7-bb4d-2791a8206fb6'
2+
build: '35aaa140-4047-11e7-a72a-f5daee9806ea'
33
};
44
module.exports = CHECKSUM;

v3/src/tween/Tween.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ var Tween = function (manager, data)
3737

3838
this.paused = false;
3939

40+
this.totalDuration = 0;
41+
this.progress = 0;
42+
4043
this.callbacks = {
4144
onStart: { callback: null, scope: null, params: null },
4245
onUpdate: { callback: null, scope: null, params: null },
@@ -53,6 +56,7 @@ Tween.prototype.constructor = Tween;
5356
Tween.prototype = {
5457

5558
init: require('./components/Init'),
59+
calcDuration: require('./components/CalcDuration'),
5660
loadValues: require('./components/LoadValues'),
5761
nextState: require('./components/NextState'),
5862
play: require('./components/Play'),
Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,45 @@
11
var CalcDuration = function ()
22
{
3-
var total = 0;
3+
var max = 0;
44

5-
for (var key in this.data)
5+
var data = this.data;
6+
7+
// Duration is derived from:
8+
// TweenData.duration
9+
// TweenData.delay
10+
// TweenData.hold
11+
// x TweenData.repeat
12+
13+
for (var i = 0; i < this.totalData; i++)
614
{
7-
var prop = this.data[key];
15+
var tweenData = data[i];
16+
17+
var total = tweenData.delay;
818

9-
for (var i = 0; i < prop.list.length; i++)
19+
var single = tweenData.duration;
20+
21+
if (tweenData.yoyo)
1022
{
11-
// var tweenData = prop.list[i];
23+
single *= 2;
24+
}
25+
26+
single += tweenData.hold;
1227

13-
// Duration is derived from:
14-
// TweenData.duration
15-
// TweenData.delay
16-
// TweenData.hold
17-
// x TweenData.repeat
28+
var totalRepeats = (tweenData.repeat === -1) ? Number.MAX_SAFE_INTEGER : tweenData.repeat;
29+
30+
single += single * totalRepeats;
31+
32+
single += tweenData.repeatDelay * totalRepeats;
33+
34+
total += single;
35+
36+
if (total > max)
37+
{
38+
max = total;
1839
}
1940
}
2041

21-
return total;
42+
return max;
2243
};
2344

2445
module.exports = CalcDuration;

v3/src/tween/components/Init.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,26 @@ var TWEEN_CONST = require('../const');
33
// Return true if this Tween should be moved from the pending list to the active list
44
var Init = function ()
55
{
6+
var data = this.data;
7+
var totalTargets = this.totalTargets;
8+
9+
for (var i = 0; i < this.totalData; i++)
10+
{
11+
var tweenData = data[i];
12+
var target = tweenData.target;
13+
var gen = tweenData.gen;
14+
15+
tweenData.delay = gen.delay(i, totalTargets, target);
16+
tweenData.duration = gen.duration(i, totalTargets, target);
17+
tweenData.hold = gen.hold(i, totalTargets, target);
18+
tweenData.repeat = gen.repeat(i, totalTargets, target);
19+
tweenData.repeatDelay = gen.repeatDelay(i, totalTargets, target);
20+
}
21+
22+
this.totalDuration = this.calcDuration();
23+
24+
console.log('Tween totalDuration', this.totalDuration);
25+
626
if (this.paused)
727
{
828
this.state = TWEEN_CONST.PAUSED;

v3/src/tween/components/ResetTweenData.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@ var TWEEN_CONST = require('../const');
33
var ResetTweenData = function (resetFromLoop)
44
{
55
var data = this.data;
6-
var totalTargets = this.totalTargets;
6+
// var totalTargets = this.totalTargets;
77

88
for (var i = 0; i < this.totalData; i++)
99
{
1010
var tweenData = data[i];
11-
var target = tweenData.target;
12-
var gen = tweenData.gen;
13-
14-
tweenData.delay = gen.delay(i, totalTargets, target);
15-
tweenData.duration = gen.duration(i, totalTargets, target);
16-
tweenData.hold = gen.hold(i, totalTargets, target);
17-
tweenData.repeat = gen.repeat(i, totalTargets, target);
18-
tweenData.repeatDelay = gen.repeatDelay(i, totalTargets, target);
11+
// var target = tweenData.target;
12+
// var gen = tweenData.gen;
13+
14+
// tweenData.delay = gen.delay(i, totalTargets, target);
15+
// tweenData.duration = gen.duration(i, totalTargets, target);
16+
// tweenData.hold = gen.hold(i, totalTargets, target);
17+
// tweenData.repeat = gen.repeat(i, totalTargets, target);
18+
// tweenData.repeatDelay = gen.repeatDelay(i, totalTargets, target);
1919

2020
tweenData.progress = 0;
2121
tweenData.elapsed = 0;

v3/src/tween/components/Seek.js

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
1-
var TWEEN_CONST = require('../const');
1+
// var TWEEN_CONST = require('../const');
22

33
// For now progress = 0 to 1
4-
// Needs to be normalized with the total Tween duration, not the tweenData durations
54
var Seek = function (progress)
65
{
6+
var marker = this.totalDuration * progress;
7+
78
var data = this.data;
89

10+
// Now works on multi-property tweens with varying durations, but doesn't yet factor in delays
911
for (var i = 0; i < this.totalData; i++)
1012
{
1113
var tweenData = data[i];
1214

13-
tweenData.progress = progress;
14-
15-
tweenData.elapsed = tweenData.duration * progress;
16-
17-
// var forward = (tweenData.state === TWEEN_CONST.PLAYING_FORWARD);
18-
var v;
15+
if (marker >= tweenData.duration)
16+
{
17+
tweenData.progress = 1;
18+
tweenData.elapsed = tweenData.duration;
19+
}
20+
else
21+
{
22+
tweenData.progress = marker / tweenData.duration;
23+
tweenData.elapsed = marker;
24+
}
1925

20-
// if (forward)
21-
// {
22-
v = tweenData.ease(progress);
23-
// }
24-
// else
25-
// {
26-
// v = tweenData.ease(1 - progress);
27-
// }
26+
var v = tweenData.ease(tweenData.progress);
2827

2928
tweenData.current = tweenData.start + ((tweenData.end - tweenData.start) * v);
3029

31-
// console.log('Seek', tweenData.target[tweenData.key], 'to', tweenData.current);
30+
// console.log(tweenData.key, 'Seek', tweenData.target[tweenData.key], 'to', tweenData.current, 'pro', tweenData.progress, 'marker', marker, progress);
3231

3332
tweenData.target[tweenData.key] = tweenData.current;
3433
}

0 commit comments

Comments
 (0)