fix: el nom apareixia duplicat en la tabla de records
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user