mirror of
https://github.com/OpenMW/openmw.git
synced 2025-06-21 13:41:41 +00:00
Fix for dereferencing past end of mGuiModes.
This commit is contained in:
parent
f130f8535c
commit
281d3b4c95
1 changed files with 122 additions and 119 deletions
|
@ -442,128 +442,131 @@ namespace MWGui
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
GuiMode mode = mGuiModes.back();
|
if(mGuiModes.size() != 0)
|
||||||
|
{
|
||||||
|
GuiMode mode = mGuiModes.back();
|
||||||
|
|
||||||
switch(mode) {
|
switch(mode) {
|
||||||
case GM_QuickKeysMenu:
|
case GM_QuickKeysMenu:
|
||||||
mQuickKeysMenu->setVisible (true);
|
mQuickKeysMenu->setVisible (true);
|
||||||
break;
|
break;
|
||||||
case GM_MainMenu:
|
case GM_MainMenu:
|
||||||
mMenu->setVisible(true);
|
mMenu->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Settings:
|
case GM_Settings:
|
||||||
mSettingsWindow->setVisible(true);
|
mSettingsWindow->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Console:
|
case GM_Console:
|
||||||
mConsole->setVisible(true);
|
mConsole->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Scroll:
|
case GM_Scroll:
|
||||||
mScrollWindow->setVisible(true);
|
mScrollWindow->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Book:
|
case GM_Book:
|
||||||
mBookWindow->setVisible(true);
|
mBookWindow->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Alchemy:
|
case GM_Alchemy:
|
||||||
mAlchemyWindow->setVisible(true);
|
mAlchemyWindow->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Rest:
|
case GM_Rest:
|
||||||
mWaitDialog->setVisible(true);
|
mWaitDialog->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_RestBed:
|
case GM_RestBed:
|
||||||
mWaitDialog->setVisible(true);
|
mWaitDialog->setVisible(true);
|
||||||
mWaitDialog->bedActivated();
|
mWaitDialog->bedActivated();
|
||||||
break;
|
break;
|
||||||
case GM_Levelup:
|
case GM_Levelup:
|
||||||
mLevelupDialog->setVisible(true);
|
mLevelupDialog->setVisible(true);
|
||||||
break;
|
break;
|
||||||
case GM_Name:
|
case GM_Name:
|
||||||
case GM_Race:
|
case GM_Race:
|
||||||
case GM_Class:
|
case GM_Class:
|
||||||
case GM_ClassPick:
|
case GM_ClassPick:
|
||||||
case GM_ClassCreate:
|
case GM_ClassCreate:
|
||||||
case GM_Birth:
|
case GM_Birth:
|
||||||
case GM_ClassGenerate:
|
case GM_ClassGenerate:
|
||||||
case GM_Review:
|
case GM_Review:
|
||||||
mCharGen->spawnDialog(mode);
|
mCharGen->spawnDialog(mode);
|
||||||
break;
|
break;
|
||||||
case GM_Inventory:
|
case GM_Inventory:
|
||||||
{
|
{
|
||||||
// First, compute the effective set of windows to show.
|
// First, compute the effective set of windows to show.
|
||||||
// This is controlled both by what windows the
|
// This is controlled both by what windows the
|
||||||
// user has opened/closed (the 'shown' variable) and by what
|
// user has opened/closed (the 'shown' variable) and by what
|
||||||
// windows we are allowed to show (the 'allowed' var.)
|
// windows we are allowed to show (the 'allowed' var.)
|
||||||
int eff = mShown & mAllowed & ~mForceHidden;
|
int eff = mShown & mAllowed & ~mForceHidden;
|
||||||
|
|
||||||
// Show the windows we want
|
// Show the windows we want
|
||||||
mMap ->setVisible(eff & GW_Map);
|
mMap ->setVisible(eff & GW_Map);
|
||||||
mStatsWindow ->setVisible(eff & GW_Stats);
|
mStatsWindow ->setVisible(eff & GW_Stats);
|
||||||
mInventoryWindow->setVisible(eff & GW_Inventory);
|
mInventoryWindow->setVisible(eff & GW_Inventory);
|
||||||
mInventoryWindow->setGuiMode(mode);
|
mInventoryWindow->setGuiMode(mode);
|
||||||
mSpellWindow ->setVisible(eff & GW_Magic);
|
mSpellWindow ->setVisible(eff & GW_Magic);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
case GM_Container:
|
||||||
|
mContainerWindow->setVisible(true);
|
||||||
|
mInventoryWindow->setVisible(true);
|
||||||
|
mInventoryWindow->setGuiMode(mode);
|
||||||
|
break;
|
||||||
|
case GM_Companion:
|
||||||
|
mCompanionWindow->setVisible(true);
|
||||||
|
mInventoryWindow->setVisible(true);
|
||||||
|
mInventoryWindow->setGuiMode(mode);
|
||||||
|
break;
|
||||||
|
case GM_Dialogue:
|
||||||
|
mDialogueWindow->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Barter:
|
||||||
|
mInventoryWindow->setVisible(true);
|
||||||
|
mInventoryWindow->setTrading(true);
|
||||||
|
mInventoryWindow->setGuiMode(mode);
|
||||||
|
mTradeWindow->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_SpellBuying:
|
||||||
|
mSpellBuyingWindow->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Travel:
|
||||||
|
mTravelWindow->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_SpellCreation:
|
||||||
|
mSpellCreationDialog->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Recharge:
|
||||||
|
mRecharge->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Enchanting:
|
||||||
|
mEnchantingDialog->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Training:
|
||||||
|
mTrainingWindow->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_MerchantRepair:
|
||||||
|
mMerchantRepair->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Repair:
|
||||||
|
mRepair->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_Journal:
|
||||||
|
mJournal->setVisible(true);
|
||||||
|
break;
|
||||||
|
case GM_LoadingWallpaper:
|
||||||
|
mHud->setVisible(false);
|
||||||
|
setCursorVisible(false);
|
||||||
|
break;
|
||||||
|
case GM_Loading:
|
||||||
|
// Show the pinned windows
|
||||||
|
mMap->setVisible(mMap->pinned() && !(mForceHidden & GW_Map));
|
||||||
|
mStatsWindow->setVisible(mStatsWindow->pinned() && !(mForceHidden & GW_Stats));
|
||||||
|
mInventoryWindow->setVisible(mInventoryWindow->pinned() && !(mForceHidden & GW_Inventory));
|
||||||
|
mSpellWindow->setVisible(mSpellWindow->pinned() && !(mForceHidden & GW_Magic));
|
||||||
|
|
||||||
|
setCursorVisible(false);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
// Unsupported mode, switch back to game
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case GM_Container:
|
|
||||||
mContainerWindow->setVisible(true);
|
|
||||||
mInventoryWindow->setVisible(true);
|
|
||||||
mInventoryWindow->setGuiMode(mode);
|
|
||||||
break;
|
|
||||||
case GM_Companion:
|
|
||||||
mCompanionWindow->setVisible(true);
|
|
||||||
mInventoryWindow->setVisible(true);
|
|
||||||
mInventoryWindow->setGuiMode(mode);
|
|
||||||
break;
|
|
||||||
case GM_Dialogue:
|
|
||||||
mDialogueWindow->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Barter:
|
|
||||||
mInventoryWindow->setVisible(true);
|
|
||||||
mInventoryWindow->setTrading(true);
|
|
||||||
mInventoryWindow->setGuiMode(mode);
|
|
||||||
mTradeWindow->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_SpellBuying:
|
|
||||||
mSpellBuyingWindow->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Travel:
|
|
||||||
mTravelWindow->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_SpellCreation:
|
|
||||||
mSpellCreationDialog->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Recharge:
|
|
||||||
mRecharge->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Enchanting:
|
|
||||||
mEnchantingDialog->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Training:
|
|
||||||
mTrainingWindow->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_MerchantRepair:
|
|
||||||
mMerchantRepair->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Repair:
|
|
||||||
mRepair->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_Journal:
|
|
||||||
mJournal->setVisible(true);
|
|
||||||
break;
|
|
||||||
case GM_LoadingWallpaper:
|
|
||||||
mHud->setVisible(false);
|
|
||||||
setCursorVisible(false);
|
|
||||||
break;
|
|
||||||
case GM_Loading:
|
|
||||||
// Show the pinned windows
|
|
||||||
mMap->setVisible(mMap->pinned() && !(mForceHidden & GW_Map));
|
|
||||||
mStatsWindow->setVisible(mStatsWindow->pinned() && !(mForceHidden & GW_Stats));
|
|
||||||
mInventoryWindow->setVisible(mInventoryWindow->pinned() && !(mForceHidden & GW_Inventory));
|
|
||||||
mSpellWindow->setVisible(mSpellWindow->pinned() && !(mForceHidden & GW_Magic));
|
|
||||||
|
|
||||||
setCursorVisible(false);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
// Unsupported mode, switch back to game
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue