Files
coffee_crisis_arcade_edition/source/scoreboard.cpp

175 lines
4.0 KiB
C++

#include "scoreboard.h"
// Constructor
Scoreboard::Scoreboard(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, options_t *options)
{
// Copia los punteros
this->renderer = renderer;
this->screen = screen;
this->asset = asset;
this->lang = lang;
this->options = options;
// Crea objetos
gamePowerMeterTexture = new Texture(renderer, asset->get("game_power_meter.png"));
powerMeterSprite = new Sprite(PLAY_AREA_CENTER_X - 20, 170, 40, 7, gamePowerMeterTexture, renderer);
textScoreBoard = new Text(asset->get("8bithud.png"), asset->get("8bithud.txt"), renderer);
// Inicializa variables
stage = 1;
score1 = 0;
score2 = 0;
mult1 = 1;
mult2 = 1;
hiScore = 0;
power = 0;
hiScoreName = "";
color = {0, 0, 0};
}
Scoreboard::~Scoreboard()
{
gamePowerMeterTexture->unload();
delete gamePowerMeterTexture;
delete powerMeterSprite;
delete textScoreBoard;
}
// Transforma un valor numérico en una cadena de 6 cifras
std::string Scoreboard::updateScoreText(Uint32 num)
{
if ((num >= 0) && (num <= 9))
{
return ("000000" + std::to_string(num));
}
if ((num >= 10) && (num <= 99))
{
return ("00000" + std::to_string(num));
}
if ((num >= 100) && (num <= 999))
{
return ("0000" + std::to_string(num));
}
if ((num >= 1000) && (num <= 9999))
{
return ("000" + std::to_string(num));
}
if ((num >= 010000) && (num <= 99999))
{
return ("00" + std::to_string(num));
}
if ((num >= 100000) && (num <= 999999))
{
return ("0" + std::to_string(num));
}
if ((num >= 1000000) && (num <= 9999999))
{
return (std::to_string(num));
}
return (std::to_string(num));
}
// Pinta el marcador
void Scoreboard::render()
{
// Dibuja el fondo del marcador
SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, 255);
SDL_Rect rect = {0, 160, 256, 32};
SDL_RenderFillRect(renderer, &rect);
// Dibuja la linea que separa el marcador de la zona de juego
SDL_SetRenderDrawColor(renderer, 13, 26, 43, 255);
SDL_RenderDrawLine(renderer, 0, 160, 255, 160);
// Anclas para los elementos
const int offset1 = 162;
const int offset2 = offset1 + 7;
const int offset3 = offset2 + 7;
const int offset4 = offset3 + 7;
const int offsetLeft = PLAY_AREA_LEFT + 45;
const int offsetRight = PLAY_AREA_RIGHT - 45;
// PLAYER1 - SCORE
textScoreBoard->writeCentered(offsetLeft, offset1, lang->getText(53));
textScoreBoard->writeCentered(offsetLeft, offset2, updateScoreText(score1));
// PLAYER1 - MULT
textScoreBoard->writeCentered(offsetLeft, offset3, lang->getText(55));
textScoreBoard->writeCentered(offsetLeft, offset4, std::to_string(mult1).substr(0, 3));
// PLAYER2 - SCORE
textScoreBoard->writeCentered(offsetRight, offset1, lang->getText(54));
textScoreBoard->writeCentered(offsetRight, offset2, updateScoreText(score2));
// PLAYER2 - MULT
textScoreBoard->writeCentered(offsetRight, offset3, lang->getText(55));
textScoreBoard->writeCentered(offsetRight, offset4, std::to_string(mult2).substr(0, 3));
// STAGE
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset1, lang->getText(57) + std::to_string(stage));
// POWERMETER
powerMeterSprite->setPosY(offset2);
powerMeterSprite->setSpriteClip(0, 0, 40, 7);
powerMeterSprite->render();
powerMeterSprite->setSpriteClip(40, 0, int(power * 40.0f), 7);
powerMeterSprite->render();
// HI-SCORE
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset3, lang->getText(56));
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset4, hiScoreName + updateScoreText(hiScore));
}
void Scoreboard::setScore1(int score)
{
score1 = score;
}
void Scoreboard::setScore2(int score)
{
score2 = score;
}
void Scoreboard::setMult1(float mult)
{
mult1 = mult;
}
void Scoreboard::setMult2(float mult)
{
mult2 = mult;
}
void Scoreboard::setStage(int stage)
{
this->stage = stage;
}
void Scoreboard::setHiScore(int hiScore)
{
this->hiScore = hiScore;
}
void Scoreboard::setPower(float power)
{
this->power = power;
}
void Scoreboard::setHiScoreName(std::string name)
{
hiScoreName = name;
}
void Scoreboard::setColor(color_t color)
{
this->color = color;
}