#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; }