Initial commit
[universe.git] / dummy.cc
1
2 ////////////////////////////////////////////////////////////////////////////////
3 // This program is free software; you can redistribute it and/or              //
4 // modify it under the terms of the GNU General Public License                //
5 // version 2 as published by the Free Software Foundation.                    //
6 //                                                                            //
7 // This program is distributed in the hope that it will be useful, but        //
8 // WITHOUT ANY WARRANTY; without even the implied warranty of                 //
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU          //
10 // General Public License for more details.                                   //
11 //                                                                            //
12 // Written and (C) by François Fleuret                                        //
13 // Contact <francois.fleuret@epfl.ch> for comments & bug reports              //
14 ////////////////////////////////////////////////////////////////////////////////
15
16 // $Id: dummy.cc,v 1.16 2006-07-21 08:28:27 fleuret Exp $
17
18 #include "task.h"
19 #include "universe.h"
20 #include "manipulator.h"
21
22 class Dummy : public Task {
23 public:
24
25   virtual char *name() { return "DUMMY"; }
26
27   virtual int nb_degrees() { return 1; }
28
29   virtual int width() { return 600; }
30
31   virtual int height() { return 700; }
32
33   virtual void init(Universe *universe, int degree) {
34     Polygon *p;
35     scalar_t width = 80, height = 80;
36     scalar_t deltax = 100, deltay = 100;
37
38     for(int k = 0; k < 4; k++) {
39       scalar_t x0 = k * deltax;
40       scalar_t y0 = 0;
41       p = new Polygon(1.0, 1.0, scalar_t(k)/scalar_t(4), 0.0, 0, 0, 4);
42       p->set_vertex(0, 0, 0);
43       p->set_vertex(1, width, 0);;
44       p->set_vertex(2, width, height);
45       p->set_vertex(3, 0, height);
46       p->set_position(x0 + deltax/2, y0 + deltay/2, 0);
47       p->set_speed(0, 0, 0);
48       universe->initialize(p);
49       universe->add_polygon(p);
50     }
51
52     for(int k = 0; k < 2; k++) {
53       scalar_t x0 = deltax + k * deltax * 2;
54       scalar_t y0 = deltay;
55       p = new Polygon(1.0, scalar_t(k)/scalar_t(2), 1.0, 0.0, 0, 0, 4);
56       p->set_vertex(0, 0, 0);
57       p->set_vertex(1, width + deltax, 0);;
58       p->set_vertex(2, width + deltax, height);
59       p->set_vertex(3, 0, height);
60       p->set_position(x0, y0 + deltay/2, 0);
61       p->set_speed(0, 0, 0);
62       universe->initialize(p);
63       universe->add_polygon(p);
64     }
65
66     scalar_t x0 = deltax;
67     scalar_t y0 = 2 * deltay;
68     p = new Polygon(1.0, 1.0, 1.0, 0.0, 0, 0, 4);
69     p->set_vertex(0, 0, 0);
70     p->set_vertex(1, width + 3 * deltax, 0);;
71     p->set_vertex(2, width + 3 * deltax, height);
72     p->set_vertex(3, 0, height);
73     p->set_position(x0 + deltax, y0 + deltay/2, 0);
74     p->set_speed(0, 0, 0);
75     universe->initialize(p);
76     universe->add_polygon(p);
77
78     p = new Polygon(1.0, 0.8, 0.2, 0.8, 0, 0, 8);
79     p->set_vertex(0,   0.0,   0.0);
80     p->set_vertex(1, 180.0,   0.0);
81     p->set_vertex(2, 180.0, 220.0);
82     p->set_vertex(3,   0.0, 220.0);
83     p->set_vertex(4,   0.0, 180.0);
84     p->set_vertex(5, 140.0, 180.0);
85     p->set_vertex(6, 140.0,  40.0);
86     p->set_vertex(7,   0.0,  40.0);
87     p->set_position(120, 420, 0);
88     p->set_speed(0, 0, 0);
89     universe->initialize(p);
90     universe->add_polygon(p);
91
92     int ne = 25;
93     p = new Polygon(1.0, 0.0, 0.25, 1.0, 0, 0, ne);
94     for(int e = 0; e < ne; e++) {
95       scalar_t alpha = 2 * M_PI * scalar_t(e) / scalar_t(ne);
96       p->set_vertex(e,  200 + 50 * cos(alpha), 200 + 70 * sin(alpha));
97     }
98     p->set_position(400, 400, 0);
99     p->set_speed(0, 0, 0);
100     universe->initialize(p);
101     universe->add_polygon(p);
102   }
103
104   virtual void update(scalar_t dt, Universe *universe, Manipulator *manipulator) { }
105
106   virtual scalar_t reward(Universe *universe, Manipulator *manipulator) { return 0.0; }
107
108   virtual void draw(SimpleWindow *window) { }
109
110 };
111
112 extern "C" Task *new_task() {
113   return new Dummy();
114 }