The BIG COMMIT(tm)
[supertux.git] / src / object / growup.cpp
1 #include <config.h>
2
3 #include <math.h>
4 #include "growup.h"
5 #include "defines.h"
6 #include "resources.h"
7 #include "camera.h"
8 #include "sector.h"
9 #include "player.h"
10 #include "app/globals.h"
11 #include "special/sprite_manager.h"
12
13 GrowUp::GrowUp(const Vector& pos)
14 {
15   bbox.set_pos(pos);
16   bbox.set_size(32, 32);
17   
18   sprite = sprite_manager->create("egg");
19   physic.enable_gravity(true);
20   physic.set_velocity_x(100);
21 }
22
23 GrowUp::~GrowUp()
24 {
25   delete sprite;
26 }
27
28 void
29 GrowUp::action(float elapsed_time)
30 {
31   movement = physic.get_movement(elapsed_time);
32 }
33
34 HitResponse
35 GrowUp::collision(GameObject& other, const CollisionHit& hit)
36 {
37   if(other.get_flags() & FLAG_SOLID) {
38     if(fabsf(hit.normal.y) > .5) { // roof
39       physic.set_velocity_y(0);
40     } else { // bumped left or right
41       physic.set_velocity_x(-physic.get_velocity_x());
42     }
43
44     return CONTINUE;
45   }
46   
47   Player* player = dynamic_cast<Player*>(&other);
48   if(player != 0) {
49     player->grow();
50     SoundManager::get()->play_sound(IDToSound(SND_EXCELLENT));
51     remove_me();
52     
53     return ABORT_MOVE;
54   }
55
56   return FORCE_MOVE;
57 }
58
59 void
60 GrowUp::draw(DrawingContext& context)
61 {
62   sprite->draw(context, get_pos(), LAYER_OBJECTS);
63 }
64