From 9defb188ea83a9de4edba735f688a15dc1329e65 Mon Sep 17 00:00:00 2001 From: Marek Kochanowicz Date: Tue, 22 Jul 2014 13:08:32 +0200 Subject: [PATCH] handle inventory in the actors --- apps/opencs/model/world/columns.hpp | 1 + apps/opencs/model/world/refidadapterimp.hpp | 14 ++++++++++++-- apps/opencs/model/world/refidcollection.cpp | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/apps/opencs/model/world/columns.hpp b/apps/opencs/model/world/columns.hpp index 283e15db76..6812bbae97 100644 --- a/apps/opencs/model/world/columns.hpp +++ b/apps/opencs/model/world/columns.hpp @@ -179,6 +179,7 @@ namespace CSMWorld ColumnId_Vampire = 164, ColumnId_BodyPartType = 165, ColumnId_MeshType = 166, + ColumnId_ActorInventory = 167, // Allocated to a separate value range, so we don't get a collision should we ever need // to extend the number of use values. diff --git a/apps/opencs/model/world/refidadapterimp.hpp b/apps/opencs/model/world/refidadapterimp.hpp index ee069dd380..6fe479150b 100644 --- a/apps/opencs/model/world/refidadapterimp.hpp +++ b/apps/opencs/model/world/refidadapterimp.hpp @@ -445,6 +445,7 @@ namespace CSMWorld const RefIdColumn *mFlee; const RefIdColumn *mFight; const RefIdColumn *mAlarm; + const RefIdColumn *mInventory; std::map mServices; ActorColumns (const NameColumns& base) : NameColumns (base) {} @@ -452,7 +453,7 @@ namespace CSMWorld /// \brief Adapter for actor IDs (handles common AI functionality) template - class ActorRefIdAdapter : public NameRefIdAdapter + class ActorRefIdAdapter : public NameRefIdAdapter, public NestedRefIdAdapter { ActorColumns mActors; @@ -472,7 +473,13 @@ namespace CSMWorld ActorRefIdAdapter::ActorRefIdAdapter (UniversalId::Type type, const ActorColumns& columns) : NameRefIdAdapter (type, columns), mActors (columns) - {} + { + std::vector > assoCol; + + assoCol.push_back(std::make_pair(mActors.mInventory, new InventoryHelper(type))); + + setAssocColumns(assoCol); + } template QVariant ActorRefIdAdapter::getData (const RefIdColumn *column, const RefIdData& data, @@ -496,6 +503,9 @@ namespace CSMWorld if (column==mActors.mAlarm) return record.get().mAiData.mAlarm; + if (column==mActors.mInventory) + return true; + std::map::const_iterator iter = mActors.mServices.find (column); diff --git a/apps/opencs/model/world/refidcollection.cpp b/apps/opencs/model/world/refidcollection.cpp index 80ac1cc3b1..493b716eb3 100644 --- a/apps/opencs/model/world/refidcollection.cpp +++ b/apps/opencs/model/world/refidcollection.cpp @@ -99,6 +99,10 @@ CSMWorld::RefIdCollection::RefIdCollection() actorsColumns.mFight = &mColumns.back(); mColumns.push_back (RefIdColumn (Columns::ColumnId_AiAlarm, ColumnBase::Display_Integer)); actorsColumns.mAlarm = &mColumns.back(); + mColumns.push_back(RefIdColumn (Columns::ColumnId_ActorInventory, ColumnBase::Display_NestedItemList, ColumnBase::Flag_Dialogue, true, true, true)); + actorsColumns.mInventory = &mColumns.back(); + mColumns.back().addNestedColumn(Columns::ColumnId_InventoryItemId, CSMWorld::ColumnBase::Display_String); + mColumns.back().addNestedColumn(Columns::ColumnId_ItemCount, CSMWorld::ColumnBase::Display_Integer); static const struct {