f418596ba221b3ec1ace7b60c092af9fd7b337ea
[supertux.git] / src / object / platform.cpp
1 #include <config.h>
2
3 #include "platform.h"
4 #include "video/drawing_context.h"
5 #include "resources.h"
6 #include "player.h"
7 #include "special/sprite_manager.h"
8 #include "lisp/lisp.h"
9 #include "lisp/writer.h"
10
11 Platform::Platform(const lisp::Lisp& reader)
12 {
13   sprite = sprite_manager->create("flying_platform");
14   movement = Vector(0, 1);
15   reader.get("x", bbox.p1.x);
16   reader.get("y", bbox.p1.y);
17   bbox.set_size(sprite->get_width(), sprite->get_height());
18
19   flags |= FLAG_SOLID;
20
21   state = 0;
22 }
23
24 Platform::~Platform()
25 {
26   delete sprite;
27 }
28
29 HitResponse
30 Platform::collision(GameObject& , const CollisionHit& )
31 {
32 #if 0
33   if(typeid(object) == typeid(Player)) {
34     Player* player = (Player*) &object;
35     //player->movement += movement;
36   }
37 #endif
38   return FORCE_MOVE;
39 }
40
41 void
42 Platform::action(float )
43 {
44   // just some test code...
45   if(state == 0) {
46     movement = Vector(0, 1);
47     if(bbox.p1.y > 250)
48       state = 1;
49   }
50   if(state == 1) {
51     movement = Vector(0, -1);
52     if(bbox.p1.y < 50)
53       state = 2;
54   }
55   if(state == 2) {
56     movement = Vector(1, 0);
57     if(bbox.p1.x > 800)
58       state = 3;
59   }
60   if(state == 3) {
61     movement = Vector(-1, 0);
62     if(bbox.p1.x < 400)
63       state = 4;
64   }
65   if(state == 4) {
66     movement = Vector(-1, 1);
67     if(bbox.p1.x < 0)
68       state = 0;
69   }
70 }
71
72 void
73 Platform::draw(DrawingContext& context)
74 {
75   sprite->draw(context, get_pos(), LAYER_OBJECTS);
76 }