#include "scoreboard.h" #include #include // Constructor ScoreBoard::ScoreBoard(SDL_Renderer *renderer, Asset *asset, int *lives, int *items, Uint32 *clock) { // Obten punteros a objetos this->asset = asset; this->renderer = renderer; this->lives = lives; this->items = items; this->clock = clock; // Reserva memoria para los objetos texture = new LTexture(renderer, asset->get("player01.png")); sprite = new AnimatedSprite(texture, renderer, asset->get("player01.ani")); sprite->setCurrentAnimation("walk_menu"); text = new Text(asset->get("smb2.png"), asset->get("smb2.txt"), renderer); // Inicializa las variables counter = 0; colorChangeSpeed = 4; // Inicializa los colores color_t c = stringToColor("blue"); color.push_back(c); c = stringToColor("red"); color.push_back(c); c = stringToColor("magenta"); color.push_back(c); c = stringToColor("green"); color.push_back(c); c = stringToColor("cyan"); color.push_back(c); c = stringToColor("yellow"); color.push_back(c); c = stringToColor("white"); color.push_back(c); c = stringToColor("bright_blue"); color.push_back(c); c = stringToColor("bright_red"); color.push_back(c); c = stringToColor("bright_magenta"); color.push_back(c); c = stringToColor("bright_green"); color.push_back(c); c = stringToColor("bright_cyan"); color.push_back(c); c = stringToColor("bright_yellow"); color.push_back(c); c = stringToColor("bright_white"); color.push_back(c); } // Destructor ScoreBoard::~ScoreBoard() { delete texture; delete sprite; delete text; } // Pinta el objeto en pantalla void ScoreBoard::render() { // Dibuja el fondo del marcador const SDL_Rect rect = {0, 18 * BLOCK, PLAY_AREA_WIDTH, GAMECANVAS_HEIGHT - PLAY_AREA_HEIGHT}; SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_RenderFillRect(renderer, &rect); // Dibuja las vidas sprite->setPosY(19 * BLOCK); int index; const int desp = (counter / 40) % 8; const int frame = desp % 4; sprite->setCurrentFrame(frame); for (int i = 0; i < *lives; i++) { sprite->setPosX(8 + (16 * i) + desp); index = i % color.size(); sprite->getTexture()->setColor(color[index].r, color[index].g, color[index].b); sprite->render(); } // Escribe los textos const clock_t clock = getTime(); std::string itemsTxt = std::to_string(*items / 100) + std::to_string((*items % 100) / 10) + std::to_string(*items % 10); std::string separator = " "; if (clock.separator) { separator = ":"; } std::string timeTxt = std::to_string((clock.minutes % 60) / 10) + std::to_string(clock.minutes % 10) + separator + std::to_string((clock.seconds % 60) / 10) + std::to_string(clock.seconds % 10); std::string text = "Items collected " + itemsTxt + " Time " + timeTxt; const color_t color = stringToColor("white"); this->text->writeColored(BLOCK, 22 * BLOCK, text, color); } // Actualiza las variables del objeto void ScoreBoard::update() { counter++; sprite->update(); } // Obtiene el tiempo transcurrido de partida ScoreBoard::clock_t ScoreBoard::getTime() { const Uint32 timeElapsed = SDL_GetTicks() - *clock; clock_t time; time.hours = timeElapsed / 3600000; time.minutes = timeElapsed / 60000; time.seconds = timeElapsed / 1000; time.separator = (timeElapsed % 1000 <= 500); return time; } // Recarga la textura void ScoreBoard::reLoadTexture() { texture->reLoad(); text->reLoadTexture(); }