|
|
|
@ -79,44 +79,49 @@ namespace MWGui
|
|
|
|
|
delete mMagicSelectionDialog;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QuickKeysMenu::onOpen()
|
|
|
|
|
// Check if quick keys are still valid
|
|
|
|
|
void QuickKeysMenu::validate(MWWorld::Ptr player)
|
|
|
|
|
{
|
|
|
|
|
WindowBase::onOpen();
|
|
|
|
|
|
|
|
|
|
MWWorld::Ptr player = MWMechanics::getPlayer();
|
|
|
|
|
MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player);
|
|
|
|
|
|
|
|
|
|
// Check if quick keys are still valid
|
|
|
|
|
for (int i=0; i<10; ++i)
|
|
|
|
|
for (int i = 0; i < 10; ++i)
|
|
|
|
|
{
|
|
|
|
|
switch (mKey[i].type)
|
|
|
|
|
{
|
|
|
|
|
case Type_Unassigned:
|
|
|
|
|
case Type_HandToHand:
|
|
|
|
|
case Type_Magic:
|
|
|
|
|
break;
|
|
|
|
|
case Type_Item:
|
|
|
|
|
case Type_MagicItem:
|
|
|
|
|
{
|
|
|
|
|
MWWorld::Ptr item = *mKey[i].button->getUserData<MWWorld::Ptr>();
|
|
|
|
|
// Make sure the item is available and is not broken
|
|
|
|
|
if (!item || item.getRefData().getCount() < 1 ||
|
|
|
|
|
(item.getClass().hasItemHealth(item) &&
|
|
|
|
|
case Type_Unassigned:
|
|
|
|
|
case Type_HandToHand:
|
|
|
|
|
case Type_Magic:
|
|
|
|
|
break;
|
|
|
|
|
case Type_Item:
|
|
|
|
|
case Type_MagicItem:
|
|
|
|
|
{
|
|
|
|
|
MWWorld::Ptr item = *mKey[i].button->getUserData<MWWorld::Ptr>();
|
|
|
|
|
// Make sure the item is available and is not broken
|
|
|
|
|
if (!item || item.getRefData().getCount() < 1 ||
|
|
|
|
|
(item.getClass().hasItemHealth(item) &&
|
|
|
|
|
item.getClass().getItemHealth(item) <= 0))
|
|
|
|
|
{
|
|
|
|
|
// Try searching for a compatible replacement
|
|
|
|
|
item = store.findReplacement(mKey[i].id);
|
|
|
|
|
{
|
|
|
|
|
// Try searching for a compatible replacement
|
|
|
|
|
item = store.findReplacement(mKey[i].id);
|
|
|
|
|
|
|
|
|
|
if (item)
|
|
|
|
|
mKey[i].button->setUserData(MWWorld::Ptr(item));
|
|
|
|
|
if (item)
|
|
|
|
|
mKey[i].button->setUserData(MWWorld::Ptr(item));
|
|
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QuickKeysMenu::onOpen()
|
|
|
|
|
{
|
|
|
|
|
WindowBase::onOpen();
|
|
|
|
|
|
|
|
|
|
MWWorld::Ptr player = MWMechanics::getPlayer();
|
|
|
|
|
validate(player);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void QuickKeysMenu::unassign(keyData* key)
|
|
|
|
|
{
|
|
|
|
|
key->button->clearUserStrings();
|
|
|
|
@ -334,6 +339,8 @@ namespace MWGui
|
|
|
|
|
MWWorld::InventoryStore& store = player.getClass().getInventoryStore(player);
|
|
|
|
|
const MWMechanics::CreatureStats &playerStats = player.getClass().getCreatureStats(player);
|
|
|
|
|
|
|
|
|
|
validate(player);
|
|
|
|
|
|
|
|
|
|
// Delay action executing,
|
|
|
|
|
// if player is busy for now (casting a spell, attacking someone, etc.)
|
|
|
|
|
bool isDelayNeeded = MWBase::Environment::get().getMechanicsManager()->isAttackingOrSpell(player)
|
|
|
|
|