mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-02-20 15:40:32 +00:00
Make the creation of save file directories even more explicit
This commit is contained in:
parent
b7b7c0612d
commit
a0cc9de088
@ -78,8 +78,8 @@ namespace MWBase
|
||||
/** Used for quickload **/
|
||||
virtual void quickLoad()=0;
|
||||
|
||||
virtual MWState::Character *getCurrentCharacter (bool create = true) = 0;
|
||||
///< \param create Create a new character, if there is no current character.
|
||||
virtual MWState::Character *getCurrentCharacter () = 0;
|
||||
///< @note May return null.
|
||||
|
||||
virtual CharacterIterator characterBegin() = 0;
|
||||
///< Any call to SaveGame and getCurrentCharacter can invalidate the returned
|
||||
|
@ -132,7 +132,7 @@ namespace MWGui
|
||||
if (mgr->characterBegin() == mgr->characterEnd())
|
||||
return;
|
||||
|
||||
mCurrentCharacter = mgr->getCurrentCharacter (false);
|
||||
mCurrentCharacter = mgr->getCurrentCharacter();
|
||||
|
||||
std::string directory =
|
||||
Misc::StringUtils::lowerCase (Settings::Manager::getString ("character", "Saves"));
|
||||
@ -202,7 +202,7 @@ namespace MWGui
|
||||
|
||||
if (!load)
|
||||
{
|
||||
mCurrentCharacter = MWBase::Environment::get().getStateManager()->getCurrentCharacter (false);
|
||||
mCurrentCharacter = MWBase::Environment::get().getStateManager()->getCurrentCharacter();
|
||||
}
|
||||
|
||||
center();
|
||||
|
@ -32,11 +32,8 @@ MWState::CharacterManager::CharacterManager (const boost::filesystem::path& save
|
||||
}
|
||||
}
|
||||
|
||||
MWState::Character *MWState::CharacterManager::getCurrentCharacter (bool create, const std::string& name)
|
||||
MWState::Character *MWState::CharacterManager::getCurrentCharacter ()
|
||||
{
|
||||
if (!mCurrent && create)
|
||||
createCharacter(name);
|
||||
|
||||
return mCurrent;
|
||||
}
|
||||
|
||||
@ -56,7 +53,7 @@ void MWState::CharacterManager::deleteSlot(const MWState::Character *character,
|
||||
}
|
||||
}
|
||||
|
||||
void MWState::CharacterManager::createCharacter(const std::string& name)
|
||||
MWState::Character* MWState::CharacterManager::createCharacter(const std::string& name)
|
||||
{
|
||||
std::ostringstream stream;
|
||||
|
||||
@ -82,8 +79,7 @@ void MWState::CharacterManager::createCharacter(const std::string& name)
|
||||
}
|
||||
|
||||
mCharacters.push_back (Character (path, mGame));
|
||||
|
||||
mCurrent = &mCharacters.back();
|
||||
return &mCharacters.back();
|
||||
}
|
||||
|
||||
std::list<MWState::Character>::iterator MWState::CharacterManager::findCharacter(const MWState::Character* character)
|
||||
|
@ -31,13 +31,12 @@ namespace MWState
|
||||
|
||||
CharacterManager (const boost::filesystem::path& saves, const std::string& game);
|
||||
|
||||
Character *getCurrentCharacter (bool create, const std::string& name);
|
||||
///< \param create Create a new character, if there is no current character.
|
||||
/// \param name The character name to use in case a new character is created.
|
||||
Character *getCurrentCharacter ();
|
||||
///< @note May return null
|
||||
|
||||
void deleteSlot(const MWState::Character *character, const MWState::Slot *slot);
|
||||
|
||||
void createCharacter(const std::string& name);
|
||||
Character* createCharacter(const std::string& name);
|
||||
///< Create new character within saved game management
|
||||
/// \param name Name for the character (does not need to be unique)
|
||||
|
||||
|
@ -109,7 +109,7 @@ void MWState::StateManager::askLoadRecent()
|
||||
|
||||
if( !mAskLoadRecent )
|
||||
{
|
||||
const MWState::Character* character = getCurrentCharacter(false);
|
||||
const MWState::Character* character = getCurrentCharacter();
|
||||
if(!character || character->begin() == character->end())//no saves
|
||||
{
|
||||
MWBase::Environment::get().getWindowManager()->pushGuiMode (MWGui::GM_MainMenu);
|
||||
@ -173,6 +173,16 @@ void MWState::StateManager::endGame()
|
||||
|
||||
void MWState::StateManager::saveGame (const std::string& description, const Slot *slot)
|
||||
{
|
||||
MWState::Character* character = getCurrentCharacter();
|
||||
if (!character)
|
||||
{
|
||||
MWWorld::ConstPtr player = MWMechanics::getPlayer();
|
||||
std::string name = player.get<ESM::NPC>()->mBase->mName;
|
||||
|
||||
character = mCharacterManager.createCharacter(name);
|
||||
mCharacterManager.setCurrentCharacter(character);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ESM::SavedGame profile;
|
||||
@ -204,9 +214,9 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot
|
||||
writeScreenshot(profile.mScreenshot);
|
||||
|
||||
if (!slot)
|
||||
slot = getCurrentCharacter(true)->createSlot (profile);
|
||||
slot = character->createSlot (profile);
|
||||
else
|
||||
slot = getCurrentCharacter(true)->updateSlot (slot, profile);
|
||||
slot = character->updateSlot (slot, profile);
|
||||
|
||||
// Write to a memory stream first. If there is an exception during the save process, we don't want to trash the
|
||||
// existing save file we are overwriting.
|
||||
@ -290,7 +300,10 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot
|
||||
|
||||
// If no file was written, clean up the slot
|
||||
if (slot && !boost::filesystem::exists(slot->mPath))
|
||||
getCurrentCharacter(true)->deleteSlot(slot);
|
||||
{
|
||||
character->deleteSlot(slot);
|
||||
character->cleanup();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -306,13 +319,16 @@ void MWState::StateManager::quickSave (std::string name)
|
||||
}
|
||||
|
||||
const Slot* slot = NULL;
|
||||
Character* mCurrentCharacter = getCurrentCharacter(true); //Get current character
|
||||
Character* currentCharacter = getCurrentCharacter(); //Get current character
|
||||
|
||||
//Find quicksave slot
|
||||
for (Character::SlotIterator it = mCurrentCharacter->begin(); it != mCurrentCharacter->end(); ++it)
|
||||
if (currentCharacter)
|
||||
{
|
||||
if (it->mProfile.mDescription == name)
|
||||
slot = &*it;
|
||||
for (Character::SlotIterator it = currentCharacter->begin(); it != currentCharacter->end(); ++it)
|
||||
{
|
||||
if (it->mProfile.mDescription == name)
|
||||
slot = &*it;
|
||||
}
|
||||
}
|
||||
|
||||
saveGame(name, slot);
|
||||
@ -334,7 +350,7 @@ void MWState::StateManager::loadGame(const std::string& filepath)
|
||||
}
|
||||
}
|
||||
|
||||
MWState::Character* character = getCurrentCharacter(false);
|
||||
MWState::Character* character = getCurrentCharacter();
|
||||
loadGame(character, filepath);
|
||||
}
|
||||
|
||||
@ -506,7 +522,7 @@ void MWState::StateManager::loadGame (const Character *character, const std::str
|
||||
|
||||
void MWState::StateManager::quickLoad()
|
||||
{
|
||||
if (Character* currentCharacter = getCurrentCharacter (false))
|
||||
if (Character* currentCharacter = getCurrentCharacter ())
|
||||
{
|
||||
if (currentCharacter->begin() == currentCharacter->end())
|
||||
return;
|
||||
@ -519,12 +535,9 @@ void MWState::StateManager::deleteGame(const MWState::Character *character, cons
|
||||
mCharacterManager.deleteSlot(character, slot);
|
||||
}
|
||||
|
||||
MWState::Character *MWState::StateManager::getCurrentCharacter (bool create)
|
||||
MWState::Character *MWState::StateManager::getCurrentCharacter ()
|
||||
{
|
||||
MWWorld::ConstPtr player = MWMechanics::getPlayer();
|
||||
std::string name = player.get<ESM::NPC>()->mBase->mName;
|
||||
|
||||
return mCharacterManager.getCurrentCharacter (create, name);
|
||||
return mCharacterManager.getCurrentCharacter();
|
||||
}
|
||||
|
||||
MWState::StateManager::CharacterIterator MWState::StateManager::characterBegin()
|
||||
@ -545,7 +558,7 @@ void MWState::StateManager::update (float duration)
|
||||
if (mAskLoadRecent)
|
||||
{
|
||||
int iButton = MWBase::Environment::get().getWindowManager()->readPressedButton();
|
||||
MWState::Character *curCharacter = getCurrentCharacter(false);
|
||||
MWState::Character *curCharacter = getCurrentCharacter();
|
||||
if(iButton==0 && curCharacter)
|
||||
{
|
||||
mAskLoadRecent = false;
|
||||
|
@ -73,8 +73,8 @@ namespace MWState
|
||||
virtual void loadGame (const Character *character, const std::string &filepath);
|
||||
///< Load a saved game file belonging to the given character.
|
||||
|
||||
virtual Character *getCurrentCharacter (bool create);
|
||||
///< \param create Create a new character, if there is no current character.
|
||||
virtual Character *getCurrentCharacter ();
|
||||
///< @note May return null.
|
||||
|
||||
virtual CharacterIterator characterBegin();
|
||||
///< Any call to SaveGame and getCurrentCharacter can invalidate the returned
|
||||
|
Loading…
x
Reference in New Issue
Block a user