]> jfr.im git - irc/gameservirc.git/commitdiff
Finished out the LevelGO class for now
authorkainazzzo <redacted>
Mon, 21 Sep 2009 17:33:20 +0000 (17:33 +0000)
committerkainazzzo <redacted>
Mon, 21 Sep 2009 17:33:20 +0000 (17:33 +0000)
Changed the PlayerGO::AddItemToInventory function to not clone the object, which adheres more to the Single Responsibility Principle of OOD cloning will be done elsewhere now, and the player class won't have to change because of it

git-svn-id: https://svn.code.sf.net/p/gameservirc/code/trunk@530 bc333340-6410-0410-a689-9d09f3c113fa

gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/LevelGO.h
gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/LevelGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MasterGO.cpp
gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp

index cd9234ae83266615648c30e62ec1f362b153aea2..84eb273756adfcd8095e35c1a9a543265fc80747 100644 (file)
@@ -7,6 +7,12 @@ using GameServ::GameLayer::GameObjects::MasterGO;
 #include <GameServ/GameLayer/GameObjects/MonsterGO.h>\r
 using GameServ::GameLayer::GameObjects::MonsterGO;\r
 \r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ObjectTypes;\r
+\r
+#include <boost/smart_ptr/shared_ptr.hpp>\r
+using boost::shared_ptr;\r
+\r
 #include <string>\r
 using std::string;\r
 #include <vector>\r
@@ -31,6 +37,26 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
 \r
                virtual LevelGO *Clone(void) const;\r
 \r
+               virtual ObjectTypes::ObjectType ObjectType(void) const;\r
+\r
+               //! Property set - Master\r
+               void Master(shared_ptr<MasterGO> spMaster);\r
+\r
+               //! Property get - Master\r
+               shared_ptr<MasterGO> Master(void) const;\r
+\r
+               //! Property set - Monster list\r
+               void Monsters(const vector< shared_ptr<MonsterGO> > &spMonsters);\r
+\r
+               //! Property get - Monster List\r
+               vector< shared_ptr<MonsterGO> > Monsters(void) const;\r
+\r
+               //! Remove a monster from the list\r
+               void RemoveMonster(shared_ptr<MonsterGO> spMonster);\r
+\r
+               //! Add a monster to the list\r
+               void AddMonster(shared_ptr<MonsterGO> spMonster);\r
+\r
        private:\r
 \r
                vector< shared_ptr<MonsterGO> > mspMonsters;\r
index cf21f495919663e90f8e57875c327994ee5d6cfc..36780e4b8a34e0cb10aba1a43c22c9187ca394a9 100644 (file)
@@ -130,9 +130,9 @@ namespace GameServ { namespace GameLayer { namespace GameObjects
                vector< shared_ptr<ItemGO> > Inventory(void) const;\r
 \r
                //! Add item to inventory\r
-               void AddItemToInventory(shared_ptr<ItemGO> spItem, const int &Number=1);\r
+               void AddItemToInventory(shared_ptr<ItemGO> spItem);\r
                //! Remove item from inventory\r
-               void RemoveItemFromInventory(shared_ptr<ItemGO> spItem, const int &Number=1);\r
+               void RemoveItemFromInventory(shared_ptr<ItemGO> spItem);\r
 \r
                bool operator==(const PlayerGO &right) const;\r
                bool operator!=(const PlayerGO &right) const;\r
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..7f1be35035b914d27f526430e510cd49d4166b2d 100644 (file)
@@ -0,0 +1,95 @@
+#include <GameServ/GameLayer/GameObjects/LevelGO.h>\r
+using GameServ::GameLayer::GameObjects::LevelGO;\r
+\r
+#include <GameServ/Types.h>\r
+using GameServ::Types::ObjectTypes;\r
+\r
+#include <vector>\r
+using std::vector;\r
+\r
+#include <string>\r
+using std::string;\r
+\r
+LevelGO::LevelGO() : GameObject()\r
+{\r
+}\r
+\r
+LevelGO::LevelGO(const string &Id) : GameObject(Id)\r
+{\r
+}\r
+\r
+LevelGO::~LevelGO()\r
+{\r
+       mspMonsters.clear();\r
+       mspMaster.reset();\r
+}\r
+\r
+bool LevelGO::operator ==(const LevelGO &right) const\r
+{\r
+       bool equal = (right.mspMaster == mspMaster && right.mspMonsters.size() == mspMonsters.size());\r
+       // Just because it's expensive to check an entire vector, let's split it off to be sure the\r
+       // initial comparison is true first.\r
+       if (equal)\r
+       {\r
+               return right.mspMonsters == mspMonsters;\r
+       }\r
+       return equal;\r
+}\r
+\r
+bool LevelGO::operator !=(const LevelGO &right) const\r
+{\r
+       return !(operator==(right));\r
+}\r
+\r
+LevelGO *LevelGO::Clone(void) const\r
+{\r
+       return new LevelGO(*this);\r
+}\r
+\r
+ObjectTypes::ObjectType LevelGO::ObjectType(void) const\r
+{\r
+       return ObjectTypes::Level;\r
+}\r
+\r
+void LevelGO::AddMonster(shared_ptr<MonsterGO> spMonster)\r
+{\r
+       vector< shared_ptr<MonsterGO> >::const_iterator iter;\r
+       iter = std::find(mspMonsters.begin(), mspMonsters.end(), spMonster);\r
+       if (iter == mspMonsters.end())\r
+       {\r
+               mspMonsters.push_back(spMonster);\r
+       }\r
+}\r
+\r
+void LevelGO::RemoveMonster(shared_ptr<MonsterGO> spMonster)\r
+{\r
+       vector< shared_ptr<MonsterGO> >::const_iterator iter;\r
+       iter = std::find(mspMonsters.begin(), mspMonsters.end(), spMonster);\r
+       if (iter != mspMonsters.end())\r
+       {\r
+               mspMonsters.erase(iter);\r
+       }\r
+}\r
+\r
+void LevelGO::Monsters(const vector< shared_ptr<MonsterGO> > &spMonsters)\r
+{\r
+       mspMonsters = spMonsters;\r
+}\r
+\r
+vector< shared_ptr<MonsterGO> > LevelGO::Monsters(void) const\r
+{\r
+       return mspMonsters;\r
+}\r
+\r
+void LevelGO::Master(shared_ptr<MasterGO> spMaster)\r
+{\r
+       mspMaster = spMaster;\r
+}\r
+\r
+shared_ptr<MasterGO> LevelGO::Master(void) const\r
+{\r
+       return mspMaster;\r
+}\r
+\r
+\r
+\r
index 27a670f91c6865e10389b3c0ad1c952ec77f169a..3e18e686ce12afa3fcb336a1eeb709b13c023b1d 100644 (file)
@@ -9,7 +9,7 @@ using GameServ::Types::ObjectTypes;
 #include <string>\r
 using std::string;\r
 \r
-MasterGO::MasterGO()\r
+MasterGO::MasterGO() : GameObject()\r
 {\r
 }\r
 \r
index a13d07d56029f0b5f674f19022c19ef80019f0de..7d4087abb86ef2315664ee3e80264bc8fdb15bc1 100644 (file)
@@ -236,12 +236,9 @@ vector< shared_ptr<ItemGO> > PlayerGO::Inventory(void) const
        return mItems;\r
 }\r
 \r
-void PlayerGO::AddItemToInventory(shared_ptr<ItemGO> spItem, const int &Number)\r
+void PlayerGO::AddItemToInventory(shared_ptr<ItemGO> spItem)\r
 {\r
-       for (int x = 0; x < Number; ++x)\r
-       {\r
-               mItems.push_back(CloneItemAsProperType(spItem));\r
-       }\r
+       mItems.push_back(spItem);\r
 }\r
 \r
 shared_ptr<ItemGO> PlayerGO::CloneItemAsProperType(shared_ptr<ItemGO> spItem) const\r
@@ -262,20 +259,13 @@ shared_ptr<ItemGO> PlayerGO::CloneItemAsProperType(shared_ptr<ItemGO> spItem) co
                        ItemTypes::GetName(spItem->Type())), __FILE__, __LINE__);\r
        }\r
 }\r
-void PlayerGO::RemoveItemFromInventory(shared_ptr<ItemGO> spItem, const int &Number)\r
+void PlayerGO::RemoveItemFromInventory(shared_ptr<ItemGO> spItem)\r
 {\r
        vector< shared_ptr<ItemGO> >::iterator iter;\r
-       for (int x = 0; x < Number; ++x)\r
+       iter = find(mItems.begin(), mItems.end(), spItem);\r
+       if (iter != mItems.end())\r
        {\r
-               iter = find(mItems.begin(), mItems.end(), spItem);\r
-               if (iter != mItems.end())\r
-               {\r
-                       mItems.erase(iter);\r
-               }\r
-               else\r
-               {\r
-                       break;\r
-               }\r
+               mItems.erase(iter);\r
        }\r
 }\r
 \r