fix: el nom apareixia duplicat en la tabla de records

This commit is contained in:
2025-08-10 20:36:13 +02:00
parent 0fc709f6d5
commit 659a4ced44
4 changed files with 23 additions and 22 deletions

View File

@@ -24,8 +24,8 @@ Player::Player(const Config &config)
: player_sprite_(std::make_unique<AnimatedSprite>(config.texture.at(0), config.animations.at(0))),
power_sprite_(std::make_unique<AnimatedSprite>(config.texture.at(4), config.animations.at(1))),
enter_name_(std::make_unique<EnterName>()),
hi_score_table_(*config.hi_score_table),
glowing_entry_(*config.glowing_entry),
hi_score_table_(config.hi_score_table),
glowing_entry_(config.glowing_entry),
play_area_(*config.play_area),
id_(config.id),
default_pos_x_(config.x),
@@ -929,14 +929,22 @@ void Player::playSound(const std::string &name) const {
// Indica si se puede dibujar el objeto
auto Player::isRenderable() const -> bool {
//return !isGameOver() && !isTitleHidden();
// return !isGameOver() && !isTitleHidden();
return !isTitleHidden();
};
// Añade una puntuación a la tabla de records
void Player::addScoreToScoreBoard() const {
if (hi_score_table_ == nullptr) {
return; // Verificar esto antes de crear el manager
}
const auto ENTRY = HiScoreEntry(trim(getLastEnterName()), getScore(), get1CC());
auto manager = std::make_unique<ManageHiScoreTable>(hi_score_table_);
glowing_entry_ = manager->add(ENTRY);
auto manager = std::make_unique<ManageHiScoreTable>(*hi_score_table_);
if (glowing_entry_ != nullptr) {
*glowing_entry_ = manager->add(ENTRY);
}
manager->saveToFile(Asset::get()->get("score.bin"));
}

View File

@@ -186,9 +186,6 @@ class Player {
[[nodiscard]] auto getGamepad() const -> std::shared_ptr<Input::Gamepad> { return gamepad_; }
void setUsesKeyboard(bool value) { uses_keyboard_ = value; }
[[nodiscard]] auto getUsesKeyboard() const -> bool { return uses_keyboard_; }
void setHiScoreTable(const Table &table) { hi_score_table_ = table; }
[[nodiscard]] auto getHiScoreTable() const -> const Table & { return hi_score_table_; }
void setGlowingEntry(const int &entry) { glowing_entry_ = entry; }
private:
// --- Constantes ---
@@ -204,8 +201,8 @@ class Player {
std::unique_ptr<AnimatedSprite> power_sprite_; // Sprite para dibujar el aura del jugador con el poder a tope
std::unique_ptr<EnterName> enter_name_; // Clase utilizada para introducir el nombre
std::shared_ptr<Input::Gamepad> gamepad_ = nullptr; // Dispositivo asociado
Table &hi_score_table_; // Tabla de máximas puntuaciones
int &glowing_entry_; // Entrada de la tabla de puntuaciones para hacerla brillar
Table *hi_score_table_ = nullptr; // Tabla de máximas puntuaciones
int *glowing_entry_ = nullptr; // Entrada de la tabla de puntuaciones para hacerla brillar
std::string name_; // Nombre del jugador
std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones

View File

@@ -1172,12 +1172,8 @@ void Game::updateScoreboard() {
scoreboard_->update();
}
// Añade una puntuación a la tabla de records
void Game::addScoreToScoreBoard(const std::shared_ptr<Player> &player) {
const auto ENTRY = HiScoreEntry(trim(player->getLastEnterName()), player->getScore(), player->get1CC());
auto manager = std::make_unique<ManageHiScoreTable>(Options::settings.hi_score_table);
Options::settings.glowing_entries.at(static_cast<int>(player->getId()) - 1) = manager->add(ENTRY);
manager->saveToFile(Asset::get()->get("score.bin"));
// Pone en el marcador el nombre del primer jugador de la tabla
void Game::updateHiScoreName() {
hi_score_.name = Options::settings.hi_score_table.front().name;
}
@@ -1443,8 +1439,8 @@ void Game::handleNameInput(const std::shared_ptr<Player> &player) {
player->setPlayingState(Player::State::CONTINUE);
} else if (player->getEnterNamePositionOverflow()) {
player->setInput(Input::Action::START);
addScoreToScoreBoard(player);
player->setPlayingState(Player::State::SHOWING_NAME);
updateHiScoreName();
} else {
player->setInput(Input::Action::RIGHT);
}
@@ -1464,8 +1460,8 @@ void Game::handleNameInput(const std::shared_ptr<Player> &player) {
player->setPlayingState(Player::State::CONTINUE);
} else {
player->setInput(Input::Action::START);
addScoreToScoreBoard(player);
player->setPlayingState(Player::State::SHOWING_NAME);
updateHiScoreName();
}
}
}

View File

@@ -267,10 +267,10 @@ class Game {
void evaluateAndSetMenace(); // Calcula y establece amenaza según globos activos
// --- Puntuación y marcador ---
void updateHiScore(); // Actualiza el récord máximo si es necesario
void updateScoreboard(); // Actualiza la visualización del marcador
void addScoreToScoreBoard(const std::shared_ptr<Player> &player); // Añade puntuación del jugador al marcador
void initScoreboard(); // Inicializa el sistema de puntuación
void updateHiScore(); // Actualiza el récord máximo si es necesario
void updateScoreboard(); // Actualiza la visualización del marcador
void updateHiScoreName(); // Pone en el marcador el nombre del primer jugador de la tabla
void initScoreboard(); // Inicializa el sistema de puntuación
// --- Modo demostración ---
void initDemo(Player::Id player_id); // Inicializa variables para el modo demostración