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))),
|
: 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))),
|
power_sprite_(std::make_unique<AnimatedSprite>(config.texture.at(4), config.animations.at(1))),
|
||||||
enter_name_(std::make_unique<EnterName>()),
|
enter_name_(std::make_unique<EnterName>()),
|
||||||
hi_score_table_(*config.hi_score_table),
|
hi_score_table_(config.hi_score_table),
|
||||||
glowing_entry_(*config.glowing_entry),
|
glowing_entry_(config.glowing_entry),
|
||||||
play_area_(*config.play_area),
|
play_area_(*config.play_area),
|
||||||
id_(config.id),
|
id_(config.id),
|
||||||
default_pos_x_(config.x),
|
default_pos_x_(config.x),
|
||||||
@@ -929,14 +929,22 @@ void Player::playSound(const std::string &name) const {
|
|||||||
|
|
||||||
// Indica si se puede dibujar el objeto
|
// Indica si se puede dibujar el objeto
|
||||||
auto Player::isRenderable() const -> bool {
|
auto Player::isRenderable() const -> bool {
|
||||||
//return !isGameOver() && !isTitleHidden();
|
// return !isGameOver() && !isTitleHidden();
|
||||||
return !isTitleHidden();
|
return !isTitleHidden();
|
||||||
};
|
};
|
||||||
|
|
||||||
// Añade una puntuación a la tabla de records
|
// Añade una puntuación a la tabla de records
|
||||||
void Player::addScoreToScoreBoard() const {
|
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());
|
const auto ENTRY = HiScoreEntry(trim(getLastEnterName()), getScore(), get1CC());
|
||||||
auto manager = std::make_unique<ManageHiScoreTable>(hi_score_table_);
|
auto manager = std::make_unique<ManageHiScoreTable>(*hi_score_table_);
|
||||||
glowing_entry_ = manager->add(ENTRY);
|
|
||||||
|
if (glowing_entry_ != nullptr) {
|
||||||
|
*glowing_entry_ = manager->add(ENTRY);
|
||||||
|
}
|
||||||
|
|
||||||
manager->saveToFile(Asset::get()->get("score.bin"));
|
manager->saveToFile(Asset::get()->get("score.bin"));
|
||||||
}
|
}
|
||||||
@@ -186,9 +186,6 @@ class Player {
|
|||||||
[[nodiscard]] auto getGamepad() const -> std::shared_ptr<Input::Gamepad> { return gamepad_; }
|
[[nodiscard]] auto getGamepad() const -> std::shared_ptr<Input::Gamepad> { return gamepad_; }
|
||||||
void setUsesKeyboard(bool value) { uses_keyboard_ = value; }
|
void setUsesKeyboard(bool value) { uses_keyboard_ = value; }
|
||||||
[[nodiscard]] auto getUsesKeyboard() const -> bool { return uses_keyboard_; }
|
[[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:
|
private:
|
||||||
// --- Constantes ---
|
// --- 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<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::unique_ptr<EnterName> enter_name_; // Clase utilizada para introducir el nombre
|
||||||
std::shared_ptr<Input::Gamepad> gamepad_ = nullptr; // Dispositivo asociado
|
std::shared_ptr<Input::Gamepad> gamepad_ = nullptr; // Dispositivo asociado
|
||||||
Table &hi_score_table_; // Tabla de máximas puntuaciones
|
Table *hi_score_table_ = nullptr; // Tabla de máximas puntuaciones
|
||||||
int &glowing_entry_; // Entrada de la tabla de puntuaciones para hacerla brillar
|
int *glowing_entry_ = nullptr; // Entrada de la tabla de puntuaciones para hacerla brillar
|
||||||
std::string name_; // Nombre del jugador
|
std::string name_; // Nombre del jugador
|
||||||
std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones
|
std::string last_enter_name_; // Último nombre introducido en la tabla de puntuaciones
|
||||||
|
|
||||||
|
|||||||
@@ -1172,12 +1172,8 @@ void Game::updateScoreboard() {
|
|||||||
scoreboard_->update();
|
scoreboard_->update();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Añade una puntuación a la tabla de records
|
// Pone en el marcador el nombre del primer jugador de la tabla
|
||||||
void Game::addScoreToScoreBoard(const std::shared_ptr<Player> &player) {
|
void Game::updateHiScoreName() {
|
||||||
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"));
|
|
||||||
hi_score_.name = Options::settings.hi_score_table.front().name;
|
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);
|
player->setPlayingState(Player::State::CONTINUE);
|
||||||
} else if (player->getEnterNamePositionOverflow()) {
|
} else if (player->getEnterNamePositionOverflow()) {
|
||||||
player->setInput(Input::Action::START);
|
player->setInput(Input::Action::START);
|
||||||
addScoreToScoreBoard(player);
|
|
||||||
player->setPlayingState(Player::State::SHOWING_NAME);
|
player->setPlayingState(Player::State::SHOWING_NAME);
|
||||||
|
updateHiScoreName();
|
||||||
} else {
|
} else {
|
||||||
player->setInput(Input::Action::RIGHT);
|
player->setInput(Input::Action::RIGHT);
|
||||||
}
|
}
|
||||||
@@ -1464,8 +1460,8 @@ void Game::handleNameInput(const std::shared_ptr<Player> &player) {
|
|||||||
player->setPlayingState(Player::State::CONTINUE);
|
player->setPlayingState(Player::State::CONTINUE);
|
||||||
} else {
|
} else {
|
||||||
player->setInput(Input::Action::START);
|
player->setInput(Input::Action::START);
|
||||||
addScoreToScoreBoard(player);
|
|
||||||
player->setPlayingState(Player::State::SHOWING_NAME);
|
player->setPlayingState(Player::State::SHOWING_NAME);
|
||||||
|
updateHiScoreName();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -267,10 +267,10 @@ class Game {
|
|||||||
void evaluateAndSetMenace(); // Calcula y establece amenaza según globos activos
|
void evaluateAndSetMenace(); // Calcula y establece amenaza según globos activos
|
||||||
|
|
||||||
// --- Puntuación y marcador ---
|
// --- Puntuación y marcador ---
|
||||||
void updateHiScore(); // Actualiza el récord máximo si es necesario
|
void updateHiScore(); // Actualiza el récord máximo si es necesario
|
||||||
void updateScoreboard(); // Actualiza la visualización del marcador
|
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 updateHiScoreName(); // Pone en el marcador el nombre del primer jugador de la tabla
|
||||||
void initScoreboard(); // Inicializa el sistema de puntuación
|
void initScoreboard(); // Inicializa el sistema de puntuación
|
||||||
|
|
||||||
// --- Modo demostración ---
|
// --- Modo demostración ---
|
||||||
void initDemo(Player::Id player_id); // Inicializa variables para el modo demostración
|
void initDemo(Player::Id player_id); // Inicializa variables para el modo demostración
|
||||||
|
|||||||
Reference in New Issue
Block a user