#ifndef __GS__INVENTORYMANAGER_H__\r
#define __GS__INVENTORYMANAGER_H__\r
\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+#include <GameServ/GameLayer/GameObjects/ItemGO.h>\r
+using GameServ::GameLayer::GameObjects::ItemGO;\r
+#include <GameServ/GameLayer/GameObjects/PlayerGO.h>\r
+using GameServ::GameLayer::GameObjects::PlayerGO;\r
+\r
+#include <list>\r
+#include <map>\r
+using std::list;\r
+using std::map;\r
+\r
+\r
namespace GameServ { namespace GameLayer { namespace Helpers {\r
\r
+\r
+ typedef list< shared_ptr<ItemGO> > PlayerInventory;\r
+ typedef map<shared_ptr<PlayerGO>, PlayerInventory> InventoryMap;\r
+\r
class InventoryManager\r
{\r
public:\r
InventoryManager();\r
~InventoryManager();\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
\r
private:\r
+\r
+ InventoryMap mInventoryTable;\r
+\r
}; // InventoryManager\r
\r
}}} // GameServ::GameLayer::Helpers\r
+#include <GameServ/GameLayer/Helpers/InventoryManager.h>\r
+using GameServ::GameLayer::Helpers::InventoryManager;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
+#include <list>\r
+#include <map>\r
+using std::list;\r
+using std::map;\r
+#include <algorithm>\r
+using std::find;\r
+\r
+typedef list< shared_ptr<ItemGO> > PlayerInventory;\r
+typedef map<shared_ptr<PlayerGO>, PlayerInventory> InventoryMap;\r
+\r
+InventoryManager::InventoryManager()\r
+{\r
+}\r
+\r
+InventoryManager::~InventoryManager()\r
+{\r
+ mInventoryTable.clear();\r
+}\r
+\r
+void InventoryManager::AddItem(shared_ptr<PlayerGO> spPlayer, shared_ptr<ItemGO> spItem)\r
+{\r
+ mInventoryTable[spPlayer].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
+ 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
+ {\r
+ mInventoryTable[spPlayer].erase(itemIter);\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+PlayerInventory InventoryManager::GetInventory(shared_ptr<PlayerGO> spPlayer) const\r
+{\r
+ InventoryMap::const_iterator iter = mInventoryTable.find(spPlayer);\r
+ if (iter != mInventoryTable.end())\r
+ {\r
+ return iter->second;\r
+ }\r
+ return PlayerInventory();\r
+}\r