diff --git a/source/scoreboard.cpp b/source/scoreboard.cpp index e245838..d51b99c 100644 --- a/source/scoreboard.cpp +++ b/source/scoreboard.cpp @@ -20,32 +20,10 @@ Scoreboard::Scoreboard(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lan power = 0; hiScoreName = ""; color = {0, 0, 0}; - rect = {0, 0, 256, 32}; + rect = {0, 0, 320, 40}; - const int left = 45; - const int right = rect.w - left; - const int center = rect.w / 2; - const int desp = 7; - const int line1 = 2; - const int line2 = line1 + desp; - const int line3 = line2 + desp; - const int line4 = line3 + desp; - - offsetScoreP1Label = {left, line1}; - offsetScoreP1 = {left, line2}; - offsetScoreP2Label = {right, line1}; - offsetScoreP2 = {right, line2}; - - offsetHiScoreLabel = {center, line3}; - offsetHiScore = {center, line4}; - - offsetMultP1Label = {left, line3}; - offsetMultP1 = {left, line4}; - offsetMultP2Label = {right, line3}; - offsetMultP2 = {right, line4}; - - offsetStage = {center, line1}; - offsetPowerMeter = {center, line2}; + // Recalcula las anclas de los elementos + recalculateAnchors(); // Crea objetos gamePowerMeterTexture = new Texture(renderer, asset->get("game_power_meter.png")); @@ -167,30 +145,8 @@ void Scoreboard::setPos(SDL_Rect rect) { this->rect = rect; - const int left = rect.w / 6; - const int right = rect.w - left; - const int center = rect.w / 2; - const int desp = 7; - const int line1 = 2; - const int line2 = line1 + desp; - const int line3 = line2 + desp; - const int line4 = line3 + desp; - - offsetScoreP1Label = {left, line1}; - offsetScoreP1 = {left, line2}; - offsetScoreP2Label = {right, line1}; - offsetScoreP2 = {right, line2}; - - offsetHiScoreLabel = {center, line3}; - offsetHiScore = {center, line4}; - - offsetMultP1Label = {left, line3}; - offsetMultP1 = {left, line4}; - offsetMultP2Label = {right, line3}; - offsetMultP2 = {right, line4}; - - offsetStage = {center, line1}; - offsetPowerMeter = {center, line2}; + // Recalcula las anclas de los elementos + recalculateAnchors(); powerMeterSprite->setPosX(offsetPowerMeter.x - 20); powerMeterSprite->setPosY(offsetPowerMeter.y); @@ -247,4 +203,41 @@ void Scoreboard::fillBackgroundTexture() // Deja el renderizador apuntando donde estaba SDL_SetRenderTarget(renderer, temp); +} + +// Recalcula las anclas de los elementos +void Scoreboard::recalculateAnchors() +{ + // Constantes para definir las zonas del marcador: 4 filas y 3 columnas + const int rowSize = rect.h / 4; + const int textHeight = 7; + const int row1 = (rowSize * 0) + (textHeight / 2); + const int row2 = (rowSize * 1) + (textHeight / 2) - 1; + const int row3 = (rowSize * 2) + (textHeight / 2) - 2; + const int row4 = (rowSize * 3) + (textHeight / 2) - 3; + + const int halfColSize = rect.w / 6; + const int col1 = halfColSize; + const int col2 = halfColSize * 3; + const int col3 = halfColSize * 5; + + // Primera fila + offsetScoreP1Label = {col1, row1}; + offsetStage = {col2, row1}; + offsetScoreP2Label = {col3, row1}; + + // Segunda fila + offsetScoreP1 = {col1, row2}; + offsetPowerMeter = {col2, row2}; + offsetScoreP2 = {col3, row2}; + + // Tercera fila + offsetMultP1Label = {col1, row3}; + offsetHiScoreLabel = {col2, row3}; + offsetMultP2Label = {col3, row3}; + + // Cuarta fila + offsetMultP1 = {col1, row4}; + offsetHiScore = {col2, row4}; + offsetMultP2 = {col3, row4}; } \ No newline at end of file diff --git a/source/scoreboard.h b/source/scoreboard.h index c6c86ed..98aa075 100644 --- a/source/scoreboard.h +++ b/source/scoreboard.h @@ -43,7 +43,7 @@ private: SDL_Point offsetScoreP1; SDL_Point offsetScoreP2Label; SDL_Point offsetScoreP2; - + SDL_Point offsetMultP1Label; SDL_Point offsetMultP1; SDL_Point offsetMultP2Label; @@ -55,6 +55,15 @@ private: SDL_Point offsetStage; SDL_Point offsetPowerMeter; + // Recalcula las anclas de los elementos + void recalculateAnchors(); + + // Transforma un valor numérico en una cadena de 6 cifras + std::string updateScoreText(Uint32 num); + + // Rellena la textura de fondo + void fillBackgroundTexture(); + public: // Constructor Scoreboard(SDL_Renderer *renderer, Screen *screen, Asset *asset, Lang *lang, options_t *options); @@ -75,13 +84,6 @@ public: void setHiScoreName(std::string name); void setColor(color_t color); void setPos(SDL_Rect rect); - -private: - // Transforma un valor numérico en una cadena de 6 cifras - std::string updateScoreText(Uint32 num); - - // Rellena la textura de fondo - void fillBackgroundTexture(); }; #endif