From: kainazzzo Date: Mon, 21 Sep 2009 17:33:20 +0000 (+0000) Subject: Finished out the LevelGO class for now X-Git-Url: https://jfr.im/git/irc/gameservirc.git/commitdiff_plain/3ab6f12a351f56e2888d482978867fbb985b2a32 Finished out the LevelGO class for now 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 --- diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/LevelGO.h b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/LevelGO.h index cd9234a..84eb273 100644 --- a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/LevelGO.h +++ b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/LevelGO.h @@ -7,6 +7,12 @@ using GameServ::GameLayer::GameObjects::MasterGO; #include using GameServ::GameLayer::GameObjects::MonsterGO; +#include +using GameServ::Types::ObjectTypes; + +#include +using boost::shared_ptr; + #include using std::string; #include @@ -31,6 +37,26 @@ namespace GameServ { namespace GameLayer { namespace GameObjects virtual LevelGO *Clone(void) const; + virtual ObjectTypes::ObjectType ObjectType(void) const; + + //! Property set - Master + void Master(shared_ptr spMaster); + + //! Property get - Master + shared_ptr Master(void) const; + + //! Property set - Monster list + void Monsters(const vector< shared_ptr > &spMonsters); + + //! Property get - Monster List + vector< shared_ptr > Monsters(void) const; + + //! Remove a monster from the list + void RemoveMonster(shared_ptr spMonster); + + //! Add a monster to the list + void AddMonster(shared_ptr spMonster); + private: vector< shared_ptr > mspMonsters; diff --git a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h index cf21f49..36780e4 100644 --- a/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h +++ b/gameserv-2.0/libgameservgldl/include/GameServ/GameLayer/GameObjects/PlayerGO.h @@ -130,9 +130,9 @@ namespace GameServ { namespace GameLayer { namespace GameObjects vector< shared_ptr > Inventory(void) const; //! Add item to inventory - void AddItemToInventory(shared_ptr spItem, const int &Number=1); + void AddItemToInventory(shared_ptr spItem); //! Remove item from inventory - void RemoveItemFromInventory(shared_ptr spItem, const int &Number=1); + void RemoveItemFromInventory(shared_ptr spItem); bool operator==(const PlayerGO &right) const; bool operator!=(const PlayerGO &right) const; diff --git a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/LevelGO.cpp b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/LevelGO.cpp index e69de29..7f1be35 100644 --- a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/LevelGO.cpp +++ b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/LevelGO.cpp @@ -0,0 +1,95 @@ +#include +using GameServ::GameLayer::GameObjects::LevelGO; + +#include +using GameServ::Types::ObjectTypes; + +#include +using std::vector; + +#include +using std::string; + +LevelGO::LevelGO() : GameObject() +{ +} + +LevelGO::LevelGO(const string &Id) : GameObject(Id) +{ +} + +LevelGO::~LevelGO() +{ + mspMonsters.clear(); + mspMaster.reset(); +} + +bool LevelGO::operator ==(const LevelGO &right) const +{ + bool equal = (right.mspMaster == mspMaster && right.mspMonsters.size() == mspMonsters.size()); + // Just because it's expensive to check an entire vector, let's split it off to be sure the + // initial comparison is true first. + if (equal) + { + return right.mspMonsters == mspMonsters; + } + return equal; +} + +bool LevelGO::operator !=(const LevelGO &right) const +{ + return !(operator==(right)); +} + +LevelGO *LevelGO::Clone(void) const +{ + return new LevelGO(*this); +} + +ObjectTypes::ObjectType LevelGO::ObjectType(void) const +{ + return ObjectTypes::Level; +} + +void LevelGO::AddMonster(shared_ptr spMonster) +{ + vector< shared_ptr >::const_iterator iter; + iter = std::find(mspMonsters.begin(), mspMonsters.end(), spMonster); + if (iter == mspMonsters.end()) + { + mspMonsters.push_back(spMonster); + } +} + +void LevelGO::RemoveMonster(shared_ptr spMonster) +{ + vector< shared_ptr >::const_iterator iter; + iter = std::find(mspMonsters.begin(), mspMonsters.end(), spMonster); + if (iter != mspMonsters.end()) + { + mspMonsters.erase(iter); + } +} + +void LevelGO::Monsters(const vector< shared_ptr > &spMonsters) +{ + mspMonsters = spMonsters; +} + +vector< shared_ptr > LevelGO::Monsters(void) const +{ + return mspMonsters; +} + +void LevelGO::Master(shared_ptr spMaster) +{ + mspMaster = spMaster; +} + +shared_ptr LevelGO::Master(void) const +{ + return mspMaster; +} + + + diff --git a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MasterGO.cpp b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MasterGO.cpp index 27a670f..3e18e68 100644 --- a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MasterGO.cpp +++ b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/MasterGO.cpp @@ -9,7 +9,7 @@ using GameServ::Types::ObjectTypes; #include using std::string; -MasterGO::MasterGO() +MasterGO::MasterGO() : GameObject() { } diff --git a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp index a13d07d..7d4087a 100644 --- a/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp +++ b/gameserv-2.0/libgameservgldl/src/GameLayer/GameObjects/PlayerGO.cpp @@ -236,12 +236,9 @@ vector< shared_ptr > PlayerGO::Inventory(void) const return mItems; } -void PlayerGO::AddItemToInventory(shared_ptr spItem, const int &Number) +void PlayerGO::AddItemToInventory(shared_ptr spItem) { - for (int x = 0; x < Number; ++x) - { - mItems.push_back(CloneItemAsProperType(spItem)); - } + mItems.push_back(spItem); } shared_ptr PlayerGO::CloneItemAsProperType(shared_ptr spItem) const @@ -262,20 +259,13 @@ shared_ptr PlayerGO::CloneItemAsProperType(shared_ptr spItem) co ItemTypes::GetName(spItem->Type())), __FILE__, __LINE__); } } -void PlayerGO::RemoveItemFromInventory(shared_ptr spItem, const int &Number) +void PlayerGO::RemoveItemFromInventory(shared_ptr spItem) { vector< shared_ptr >::iterator iter; - for (int x = 0; x < Number; ++x) + iter = find(mItems.begin(), mItems.end(), spItem); + if (iter != mItems.end()) { - iter = find(mItems.begin(), mItems.end(), spItem); - if (iter != mItems.end()) - { - mItems.erase(iter); - } - else - { - break; - } + mItems.erase(iter); } }