updated squirrel version
[supertux.git] / src / player_status.cpp
index ba8b633..72b6a07 100644 (file)
 #include "lisp/lisp.h"
 #include "player_status.h"
 #include "resources.h"
+#include "gettext.h"
+#include "video/drawing_context.h"
+#include "audio/sound_manager.h"
+#include "main.h"
 
 static const int START_LIVES = 4;
 static const int MAX_LIVES = 99;
@@ -29,7 +33,7 @@ static const int MAX_LIVES = 99;
 PlayerStatus player_status;
 
 PlayerStatus::PlayerStatus()
-  : distros(0),
+  : coins(0),
     lives(START_LIVES),
     bonus(NO_BONUS),
     score_multiplier(1),
@@ -39,7 +43,7 @@ PlayerStatus::PlayerStatus()
 
 void PlayerStatus::reset()
 {
-  distros = 0;
+  coins = 0;
   lives = START_LIVES;
   bonus = NO_BONUS;
   score_multiplier = 1;
@@ -51,40 +55,43 @@ PlayerStatus::incLives()
 {
   if(lives < MAX_LIVES)
     ++lives;
-  SoundManager::get()->play_sound(IDToSound(SND_LIFEUP));
+  sound_manager->play("sounds/lifeup.wav");
 }
 
 void
 PlayerStatus::incCoins()
 {
-  distros++;
-  if(distros >= 100) {
+  coins++;
+  if(coins >= 100) {
     incLives();
-    distros = 0;
+    coins = 0;
   }
-  SoundManager::get()->play_sound(IDToSound(SND_DISTRO));
+  sound_manager->play("sounds/coin.wav");
 }
 
 void
 PlayerStatus::write(lisp::Writer& writer)
 {
   switch(bonus) {
-    case PlayerStatus::NO_BONUS:
+    case NO_BONUS:
       writer.write_string("bonus", "none");
       break;
-    case PlayerStatus::GROWUP_BONUS:
+    case GROWUP_BONUS:
       writer.write_string("bonus", "growup");
       break;
-    case PlayerStatus::FLOWER_BONUS:
+    case FIRE_BONUS:
       writer.write_string("bonus", "fireflower");
       break;
+    case ICE_BONUS:
+      writer.write_string("bonus", "iceflower");
+      break;
     default:
       std::cerr << "Unknown bonus type.\n";
       writer.write_string("bonus", "none");
   }
 
   writer.write_int("lives", lives);
-  writer.write_int("distros", distros);
+  writer.write_int("coins", coins);
   writer.write_int("max-score-multiplier", max_score_multiplier);
 }
 
@@ -100,7 +107,9 @@ PlayerStatus::read(const lisp::Lisp& lisp)
     } else if(bonusname == "growup") {
       bonus = GROWUP_BONUS;
     } else if(bonusname == "fireflower") {
-      bonus = FLOWER_BONUS;
+      bonus = FIRE_BONUS;
+    } else if(bonusname == "iceflower") {
+      bonus = ICE_BONUS;
     } else {
       std::cerr << "Unknown bonus '" << bonusname << "' in savefile.\n";
       bonus = NO_BONUS;
@@ -108,7 +117,47 @@ PlayerStatus::read(const lisp::Lisp& lisp)
   }
 
   lisp.get("lives", lives);
-  lisp.get("distros", distros);
+  lisp.get("coins", coins);
   lisp.get("max-score-multiplier", max_score_multiplier);
 }
 
+void
+PlayerStatus::draw(DrawingContext& context)
+{
+  context.push_transform();
+  context.set_translation(Vector(0, 0));
+
+  char str[60];
+  
+  sprintf(str, " %d", player_status.coins);
+  const char* coinstext = _("COINS");
+  context.draw_text(white_text, coinstext,
+      Vector(SCREEN_WIDTH - white_text->get_text_width(coinstext) 
+              - white_text->get_text_width("   99"), 0),
+      LEFT_ALLIGN, LAYER_FOREGROUND1);
+  context.draw_text(gold_text, str,
+      Vector(SCREEN_WIDTH - gold_text->get_text_width(" 99"), 0),
+      LEFT_ALLIGN, LAYER_FOREGROUND1);
+
+  if (player_status.lives >= 5) {
+    sprintf(str, "%dx", player_status.lives);
+    float x = SCREEN_WIDTH - gold_text->get_text_width(str) - tux_life->w;
+    context.draw_text(gold_text, str, Vector(x, 20), LEFT_ALLIGN,
+                      LAYER_FOREGROUND1);
+    context.draw_surface(tux_life, Vector(SCREEN_WIDTH - 16, 20),
+                         LAYER_FOREGROUND1);
+  } else {
+    for(int i= 0; i < player_status.lives; ++i)
+      context.draw_surface(tux_life, 
+          Vector(SCREEN_WIDTH - tux_life->w*4 +(tux_life->w*i), 20),
+          LAYER_FOREGROUND1);
+  }
+
+  const char* livestext = _("LIVES");
+  context.draw_text(white_text, livestext,
+      Vector(SCREEN_WIDTH - white_text->get_text_width(livestext) 
+                - white_text->get_text_width("   99"), 20),
+      LEFT_ALLIGN, LAYER_FOREGROUND1);
+
+  context.pop_transform();
+}