]> mj.ucw.cz Git - anim.git/blob - a.pl
Goldbergovske variace.
[anim.git] / a.pl
1 #!/usr/bin/perl -W
2
3 use strict;
4 use warnings;
5
6 use Gtk2 -init;
7 use Cairo;
8
9 use AA;
10 use AA::Gfx;
11 use AA::UI;
12 use AA::Graph;
13 use AA::Net;
14 use AA::Anim;
15
16 my $ui = AA::UI->new('');
17
18 my $back = AA::Background->new('bg');
19
20 my @v;
21 for (my $i=0; $i<5; $i++) {
22         my $v = AA::NetV->new("v$i");
23         $v->MultiSet(
24                 'x' => 100 + 180*$i,
25                 'y0' => 600,
26                 'label' => ($i == 0) ? "Z" : ($i == 4) ? "S" : $i,
27                 'h' => ($i == 0) ? 5 : 0,
28         );
29         push @v, $v;
30 }
31
32 my @e;
33 for (my $i=0; $i<4; $i++) {
34         my $e = AA::NetE->new("e$i", $v[$i], $v[$i+1]);
35         $e->Set('c', 5);
36         $e->Set('f', 0);
37         push @e, $e;
38 }
39
40 for (my $i=1; $i<@v; $i++) {
41         my $ii = $i;    # need to keep a copy in the current closure
42         $v[$i]->Bind('xs', sub { $e[$ii-1]->Get('f') - (($ii == @v-1) ? 0 : $e[$ii]->Get('f')) });
43 }
44 $v[4]->{XS}->Set('color', [0,1,0]);
45
46 sub flow($$) {
47         my ($i,$df) = @_;
48         $e[$i]->Set('f', $e[$i]->Get('f') + $df);
49 }
50
51 sub up($) {
52         my ($i) = @_;
53         $v[$i]->Set('h', $v[$i]->Get('h') + 1);
54 }
55
56 my $scenario = [
57         sub { flow(0, 5); },
58         sub { up(1); },
59         sub { flow(1, 5); },
60         sub { up(2); },
61         sub { flow(2, 5); },
62         sub { up(3); },
63         sub { flow(3, 5); },
64 ];
65
66 if (1) {
67         for (my $i=0; $i<@v-1; $i++) {
68                 $e[$i]->Set('c', 5-$i);
69         }
70         $scenario = [
71                 sub { flow(0, 5); },
72                 sub { up(1); },
73                 sub { flow(1, 4); },
74                 sub { up(2); },
75                 sub { flow(2, 3); },
76                 sub { up(3); },
77                 sub { flow(3, 2); },
78                 sub { up(3); },
79                 sub { flow(2, -1); },
80                 sub { up(2); },
81                 sub { flow(1, -1); },
82                 sub { up(1); },
83                 sub { up(1); },
84                 sub { flow(1, 1); },
85                 sub { up(1); },
86                 sub { up(1); },
87                 sub { up(1); },
88                 sub { flow(0, -1); },
89                 sub { up(2); },
90                 sub { flow(2, 1); },
91                 sub { up(3); },
92                 sub { up(3); },
93                 sub { flow(2, -1); },
94                 sub { up(2); },
95                 sub { up(2); },
96                 sub { flow(2, 1); },
97                 sub { up(3); },
98                 sub { up(3); },
99                 sub { flow(2, -1); },
100                 sub { up(2); },
101                 sub { up(2); },
102                 sub { flow(2, 1); },
103                 sub { flow(1, -1); },
104                 sub { flow(0, -1); },
105                 sub { up(3); },
106                 sub { up(3); },
107                 sub { flow(2, -1); },
108                 sub { flow(1, -1); },
109                 sub { flow(0, -1); },
110         ];
111 }
112
113 $ui->RunScenario($scenario, 1);
114
115 exit 0;
116