mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-30 13:15:32 +00:00
Merge pull request #1209 from dhustkoder/master
Added ConstContainerStoreIterator (Task #3092)
This commit is contained in:
commit
1692b7f38e
27 changed files with 441 additions and 283 deletions
|
@ -43,8 +43,8 @@ namespace MWClass
|
|||
|
||||
void Actor::block(const MWWorld::Ptr &ptr) const
|
||||
{
|
||||
MWWorld::InventoryStore& inv = getInventoryStore(ptr);
|
||||
MWWorld::ContainerStoreIterator shield = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
const MWWorld::InventoryStore& inv = getInventoryStore(ptr);
|
||||
MWWorld::ConstContainerStoreIterator shield = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if (shield == inv.end())
|
||||
return;
|
||||
|
||||
|
|
|
@ -295,7 +295,7 @@ namespace MWClass
|
|||
|
||||
std::pair<int, std::string> Armor::canBeEquipped(const MWWorld::ConstPtr &ptr, const MWWorld::Ptr &npc) const
|
||||
{
|
||||
MWWorld::InventoryStore& invStore = npc.getClass().getInventoryStore(npc);
|
||||
const MWWorld::InventoryStore& invStore = npc.getClass().getInventoryStore(npc);
|
||||
|
||||
if (ptr.getCellRef().getCharge() == 0)
|
||||
return std::make_pair(0, "#{sInventoryMessage1}");
|
||||
|
@ -332,7 +332,7 @@ namespace MWClass
|
|||
// If equipping a shield, check if there's a twohanded weapon conflicting with it
|
||||
if(*slot == MWWorld::InventoryStore::Slot_CarriedLeft)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator weapon = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
MWWorld::ConstContainerStoreIterator weapon = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
|
||||
if(weapon == invStore.end())
|
||||
return std::make_pair(1,"");
|
||||
|
|
|
@ -139,7 +139,7 @@ namespace MWClass
|
|||
const std::string trapActivationSound = "Disarm Trap Fail";
|
||||
|
||||
MWWorld::Ptr player = MWBase::Environment::get().getWorld ()->getPlayerPtr();
|
||||
MWWorld::InventoryStore& invStore = player.getClass().getInventoryStore(player);
|
||||
const MWWorld::InventoryStore& invStore = player.getClass().getInventoryStore(player);
|
||||
|
||||
bool isLocked = ptr.getCellRef().getLockLevel() > 0;
|
||||
bool isTrapped = !ptr.getCellRef().getTrap().empty();
|
||||
|
@ -149,7 +149,7 @@ namespace MWClass
|
|||
// make key id lowercase
|
||||
std::string keyId = ptr.getCellRef().getKey();
|
||||
Misc::StringUtils::lowerCaseInPlace(keyId);
|
||||
for (MWWorld::ContainerStoreIterator it = invStore.begin(); it != invStore.end(); ++it)
|
||||
for (MWWorld::ConstContainerStoreIterator it = invStore.cbegin(); it != invStore.cend(); ++it)
|
||||
{
|
||||
std::string refId = it->getCellRef().getRefId();
|
||||
Misc::StringUtils::lowerCaseInPlace(refId);
|
||||
|
|
|
@ -194,10 +194,10 @@ namespace MWClass
|
|||
// FIXME: use const version of InventoryStore functions once they are available
|
||||
if (ptr.getClass().hasInventoryStore(ptr))
|
||||
{
|
||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore(ptr);
|
||||
const MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore(ptr);
|
||||
for (int slot = 0; slot < MWWorld::InventoryStore::Slots; ++slot)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator equipped = invStore.getSlot(slot);
|
||||
MWWorld::ConstContainerStoreIterator equipped = invStore.getSlot(slot);
|
||||
if (equipped != invStore.end())
|
||||
{
|
||||
model = equipped->getClass().getModel(*equipped);
|
||||
|
|
|
@ -109,7 +109,7 @@ namespace MWClass
|
|||
const std::string lockedSound = "LockedDoor";
|
||||
const std::string trapActivationSound = "Disarm Trap Fail";
|
||||
|
||||
MWWorld::ContainerStore &invStore = actor.getClass().getContainerStore(actor);
|
||||
const MWWorld::ContainerStore &invStore = actor.getClass().getContainerStore(actor);
|
||||
|
||||
bool isLocked = ptr.getCellRef().getLockLevel() > 0;
|
||||
bool isTrapped = !ptr.getCellRef().getTrap().empty();
|
||||
|
@ -133,7 +133,7 @@ namespace MWClass
|
|||
// make key id lowercase
|
||||
std::string keyId = ptr.getCellRef().getKey();
|
||||
Misc::StringUtils::lowerCaseInPlace(keyId);
|
||||
for (MWWorld::ContainerStoreIterator it = invStore.begin(); it != invStore.end(); ++it)
|
||||
for (MWWorld::ConstContainerStoreIterator it = invStore.cbegin(); it != invStore.cend(); ++it)
|
||||
{
|
||||
std::string refId = it->getCellRef().getRefId();
|
||||
Misc::StringUtils::lowerCaseInPlace(refId);
|
||||
|
|
|
@ -233,8 +233,8 @@ namespace MWClass
|
|||
if (!(ref->mBase->mData.mFlags & ESM::Light::Carry))
|
||||
return std::make_pair(0,"");
|
||||
|
||||
MWWorld::InventoryStore& invStore = npc.getClass().getInventoryStore(npc);
|
||||
MWWorld::ContainerStoreIterator weapon = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
const MWWorld::InventoryStore& invStore = npc.getClass().getInventoryStore(npc);
|
||||
MWWorld::ConstContainerStoreIterator weapon = invStore.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
|
||||
if(weapon == invStore.end())
|
||||
return std::make_pair(1,"");
|
||||
|
|
|
@ -466,10 +466,10 @@ namespace MWClass
|
|||
// preload equipped items
|
||||
if (ptr.getClass().hasInventoryStore(ptr))
|
||||
{
|
||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore(ptr);
|
||||
const MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore(ptr);
|
||||
for (int slot = 0; slot < MWWorld::InventoryStore::Slots; ++slot)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator equipped = invStore.getSlot(slot);
|
||||
MWWorld::ConstContainerStoreIterator equipped = invStore.getSlot(slot);
|
||||
if (equipped != invStore.end())
|
||||
{
|
||||
std::vector<ESM::PartReference> parts;
|
||||
|
@ -1079,7 +1079,7 @@ namespace MWClass
|
|||
const MWWorld::Store<ESM::GameSetting> &store = world->getStore().get<ESM::GameSetting>();
|
||||
|
||||
MWMechanics::NpcStats &stats = getNpcStats(ptr);
|
||||
MWWorld::InventoryStore &invStore = getInventoryStore(ptr);
|
||||
const MWWorld::InventoryStore &invStore = getInventoryStore(ptr);
|
||||
|
||||
float fUnarmoredBase1 = store.find("fUnarmoredBase1")->getFloat();
|
||||
float fUnarmoredBase2 = store.find("fUnarmoredBase2")->getFloat();
|
||||
|
@ -1088,7 +1088,7 @@ namespace MWClass
|
|||
float ratings[MWWorld::InventoryStore::Slots];
|
||||
for(int i = 0;i < MWWorld::InventoryStore::Slots;i++)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator it = invStore.getSlot(i);
|
||||
MWWorld::ConstContainerStoreIterator it = invStore.getSlot(i);
|
||||
if (it == invStore.end() || it->getTypeName() != typeid(ESM::Armor).name())
|
||||
{
|
||||
// unarmored
|
||||
|
@ -1169,8 +1169,8 @@ namespace MWClass
|
|||
return "";
|
||||
}
|
||||
|
||||
MWWorld::InventoryStore &inv = Npc::getInventoryStore(ptr);
|
||||
MWWorld::ContainerStoreIterator boots = inv.getSlot(MWWorld::InventoryStore::Slot_Boots);
|
||||
const MWWorld::InventoryStore &inv = Npc::getInventoryStore(ptr);
|
||||
MWWorld::ConstContainerStoreIterator boots = inv.getSlot(MWWorld::InventoryStore::Slot_Boots);
|
||||
if(boots == inv.end() || boots->getTypeName() != typeid(ESM::Armor).name())
|
||||
return (name == "left") ? "FootBareLeft" : "FootBareRight";
|
||||
|
||||
|
|
|
@ -344,13 +344,13 @@ int MWDialogue::Filter::getSelectStructInteger (const SelectWrapper& select) con
|
|||
|
||||
case SelectWrapper::Function_PcClothingModifier:
|
||||
{
|
||||
MWWorld::InventoryStore& store = player.getClass().getInventoryStore (player);
|
||||
const MWWorld::InventoryStore& store = player.getClass().getInventoryStore (player);
|
||||
|
||||
int value = 0;
|
||||
|
||||
for (int i=0; i<=15; ++i) // everything except things held in hands and ammunition
|
||||
{
|
||||
MWWorld::ContainerStoreIterator slot = store.getSlot (i);
|
||||
MWWorld::ConstContainerStoreIterator slot = store.getSlot (i);
|
||||
|
||||
if (slot!=store.end())
|
||||
value += slot->getClass().getValue (*slot);
|
||||
|
|
|
@ -44,10 +44,10 @@ void MerchantRepair::startRepair(const MWWorld::Ptr &actor)
|
|||
MWWorld::Ptr player = MWMechanics::getPlayer();
|
||||
int playerGold = player.getClass().getContainerStore(player).count(MWWorld::ContainerStore::sGoldId);
|
||||
|
||||
MWWorld::ContainerStore& store = player.getClass().getContainerStore(player);
|
||||
const MWWorld::ContainerStore& store = player.getClass().getContainerStore(player);
|
||||
int categories = MWWorld::ContainerStore::Type_Weapon | MWWorld::ContainerStore::Type_Armor;
|
||||
for (MWWorld::ContainerStoreIterator iter (store.begin(categories));
|
||||
iter!=store.end(); ++iter)
|
||||
for (MWWorld::ConstContainerStoreIterator iter (store.cbegin(categories));
|
||||
iter!=store.cend(); ++iter)
|
||||
{
|
||||
if (iter->getClass().hasItemHealth(*iter))
|
||||
{
|
||||
|
|
|
@ -310,7 +310,7 @@ namespace MWGui
|
|||
{
|
||||
MWWorld::Ptr item = *button->getUserData<MWWorld::Ptr>();
|
||||
MWBase::Environment::get().getWindowManager()->useItem(item);
|
||||
MWWorld::ContainerStoreIterator rightHand = store.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
MWWorld::ConstContainerStoreIterator rightHand = store.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
// change draw state only if the item is in player's right hand
|
||||
if (rightHand != store.end() && item == *rightHand)
|
||||
{
|
||||
|
|
|
@ -58,7 +58,7 @@ void adjustBoundItem (const std::string& item, bool bound, const MWWorld::Ptr& a
|
|||
MWWorld::Ptr newPtr = *store.MWWorld::ContainerStore::add(item, 1, actor);
|
||||
MWWorld::ActionEquip action(newPtr);
|
||||
action.execute(actor);
|
||||
MWWorld::ContainerStoreIterator rightHand = store.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
MWWorld::ConstContainerStoreIterator rightHand = store.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
// change draw state only if the item is in player's right hand
|
||||
if (actor == MWMechanics::getPlayer()
|
||||
&& rightHand != store.end() && newPtr == *rightHand)
|
||||
|
|
|
@ -1101,7 +1101,7 @@ bool CharacterController::updateWeaponState()
|
|||
if (mPtr.getClass().hasInventoryStore(mPtr))
|
||||
{
|
||||
MWWorld::InventoryStore &inv = cls.getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator weapon = getActiveWeapon(stats, inv, &weaptype);
|
||||
MWWorld::ConstContainerStoreIterator weapon = getActiveWeapon(stats, inv, &weaptype);
|
||||
if(weapon != inv.end() && !(weaptype == WeapType_None && mWeaponType == WeapType_Spell))
|
||||
{
|
||||
soundid = (weaptype == WeapType_None) ?
|
||||
|
@ -1189,12 +1189,12 @@ bool CharacterController::updateWeaponState()
|
|||
if (mPtr.getClass().hasInventoryStore(mPtr))
|
||||
{
|
||||
MWWorld::InventoryStore &inv = cls.getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator weapon = getActiveWeapon(stats, inv, &weaptype);
|
||||
MWWorld::ConstContainerStoreIterator weapon = getActiveWeapon(stats, inv, &weaptype);
|
||||
isWeapon = (weapon != inv.end() && weapon->getTypeName() == typeid(ESM::Weapon).name());
|
||||
if(isWeapon)
|
||||
weapSpeed = weapon->get<ESM::Weapon>()->mBase->mData.mSpeed;
|
||||
|
||||
MWWorld::ContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
MWWorld::ConstContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
if (mWeaponType == WeapType_Crossbow)
|
||||
ammunition = (ammo != inv.end() && ammo->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::Bolt);
|
||||
else if (mWeaponType == WeapType_BowAndArrow)
|
||||
|
@ -1324,7 +1324,7 @@ bool CharacterController::updateWeaponState()
|
|||
{
|
||||
if (Settings::Manager::getBool("best attack", "Game"))
|
||||
{
|
||||
MWWorld::ContainerStoreIterator weapon = mPtr.getClass().getInventoryStore(mPtr).getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
MWWorld::ConstContainerStoreIterator weapon = mPtr.getClass().getInventoryStore(mPtr).getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
mAttackType = getBestAttack(weapon->get<ESM::Weapon>()->mBase);
|
||||
}
|
||||
else
|
||||
|
@ -1523,8 +1523,8 @@ bool CharacterController::updateWeaponState()
|
|||
|
||||
if (mPtr.getClass().hasInventoryStore(mPtr))
|
||||
{
|
||||
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator torch = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
const MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ConstContainerStoreIterator torch = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if(torch != inv.end() && torch->getTypeName() == typeid(ESM::Light).name()
|
||||
&& updateCarriedLeftVisible(mWeaponType))
|
||||
|
||||
|
|
|
@ -6,12 +6,12 @@
|
|||
#include <components/esm/loadmgef.hpp>
|
||||
|
||||
#include "../mwworld/ptr.hpp"
|
||||
#include "../mwworld/containerstore.hpp"
|
||||
|
||||
#include "../mwrender/animation.hpp"
|
||||
|
||||
namespace MWWorld
|
||||
{
|
||||
class ContainerStoreIterator;
|
||||
class InventoryStore;
|
||||
}
|
||||
|
||||
|
|
|
@ -1310,8 +1310,8 @@ namespace MWMechanics
|
|||
float bootWeight = 0;
|
||||
if (ptr.getClass().isNpc())
|
||||
{
|
||||
MWWorld::InventoryStore& inv = ptr.getClass().getInventoryStore(ptr);
|
||||
MWWorld::ContainerStoreIterator it = inv.getSlot(MWWorld::InventoryStore::Slot_Boots);
|
||||
const MWWorld::InventoryStore& inv = ptr.getClass().getInventoryStore(ptr);
|
||||
MWWorld::ConstContainerStoreIterator it = inv.getSlot(MWWorld::InventoryStore::Slot_Boots);
|
||||
if (it != inv.end())
|
||||
bootWeight = it->getClass().getWeight(*it);
|
||||
}
|
||||
|
|
|
@ -31,7 +31,8 @@ ActorAnimation::ActorAnimation(const MWWorld::Ptr& ptr, osg::ref_ptr<osg::Group>
|
|||
{
|
||||
MWWorld::ContainerStore& store = mPtr.getClass().getContainerStore(mPtr);
|
||||
|
||||
for (MWWorld::ContainerStoreIterator iter = store.begin(MWWorld::ContainerStore::Type_Light); iter != store.end(); ++iter)
|
||||
for (MWWorld::ConstContainerStoreIterator iter = store.cbegin(MWWorld::ContainerStore::Type_Light);
|
||||
iter != store.cend(); ++iter)
|
||||
{
|
||||
const ESM::Light* light = iter->get<ESM::Light>()->mBase;
|
||||
if (!(light->mData.mFlags & ESM::Light::Carry))
|
||||
|
|
|
@ -305,7 +305,7 @@ namespace MWRender
|
|||
mCurrentAnimGroup = groupname;
|
||||
mAnimation->play(mCurrentAnimGroup, 1, Animation::BlendMask_All, false, 1.0f, "start", "stop", 0.0f, 0);
|
||||
|
||||
MWWorld::ContainerStoreIterator torch = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
MWWorld::ConstContainerStoreIterator torch = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if(torch != inv.end() && torch->getTypeName() == typeid(ESM::Light).name() && showCarriedLeft)
|
||||
{
|
||||
if(!mAnimation->getInfo("torch"))
|
||||
|
|
|
@ -97,15 +97,15 @@ void CreatureWeaponAnimation::updatePart(PartHolderPtr& scene, int slot)
|
|||
if (!mObjectRoot)
|
||||
return;
|
||||
|
||||
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator it = inv.getSlot(slot);
|
||||
const MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ConstContainerStoreIterator it = inv.getSlot(slot);
|
||||
|
||||
if (it == inv.end())
|
||||
{
|
||||
scene.reset();
|
||||
return;
|
||||
}
|
||||
MWWorld::Ptr item = *it;
|
||||
MWWorld::ConstPtr item = *it;
|
||||
|
||||
std::string bonename;
|
||||
if (slot == MWWorld::InventoryStore::Slot_CarriedRight)
|
||||
|
@ -134,7 +134,7 @@ void CreatureWeaponAnimation::updatePart(PartHolderPtr& scene, int slot)
|
|||
item.getTypeName() == typeid(ESM::Weapon).name() &&
|
||||
item.get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanCrossbow)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
MWWorld::ConstContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
if (ammo != inv.end() && ammo->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::Bolt)
|
||||
attachArrow();
|
||||
else
|
||||
|
|
|
@ -558,10 +558,10 @@ void NpcAnimation::updateParts()
|
|||
bool wasArrowAttached = (mAmmunition.get() != NULL);
|
||||
mAmmunition.reset();
|
||||
|
||||
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
const MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
for(size_t i = 0;i < slotlistsize && mViewMode != VM_HeadOnly;i++)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator store = inv.getSlot(slotlist[i].mSlot);
|
||||
MWWorld::ConstContainerStoreIterator store = inv.getSlot(slotlist[i].mSlot);
|
||||
|
||||
removePartGroup(slotlist[i].mSlot);
|
||||
|
||||
|
@ -618,8 +618,8 @@ void NpcAnimation::updateParts()
|
|||
|
||||
if(mPartPriorities[ESM::PRT_Shield] < 1)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator store = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
MWWorld::Ptr part;
|
||||
MWWorld::ConstContainerStoreIterator store = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
MWWorld::ConstPtr part;
|
||||
if(store != inv.end() && (part=*store).getTypeName() == typeid(ESM::Light).name())
|
||||
{
|
||||
const ESM::Light *light = part.get<ESM::Light>()->mBase;
|
||||
|
@ -748,8 +748,8 @@ bool NpcAnimation::addOrReplaceIndividualPart(ESM::PartReferenceType type, int g
|
|||
|
||||
if (!mSoundsDisabled)
|
||||
{
|
||||
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator csi = inv.getSlot(group < 0 ? MWWorld::InventoryStore::Slot_Helmet : group);
|
||||
const MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ConstContainerStoreIterator csi = inv.getSlot(group < 0 ? MWWorld::InventoryStore::Slot_Helmet : group);
|
||||
if (csi != inv.end())
|
||||
{
|
||||
mSoundIds[type] = csi->getClass().getSound(*csi);
|
||||
|
@ -883,8 +883,8 @@ void NpcAnimation::showWeapons(bool showWeapon)
|
|||
mAmmunition.reset();
|
||||
if(showWeapon)
|
||||
{
|
||||
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator weapon = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
const MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ConstContainerStoreIterator weapon = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
if(weapon != inv.end())
|
||||
{
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*weapon);
|
||||
|
@ -896,7 +896,7 @@ void NpcAnimation::showWeapons(bool showWeapon)
|
|||
if (weapon->getTypeName() == typeid(ESM::Weapon).name() &&
|
||||
weapon->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::MarksmanCrossbow)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
MWWorld::ConstContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
if (ammo != inv.end() && ammo->get<ESM::Weapon>()->mBase->mData.mType == ESM::Weapon::Bolt)
|
||||
attachArrow();
|
||||
}
|
||||
|
@ -911,8 +911,8 @@ void NpcAnimation::showWeapons(bool showWeapon)
|
|||
void NpcAnimation::showCarriedLeft(bool show)
|
||||
{
|
||||
mShowCarriedLeft = show;
|
||||
MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ContainerStoreIterator iter = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
const MWWorld::InventoryStore& inv = mPtr.getClass().getInventoryStore(mPtr);
|
||||
MWWorld::ConstContainerStoreIterator iter = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedLeft);
|
||||
if(show && iter != inv.end())
|
||||
{
|
||||
osg::Vec4f glowColor = getEnchantmentColor(*iter);
|
||||
|
|
|
@ -56,8 +56,8 @@ WeaponAnimation::~WeaponAnimation()
|
|||
|
||||
void WeaponAnimation::attachArrow(MWWorld::Ptr actor)
|
||||
{
|
||||
MWWorld::InventoryStore& inv = actor.getClass().getInventoryStore(actor);
|
||||
MWWorld::ContainerStoreIterator weaponSlot = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
const MWWorld::InventoryStore& inv = actor.getClass().getInventoryStore(actor);
|
||||
MWWorld::ConstContainerStoreIterator weaponSlot = inv.getSlot(MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
if (weaponSlot == inv.end())
|
||||
return;
|
||||
if (weaponSlot->getTypeName() != typeid(ESM::Weapon).name())
|
||||
|
@ -79,7 +79,7 @@ void WeaponAnimation::attachArrow(MWWorld::Ptr actor)
|
|||
if (!parent)
|
||||
return;
|
||||
|
||||
MWWorld::ContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
MWWorld::ConstContainerStoreIterator ammo = inv.getSlot(MWWorld::InventoryStore::Slot_Ammunition);
|
||||
if (ammo == inv.end())
|
||||
return;
|
||||
std::string model = ammo->getClass().getModel(*ammo);
|
||||
|
|
|
@ -140,7 +140,7 @@ namespace MWScript
|
|||
MWWorld::ContainerStore& store = ptr.getClass().getContainerStore (ptr);
|
||||
|
||||
std::string itemName;
|
||||
for (MWWorld::ContainerStoreIterator iter(store.begin()); iter != store.end(); ++iter)
|
||||
for (MWWorld::ConstContainerStoreIterator iter(store.cbegin()); iter != store.cend(); ++iter)
|
||||
if (::Misc::StringUtils::ciEqual(iter->getCellRef().getRefId(), item))
|
||||
itemName = iter->getClass().getName(*iter);
|
||||
|
||||
|
@ -256,9 +256,9 @@ namespace MWScript
|
|||
throw std::runtime_error ("armor index out of range");
|
||||
}
|
||||
|
||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
|
||||
MWWorld::ContainerStoreIterator it = invStore.getSlot (slot);
|
||||
const MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
MWWorld::ConstContainerStoreIterator it = invStore.getSlot (slot);
|
||||
|
||||
if (it == invStore.end() || it->getTypeName () != typeid(ESM::Armor).name())
|
||||
{
|
||||
runtime.push(-1);
|
||||
|
@ -289,10 +289,10 @@ namespace MWScript
|
|||
std::string item = runtime.getStringLiteral (runtime[0].mInteger);
|
||||
runtime.pop();
|
||||
|
||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
const MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
for (int slot = 0; slot < MWWorld::InventoryStore::Slots; ++slot)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator it = invStore.getSlot (slot);
|
||||
MWWorld::ConstContainerStoreIterator it = invStore.getSlot (slot);
|
||||
if (it != invStore.end() && ::Misc::StringUtils::ciEqual(it->getCellRef().getRefId(), item))
|
||||
{
|
||||
runtime.push(1);
|
||||
|
@ -316,9 +316,9 @@ namespace MWScript
|
|||
runtime.pop();
|
||||
|
||||
int count = 0;
|
||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
for (MWWorld::ContainerStoreIterator it = invStore.begin(MWWorld::ContainerStore::Type_Miscellaneous);
|
||||
it != invStore.end(); ++it)
|
||||
const MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
for (MWWorld::ConstContainerStoreIterator it = invStore.cbegin(MWWorld::ContainerStore::Type_Miscellaneous);
|
||||
it != invStore.cend(); ++it)
|
||||
{
|
||||
if (::Misc::StringUtils::ciEqual(it->getCellRef().getSoul(), name))
|
||||
count += it->getRefData().getCount();
|
||||
|
@ -336,8 +336,8 @@ namespace MWScript
|
|||
{
|
||||
MWWorld::Ptr ptr = R()(runtime);
|
||||
|
||||
MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
MWWorld::ContainerStoreIterator it = invStore.getSlot (MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
const MWWorld::InventoryStore& invStore = ptr.getClass().getInventoryStore (ptr);
|
||||
MWWorld::ConstContainerStoreIterator it = invStore.getSlot (MWWorld::InventoryStore::Slot_CarriedRight);
|
||||
if (it == invStore.end() || it->getTypeName () != typeid(ESM::Weapon).name())
|
||||
{
|
||||
runtime.push(-1);
|
||||
|
|
|
@ -519,7 +519,7 @@ namespace MWScript
|
|||
int numNotEquipped = invStorePtr->count(item);
|
||||
for (int slot = 0; slot < MWWorld::InventoryStore::Slots; ++slot)
|
||||
{
|
||||
MWWorld::ContainerStoreIterator it = invStorePtr->getSlot (slot);
|
||||
MWWorld::ConstContainerStoreIterator it = invStorePtr->getSlot (slot);
|
||||
if (it != invStorePtr->end() && ::Misc::StringUtils::ciEqual(it->getCellRef().getRefId(), item))
|
||||
{
|
||||
numNotEquipped -= it->getRefData().getCount();
|
||||
|
|
|
@ -117,6 +117,26 @@ MWWorld::ContainerStore::ContainerStore() : mListener(NULL), mCachedWeight (0),
|
|||
|
||||
MWWorld::ContainerStore::~ContainerStore() {}
|
||||
|
||||
MWWorld::ConstContainerStoreIterator MWWorld::ContainerStore::cbegin (int mask) const
|
||||
{
|
||||
return ConstContainerStoreIterator (mask, this);
|
||||
}
|
||||
|
||||
MWWorld::ConstContainerStoreIterator MWWorld::ContainerStore::cend() const
|
||||
{
|
||||
return ConstContainerStoreIterator (this);
|
||||
}
|
||||
|
||||
MWWorld::ConstContainerStoreIterator MWWorld::ContainerStore::begin (int mask) const
|
||||
{
|
||||
return cbegin(mask);
|
||||
}
|
||||
|
||||
MWWorld::ConstContainerStoreIterator MWWorld::ContainerStore::end() const
|
||||
{
|
||||
return cend();
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator MWWorld::ContainerStore::begin (int mask)
|
||||
{
|
||||
return ContainerStoreIterator (mask, this);
|
||||
|
@ -189,7 +209,7 @@ MWWorld::ContainerStoreIterator MWWorld::ContainerStore::restack(const MWWorld::
|
|||
return retval;
|
||||
}
|
||||
|
||||
bool MWWorld::ContainerStore::stacks(const ConstPtr& ptr1, const ConstPtr& ptr2)
|
||||
bool MWWorld::ContainerStore::stacks(const ConstPtr& ptr1, const ConstPtr& ptr2) const
|
||||
{
|
||||
const MWWorld::Class& cls1 = ptr1.getClass();
|
||||
const MWWorld::Class& cls2 = ptr2.getClass();
|
||||
|
@ -788,53 +808,36 @@ void MWWorld::ContainerStore::readState (const ESM::InventoryState& inventory)
|
|||
mLevelledItemMap = inventory.mLevelledItemMap;
|
||||
}
|
||||
|
||||
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container)
|
||||
: mType (-1), mMask (0), mContainer (container)
|
||||
{}
|
||||
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (int mask, ContainerStore *container)
|
||||
: mType (0), mMask (mask), mContainer (container)
|
||||
template<class PtrType>
|
||||
template<class T>
|
||||
void MWWorld::ContainerStoreIteratorBase<PtrType>::copy (const ContainerStoreIteratorBase<T>& src)
|
||||
{
|
||||
nextType();
|
||||
mType = src.mType;
|
||||
mMask = src.mMask;
|
||||
mContainer = src.mContainer;
|
||||
mPtr = src.mPtr;
|
||||
|
||||
if (mType==-1 || (**this).getRefData().getCount())
|
||||
return;
|
||||
|
||||
++*this;
|
||||
switch (src.mType)
|
||||
{
|
||||
case MWWorld::ContainerStore::Type_Potion: mPotion = src.mPotion; break;
|
||||
case MWWorld::ContainerStore::Type_Apparatus: mApparatus = src.mApparatus; break;
|
||||
case MWWorld::ContainerStore::Type_Armor: mArmor = src.mArmor; break;
|
||||
case MWWorld::ContainerStore::Type_Book: mBook = src.mBook; break;
|
||||
case MWWorld::ContainerStore::Type_Clothing: mClothing = src.mClothing; break;
|
||||
case MWWorld::ContainerStore::Type_Ingredient: mIngredient = src.mIngredient; break;
|
||||
case MWWorld::ContainerStore::Type_Light: mLight = src.mLight; break;
|
||||
case MWWorld::ContainerStore::Type_Lockpick: mLockpick = src.mLockpick; break;
|
||||
case MWWorld::ContainerStore::Type_Miscellaneous: mMiscellaneous = src.mMiscellaneous; break;
|
||||
case MWWorld::ContainerStore::Type_Probe: mProbe = src.mProbe; break;
|
||||
case MWWorld::ContainerStore::Type_Repair: mRepair = src.mRepair; break;
|
||||
case MWWorld::ContainerStore::Type_Weapon: mWeapon = src.mWeapon; break;
|
||||
case -1: break;
|
||||
default: assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Potion>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Potion), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mPotion(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Apparatus>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Apparatus), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mApparatus(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Armor>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Armor), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mArmor(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Book>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Book), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mBook(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Clothing>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Clothing), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mClothing(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Ingredient>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Ingredient), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mIngredient(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Light>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Light), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mLight(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Lockpick>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Lockpick), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mLockpick(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Miscellaneous>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Miscellaneous), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mMiscellaneous(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Probe>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Probe), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mProbe(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Repair>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Repair), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mRepair(iterator){}
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Weapon>::List::iterator iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Weapon), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mWeapon(iterator){}
|
||||
|
||||
MWWorld::ContainerStoreIterator::ContainerStoreIterator( const ContainerStoreIterator& src )
|
||||
{
|
||||
copy(src);
|
||||
}
|
||||
|
||||
void MWWorld::ContainerStoreIterator::incType()
|
||||
template<class PtrType>
|
||||
void MWWorld::ContainerStoreIteratorBase<PtrType>::incType()
|
||||
{
|
||||
if (mType==0)
|
||||
mType = 1;
|
||||
|
@ -847,7 +850,8 @@ void MWWorld::ContainerStoreIterator::incType()
|
|||
}
|
||||
}
|
||||
|
||||
void MWWorld::ContainerStoreIterator::nextType()
|
||||
template<class PtrType>
|
||||
void MWWorld::ContainerStoreIteratorBase<PtrType>::nextType()
|
||||
{
|
||||
while (mType!=-1)
|
||||
{
|
||||
|
@ -859,7 +863,8 @@ void MWWorld::ContainerStoreIterator::nextType()
|
|||
}
|
||||
}
|
||||
|
||||
bool MWWorld::ContainerStoreIterator::resetIterator()
|
||||
template<class PtrType>
|
||||
bool MWWorld::ContainerStoreIteratorBase<PtrType>::resetIterator()
|
||||
{
|
||||
switch (mType)
|
||||
{
|
||||
|
@ -927,7 +932,8 @@ bool MWWorld::ContainerStoreIterator::resetIterator()
|
|||
return false;
|
||||
}
|
||||
|
||||
bool MWWorld::ContainerStoreIterator::incIterator()
|
||||
template<class PtrType>
|
||||
bool MWWorld::ContainerStoreIteratorBase<PtrType>::incIterator()
|
||||
{
|
||||
switch (mType)
|
||||
{
|
||||
|
@ -995,30 +1001,63 @@ bool MWWorld::ContainerStoreIterator::incIterator()
|
|||
return true;
|
||||
}
|
||||
|
||||
MWWorld::Ptr *MWWorld::ContainerStoreIterator::operator->() const
|
||||
|
||||
template<class PtrType>
|
||||
template<class T>
|
||||
bool MWWorld::ContainerStoreIteratorBase<PtrType>::isEqual (const ContainerStoreIteratorBase<T>& other) const
|
||||
{
|
||||
if (mContainer!=other.mContainer)
|
||||
return false;
|
||||
|
||||
if (mType!=other.mType)
|
||||
return false;
|
||||
|
||||
switch (mType)
|
||||
{
|
||||
case ContainerStore::Type_Potion: return mPotion==other.mPotion;
|
||||
case ContainerStore::Type_Apparatus: return mApparatus==other.mApparatus;
|
||||
case ContainerStore::Type_Armor: return mArmor==other.mArmor;
|
||||
case ContainerStore::Type_Book: return mBook==other.mBook;
|
||||
case ContainerStore::Type_Clothing: return mClothing==other.mClothing;
|
||||
case ContainerStore::Type_Ingredient: return mIngredient==other.mIngredient;
|
||||
case ContainerStore::Type_Light: return mLight==other.mLight;
|
||||
case ContainerStore::Type_Lockpick: return mLockpick==other.mLockpick;
|
||||
case ContainerStore::Type_Miscellaneous: return mMiscellaneous==other.mMiscellaneous;
|
||||
case ContainerStore::Type_Probe: return mProbe==other.mProbe;
|
||||
case ContainerStore::Type_Repair: return mRepair==other.mRepair;
|
||||
case ContainerStore::Type_Weapon: return mWeapon==other.mWeapon;
|
||||
case -1: return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
template<class PtrType>
|
||||
PtrType *MWWorld::ContainerStoreIteratorBase<PtrType>::operator->() const
|
||||
{
|
||||
mPtr = **this;
|
||||
return &mPtr;
|
||||
}
|
||||
|
||||
MWWorld::Ptr MWWorld::ContainerStoreIterator::operator*() const
|
||||
template<class PtrType>
|
||||
PtrType MWWorld::ContainerStoreIteratorBase<PtrType>::operator*() const
|
||||
{
|
||||
Ptr ptr;
|
||||
PtrType ptr;
|
||||
|
||||
switch (mType)
|
||||
{
|
||||
case ContainerStore::Type_Potion: ptr = MWWorld::Ptr (&*mPotion, 0); break;
|
||||
case ContainerStore::Type_Apparatus: ptr = MWWorld::Ptr (&*mApparatus, 0); break;
|
||||
case ContainerStore::Type_Armor: ptr = MWWorld::Ptr (&*mArmor, 0); break;
|
||||
case ContainerStore::Type_Book: ptr = MWWorld::Ptr (&*mBook, 0); break;
|
||||
case ContainerStore::Type_Clothing: ptr = MWWorld::Ptr (&*mClothing, 0); break;
|
||||
case ContainerStore::Type_Ingredient: ptr = MWWorld::Ptr (&*mIngredient, 0); break;
|
||||
case ContainerStore::Type_Light: ptr = MWWorld::Ptr (&*mLight, 0); break;
|
||||
case ContainerStore::Type_Lockpick: ptr = MWWorld::Ptr (&*mLockpick, 0); break;
|
||||
case ContainerStore::Type_Miscellaneous: ptr = MWWorld::Ptr (&*mMiscellaneous, 0); break;
|
||||
case ContainerStore::Type_Probe: ptr = MWWorld::Ptr (&*mProbe, 0); break;
|
||||
case ContainerStore::Type_Repair: ptr = MWWorld::Ptr (&*mRepair, 0); break;
|
||||
case ContainerStore::Type_Weapon: ptr = MWWorld::Ptr (&*mWeapon, 0); break;
|
||||
case ContainerStore::Type_Potion: ptr = PtrType (&*mPotion, 0); break;
|
||||
case ContainerStore::Type_Apparatus: ptr = PtrType (&*mApparatus, 0); break;
|
||||
case ContainerStore::Type_Armor: ptr = PtrType (&*mArmor, 0); break;
|
||||
case ContainerStore::Type_Book: ptr = PtrType (&*mBook, 0); break;
|
||||
case ContainerStore::Type_Clothing: ptr = PtrType (&*mClothing, 0); break;
|
||||
case ContainerStore::Type_Ingredient: ptr = PtrType (&*mIngredient, 0); break;
|
||||
case ContainerStore::Type_Light: ptr = PtrType (&*mLight, 0); break;
|
||||
case ContainerStore::Type_Lockpick: ptr = PtrType (&*mLockpick, 0); break;
|
||||
case ContainerStore::Type_Miscellaneous: ptr = PtrType (&*mMiscellaneous, 0); break;
|
||||
case ContainerStore::Type_Probe: ptr = PtrType (&*mProbe, 0); break;
|
||||
case ContainerStore::Type_Repair: ptr = PtrType (&*mRepair, 0); break;
|
||||
case ContainerStore::Type_Weapon: ptr = PtrType (&*mWeapon, 0); break;
|
||||
}
|
||||
|
||||
if (ptr.isEmpty())
|
||||
|
@ -1029,7 +1068,8 @@ MWWorld::Ptr MWWorld::ContainerStoreIterator::operator*() const
|
|||
return ptr;
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator& MWWorld::ContainerStoreIterator::operator++()
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>& MWWorld::ContainerStoreIteratorBase<PtrType>::operator++()
|
||||
{
|
||||
do
|
||||
{
|
||||
|
@ -1041,78 +1081,16 @@ MWWorld::ContainerStoreIterator& MWWorld::ContainerStoreIterator::operator++()
|
|||
return *this;
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator MWWorld::ContainerStoreIterator::operator++ (int)
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType> MWWorld::ContainerStoreIteratorBase<PtrType>::operator++ (int)
|
||||
{
|
||||
ContainerStoreIterator iter (*this);
|
||||
ContainerStoreIteratorBase<PtrType> iter (*this);
|
||||
++*this;
|
||||
return iter;
|
||||
}
|
||||
|
||||
bool MWWorld::ContainerStoreIterator::isEqual (const ContainerStoreIterator& iter) const
|
||||
{
|
||||
if (mContainer!=iter.mContainer)
|
||||
return false;
|
||||
|
||||
if (mType!=iter.mType)
|
||||
return false;
|
||||
|
||||
switch (mType)
|
||||
{
|
||||
case ContainerStore::Type_Potion: return mPotion==iter.mPotion;
|
||||
case ContainerStore::Type_Apparatus: return mApparatus==iter.mApparatus;
|
||||
case ContainerStore::Type_Armor: return mArmor==iter.mArmor;
|
||||
case ContainerStore::Type_Book: return mBook==iter.mBook;
|
||||
case ContainerStore::Type_Clothing: return mClothing==iter.mClothing;
|
||||
case ContainerStore::Type_Ingredient: return mIngredient==iter.mIngredient;
|
||||
case ContainerStore::Type_Light: return mLight==iter.mLight;
|
||||
case ContainerStore::Type_Lockpick: return mLockpick==iter.mLockpick;
|
||||
case ContainerStore::Type_Miscellaneous: return mMiscellaneous==iter.mMiscellaneous;
|
||||
case ContainerStore::Type_Probe: return mProbe==iter.mProbe;
|
||||
case ContainerStore::Type_Repair: return mRepair==iter.mRepair;
|
||||
case ContainerStore::Type_Weapon: return mWeapon==iter.mWeapon;
|
||||
case -1: return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int MWWorld::ContainerStoreIterator::getType() const
|
||||
{
|
||||
return mType;
|
||||
}
|
||||
|
||||
const MWWorld::ContainerStore *MWWorld::ContainerStoreIterator::getContainerStore() const
|
||||
{
|
||||
return mContainer;
|
||||
}
|
||||
|
||||
void MWWorld::ContainerStoreIterator::copy(const ContainerStoreIterator& src)
|
||||
{
|
||||
mType = src.mType;
|
||||
mMask = src.mMask;
|
||||
mContainer = src.mContainer;
|
||||
mPtr = src.mPtr;
|
||||
|
||||
switch (mType)
|
||||
{
|
||||
case MWWorld::ContainerStore::Type_Potion: mPotion = src.mPotion; break;
|
||||
case MWWorld::ContainerStore::Type_Apparatus: mApparatus = src.mApparatus; break;
|
||||
case MWWorld::ContainerStore::Type_Armor: mArmor = src.mArmor; break;
|
||||
case MWWorld::ContainerStore::Type_Book: mBook = src.mBook; break;
|
||||
case MWWorld::ContainerStore::Type_Clothing: mClothing = src.mClothing; break;
|
||||
case MWWorld::ContainerStore::Type_Ingredient: mIngredient = src.mIngredient; break;
|
||||
case MWWorld::ContainerStore::Type_Light: mLight = src.mLight; break;
|
||||
case MWWorld::ContainerStore::Type_Lockpick: mLockpick = src.mLockpick; break;
|
||||
case MWWorld::ContainerStore::Type_Miscellaneous: mMiscellaneous = src.mMiscellaneous; break;
|
||||
case MWWorld::ContainerStore::Type_Probe: mProbe = src.mProbe; break;
|
||||
case MWWorld::ContainerStore::Type_Repair: mRepair = src.mRepair; break;
|
||||
case MWWorld::ContainerStore::Type_Weapon: mWeapon = src.mWeapon; break;
|
||||
case -1: break;
|
||||
default: assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator& MWWorld::ContainerStoreIterator::operator=( const ContainerStoreIterator& rhs )
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>& MWWorld::ContainerStoreIteratorBase<PtrType>::operator= (const ContainerStoreIteratorBase<PtrType>& rhs)
|
||||
{
|
||||
if (this!=&rhs)
|
||||
{
|
||||
|
@ -1121,12 +1099,108 @@ MWWorld::ContainerStoreIterator& MWWorld::ContainerStoreIterator::operator=( con
|
|||
return *this;
|
||||
}
|
||||
|
||||
bool MWWorld::operator== (const ContainerStoreIterator& left, const ContainerStoreIterator& right)
|
||||
template<class PtrType>
|
||||
int MWWorld::ContainerStoreIteratorBase<PtrType>::getType() const
|
||||
{
|
||||
return mType;
|
||||
}
|
||||
|
||||
template<class PtrType>
|
||||
const MWWorld::ContainerStore *MWWorld::ContainerStoreIteratorBase<PtrType>::getContainerStore() const
|
||||
{
|
||||
return mContainer;
|
||||
}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container)
|
||||
: mType (-1), mMask (0), mContainer (container)
|
||||
{}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (int mask, ContainerStoreType container)
|
||||
: mType (0), mMask (mask), mContainer (container)
|
||||
{
|
||||
nextType();
|
||||
|
||||
if (mType==-1 || (**this).getRefData().getCount())
|
||||
return;
|
||||
|
||||
++*this;
|
||||
}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Potion>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Potion), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mPotion(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Apparatus>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Apparatus), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mApparatus(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Armor>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Armor), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mArmor(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Book>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Book), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mBook(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Clothing>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Clothing), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mClothing(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Ingredient>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Ingredient), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mIngredient(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Light>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Light), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mLight(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Lockpick>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Lockpick), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mLockpick(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Miscellaneous>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Miscellaneous), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mMiscellaneous(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Probe>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Probe), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mProbe(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Repair>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Repair), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mRepair(iterator){}
|
||||
|
||||
template<class PtrType>
|
||||
MWWorld::ContainerStoreIteratorBase<PtrType>::ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Weapon>::type iterator)
|
||||
: mType(MWWorld::ContainerStore::Type_Weapon), mMask(MWWorld::ContainerStore::Type_All), mContainer(container), mWeapon(iterator){}
|
||||
|
||||
|
||||
template<class T, class U>
|
||||
bool MWWorld::operator== (const ContainerStoreIteratorBase<T>& left, const ContainerStoreIteratorBase<U>& right)
|
||||
{
|
||||
return left.isEqual (right);
|
||||
}
|
||||
|
||||
bool MWWorld::operator!= (const ContainerStoreIterator& left, const ContainerStoreIterator& right)
|
||||
template<class T, class U>
|
||||
bool MWWorld::operator!= (const ContainerStoreIteratorBase<T>& left, const ContainerStoreIteratorBase<U>& right)
|
||||
{
|
||||
return !(left==right);
|
||||
}
|
||||
|
||||
template class MWWorld::ContainerStoreIteratorBase<MWWorld::Ptr>;
|
||||
template class MWWorld::ContainerStoreIteratorBase<MWWorld::ConstPtr>;
|
||||
|
||||
template bool MWWorld::operator== (const ContainerStoreIteratorBase<Ptr>& left, const ContainerStoreIteratorBase<Ptr>& right);
|
||||
template bool MWWorld::operator!= (const ContainerStoreIteratorBase<Ptr>& left, const ContainerStoreIteratorBase<Ptr>& right);
|
||||
template bool MWWorld::operator== (const ContainerStoreIteratorBase<ConstPtr>& left, const ContainerStoreIteratorBase<ConstPtr>& right);
|
||||
template bool MWWorld::operator!= (const ContainerStoreIteratorBase<ConstPtr>& left, const ContainerStoreIteratorBase<ConstPtr>& right);
|
||||
template bool MWWorld::operator== (const ContainerStoreIteratorBase<ConstPtr>& left, const ContainerStoreIteratorBase<Ptr>& right);
|
||||
template bool MWWorld::operator!= (const ContainerStoreIteratorBase<ConstPtr>& left, const ContainerStoreIteratorBase<Ptr>& right);
|
||||
template bool MWWorld::operator== (const ContainerStoreIteratorBase<Ptr>& left, const ContainerStoreIteratorBase<ConstPtr>& right);
|
||||
template bool MWWorld::operator!= (const ContainerStoreIteratorBase<Ptr>& left, const ContainerStoreIteratorBase<ConstPtr>& right);
|
||||
|
||||
template void MWWorld::ContainerStoreIteratorBase<MWWorld::Ptr>::copy(const ContainerStoreIteratorBase<Ptr>& src);
|
||||
template void MWWorld::ContainerStoreIteratorBase<MWWorld::ConstPtr>::copy(const ContainerStoreIteratorBase<Ptr>& src);
|
||||
template void MWWorld::ContainerStoreIteratorBase<MWWorld::ConstPtr>::copy(const ContainerStoreIteratorBase<ConstPtr>& src);
|
||||
|
|
|
@ -29,8 +29,15 @@ namespace ESM
|
|||
|
||||
namespace MWWorld
|
||||
{
|
||||
class ContainerStoreIterator;
|
||||
class ContainerStore;
|
||||
|
||||
template<class PtrType>
|
||||
class ContainerStoreIteratorBase;
|
||||
|
||||
typedef ContainerStoreIteratorBase<Ptr> ContainerStoreIterator;
|
||||
typedef ContainerStoreIteratorBase<ConstPtr> ConstContainerStoreIterator;
|
||||
|
||||
|
||||
class ContainerStoreListener
|
||||
{
|
||||
public:
|
||||
|
@ -70,7 +77,7 @@ namespace MWWorld
|
|||
MWWorld::CellRefList<ESM::Clothing> clothes;
|
||||
MWWorld::CellRefList<ESM::Ingredient> ingreds;
|
||||
MWWorld::CellRefList<ESM::Light> lights;
|
||||
MWWorld::CellRefList<ESM::Lockpick> lockpicks;
|
||||
MWWorld::CellRefList<ESM::Lockpick> lockpicks;
|
||||
MWWorld::CellRefList<ESM::Miscellaneous> miscItems;
|
||||
MWWorld::CellRefList<ESM::Probe> probes;
|
||||
MWWorld::CellRefList<ESM::Repair> repairs;
|
||||
|
@ -99,9 +106,11 @@ namespace MWWorld
|
|||
ESM::InventoryState& inventory, int& index,
|
||||
bool equipable = false) const;
|
||||
|
||||
|
||||
virtual void storeEquipmentState (const MWWorld::LiveCellRefBase& ref, int index, ESM::InventoryState& inventory) const;
|
||||
|
||||
virtual void readEquipmentState (const MWWorld::ContainerStoreIterator& iter, int index, const ESM::InventoryState& inventory);
|
||||
|
||||
public:
|
||||
|
||||
ContainerStore();
|
||||
|
@ -110,8 +119,12 @@ namespace MWWorld
|
|||
|
||||
virtual ContainerStore* clone() { return new ContainerStore(*this); }
|
||||
|
||||
ConstContainerStoreIterator cbegin (int mask = Type_All) const;
|
||||
ConstContainerStoreIterator cend() const;
|
||||
ConstContainerStoreIterator begin (int mask = Type_All) const;
|
||||
ConstContainerStoreIterator end() const;
|
||||
|
||||
ContainerStoreIterator begin (int mask = Type_All);
|
||||
|
||||
ContainerStoreIterator end();
|
||||
|
||||
virtual ContainerStoreIterator add (const Ptr& itemPtr, int count, const Ptr& actorPtr, bool setOwner=false);
|
||||
|
@ -163,7 +176,7 @@ namespace MWWorld
|
|||
|
||||
public:
|
||||
|
||||
virtual bool stacks (const ConstPtr& ptr1, const ConstPtr& ptr2);
|
||||
virtual bool stacks (const ConstPtr& ptr1, const ConstPtr& ptr2) const;
|
||||
///< @return true if the two specified objects can stack with each other
|
||||
|
||||
void fill (const ESM::InventoryList& items, const std::string& owner);
|
||||
|
@ -187,96 +200,143 @@ namespace MWWorld
|
|||
|
||||
virtual void readState (const ESM::InventoryState& state);
|
||||
|
||||
friend class ContainerStoreIterator;
|
||||
friend class ContainerStoreIteratorBase<Ptr>;
|
||||
friend class ContainerStoreIteratorBase<ConstPtr>;
|
||||
};
|
||||
|
||||
/// \brief Iteration over a subset of objects in a ContainerStore
|
||||
///
|
||||
/// \note The iterator will automatically skip over deleted objects.
|
||||
class ContainerStoreIterator
|
||||
: public std::iterator<std::forward_iterator_tag, Ptr, std::ptrdiff_t, Ptr *, Ptr&>
|
||||
|
||||
template<class PtrType>
|
||||
class ContainerStoreIteratorBase
|
||||
: public std::iterator<std::forward_iterator_tag, PtrType, std::ptrdiff_t, PtrType *, PtrType&>
|
||||
{
|
||||
int mType;
|
||||
int mMask;
|
||||
ContainerStore *mContainer;
|
||||
mutable Ptr mPtr;
|
||||
template<class From, class To, class Dummy>
|
||||
struct IsConvertible
|
||||
{
|
||||
static const bool value = true;
|
||||
};
|
||||
|
||||
MWWorld::CellRefList<ESM::Potion>::List::iterator mPotion;
|
||||
MWWorld::CellRefList<ESM::Apparatus>::List::iterator mApparatus;
|
||||
MWWorld::CellRefList<ESM::Armor>::List::iterator mArmor;
|
||||
MWWorld::CellRefList<ESM::Book>::List::iterator mBook;
|
||||
MWWorld::CellRefList<ESM::Clothing>::List::iterator mClothing;
|
||||
MWWorld::CellRefList<ESM::Ingredient>::List::iterator mIngredient;
|
||||
MWWorld::CellRefList<ESM::Light>::List::iterator mLight;
|
||||
MWWorld::CellRefList<ESM::Lockpick>::List::iterator mLockpick;
|
||||
MWWorld::CellRefList<ESM::Miscellaneous>::List::iterator mMiscellaneous;
|
||||
MWWorld::CellRefList<ESM::Probe>::List::iterator mProbe;
|
||||
MWWorld::CellRefList<ESM::Repair>::List::iterator mRepair;
|
||||
MWWorld::CellRefList<ESM::Weapon>::List::iterator mWeapon;
|
||||
template<class Dummy>
|
||||
struct IsConvertible<ConstPtr, Ptr, Dummy>
|
||||
{
|
||||
static const bool value = false;
|
||||
};
|
||||
|
||||
private:
|
||||
template<class T, class U>
|
||||
struct IteratorTrait
|
||||
{
|
||||
typedef typename MWWorld::CellRefList<T>::List::iterator type;
|
||||
};
|
||||
|
||||
ContainerStoreIterator (ContainerStore *container);
|
||||
///< End-iterator
|
||||
template<class T>
|
||||
struct IteratorTrait<T, ConstPtr>
|
||||
{
|
||||
typedef typename MWWorld::CellRefList<T>::List::const_iterator type;
|
||||
};
|
||||
|
||||
ContainerStoreIterator (int mask, ContainerStore *container);
|
||||
///< Begin-iterator
|
||||
template<class T>
|
||||
struct Iterator : IteratorTrait<T, PtrType>
|
||||
{
|
||||
};
|
||||
|
||||
// construct iterator using a CellRefList iterator
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Potion>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Apparatus>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Armor>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Book>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Clothing>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Ingredient>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Light>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Lockpick>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Miscellaneous>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Probe>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Repair>::List::iterator);
|
||||
ContainerStoreIterator (ContainerStore *container, MWWorld::CellRefList<ESM::Weapon>::List::iterator);
|
||||
template<class T, class Dummy>
|
||||
struct ContainerStoreTrait
|
||||
{
|
||||
typedef ContainerStore* type;
|
||||
};
|
||||
|
||||
template<class Dummy>
|
||||
struct ContainerStoreTrait<ConstPtr, Dummy>
|
||||
{
|
||||
typedef const ContainerStore* type;
|
||||
};
|
||||
|
||||
void copy (const ContainerStoreIterator& src);
|
||||
typedef typename ContainerStoreTrait<PtrType, void>::type ContainerStoreType;
|
||||
|
||||
void incType();
|
||||
int mType;
|
||||
int mMask;
|
||||
ContainerStoreType mContainer;
|
||||
mutable PtrType mPtr;
|
||||
|
||||
void nextType();
|
||||
typename Iterator<ESM::Potion>::type mPotion;
|
||||
typename Iterator<ESM::Apparatus>::type mApparatus;
|
||||
typename Iterator<ESM::Armor>::type mArmor;
|
||||
typename Iterator<ESM::Book>::type mBook;
|
||||
typename Iterator<ESM::Clothing>::type mClothing;
|
||||
typename Iterator<ESM::Ingredient>::type mIngredient;
|
||||
typename Iterator<ESM::Light>::type mLight;
|
||||
typename Iterator<ESM::Lockpick>::type mLockpick;
|
||||
typename Iterator<ESM::Miscellaneous>::type mMiscellaneous;
|
||||
typename Iterator<ESM::Probe>::type mProbe;
|
||||
typename Iterator<ESM::Repair>::type mRepair;
|
||||
typename Iterator<ESM::Weapon>::type mWeapon;
|
||||
|
||||
bool resetIterator();
|
||||
///< Reset iterator for selected type.
|
||||
///
|
||||
/// \return Type not empty?
|
||||
ContainerStoreIteratorBase (ContainerStoreType container);
|
||||
///< End-iterator
|
||||
|
||||
bool incIterator();
|
||||
///< Increment iterator for selected type.
|
||||
///
|
||||
/// \return reached the end?
|
||||
ContainerStoreIteratorBase (int mask, ContainerStoreType container);
|
||||
///< Begin-iterator
|
||||
|
||||
// construct iterator using a CellRefList iterator
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Potion>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Apparatus>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Armor>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Book>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Clothing>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Ingredient>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Light>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Lockpick>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Miscellaneous>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Probe>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Repair>::type);
|
||||
ContainerStoreIteratorBase (ContainerStoreType container, typename Iterator<ESM::Weapon>::type);
|
||||
|
||||
template<class T>
|
||||
void copy (const ContainerStoreIteratorBase<T>& src);
|
||||
|
||||
void incType ();
|
||||
|
||||
void nextType ();
|
||||
|
||||
bool resetIterator ();
|
||||
///< Reset iterator for selected type.
|
||||
///
|
||||
/// \return Type not empty?
|
||||
|
||||
bool incIterator ();
|
||||
///< Increment iterator for selected type.
|
||||
///
|
||||
/// \return reached the end?
|
||||
|
||||
public:
|
||||
template<class T>
|
||||
ContainerStoreIteratorBase (const ContainerStoreIteratorBase<T>& other)
|
||||
{
|
||||
char CANNOT_CONVERT_CONST_ITERATOR_TO_ITERATOR[IsConvertible<T, PtrType, void>::value ? 1 : -1];
|
||||
((void)CANNOT_CONVERT_CONST_ITERATOR_TO_ITERATOR);
|
||||
copy (other);
|
||||
}
|
||||
|
||||
ContainerStoreIterator(const ContainerStoreIterator& src);
|
||||
template<class T>
|
||||
bool isEqual(const ContainerStoreIteratorBase<T>& other) const;
|
||||
|
||||
Ptr *operator->() const;
|
||||
PtrType *operator->() const;
|
||||
PtrType operator*() const;
|
||||
|
||||
Ptr operator*() const;
|
||||
|
||||
ContainerStoreIterator& operator++();
|
||||
|
||||
ContainerStoreIterator operator++ (int);
|
||||
|
||||
ContainerStoreIterator& operator= (const ContainerStoreIterator& rhs);
|
||||
|
||||
bool isEqual (const ContainerStoreIterator& iter) const;
|
||||
ContainerStoreIteratorBase& operator++ ();
|
||||
ContainerStoreIteratorBase operator++ (int);
|
||||
ContainerStoreIteratorBase& operator= (const ContainerStoreIteratorBase& rhs);
|
||||
|
||||
int getType() const;
|
||||
|
||||
const ContainerStore *getContainerStore() const;
|
||||
|
||||
friend class ContainerStore;
|
||||
friend class ContainerStore;
|
||||
friend class ContainerStoreIteratorBase<Ptr>;
|
||||
friend class ContainerStoreIteratorBase<ConstPtr>;
|
||||
};
|
||||
|
||||
bool operator== (const ContainerStoreIterator& left, const ContainerStoreIterator& right);
|
||||
bool operator!= (const ContainerStoreIterator& left, const ContainerStoreIterator& right);
|
||||
template<class T, class U>
|
||||
bool operator== (const ContainerStoreIteratorBase<T>& left, const ContainerStoreIteratorBase<U>& right);
|
||||
template<class T, class U>
|
||||
bool operator!= (const ContainerStoreIteratorBase<T>& left, const ContainerStoreIteratorBase<U>& right);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -199,20 +199,12 @@ void MWWorld::InventoryStore::unequipAll(const MWWorld::Ptr& actor)
|
|||
|
||||
MWWorld::ContainerStoreIterator MWWorld::InventoryStore::getSlot (int slot)
|
||||
{
|
||||
if (slot<0 || slot>=static_cast<int> (mSlots.size()))
|
||||
throw std::runtime_error ("slot number out of range");
|
||||
return findSlot (slot);
|
||||
}
|
||||
|
||||
if (mSlots[slot]==end())
|
||||
return end();
|
||||
|
||||
if (mSlots[slot]->getRefData().getCount()<1)
|
||||
{
|
||||
// Object has been deleted
|
||||
// This should no longer happen, since the new remove function will unequip first
|
||||
throw std::runtime_error("Invalid slot, make sure you are not calling RefData::setCount for a container object");
|
||||
}
|
||||
|
||||
return mSlots[slot];
|
||||
MWWorld::ConstContainerStoreIterator MWWorld::InventoryStore::getSlot (int slot) const
|
||||
{
|
||||
return findSlot (slot);
|
||||
}
|
||||
|
||||
bool MWWorld::InventoryStore::canActorAutoEquip(const MWWorld::Ptr& actor, const MWWorld::Ptr& item)
|
||||
|
@ -235,6 +227,24 @@ bool MWWorld::InventoryStore::canActorAutoEquip(const MWWorld::Ptr& actor, const
|
|||
return true;
|
||||
}
|
||||
|
||||
MWWorld::ContainerStoreIterator MWWorld::InventoryStore::findSlot (int slot) const
|
||||
{
|
||||
if (slot<0 || slot>=static_cast<int> (mSlots.size()))
|
||||
throw std::runtime_error ("slot number out of range");
|
||||
|
||||
if (mSlots[slot]==end())
|
||||
return mSlots[slot];
|
||||
|
||||
if (mSlots[slot]->getRefData().getCount()<1)
|
||||
{
|
||||
// Object has been deleted
|
||||
// This should no longer happen, since the new remove function will unequip first
|
||||
throw std::runtime_error("Invalid slot, make sure you are not calling RefData::setCount for a container object");
|
||||
}
|
||||
|
||||
return mSlots[slot];
|
||||
}
|
||||
|
||||
void MWWorld::InventoryStore::autoEquip (const MWWorld::Ptr& actor)
|
||||
{
|
||||
const MWBase::World *world = MWBase::Environment::get().getWorld();
|
||||
|
|
|
@ -116,6 +116,7 @@ namespace MWWorld
|
|||
virtual void readEquipmentState (const MWWorld::ContainerStoreIterator& iter, int index, const ESM::InventoryState& inventory);
|
||||
|
||||
bool canActorAutoEquip(const MWWorld::Ptr& actor, const MWWorld::Ptr& item);
|
||||
ContainerStoreIterator findSlot (int slot) const;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -155,6 +156,7 @@ namespace MWWorld
|
|||
/// \note if no item selected, return end() iterator
|
||||
|
||||
ContainerStoreIterator getSlot (int slot);
|
||||
ConstContainerStoreIterator getSlot(int slot) const;
|
||||
|
||||
void unequipAll(const MWWorld::Ptr& actor);
|
||||
///< Unequip all currently equipped items.
|
||||
|
|
|
@ -70,6 +70,14 @@ const MWWorld::LiveCellRefBase *MWWorld::ConstPtr::getBase() const
|
|||
return mRef;
|
||||
}
|
||||
|
||||
void MWWorld::ConstPtr::setContainerStore (const ContainerStore *store)
|
||||
{
|
||||
assert (store);
|
||||
assert (!mCell);
|
||||
|
||||
mContainerStore = store;
|
||||
}
|
||||
|
||||
const MWWorld::ContainerStore *MWWorld::ConstPtr::getContainerStore() const
|
||||
{
|
||||
return mContainerStore;
|
||||
|
|
|
@ -158,7 +158,10 @@ namespace MWWorld
|
|||
{
|
||||
return (mContainerStore == 0) && (mCell != 0);
|
||||
}
|
||||
|
||||
|
||||
void setContainerStore (const ContainerStore *store);
|
||||
///< Must not be called on references that are in a cell.
|
||||
|
||||
const ContainerStore *getContainerStore() const;
|
||||
///< May return a 0-pointer, if reference is not in a container.
|
||||
|
||||
|
|
Loading…
Reference in a new issue