FIX: La máxima puntuación no se actualizaba correctamente en el marcador cuando se jugaba con puntuaciones online activadas

This commit is contained in:
2023-09-27 19:42:26 +02:00
parent 8fa40c802e
commit 744f5d5711
3 changed files with 45 additions and 25 deletions

View File

@@ -32,6 +32,12 @@ Game::Game(int numPlayers, int currentStage, SDL_Renderer *renderer, Screen *scr
// Carga los recursos
loadMedia();
// Carga ficheros
loadDemoFile();
// Establece la máxima puntuación desde fichero o desde las puntuaciones online
setHiScore();
clouds1A = new MovingSprite(0, 0, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, gameCloudsTexture, renderer);
clouds1B = new MovingSprite(256, 0, 256, 52, -0.4f, 0.0f, 0.0f, 0.0f, gameCloudsTexture, renderer);
clouds2A = new MovingSprite(0, 52, 256, 32, -0.2f, 0.0f, 0.0f, 0.0f, gameCloudsTexture, renderer);
@@ -392,10 +398,6 @@ void Game::loadMedia()
<< "** LOADING RESOURCES FOR GAME SECTION" << std::endl;
}
// Carga ficheros
loadScoreFile();
loadDemoFile();
// Texturas
bulletTexture = new Texture(renderer, asset->get("bullet.png"));
gameBuildingsTexture = new Texture(renderer, asset->get("game_buildings.png"));
@@ -1612,6 +1614,12 @@ void Game::updateHiScore()
// Actualiza la máxima puntuación
hiScore = player->getScore();
// Cambia el nombre del jugador con la máxima puntuación
if (options->online.enabled)
{
hiScoreName = options->online.jailerID.substr(0, 12) + " - ";
}
// Almacena la máxima puntuación en el fichero junto con un checksum
scoreDataFile[0] = hiScore;
scoreDataFile[1] = hiScore % 43;
@@ -1736,22 +1744,7 @@ void Game::renderScoreBoard()
// HI-SCORE
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset3, lang->getText(56));
if (options->online.enabled)
{
if (jscore::getNumUsers() > 0)
{
const std::string txt = jscore::getUserName(0).substr(0, 12) + " - " + updateScoreText((Uint32)jscore::getPoints(0));
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset4, txt);
}
else
{
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset4, "Bacteriol - 0000010");
}
}
else
{
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset4, updateScoreText(hiScore));
}
textScoreBoard->writeCentered(PLAY_AREA_CENTER_X, offset4, hiScoreName + updateScoreText(hiScore));
}
// Actualiza las variables del jugador
@@ -3088,15 +3081,12 @@ void Game::checkGameInput()
}
}
// Comprueba el input de pausa
//if (input->checkInput(input_pause, REPEAT_FALSE))
// Si se pulsa cualquier tecla, se sale del modo demo
if (input->checkAnyInput())
{
section->name = SECTION_PROG_TITLE;
}
// Incrementa el contador de la demo
if (demo.counter < TOTAL_DEMO_DATA)
{
@@ -3966,4 +3956,30 @@ void Game::reloadTextures()
gamePowerMeterTexture->reLoad();
gameSkyColorsTexture->reLoad();
gameTextTexture->reLoad();
}
// Establece la máxima puntuación desde fichero o desde las puntuaciones online
void Game::setHiScore()
{
// Carga el fichero de puntos
loadScoreFile();
// Establece el resto de variables
if (options->online.enabled)
{
if (jscore::getNumUsers() > 0)
{
hiScoreName = jscore::getUserName(0).substr(0, 12) + " - ";
hiScore = (Uint32)jscore::getPoints(0);
}
else
{
hiScoreName = "Bacteriol - ";
hiScore = 10;
}
}
else
{
hiScoreName = "";
}
}