|
|
|
|
@@ -37,7 +37,7 @@ auto Scoreboard::get() -> Scoreboard * {
|
|
|
|
|
|
|
|
|
|
// Constructor
|
|
|
|
|
Scoreboard::Scoreboard()
|
|
|
|
|
: renderer_(Screen::get()->getRenderer()), game_power_meter_texture_(Resource::get()->getTexture("game_power_meter.png")), power_meter_sprite_(std::make_unique<Sprite>(game_power_meter_texture_)), text_scoreboard_(Resource::get()->getText("8bithud")) {
|
|
|
|
|
: renderer_(Screen::get()->getRenderer()), game_power_meter_texture_(Resource::get()->getTexture("game_power_meter.png")), power_meter_sprite_(std::make_unique<Sprite>(game_power_meter_texture_)), text_(Resource::get()->getText("8bithud")), enter_name_text_(Resource::get()->getText("smb2")) {
|
|
|
|
|
// Inicializa variables
|
|
|
|
|
for (size_t i = 0; i < static_cast<size_t>(Id::SIZE); ++i) {
|
|
|
|
|
name_.at(i).clear();
|
|
|
|
|
@@ -195,50 +195,50 @@ void Scoreboard::renderPanelContent(size_t panel_index) {
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderScoreMode(size_t panel_index) {
|
|
|
|
|
// SCORE
|
|
|
|
|
text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::COLOR | Text::CENTER, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::COLOR | Text::CENTER, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
|
|
|
|
|
// MULT
|
|
|
|
|
text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 3"), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::COLOR | Text::CENTER, slot4_4_.x, slot4_4_.y, "x" + std::to_string(mult_.at(panel_index)).substr(0, 3), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::COLOR | Text::CENTER, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 3"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::COLOR | Text::CENTER, slot4_4_.x, slot4_4_.y, "x" + std::to_string(mult_.at(panel_index)).substr(0, 3), 1, text_color2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderDemoMode() {
|
|
|
|
|
// DEMO MODE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 6"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 6"), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
// PRESS START TO PLAY
|
|
|
|
|
if (time_counter_ % 10 < 8) {
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderWaitingMode() {
|
|
|
|
|
// GAME OVER
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
// PRESS START TO PLAY
|
|
|
|
|
if (time_counter_ % 10 < 8) {
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 8"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 9"), 1, text_color1_);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderGameOverMode() {
|
|
|
|
|
// GAME OVER
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
// PLEASE WAIT
|
|
|
|
|
if (time_counter_ % 10 < 8) {
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 12"), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 13"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 12"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, Lang::getText("[SCOREBOARD] 13"), 1, text_color1_);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderStageInfoMode() {
|
|
|
|
|
// STAGE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, Lang::getText("[SCOREBOARD] 5") + " " + std::to_string(stage_), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, Lang::getText("[SCOREBOARD] 5") + " " + std::to_string(stage_), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
// POWERMETER
|
|
|
|
|
power_meter_sprite_->setSpriteClip(0, 0, 40, 7);
|
|
|
|
|
@@ -247,77 +247,75 @@ void Scoreboard::renderStageInfoMode() {
|
|
|
|
|
power_meter_sprite_->render();
|
|
|
|
|
|
|
|
|
|
// HI-SCORE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 4"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 4"), 1, text_color1_);
|
|
|
|
|
const std::string NAME = hi_score_name_.empty() ? "" : hi_score_name_ + " - ";
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, NAME + updateScoreText(hi_score_), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, NAME + updateScoreText(hi_score_), 1, text_color2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderContinueMode(size_t panel_index) {
|
|
|
|
|
// SCORE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
|
|
|
|
|
// CONTINUE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 10"), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, std::to_string(continue_counter_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 10"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, std::to_string(continue_counter_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderEnterNameMode(size_t panel_index) {
|
|
|
|
|
// SCORE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
|
|
|
|
|
// ENTER NAME
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
renderNameInputField(panel_index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderNameInputField(size_t panel_index) {
|
|
|
|
|
SDL_FRect rect = {enter_name_pos_.x, enter_name_pos_.y, 5.0F, 7.0F};
|
|
|
|
|
SDL_FRect rect = {
|
|
|
|
|
.x = enter_name_pos_.x,
|
|
|
|
|
.y = enter_name_pos_.y,
|
|
|
|
|
.w = static_cast<float>(enter_name_text_->getCharacterSize() - 2),
|
|
|
|
|
.h = static_cast<float>(enter_name_text_->getCharacterSize())};
|
|
|
|
|
|
|
|
|
|
// Recorre todos los slots de letras del nombre
|
|
|
|
|
for (size_t j = 0; j < NAME_SIZE; ++j) {
|
|
|
|
|
// Selecciona el color
|
|
|
|
|
const Color COLOR = j < selector_pos_.at(panel_index) ? text_color2_ : text_color1_;
|
|
|
|
|
|
|
|
|
|
// Dibuja la linea. Si coincide con el selector solo se dibuja 2 de cada 4 veces
|
|
|
|
|
if (j != selector_pos_.at(panel_index) || time_counter_ % 4 >= 2) {
|
|
|
|
|
// Si está a la derecha del selector, se dibuja siempre
|
|
|
|
|
if (j >= selector_pos_.at(panel_index)) {
|
|
|
|
|
SDL_SetRenderDrawColor(renderer_, COLOR.r, COLOR.g, COLOR.b, 255);
|
|
|
|
|
SDL_SetRenderDrawColor(renderer_, text_color1_.r, text_color1_.g, text_color1_.b, 255);
|
|
|
|
|
SDL_RenderLine(renderer_, rect.x, rect.y + rect.h, rect.x + rect.w, rect.y + rect.h);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Dibuja la letra
|
|
|
|
|
if (j < record_name_.at(panel_index).size()) {
|
|
|
|
|
text_scoreboard_->writeColored(rect.x, rect.y, record_name_.at(panel_index).substr(j, 1), COLOR);
|
|
|
|
|
enter_name_text_->writeColored(rect.x, rect.y, record_name_.at(panel_index).substr(j, 1), text_color2_);
|
|
|
|
|
}
|
|
|
|
|
rect.x += 7;
|
|
|
|
|
rect.x += enter_name_text_->getCharacterSize();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderShowNameMode(size_t panel_index) {
|
|
|
|
|
// SCORE
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y, name_.at(panel_index), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_2_.x, slot4_2_.y, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
|
|
|
|
|
// NAME
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y, Lang::getText("[SCOREBOARD] 11"), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
/* TEXTO CENTRADO */
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, record_name_.at(panel_index), 1, Colors::getColorLikeKnightRider(name_colors_, loop_counter_ / 5));
|
|
|
|
|
// NOMBRE INTRODUCIDO
|
|
|
|
|
enter_name_text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y, record_name_.at(panel_index), 1, Colors::getColorLikeKnightRider(name_colors_, loop_counter_ / 5));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Scoreboard::renderGameCompletedMode(size_t panel_index) {
|
|
|
|
|
// GAME OVER
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_1_.x, slot4_1_.y + 4, Lang::getText("[SCOREBOARD] 7"), 1, text_color1_);
|
|
|
|
|
|
|
|
|
|
// SCORE
|
|
|
|
|
if (time_counter_ % 10 < 8) {
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 14"), 1, text_color1_);
|
|
|
|
|
text_scoreboard_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_3_.x, slot4_3_.y - 2, Lang::getText("[SCOREBOARD] 14"), 1, text_color1_);
|
|
|
|
|
text_->writeDX(Text::CENTER | Text::COLOR, slot4_4_.x, slot4_4_.y - 2, updateScoreText(score_.at(panel_index)), 1, text_color2_);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -377,7 +375,7 @@ void Scoreboard::recalculateAnchors() {
|
|
|
|
|
slot4_4_ = {.x = COL, .y = ROW4};
|
|
|
|
|
|
|
|
|
|
// Primer cuadrado para poner el nombre de record
|
|
|
|
|
const int ENTER_NAME_LENGTH = text_scoreboard_->length(std::string(NAME_SIZE, 'A'));
|
|
|
|
|
const int ENTER_NAME_LENGTH = enter_name_text_->length(std::string(NAME_SIZE, 'A'));
|
|
|
|
|
enter_name_pos_.x = COL - (ENTER_NAME_LENGTH / 2);
|
|
|
|
|
enter_name_pos_.y = ROW4;
|
|
|
|
|
|
|
|
|
|
|