make igloo the first level
[supertux.git] / src / object / player.cpp
index b0579d2..35f874e 100644 (file)
@@ -16,7 +16,6 @@
 //  You should have received a copy of the GNU General Public License
 //  along with this program; if not, write to the Free Software
 //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
-
 #include <config.h>
 
 #include <typeinfo>
@@ -32,7 +31,6 @@
 #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"
@@ -42,7 +40,7 @@
 #include "object/bullet.hpp"
 #include "trigger/trigger_base.hpp"
 #include "control/joystickkeyboardcontroller.hpp"
-#include "scripting/wrapper_util.hpp"
+#include "scripting/squirrel_util.hpp"
 #include "main.hpp"
 #include "platform.hpp"
 #include "badguy/badguy.hpp"
@@ -97,7 +95,7 @@ TuxBodyParts::draw(DrawingContext& context, const Vector& pos, int layer)
   if(body != NULL)
     body->draw(context, pos, layer-3);
   if(arms != NULL)
-    arms->draw(context, pos, layer);
+    arms->draw(context, pos, layer+10);
   if(feet != NULL)
     feet->draw(context, pos, layer-2);
 }
@@ -542,16 +540,16 @@ Player::add_coins(int count)
 }
 
 void
-Player::set_bonus(const std::string& bonustype)
+Player::add_bonus(const std::string& bonustype)
 {
   if(bonustype == "grow")
-    set_bonus(GROWUP_BONUS);
+    add_bonus(GROWUP_BONUS);
   else if(bonustype == "fireflower")
-    set_bonus(FIRE_BONUS);
+    add_bonus(FIRE_BONUS);
   else if(bonustype == "iceflower")
-    set_bonus(ICE_BONUS);
+    add_bonus(ICE_BONUS);
   else if(bonustype == "none")
-    set_bonus(NO_BONUS);
+    add_bonus(NO_BONUS);
   
   
   std::ostringstream msg;
@@ -560,17 +558,39 @@ Player::set_bonus(const std::string& bonustype)
 }
 
 void
-Player::set_bonus(BonusType type, bool animate)
+Player::add_bonus(BonusType type, bool animate)
 {
-  if(player_status->bonus >= type)
+  // always ignore NO_BONUS
+  if (type == NO_BONUS) {
     return;
-  
+  }
+
+  // ignore GROWUP_BONUS if we're already big
+  if (type == GROWUP_BONUS) {
+    if (player_status->bonus == GROWUP_BONUS) return; 
+    if (player_status->bonus == FIRE_BONUS) return;
+    if (player_status->bonus == ICE_BONUS) return;
+  }
+
+  set_bonus(type, animate);
+}
+
+void
+Player::set_bonus(BonusType type, bool animate)
+{
   if(player_status->bonus == NO_BONUS) {
     adjust_height = 62.8;
     if(animate)
       growing_timer.start(GROWING_TIME);
   }
-  
+
+  if ((type == NO_BONUS) || (type == GROWUP_BONUS)) {
+    player_status->max_fire_bullets = 0;
+    player_status->max_ice_bullets = 0;
+  }
+  if (type == FIRE_BONUS) player_status->max_fire_bullets++;
+  if (type == ICE_BONUS) player_status->max_ice_bullets++;
+
   player_status->bonus = type;
 }
 
@@ -609,7 +629,7 @@ Player::draw(DrawingContext& context)
   else
     tux_body = small_tux;
 
-  int layer = LAYER_OBJECTS + 10;
+  int layer = LAYER_OBJECTS + 1;
 
   /* Set Tux sprite action */
   if (duck && is_big())
@@ -869,7 +889,7 @@ Player::kill(HurtMode mode)
           || player_status->bonus == ICE_BONUS)
         {
           safe_timer.start(TUX_SAFE_TIME);
-          player_status->bonus = GROWUP_BONUS;
+         set_bonus(GROWUP_BONUS);
         }
       else 
         {
@@ -877,7 +897,7 @@ Player::kill(HurtMode mode)
           safe_timer.start(TUX_SAFE_TIME /* + GROWING_TIME */);
           adjust_height = 30.8;
           duck = false;
-          player_status->bonus = NO_BONUS;
+          set_bonus(NO_BONUS);
         }
     }
   else
@@ -893,7 +913,7 @@ Player::kill(HurtMode mode)
       physic.set_acceleration(0, 0);
       physic.set_velocity(0, 700);
       player_status->coins -= 25;
-      player_status->bonus = NO_BONUS;
+      set_bonus(NO_BONUS);
       dying = true;
       dying_timer.start(3.0);
       set_group(COLGROUP_DISABLED);