#include "lisp/lisp.h"
#include "player_status.h"
#include "resources.h"
+#include "gettext.h"
+#include "video/drawing_context.h"
+#include "main.h"
static const int START_LIVES = 4;
static const int MAX_LIVES = 99;
PlayerStatus player_status;
PlayerStatus::PlayerStatus()
- : distros(0),
+ : coins(0),
lives(START_LIVES),
bonus(NO_BONUS),
score_multiplier(1),
void PlayerStatus::reset()
{
- distros = 0;
+ coins = 0;
lives = START_LIVES;
bonus = NO_BONUS;
score_multiplier = 1;
{
if(lives < MAX_LIVES)
++lives;
- SoundManager::get()->play_sound(IDToSound(SND_LIFEUP));
+ sound_manager->play_sound("lifeup");
}
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_sound("coin");
}
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);
}
} 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;
}
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();
+}