]> jfr.im git - irc/gameservirc.git/commitdiff
Finished up the InventoryManager class, removed the Inventory handling from PlayerGO...
authorkainazzzo <redacted>
Wed, 23 Sep 2009 16:51:41 +0000 (16:51 +0000)
committerkainazzzo <redacted>
Wed, 23 Sep 2009 16:51:41 +0000 (16:51 +0000)
git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@534 bc333340-6410-0410-a689-9d09f3c113fa

gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/Helpers/InventoryManager.h
gameserv-2.0/libgameservgldl/src/DataLayer/File/FilePlayerDAO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/Helpers/InventoryManager.cpp
gameserv-2.0/testdriver/main.cpp

index 6af6e1d28614c945150ebb7d243421ef49085746..431366992e2f58b9a5163ec3261dbefa75371472 100644 (file)
@@ -123,17 +123,6 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                //! Property set - Alive\r
                void Alive(const bool &value);\r
 \r
-               //! Property set - Inventory\r
-               void Inventory(const vector< shared_ptr<ItemGO> > &items);\r
-\r
-               //! Property get - Inventory\r
-               vector< shared_ptr<ItemGO> > Inventory(void) const;\r
-\r
-               //! Add item to inventory\r
-               void AddItemToInventory(shared_ptr<ItemGO> spItem);\r
-               //! Remove item from inventory\r
-               void RemoveItemFromInventory(shared_ptr<ItemGO> spItem);\r
-\r
                bool operator==(const PlayerGO &right) const;\r
                bool operator!=(const PlayerGO &right) const;\r
 \r
@@ -160,8 +149,6 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
 \r
                bool mFoughtMaster;\r
                bool mAlive;\r
-\r
-               vector< shared_ptr<ItemGO> > mItems;\r
        };\r
 }}} // GameServ::GameLayer::GameObjects\r
 #endif
\ No newline at end of file
index 85ff78d31cc6fd08878be97d8a6d14829996ea90..c880fba01439dad9850dcea803c7ec94b06a06dc 100644 (file)
@@ -17,22 +17,29 @@ using std::map;
 namespace GameServ { namespace GameLayer { namespace Helpers {\r
 \r
 \r
-       typedef list< shared_ptr<ItemGO> > PlayerInventory;\r
-       typedef map<shared_ptr<PlayerGO>, PlayerInventory> InventoryMap;\r
+typedef list< shared_ptr<ItemGO> > ItemList;\r
+typedef map<string, ItemList> PlayerInventoryMap;\r
+\r
 \r
 class InventoryManager\r
 {\r
 public:\r
-       InventoryManager();\r
+\r
+\r
        ~InventoryManager();\r
 \r
+       static shared_ptr<InventoryManager> Instance();\r
+\r
        void AddItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem);\r
        void RemoveItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem);\r
-       PlayerInventory GetInventory(shared_ptr<PlayerGO> spPlayer) const;      \r
+       ItemList GetInventory(shared_ptr<PlayerGO> spPlayer) const;     \r
 \r
+protected:\r
+       InventoryManager();\r
 private:\r
 \r
-       InventoryMap mInventoryTable;\r
+       PlayerInventoryMap mInventoryTable;\r
+       static shared_ptr<InventoryManager> mInstance;\r
 \r
 }; // InventoryManager\r
 \r
index f983ffcaf857fe0ccf715f0c71819ca56249221e..10a2681ae7f408db15079fb604ea3d32a8eccd68 100644 (file)
@@ -13,6 +13,9 @@ using GameServ::DataLayer::Exceptions::DataLayerException;
 #include <GameServ/DataLayer/File/FileId.h>\r
 using GameServ::DataLayer::File::FileId;\r
 \r
+#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
+using namespace GameServ::GameLayer::Helpers;\r
+\r
 #include <boost/smart_ptr/shared_ptr.hpp>\r
 #include <boost/format.hpp>\r
 #include <boost/algorithm/string.hpp>\r
@@ -271,6 +274,8 @@ shared_ptr<PlayerGO> FilePlayerDAO::CreatePlayerFromLine(const string &line) con
                        line), __FILE__, __LINE__);\r
        }\r
        // Load all the items into the player's inventory\r
+       shared_ptr<InventoryManager> inventory = InventoryManager::Instance();\r
+\r
        while (tok_iter != tokens.end())\r
        {\r
                string itemid = FileId::CreateItemId((*tok_iter));\r
@@ -290,7 +295,7 @@ shared_ptr<PlayerGO> FilePlayerDAO::CreatePlayerFromLine(const string &line) con
                        throw DataLayerException(str(format("Corrupt %1% file: Non integer item uses for item %2% on player %3%") %\r
                                mFilename % itemid % spPlayer->Name()), __FILE__, __LINE__);\r
                }\r
-               spPlayer->AddItemToInventory(spItem);\r
+               inventory->AddItem(spPlayer, spItem);\r
                tok_iter++;\r
        }\r
        \r
@@ -300,7 +305,6 @@ shared_ptr<PlayerGO> FilePlayerDAO::CreatePlayerFromLine(const string &line) con
 string FilePlayerDAO::CreateLineFromPlayer(shared_ptr<PlayerGO> spPlayer) const\r
 {\r
        string line;\r
-       // TODO: Add weapons, armor, and items\r
        line = str(format("%1% %2% %3% %4% %5% %6% %7% %8% %9% %10% %11% %12% %13% %14% %15% %16%") % \r
                spPlayer->Name() % spPlayer->Level() % spPlayer->Experience() % spPlayer->Gold() %\r
                spPlayer->Bank() % spPlayer->Health() % spPlayer->MaxHealth() % spPlayer->Strength() %\r
@@ -308,9 +312,10 @@ string FilePlayerDAO::CreateLineFromPlayer(shared_ptr<PlayerGO> spPlayer) const
                GetFlags(spPlayer) % spPlayer->Password() % (to_iso_string(spPlayer->LastLogin())) %\r
                FileId::GetItemNumberFromId(spPlayer->Weapon()->Id()) % FileId::GetItemNumberFromId(spPlayer->Armor()->Id()));\r
 \r
-       vector< shared_ptr<ItemGO> > items = spPlayer->Inventory();\r
-       vector< shared_ptr<ItemGO> >::const_iterator iter;\r
-       for (iter = items.begin(); iter != items.end(); iter++)\r
+       shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
+       ItemList inventory = spInventory->GetInventory(spPlayer);\r
+       ItemList::const_iterator iter;\r
+       for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
        {\r
                shared_ptr<ItemGO> spItem = (*iter);\r
                line += " " + FileId::GetItemNumberFromId(spItem->Id()) + " " + lexical_cast<string>(spItem->Uses());\r
index 73f3f9b1691bf3f850639ee2af4d6a5d835d7234..fb10922200ff1c17147967f162f579a6ab5d24ae 100644 (file)
@@ -225,33 +225,6 @@ ptime PlayerGO::LastLogin(void) const
        return mLastLogin;\r
 }\r
 \r
-void PlayerGO::Inventory(const vector< shared_ptr<ItemGO> > &items)\r
-{\r
-       mItems.clear();\r
-       mItems.insert(mItems.begin(), items.begin(), items.end());\r
-}\r
-\r
-vector< shared_ptr<ItemGO> > PlayerGO::Inventory(void) const\r
-{\r
-       return mItems;\r
-}\r
-\r
-void PlayerGO::AddItemToInventory(shared_ptr<ItemGO> spItem)\r
-{\r
-       mItems.push_back(spItem);\r
-}\r
-\r
-void PlayerGO::RemoveItemFromInventory(shared_ptr<ItemGO> spItem)\r
-{\r
-       vector< shared_ptr<ItemGO> >::iterator iter;\r
-       iter = find(mItems.begin(), mItems.end(), spItem);\r
-       if (iter != mItems.end())\r
-       {\r
-               mItems.erase(iter);\r
-       }\r
-}\r
-\r
-\r
 bool PlayerGO::operator !=(const PlayerGO &right) const\r
 {\r
        return !(*this == right);\r
index 223317ac12c26801b80a2a683f71271120f29a36..07cc348d5fd17a97aaaa0bd68832b305371455f1 100644 (file)
@@ -1,5 +1,5 @@
 #include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
-using GameServ::GameLayer::Helpers::InventoryManager;\r
+using namespace GameServ::GameLayer::Helpers;\r
 \r
 #include <boost/smart_ptr/shared_ptr.hpp>\r
 using boost::shared_ptr;\r
@@ -11,8 +11,7 @@ using std::map;
 #include <algorithm>\r
 using std::find;\r
 \r
-typedef list< shared_ptr<ItemGO> > PlayerInventory;\r
-typedef map<shared_ptr<PlayerGO>, PlayerInventory> InventoryMap;\r
+shared_ptr<InventoryManager> InventoryManager::mInstance = shared_ptr<InventoryManager>();\r
 \r
 InventoryManager::InventoryManager()\r
 {\r
@@ -21,36 +20,49 @@ InventoryManager::InventoryManager()
 InventoryManager::~InventoryManager()\r
 {\r
        mInventoryTable.clear();\r
+       mInstance.reset();\r
+}\r
+\r
+shared_ptr<InventoryManager> InventoryManager::Instance(void)\r
+{\r
+       if (mInstance == 0)\r
+       {\r
+               mInstance = shared_ptr<InventoryManager>(new InventoryManager());\r
+       }\r
+       return mInstance;\r
 }\r
 \r
 void InventoryManager::AddItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem)\r
 {\r
-       mInventoryTable[spPlayer].push_back(spItem);\r
+       assert(spPlayer != 0);\r
+       mInventoryTable[spPlayer->Id()].push_back(spItem);\r
 }\r
 \r
 void InventoryManager::RemoveItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem)\r
 {\r
-       InventoryMap::const_iterator iter = mInventoryTable.find(spPlayer);\r
+       assert(spPlayer != 0);\r
+       assert(spItem != 0);\r
+       PlayerInventoryMap::const_iterator iter = mInventoryTable.find(spPlayer->Id());\r
        if (iter != mInventoryTable.end())\r
        {\r
                if (iter->second.size() > 0)\r
                {\r
-                       PlayerInventory::iterator itemIter = find(mInventoryTable[spPlayer].begin(), \r
-                               mInventoryTable[spPlayer].end(), spItem);\r
-                       if (itemIter != mInventoryTable[spPlayer].end())\r
+                       ItemList::iterator itemIter = find(mInventoryTable[spPlayer->Id()].begin(), \r
+                               mInventoryTable[spPlayer->Id()].end(), spItem);\r
+                       if (itemIter != mInventoryTable[spPlayer->Id()].end())\r
                        {\r
-                               mInventoryTable[spPlayer].erase(itemIter);\r
+                               mInventoryTable[spPlayer->Id()].erase(itemIter);\r
                        }\r
                }\r
        }\r
 }\r
 \r
-PlayerInventory InventoryManager::GetInventory(shared_ptr<PlayerGO> spPlayer) const\r
+ItemList InventoryManager::GetInventory(shared_ptr<PlayerGO> spPlayer) const\r
 {\r
-       InventoryMap::const_iterator iter = mInventoryTable.find(spPlayer);\r
+       PlayerInventoryMap::const_iterator iter = mInventoryTable.find(spPlayer->Id());\r
        if (iter != mInventoryTable.end())\r
        {\r
                return iter->second;\r
        }\r
-       return PlayerInventory();\r
+       return ItemList();\r
 }\r
index 672f86c8cdb85003392051fa09ebf4f94bffcda5..22c7ce109cedb12c045e082dcde1c131b42481c6 100644 (file)
@@ -23,6 +23,9 @@ using GameServ::Types::Range;
 using GameServ::Types::ItemTypes;\r
 using GameServ::Types::Modifiers;\r
 \r
+#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
+using namespace GameServ::GameLayer::Helpers;\r
+\r
 #include <boost/algorithm/string.hpp>\r
 #include <boost/format.hpp>\r
 using boost::str;\r
@@ -42,13 +45,24 @@ int main()
                         << "Gold: " << spPlayer->Gold() << endl\r
                         << "Bank: " << spPlayer->Bank() << endl\r
                         << "Items: " << endl;\r
-               vector< shared_ptr<ItemGO> > spInventory = spPlayer->Inventory();\r
+\r
+\r
+               shared_ptr<InventoryManager> spInventory = InventoryManager::Instance();\r
+               ItemList inventory = spInventory->GetInventory(spPlayer);\r
+               ItemList::const_iterator iter;\r
+               for (iter = inventory.begin(); iter != inventory.end(); iter++)\r
+               {\r
+                       shared_ptr<ItemGO> spItem = (*iter);\r
+                       cout << str(format("Name: %1%  Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
+               }\r
+\r
+       /*      vector< shared_ptr<ItemGO> > spInventory = spPlayer->Inventory();\r
                vector< shared_ptr<ItemGO> >::const_iterator iter;\r
                for (iter = spInventory.begin(); iter != spInventory.end(); iter++)\r
                {\r
                        shared_ptr<ItemGO> spItem = (*iter);\r
                        cout << str(format("Name: %1%  Type: %2%") % spItem->Name() % ItemTypes::GetName(spItem->Type())) << endl;\r
-               }\r
+               }*/\r
                \r
 \r
                \r