allow custom wrapper functions
[supertux.git] / src / object / player.cpp
index 1a2d6c1..961e7a3 100644 (file)
 #include <iostream>
 #include <cassert>
 
-#include "gettext.h"
-#include "sprite/sprite_manager.h"
-#include "player.h"
-#include "tile.h"
-#include "sprite/sprite.h"
-#include "sector.h"
-#include "resources.h"
-#include "video/screen.h"
-#include "statistics.h"
-#include "game_session.h"
-#include "object/tilemap.h"
-#include "object/camera.h"
-#include "object/gameobjs.h"
-#include "object/portable.h"
-#include "trigger/trigger_base.h"
-#include "control/joystickkeyboardcontroller.h"
-#include "main.h"
+#include "gettext.hpp"
+#include "sprite/sprite_manager.hpp"
+#include "audio/sound_manager.hpp"
+#include "player.hpp"
+#include "tile.hpp"
+#include "sprite/sprite.hpp"
+#include "sector.hpp"
+#include "resources.hpp"
+#include "video/screen.hpp"
+#include "statistics.hpp"
+#include "game_session.hpp"
+#include "object/tilemap.hpp"
+#include "object/camera.hpp"
+#include "object/gameobjs.hpp"
+#include "object/portable.hpp"
+#include "trigger/trigger_base.hpp"
+#include "control/joystickkeyboardcontroller.hpp"
+#include "main.hpp"
 
 static const int TILES_FOR_BUTTJUMP = 3;
 static const float SHOOTING_TIME = .150;
@@ -269,7 +270,7 @@ Player::handle_horizontal_input()
     // let's skid!
     if(fabs(vx)>SKID_XM && !skidding_timer.started()) {
       skidding_timer.start(SKID_TIME);
-      sound_manager->play_sound("skid");
+      sound_manager->play("sounds/skid.ogg");
       // dust some partcles
       Sector::current()->add_object(
         new Particles(
@@ -343,7 +344,7 @@ Player::handle_vertical_input()
     flapping = false;
     falling_from_flap = false;
     if (flapping_timer.started()) {
-      flapping_timer.start(0);
+      flapping_timer.stop();
     }
 
     physic.set_acceleration_y(0); //for flapping
@@ -351,15 +352,12 @@ Player::handle_vertical_input()
 
   // Press jump key
   if(controller->pressed(Controller::JUMP) && can_jump && on_ground()) {
-    if(duck) { // only jump a little bit when in duck mode {
+    if (duck) // only jump a little bit when in duck mode
       physic.set_velocity_y(300);
-    } else {
-      // jump higher if we are running
-      if (fabs(physic.get_velocity_x()) > MAX_WALK_XM)
-        physic.set_velocity_y(580);
-      else
-        physic.set_velocity_y(520);
-    }
+    else if (fabs(physic.get_velocity_x()) > MAX_WALK_XM) // jump higher if we are running
+      physic.set_velocity_y(580);
+    else
+      physic.set_velocity_y(520);
     
     //bbox.move(Vector(0, -1));
     jumping = true;
@@ -368,9 +366,9 @@ Player::handle_vertical_input()
     can_flap = false;
     flaps_nb = 0; // Ricardo's flapping
     if (is_big())
-      sound_manager->play_sound("bigjump");
+      sound_manager->play("sounds/bigjump.ogg");
     else
-      sound_manager->play_sound("jump");
+      sound_manager->play("sounds/jump.ogg");
   } else if(!controller->hold(Controller::JUMP)) { // Let go of jump key
     if (!flapping && !duck && !falling_from_flap && !on_ground()) {
       can_flap = true;
@@ -380,8 +378,8 @@ Player::handle_vertical_input()
       physic.set_velocity_y(0);
     }
   }
-
-  // temporary to help player's choosing a flapping
+#if CHOOSEFLAPSTYLE
+  // temporary to help players choosing a flapping
   if(flapping_mode == RICARDO_FLAP) {
     // Flapping, Ricardo's version
     // similar to SM3 Fox
@@ -391,35 +389,48 @@ Player::handle_vertical_input()
       flaps_nb++;
     }
   } else if(flapping_mode == MAREK_FLAP) {
-    // Flapping, Marek's version
+#endif
+    // Flapping, Marek and Ondra's version
     if (controller->hold(Controller::JUMP) && can_flap)
     {
-      if (!flapping_timer.started())
-      {
-        flapping_timer.start(TUX_FLAPPING_TIME);
-        flapping_velocity = physic.get_velocity_x();
-      }
       if (flapping_timer.check()) 
       {
         can_flap = false;
+        //flapping = false;
         falling_from_flap = true;
       }
-      jumping = true;
-      flapping = true;
-      if (!flapping_timer.check()) {
+      else if (!flapping_timer.started())
+      {
+        flapping_timer.start(TUX_FLAPPING_TIME);
+        flapping_velocity = physic.get_velocity_x();
+      }
+      else
+      {
+        jumping = true;
+        flapping = true;
         float cv = flapping_velocity * sqrt(
           TUX_FLAPPING_TIME - flapping_timer.get_timegone() 
           / TUX_FLAPPING_TIME);
-        
+      
         //Handle change of direction while flapping
         if (((dir == LEFT) && (cv > 0)) || (dir == RIGHT) && (cv < 0)) {
           cv *= (-1);
         }
+        else if (cv == 0) {
+          if (controller->hold(Controller::LEFT)) {
+               cv = -TUX_FLAPPING_LEAST_X;
+          }
+          else if (controller->hold(Controller::RIGHT)) {
+            cv = TUX_FLAPPING_LEAST_X;
+          }
+        }
         physic.set_velocity_x(cv);
-        physic.set_velocity_y(
-          flapping_timer.get_timegone()/.850);
+        physic.set_velocity_y(flapping_timer.get_timegone()
+            * TUX_FLAPPING_STRENGTH);
+        //std::cout << "Timegone: " << flapping_timer.get_timegone() << ", Y velocity: " << physic.get_velocity_y() << "\n";
       }
     }
+#if CHOOSEFLAPSTYLE
   } else if(flapping_mode == RYAN_FLAP) {
     // Flapping, Ryan's version
     if (controller->hold(Controller::JUMP) && can_flap)
@@ -461,6 +472,7 @@ Player::handle_vertical_input()
       physic.set_acceleration_y(0);
     }
   }
+#endif
 
   /* In case the player has pressed Down while in a certain range of air,
      enable butt jump action */
@@ -579,7 +591,7 @@ Player::handle_input()
 void
 Player::set_bonus(BonusType type, bool animate)
 {
-  if(player_status->bonus == type)
+  if(player_status->bonus >= type)
     return;
   
   if(player_status->bonus == NO_BONUS) {
@@ -722,7 +734,7 @@ Player::draw(DrawingContext& context)
             get_pos(), layer);
       }
     }
-  else if (safe_timer.started() && size_t(global_time*40)%2)
+  else if (safe_timer.started() && size_t(game_time*40)%2)
     ;  // don't draw Tux
   else
     tux_body->draw(context, get_pos(), layer);
@@ -730,7 +742,7 @@ Player::draw(DrawingContext& context)
   // Draw blinking star overlay
   if (invincible_timer.started() &&
      (invincible_timer.get_timeleft() > TUX_INVINCIBLE_TIME_WARNING
-      || size_t(global_time*20)%2)
+      || size_t(game_time*20)%2)
      && !dying)
   {
     if (!is_big() || duck)
@@ -778,7 +790,7 @@ Player::collision(GameObject& other, const CollisionHit& hit)
 void
 Player::make_invincible()
 {
-  sound_manager->play_sound("invincible");
+  sound_manager->play("sounds/invincible.ogg");
   invincible_timer.start(TUX_INVINCIBLE_TIME);
   Sector::current()->play_music(HERRING_MUSIC);               
 }
@@ -794,7 +806,7 @@ Player::kill(HurtMode mode)
           safe_timer.get_timeleft() > 0 || invincible_timer.get_timeleft() > 0)
     return;                          
   
-  sound_manager->play_sound("hurt");
+  sound_manager->play("sounds/hurt.ogg");
 
   physic.set_velocity_x(0);