| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Schedule::Easing::Function; |
|
2
|
|
|
|
|
|
|
|
|
3
|
6
|
|
|
6
|
|
6366
|
use strict; |
|
|
6
|
|
|
|
|
16
|
|
|
|
6
|
|
|
|
|
215
|
|
|
4
|
6
|
|
|
6
|
|
31
|
use warnings; |
|
|
6
|
|
|
|
|
9
|
|
|
|
6
|
|
|
|
|
348
|
|
|
5
|
6
|
|
|
6
|
|
34
|
use Carp qw/carp/; |
|
|
6
|
|
|
|
|
11
|
|
|
|
6
|
|
|
|
|
5449
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
our $VERSION='0.1.4'; |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
my %shapes=( |
|
10
|
|
|
|
|
|
|
linear=>\&linearShape, |
|
11
|
|
|
|
|
|
|
power =>\&powerShape, |
|
12
|
|
|
|
|
|
|
step =>\&stepShape, |
|
13
|
|
|
|
|
|
|
); |
|
14
|
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
my %unshapes=( |
|
16
|
|
|
|
|
|
|
linear=>\&linearInverse, |
|
17
|
|
|
|
|
|
|
power =>\&powerInverse, |
|
18
|
|
|
|
|
|
|
step =>\&stepInverse, |
|
19
|
|
|
|
|
|
|
); |
|
20
|
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
sub shape { |
|
22
|
59
|
|
|
59
|
0
|
427832
|
my ($shape)=@_; |
|
23
|
59
|
50
|
|
|
|
252
|
if(my $f=$shapes{$shape}) { return $f } |
|
|
59
|
|
|
|
|
256
|
|
|
24
|
0
|
|
|
|
|
0
|
carp("Shape not supported: $shape"); |
|
25
|
0
|
|
|
|
|
0
|
return \&linearShape; |
|
26
|
|
|
|
|
|
|
} |
|
27
|
|
|
|
|
|
|
|
|
28
|
|
|
|
|
|
|
sub inverse { |
|
29
|
59
|
|
|
59
|
0
|
170
|
my ($shape)=@_; |
|
30
|
59
|
50
|
|
|
|
180
|
if(my $f=$unshapes{$shape}) { return $f } |
|
|
59
|
|
|
|
|
199
|
|
|
31
|
0
|
|
|
|
|
0
|
carp("Inverse not supported: $shape"); |
|
32
|
0
|
|
|
|
|
0
|
return \&linearInverse; |
|
33
|
|
|
|
|
|
|
} |
|
34
|
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
sub linearShape { |
|
36
|
201521
|
|
|
201521
|
0
|
399321
|
my ($ts,$tsA,$tsB,$begin,$final)=@_; |
|
37
|
201521
|
100
|
|
|
|
424437
|
if($ts<=$tsA) { return $begin } |
|
|
64183
|
|
|
|
|
139740
|
|
|
38
|
137338
|
100
|
|
|
|
260867
|
if($ts>=$tsB) { return $final } |
|
|
32091
|
|
|
|
|
72058
|
|
|
39
|
105247
|
|
|
|
|
296407
|
return ($ts-$tsA)*($final-$begin)/($tsB-$tsA)+$begin; |
|
40
|
|
|
|
|
|
|
} |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
sub linearInverse { |
|
43
|
8451
|
|
|
8451
|
0
|
18352
|
my ($y,$tsA,$tsB,$ymin,$ymax)=@_; |
|
44
|
8451
|
100
|
100
|
|
|
53771
|
if (($ymax>$ymin)&&(($y<$ymin)||($y>$ymax))) { return } |
|
|
2
|
100
|
100
|
|
|
12
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
45
|
2
|
|
|
|
|
10
|
elsif(($ymax<$ymin)&&(($y>$ymin)||($y<$ymax))) { return } |
|
46
|
8447
|
100
|
|
|
|
16417
|
if($ymax>$ymin) { return linearShape($y,$ymin,$ymax,$tsA,$tsB) } |
|
|
4442
|
|
|
|
|
10821
|
|
|
47
|
4005
|
|
|
|
|
9250
|
else { return linearShape($ymax+$ymin-$y,$ymax,$ymin,$tsA,$tsB) } |
|
48
|
|
|
|
|
|
|
} |
|
49
|
|
|
|
|
|
|
|
|
50
|
|
|
|
|
|
|
sub powerShape { |
|
51
|
18
|
|
|
18
|
0
|
48
|
my ($ts,$tsA,$tsB,$begin,$final,$power)=@_; |
|
52
|
18
|
100
|
|
|
|
62
|
if($ts<=$tsA) { return $begin } |
|
|
6
|
|
|
|
|
21
|
|
|
53
|
12
|
100
|
|
|
|
25
|
if($ts>=$tsB) { return $final } |
|
|
6
|
|
|
|
|
20
|
|
|
54
|
6
|
|
|
|
|
74
|
return (($ts-$tsA)/($tsB-$tsA))**$power*($final-$begin)+$begin; |
|
55
|
|
|
|
|
|
|
} |
|
56
|
|
|
|
|
|
|
|
|
57
|
|
|
|
|
|
|
sub powerInverse { |
|
58
|
10
|
|
|
10
|
0
|
30
|
my ($y,$tsA,$tsB,$ymin,$ymax,$power)=@_; |
|
59
|
10
|
100
|
100
|
|
|
65
|
if (($ymax>$ymin)&&(($y<$ymin)||($y>$ymax))) { return } |
|
|
2
|
100
|
100
|
|
|
8
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
60
|
2
|
|
|
|
|
8
|
elsif(($ymax<$ymin)&&(($y>$ymin)||($y<$ymax))) { return } |
|
61
|
6
|
100
|
|
|
|
11
|
if($ymin<$ymax) { return powerShape($y,$ymin,$ymax,$tsA,$tsB,1/$power) } |
|
|
3
|
|
|
|
|
9
|
|
|
62
|
3
|
|
|
|
|
10
|
else { return powerShape($ymax+$ymin-$y,$ymax,$ymin,$tsA,$tsB,1/$power) } |
|
63
|
|
|
|
|
|
|
} |
|
64
|
|
|
|
|
|
|
|
|
65
|
|
|
|
|
|
|
sub stepShape { |
|
66
|
66
|
|
|
66
|
0
|
147
|
my ($ts,$tsA,$tsB,$begin,$final,$steps)=@_; |
|
67
|
66
|
100
|
|
|
|
149
|
if($ts<=$tsA) { return $begin } |
|
|
9
|
|
|
|
|
67
|
|
|
68
|
57
|
100
|
|
|
|
102
|
if($ts>=$tsB) { return $final } |
|
|
9
|
|
|
|
|
47
|
|
|
69
|
48
|
|
|
|
|
305
|
return int(($ts-$tsA)/($tsB-$tsA)*$steps)/$steps*($final-$begin)+$begin; |
|
70
|
|
|
|
|
|
|
} |
|
71
|
|
|
|
|
|
|
|
|
72
|
|
|
|
|
|
|
sub stepInverse { |
|
73
|
36
|
|
|
36
|
0
|
102
|
my ($y,$tsA,$tsB,$ymin,$ymax,$steps)=@_; |
|
74
|
36
|
100
|
100
|
|
|
262
|
if (($ymax>$ymin)&&(($y<$ymin)||($y>$ymax))) { return } |
|
|
4
|
100
|
100
|
|
|
23
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
66
|
|
|
|
|
|
75
|
2
|
|
|
|
|
13
|
elsif(($ymax<$ymin)&&(($y>$ymin)||($y<$ymax))) { return } |
|
76
|
30
|
100
|
|
|
|
57
|
if($ymin<$ymax) { return stepShape($y,$ymin,$ymax,$tsA,$tsB,$steps) } |
|
|
18
|
|
|
|
|
50
|
|
|
77
|
12
|
|
|
|
|
31
|
else { return stepShape($ymax+$ymin-$y,$ymax,$ymin,$tsA,$tsB,$steps) } |
|
78
|
|
|
|
|
|
|
} |
|
79
|
|
|
|
|
|
|
|
|
80
|
|
|
|
|
|
|
1; |