Calculate foremost layer correctly (previous implementation didn't work at all)
[supertux.git] / src / object / trampoline.cpp
index 9d4e12a..b8d20ad 100644 (file)
@@ -36,14 +36,14 @@ Trampoline::Trampoline(const Reader& lisp) :
   Rock(lisp, "images/objects/trampoline/trampoline.sprite"),
   portable(true)
 {
-  sound_manager->preload(TRAMPOLINE_SOUND);
+  SoundManager::current()->preload(TRAMPOLINE_SOUND);
 
   //Check if this trampoline is not portable
   if(lisp.get("portable", portable)) {
     if(!portable) {
       //we need another sprite
       sprite_name = "images/objects/trampoline/trampoline_fix.sprite";
-      sprite = sprite_manager->create(sprite_name);
+      sprite = SpriteManager::current()->create(sprite_name);
       sprite->set_action("normal");
     }
   }
@@ -53,10 +53,10 @@ Trampoline::Trampoline(const Vector& pos, bool port) :
   Rock(pos, "images/objects/trampoline/trampoline.sprite"),
   portable(port)
 {
-  sound_manager->preload(TRAMPOLINE_SOUND);
+  SoundManager::current()->preload(TRAMPOLINE_SOUND);
   if(!port) {
     sprite_name = "images/objects/trampoline/trampoline_fix.sprite";
-    sprite = sprite_manager->create(sprite_name);
+    sprite = SpriteManager::current()->create(sprite_name);
     sprite->set_action("normal");
   }
 }
@@ -83,13 +83,12 @@ Trampoline::collision(GameObject& other, const CollisionHit& hit)
       float vy = player->get_physic().get_velocity_y();
       //player is falling down on trampoline
       if(hit.top && vy >= 0) {
-        if(player->get_controller()->hold(Controller::JUMP)) {
-          vy = VY_MIN;
-        } else {
-          vy = VY_INITIAL;
-        }
+        if (!(player->get_status()->bonus == AIR_BONUS))
+          vy = player->get_controller()->hold(Controller::JUMP) ? VY_MIN : VY_INITIAL;
+        else
+          vy = player->get_controller()->hold(Controller::JUMP) ? VY_MIN - 300 : VY_INITIAL - 40;
         player->get_physic().set_velocity_y(vy);
-        sound_manager->play(TRAMPOLINE_SOUND);
+        SoundManager::current()->play(TRAMPOLINE_SOUND);
         sprite->set_action("swinging", 1);
         return FORCE_MOVE;
       }
@@ -102,7 +101,7 @@ Trampoline::collision(GameObject& other, const CollisionHit& hit)
       if(hit.top && vy >= 0) {
         vy = VY_INITIAL;
         walking_badguy->set_velocity_y(vy);
-        sound_manager->play(TRAMPOLINE_SOUND);
+        SoundManager::current()->play(TRAMPOLINE_SOUND);
         sprite->set_action("swinging", 1);
         return FORCE_MOVE;
       }