mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-01 10:15:38 +00:00
Fixes #1309: Do not allow saving while dialogs are opened, just like vanilla
This limitation could be removed post-1.0 by serializing the state of open windows.
This commit is contained in:
parent
17bb8d7f9a
commit
6381b1e938
6 changed files with 33 additions and 3 deletions
|
@ -306,6 +306,9 @@ namespace MWBase
|
|||
virtual void write (ESM::ESMWriter& writer, Loading::Listener& progress) = 0;
|
||||
virtual void readRecord (ESM::ESMReader& reader, int32_t type) = 0;
|
||||
virtual int countSavedGameRecords() const = 0;
|
||||
|
||||
/// Does the current stack of GUI-windows permit saving?
|
||||
virtual bool isSavingAllowed() const = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -170,7 +170,8 @@ namespace MWGui
|
|||
buttons.push_back("loadgame");
|
||||
|
||||
if (state==MWBase::StateManager::State_Running &&
|
||||
MWBase::Environment::get().getWorld()->getGlobalInt ("chargenstate")==-1)
|
||||
MWBase::Environment::get().getWorld()->getGlobalInt ("chargenstate")==-1 &&
|
||||
MWBase::Environment::get().getWindowManager()->isSavingAllowed())
|
||||
buttons.push_back("savegame");
|
||||
|
||||
buttons.push_back("options");
|
||||
|
|
|
@ -17,6 +17,8 @@ namespace MWGui
|
|||
|
||||
void checkReferenceAvailable(); ///< closes the window, if the MW-reference has become unavailable
|
||||
|
||||
void resetReference() { mPtr = MWWorld::Ptr(); mCurrentPlayerCell = NULL; }
|
||||
|
||||
protected:
|
||||
virtual void onReferenceUnavailable() = 0; ///< called when reference has become unavailable
|
||||
|
||||
|
|
|
@ -1406,6 +1406,19 @@ namespace MWGui
|
|||
{
|
||||
mMap->clear();
|
||||
mQuickKeysMenu->clear();
|
||||
|
||||
mTrainingWindow->resetReference();
|
||||
mDialogueWindow->resetReference();
|
||||
mTradeWindow->resetReference();
|
||||
mSpellBuyingWindow->resetReference();
|
||||
mSpellCreationDialog->resetReference();
|
||||
mEnchantingDialog->resetReference();
|
||||
mContainerWindow->resetReference();
|
||||
mCompanionWindow->resetReference();
|
||||
mConsole->resetReference();
|
||||
|
||||
mGuiModes.clear();
|
||||
updateVisible();
|
||||
}
|
||||
|
||||
void WindowManager::write(ESM::ESMWriter &writer, Loading::Listener& progress)
|
||||
|
@ -1430,6 +1443,13 @@ namespace MWGui
|
|||
+ 1; // QuickKeysMenu
|
||||
}
|
||||
|
||||
bool WindowManager::isSavingAllowed() const
|
||||
{
|
||||
return !MyGUI::InputManager::getInstance().isModalAny()
|
||||
// TODO: remove this, once we have properly serialized the state of open windows
|
||||
&& (!isGuiMode() || (mGuiModes.size() == 1 && getMode() == GM_MainMenu));
|
||||
}
|
||||
|
||||
void WindowManager::playVideo(const std::string &name, bool allowSkipping)
|
||||
{
|
||||
mVideoWidget->playVideo("video\\" + name, allowSkipping);
|
||||
|
|
|
@ -295,6 +295,9 @@ namespace MWGui
|
|||
virtual void readRecord (ESM::ESMReader& reader, int32_t type);
|
||||
virtual int countSavedGameRecords() const;
|
||||
|
||||
/// Does the current stack of GUI-windows permit saving?
|
||||
virtual bool isSavingAllowed() const;
|
||||
|
||||
private:
|
||||
bool mConsoleOnlyScripts;
|
||||
|
||||
|
|
|
@ -235,8 +235,9 @@ void MWState::StateManager::saveGame (const std::string& description, const Slot
|
|||
|
||||
void MWState::StateManager::quickSave (std::string name)
|
||||
{
|
||||
if (mState!=State_Running ||
|
||||
MWBase::Environment::get().getWorld()->getGlobalInt ("chargenstate")!=-1) // char gen
|
||||
if (!(mState==State_Running &&
|
||||
MWBase::Environment::get().getWorld()->getGlobalInt ("chargenstate")==-1 // char gen
|
||||
&& MWBase::Environment::get().getWindowManager()->isSavingAllowed()))
|
||||
{
|
||||
//You can not save your game right now
|
||||
MWBase::Environment::get().getWindowManager()->messageBox("#{sSaveGameDenied}");
|
||||
|
|
Loading…
Reference in a new issue