kugelblitz electrifies water on contact - electrified water is baaaaaaad
[supertux.git] / src / object / player.cpp
index f5821c0..13121b5 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,8 +270,8 @@ 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");
-      // dust some partcles
+      sound_manager->play("sounds/skid.wav");
+      // dust some particles
       Sector::current()->add_object(
         new Particles(
           Vector(bbox.p1.x + (dir == RIGHT ? bbox.get_width() : 0),
@@ -365,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.wav");
     else
-      sound_manager->play_sound("jump");
+      sound_manager->play("sounds/jump.wav");
   } else if(!controller->hold(Controller::JUMP)) { // Let go of jump key
     if (!flapping && !duck && !falling_from_flap && !on_ground()) {
       can_flap = true;
@@ -415,6 +416,14 @@ Player::handle_vertical_input()
         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()
             * TUX_FLAPPING_STRENGTH);
@@ -582,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) {
@@ -725,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);
@@ -733,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)
@@ -754,6 +763,18 @@ Player::collision(GameObject& other, const CollisionHit& hit)
   }
  
   if(other.get_flags() & FLAG_SOLID) {
+    TileMap* tilemap = dynamic_cast<TileMap*> (&other);
+    if(tilemap) {
+      const TilemapCollisionHit* thit = 
+        static_cast<const TilemapCollisionHit*> (&hit);
+      printf("Tileattrs. %d\n", thit->tileflags);
+      if(thit->tileflags & Tile::SPIKE)
+        kill(SHRINK);
+
+      if(! (thit->tileflags & Tile::SOLID))
+        return CONTINUE;
+    }
+    
     if(hit.normal.y < 0) { // landed on floor?
       if (physic.get_velocity_y() < 0)
         physic.set_velocity_y(0);
@@ -781,7 +802,7 @@ Player::collision(GameObject& other, const CollisionHit& hit)
 void
 Player::make_invincible()
 {
-  sound_manager->play_sound("invincible");
+  sound_manager->play("sounds/invincible.wav");
   invincible_timer.start(TUX_INVINCIBLE_TIME);
   Sector::current()->play_music(HERRING_MUSIC);               
 }
@@ -797,7 +818,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.wav");
 
   physic.set_velocity_x(0);