This fixes the issues my patch has caused...
1) if I start without existing user config files, it crashes (current player is NULL) 2) the m_remember_me variable is not used 3) if I understand the code correctly, it sets the current player to a guest player to indicate that there is no current player atm (which is then used to start the login window). If this correct, then it would be better to indicate this by setting the current player to NULL. Reason is that this way we can easily detect incorrect usage elsewhere (since we will get a crash, instead of storing data in the guest player, and we will only later detect that something was not saved as expected).
This commit is contained in:
@@ -86,18 +86,11 @@ void PlayerManager::load()
|
||||
const XMLNode *player_xml = players->getNode(i);
|
||||
PlayerProfile *player = new PlayerProfile(player_xml);
|
||||
m_all_players.push_back(player);
|
||||
if(player->isDefault()){
|
||||
if(player->isDefault())
|
||||
m_current_player = player;
|
||||
}
|
||||
}
|
||||
m_all_players.insertionSort(/*start*/0, /*desc*/true);
|
||||
|
||||
if(!m_current_player) // if there is no default player assigned set the current player to guest
|
||||
{
|
||||
m_current_player = getGuestPlayer();
|
||||
m_current_player->setDefault(true);
|
||||
}
|
||||
|
||||
delete players;
|
||||
} // load
|
||||
|
||||
@@ -192,24 +185,6 @@ const PlayerProfile *PlayerManager::getPlayerById(unsigned int id)
|
||||
return NULL;
|
||||
} // getPlayerById
|
||||
|
||||
|
||||
PlayerProfile* PlayerManager::getGuestPlayer(){
|
||||
|
||||
PlayerProfile *player;
|
||||
for_in(player, m_all_players)
|
||||
{
|
||||
if(player->isGuestAccount())
|
||||
{
|
||||
return player;
|
||||
}
|
||||
}
|
||||
|
||||
player = new PlayerProfile(_LTR("Guest"), /*guest*/true);
|
||||
m_all_players.push_back( player );
|
||||
|
||||
return player;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
PlayerProfile *PlayerManager::getPlayer(const irr::core::stringw &name)
|
||||
{
|
||||
@@ -228,9 +203,11 @@ void PlayerManager::setCurrentPlayer(PlayerProfile *player, bool remember_me)
|
||||
if(m_current_player)
|
||||
m_current_player->setDefault(false);
|
||||
m_current_player = player;
|
||||
m_current_player->setDefault(remember_me);
|
||||
m_current_player->computeActive();
|
||||
m_remember_me = false;
|
||||
if(m_current_player)
|
||||
{
|
||||
m_current_player->setDefault(remember_me);
|
||||
m_current_player->computeActive();
|
||||
}
|
||||
} // setCurrentPlayer
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@@ -47,7 +47,6 @@ private:
|
||||
|
||||
/** A pointer to the current player. */
|
||||
PlayerProfile* m_current_player;
|
||||
bool m_remember_me;
|
||||
|
||||
void load();
|
||||
PlayerManager();
|
||||
@@ -78,15 +77,11 @@ public:
|
||||
void addNewPlayer(const irr::core::stringw& name);
|
||||
void deletePlayer(PlayerProfile *player);
|
||||
void setCurrentPlayer(PlayerProfile *player, bool remember_me);
|
||||
void rememberCurrentPlayer(bool value) { m_remember_me = value; }
|
||||
const PlayerProfile *getPlayerById(unsigned int id);
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the current player. */
|
||||
PlayerProfile* getCurrentPlayer() { return m_current_player; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the guest player. */
|
||||
PlayerProfile* getGuestPlayer();
|
||||
// ------------------------------------------------------------------------
|
||||
PlayerProfile *getPlayer(const irr::core::stringw &name);
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the number of players in the config file.*/
|
||||
|
||||
@@ -43,6 +43,7 @@ PlayerProfile::PlayerProfile(const core::stringw& name, bool is_guest)
|
||||
m_use_frequency = is_guest ? -1 : 0;
|
||||
m_unique_id = PlayerManager::get()->getUniqueId();
|
||||
m_story_mode_status = unlock_manager->createStoryModeStatus();
|
||||
m_is_default = false;
|
||||
m_achievements_status =
|
||||
AchievementsManager::get()->createAchievementsStatus();
|
||||
} // PlayerProfile
|
||||
|
||||
@@ -185,7 +185,7 @@ void OptionsScreenPlayers::eventCallback(Widget* widget, const std::string& name
|
||||
else if (name == "playername")
|
||||
{
|
||||
race_manager->clearKartLastPositionOnOverworld();
|
||||
PlayerManager::get()->setCurrentPlayer(PlayerManager::get()->getGuestPlayer(),false);
|
||||
PlayerManager::get()->setCurrentPlayer(NULL,false);
|
||||
StateManager::get()->pushScreen(StoryModeLobbyScreen::getInstance());
|
||||
}
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ void StoryModeLobbyScreen::init()
|
||||
list->clear();
|
||||
|
||||
PlayerProfile *player = PlayerManager::get()->getCurrentPlayer();
|
||||
if(!player->isGuestAccount())
|
||||
if(player)
|
||||
{
|
||||
StateManager::get()->resetAndGoToScreen(MainMenuScreen::getInstance());
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user