mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-01-19 21:23:52 +00:00
added inventory helper (since npc and containers share same way of
handling items)
This commit is contained in:
parent
3dd2ca15da
commit
c4598d6200
5 changed files with 65 additions and 10 deletions
|
@ -25,7 +25,8 @@ opencs_units (model/world
|
|||
|
||||
opencs_units_noqt (model/world
|
||||
nestedtablewrapper universalid record commands columnbase scriptcontext cell refidcollection
|
||||
refidadapter refiddata refidadapterimp ref collectionbase refcollection columns infocollection tablemimedata cellcoordinates cellselection resources resourcesmanager
|
||||
refidadapter refiddata refidadapterimp ref collectionbase refcollection columns infocollection
|
||||
tablemimedata cellcoordinates cellselection resources resourcesmanager nestedadaptors
|
||||
)
|
||||
|
||||
opencs_hdrs_noqt (model/world
|
||||
|
|
1
apps/opencs/model/world/nestedadaptors.cpp
Normal file
1
apps/opencs/model/world/nestedadaptors.cpp
Normal file
|
@ -0,0 +1 @@
|
|||
#include "nestedadaptors.hpp"
|
56
apps/opencs/model/world/nestedadaptors.hpp
Normal file
56
apps/opencs/model/world/nestedadaptors.hpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
#ifndef CSM_WORLD_NESTEDADAPTORS_H
|
||||
#define CSM_WORLD_NESTEDADAPTORS_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "universalid.hpp"
|
||||
#include "nestedtablewrapper.hpp"
|
||||
#include <components/esm/loadcont.hpp>
|
||||
#include "record.hpp"
|
||||
#include "refiddata.hpp"
|
||||
#include "refidadapter.hpp"
|
||||
|
||||
namespace CSMWorld
|
||||
{
|
||||
template <typename ESXRecordT>
|
||||
class InventoryHelper
|
||||
{
|
||||
CSMWorld::UniversalId::Type mType;
|
||||
|
||||
public:
|
||||
|
||||
InventoryHelper(CSMWorld::UniversalId::Type type) : mType(type) {};
|
||||
|
||||
void setNestedTable(const RefIdColumn* column,
|
||||
RefIdData& data,
|
||||
int index,
|
||||
const NestedTableWrapperBase& nestedTable)
|
||||
{
|
||||
getRecord(data, index).get().mInventory.mList =
|
||||
(static_cast<const NestedTableWrapper<std::vector<ESM::ContItem> >&>(nestedTable)).mNestedTable;
|
||||
}
|
||||
|
||||
NestedTableWrapperBase* nestedTable(const RefIdColumn* column,
|
||||
const RefIdData& data,
|
||||
int index) const
|
||||
{
|
||||
return new NestedTableWrapper<std::vector<ESM::ContItem> >(getRecord(data, index).get().mInventory.mList);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
const Record<ESXRecordT>& getRecord(const RefIdData& data, int index) const
|
||||
{
|
||||
return dynamic_cast<const Record<ESXRecordT>&> (
|
||||
data.getRecord (RefIdData::LocalIndex (index, mType)));
|
||||
}
|
||||
|
||||
Record<ESXRecordT>& getRecord(RefIdData& data, int index) const
|
||||
{
|
||||
return dynamic_cast<Record<ESXRecordT>&> (
|
||||
data.getRecord (RefIdData::LocalIndex (index, mType)));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -180,7 +180,7 @@ void CSMWorld::ClothingRefIdAdapter::setData (const RefIdColumn *column, RefIdDa
|
|||
CSMWorld::ContainerRefIdAdapter::ContainerRefIdAdapter (const NameColumns& columns,
|
||||
const RefIdColumn *weight, const RefIdColumn *organic, const RefIdColumn *respawn, const RefIdColumn *content)
|
||||
: NameRefIdAdapter<ESM::Container> (UniversalId::Type_Container, columns), mWeight (weight),
|
||||
mOrganic (organic), mRespawn (respawn), mContent(content)
|
||||
mOrganic (organic), mRespawn (respawn), mContent(content), mHelper(InventoryHelper<ESM::Container>(UniversalId::Type_Container))
|
||||
{}
|
||||
|
||||
int CSMWorld::ContainerRefIdAdapter::getNestedColumnsCount(const RefIdColumn *column, const RefIdData& data) const
|
||||
|
@ -313,20 +313,14 @@ void CSMWorld::ContainerRefIdAdapter::setNestedTable(const RefIdColumn* column,
|
|||
int index,
|
||||
const NestedTableWrapperBase& nestedTable)
|
||||
{
|
||||
Record<ESM::Container>& record = dynamic_cast<Record<ESM::Container>&> (
|
||||
data.getRecord (RefIdData::LocalIndex (index, UniversalId::Type_Container)));
|
||||
|
||||
record.get().mInventory.mList = (static_cast<const NestedTableWrapper<std::vector<ESM::ContItem> >&>(nestedTable)).mNestedTable;
|
||||
mHelper.setNestedTable(column, data, index, nestedTable);
|
||||
}
|
||||
|
||||
CSMWorld::NestedTableWrapperBase* CSMWorld::ContainerRefIdAdapter::nestedTable (const RefIdColumn* column,
|
||||
const RefIdData& data,
|
||||
int index) const
|
||||
{
|
||||
const Record<ESM::Container>& record = dynamic_cast<const Record<ESM::Container>&> (
|
||||
data.getRecord (RefIdData::LocalIndex (index, UniversalId::Type_Container)));
|
||||
|
||||
return new NestedTableWrapper<std::vector<ESM::ContItem> >(record.get().mInventory.mList);
|
||||
return mHelper.nestedTable(column, data, index);
|
||||
}
|
||||
|
||||
QVariant CSMWorld::ContainerRefIdAdapter::getNestedData (const CSMWorld::RefIdColumn* column,
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "refiddata.hpp"
|
||||
#include "universalid.hpp"
|
||||
#include "refidadapter.hpp"
|
||||
#include "nestedadaptors.hpp"
|
||||
|
||||
namespace CSMWorld
|
||||
{
|
||||
|
@ -614,6 +615,8 @@ namespace CSMWorld
|
|||
const RefIdColumn *mOrganic;
|
||||
const RefIdColumn *mRespawn;
|
||||
const RefIdColumn *mContent;
|
||||
|
||||
InventoryHelper<ESM::Container> mHelper;
|
||||
|
||||
public:
|
||||
|
||||
|
|
Loading…
Reference in a new issue