From f23b929f8aa7a92da59cd19477a0e8d712fcda85 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Sun, 3 Apr 2016 16:04:41 +1000 Subject: [PATCH] Added some boilerplate --- server/characters/makefile | 2 +- server/combat/barrier_data.cpp | 7 ++ server/combat/barrier_data.hpp | 11 +++- server/combat/barrier_manager.cpp | 75 ++++++++++++++++++++++ server/combat/barrier_manager.hpp | 40 ++++++++++++ server/combat/combat_instance.cpp | 28 ++++++++ server/combat/combat_instance.hpp | 20 +++++- server/combat/combat_instance_manager.cpp | 78 +++++++++++++++++++++++ server/combat/combat_instance_manager.hpp | 40 ++++++++++++ server/combat/makefile | 2 +- server/rooms/makefile | 2 +- server/rooms/room_data.hpp | 4 ++ 12 files changed, 300 insertions(+), 9 deletions(-) diff --git a/server/characters/makefile b/server/characters/makefile index 391a7b9..69b4afa 100644 --- a/server/characters/makefile +++ b/server/characters/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../creatures ../entities ../monsters ../rooms ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities +INCLUDES+=. .. ../combat ../creatures ../entities ../monsters ../rooms ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/combat/barrier_data.cpp b/server/combat/barrier_data.cpp index 5cf0c9c..9739b55 100644 --- a/server/combat/barrier_data.cpp +++ b/server/combat/barrier_data.cpp @@ -21,3 +21,10 @@ */ #include "barrier_data.hpp" +BarrierData::BarrierData(int i): Entity::Entity("barrier") { + instanceIndex = 0; +} + +BarrierData::~BarrierData() { + // +} \ No newline at end of file diff --git a/server/combat/barrier_data.hpp b/server/combat/barrier_data.hpp index 7a95603..f77e824 100644 --- a/server/combat/barrier_data.hpp +++ b/server/combat/barrier_data.hpp @@ -19,13 +19,18 @@ * 3. This notice may not be removed or altered from any source * distribution. */ +#pragma once + #include "entity.hpp" class BarrierData: public Entity { public: - BarrierData() = default; - ~BarrierData() = default; + BarrierData(int instanceIndex); + ~BarrierData(); private: - // + int instanceIndex = -1; + + //for displaying the status of combatants: 0 empty, 1 green, 2 red + int slotData[8]; }; \ No newline at end of file diff --git a/server/combat/barrier_manager.cpp b/server/combat/barrier_manager.cpp index c292d2b..6cf3ca3 100644 --- a/server/combat/barrier_manager.cpp +++ b/server/combat/barrier_manager.cpp @@ -21,3 +21,78 @@ */ #include "barrier_manager.hpp" +BarrierManager::BarrierManager() { + //EMPTY +} + +BarrierManager::~BarrierManager() { + UnloadAll(); +} + +void BarrierManager::Update() { + // +} + +int BarrierManager::Create() { + //implicitly create the new object + elementMap.emplace( std::pair(counter, BarrierData(-1)) ); + + //TODO: do various things like saving to the database + return counter++; +} + +//TODO: (1) combat load, save + +void BarrierManager::Unload(int uid) { + elementMap.erase(uid); +} + +void BarrierManager::UnloadAll() { + elementMap.clear(); +} + +void BarrierManager::UnloadIf(std::function)> fn) { + std::map::iterator it = elementMap.begin(); + while (it != elementMap.end()) { + if (fn(*it)) { + it = elementMap.erase(it); + } + else { + ++it; + } + } +} + +BarrierData* BarrierManager::Find(int uid) { + std::map::iterator it = elementMap.find(uid); + + if (it == elementMap.end()) { + return nullptr; + } + + return &it->second; +} + +int BarrierManager::GetLoadedCount() { + return elementMap.size(); +} + +std::map* BarrierManager::GetContainer() { + return &elementMap; +} + +lua_State* BarrierManager::SetLuaState(lua_State* L) { + return lua = L; +} + +lua_State* BarrierManager::GetLuaState() { + return lua; +} + +sqlite3* BarrierManager::SetDatabase(sqlite3* db) { + return database = db; +} + +sqlite3* BarrierManager::GetDatabase() { + return database; +} diff --git a/server/combat/barrier_manager.hpp b/server/combat/barrier_manager.hpp index 5cf0c9c..ce6cf85 100644 --- a/server/combat/barrier_manager.hpp +++ b/server/combat/barrier_manager.hpp @@ -19,5 +19,45 @@ * 3. This notice may not be removed or altered from any source * distribution. */ +#pragma once + #include "barrier_data.hpp" +#include "lua.hpp" +#include "sqlite3.h" + +#include +#include + +class BarrierManager { +public: + BarrierManager(); + ~BarrierManager(); + + //common public methods + void Update(); + + int Create(); + void Unload(int uid); + + void UnloadAll(); + void UnloadIf(std::function)> fn); + + //accessors & mutators + BarrierData* Find(int uid); + int GetLoadedCount(); + std::map* GetContainer(); + + //hooks + lua_State* SetLuaState(lua_State* L); + lua_State* GetLuaState(); + sqlite3* SetDatabase(sqlite3* db); + sqlite3* GetDatabase(); + +private: + //members + std::map elementMap; + int counter = 0; + lua_State* lua = nullptr; + sqlite3* database = nullptr; +}; \ No newline at end of file diff --git a/server/combat/combat_instance.cpp b/server/combat/combat_instance.cpp index ebcc6eb..b7d661c 100644 --- a/server/combat/combat_instance.cpp +++ b/server/combat/combat_instance.cpp @@ -21,3 +21,31 @@ */ #include "combat_instance.hpp" +CombatInstance::CombatInstance() { + // +} + +CombatInstance::~CombatInstance() { + // +} + +void CombatInstance::Update() { + // +} + +//accessors and mutators +void CombatInstance::PushCharacter(CharacterData* const characterData) { + // +} + +void CombatInstance::PopCharacter(CharacterData* const characterData) { + // +} + +void CombatInstance::PushCreature(CreatureData* const creatureData) { + // +} + +void CombatInstance::PopCreature(CreatureData* const creatureData) { + // +} diff --git a/server/combat/combat_instance.hpp b/server/combat/combat_instance.hpp index 2c1cb3c..99fc48e 100644 --- a/server/combat/combat_instance.hpp +++ b/server/combat/combat_instance.hpp @@ -19,12 +19,26 @@ * 3. This notice may not be removed or altered from any source * distribution. */ +#pragma once + +#include "character_data.hpp" +#include "creature_data.hpp" class CombatInstance { public: - CombatInstance() = default; - ~CombatInstance() = default; + CombatInstance(); + ~CombatInstance(); + + void Update(); + + //accessors and mutators + void PushCharacter(CharacterData* const characterData); + void PopCharacter(CharacterData* const characterData); + + void PushCreature(CreatureData* const creatureData); + void PopCreature(CreatureData* const creatureData); private: - // + std::array characterArray; + std::array creatureArray; }; \ No newline at end of file diff --git a/server/combat/combat_instance_manager.cpp b/server/combat/combat_instance_manager.cpp index 67fd92c..af3df50 100644 --- a/server/combat/combat_instance_manager.cpp +++ b/server/combat/combat_instance_manager.cpp @@ -21,3 +21,81 @@ */ #include "combat_instance_manager.hpp" +CombatInstanceManager::CombatInstanceManager() { + //EMPTY +} + +CombatInstanceManager::~CombatInstanceManager() { + UnloadAll(); +} + +//arg: a list of combats to be updated in the clients +void CombatInstanceManager::Update() { + for (auto& it : elementMap) { + it.second.Update(); + } +} + +int CombatInstanceManager::Create() { + //implicitly create the new object + elementMap.emplace( std::pair(counter, CombatInstance()) ); + + //TODO: do various things like saving to the database + return counter++; +} + +//TODO: (1) combat load, save + +void CombatInstanceManager::Unload(int uid) { + elementMap.erase(uid); +} + +void CombatInstanceManager::UnloadAll() { + elementMap.clear(); +} + +void CombatInstanceManager::UnloadIf(std::function)> fn) { + std::map::iterator it = elementMap.begin(); + while (it != elementMap.end()) { + if (fn(*it)) { + it = elementMap.erase(it); + } + else { + ++it; + } + } +} + +CombatInstance* CombatInstanceManager::Find(int uid) { + std::map::iterator it = elementMap.find(uid); + + if (it == elementMap.end()) { + return nullptr; + } + + return &it->second; +} + +int CombatInstanceManager::GetLoadedCount() { + return elementMap.size(); +} + +std::map* CombatInstanceManager::GetContainer() { + return &elementMap; +} + +lua_State* CombatInstanceManager::SetLuaState(lua_State* L) { + return lua = L; +} + +lua_State* CombatInstanceManager::GetLuaState() { + return lua; +} + +sqlite3* CombatInstanceManager::SetDatabase(sqlite3* db) { + return database = db; +} + +sqlite3* CombatInstanceManager::GetDatabase() { + return database; +} diff --git a/server/combat/combat_instance_manager.hpp b/server/combat/combat_instance_manager.hpp index ebcc6eb..badd495 100644 --- a/server/combat/combat_instance_manager.hpp +++ b/server/combat/combat_instance_manager.hpp @@ -19,5 +19,45 @@ * 3. This notice may not be removed or altered from any source * distribution. */ +#pragma once + #include "combat_instance.hpp" +#include "lua.hpp" +#include "sqlite3.h" + +#include +#include + +class CombatInstanceManager { +public: + CombatInstanceManager(); + ~CombatInstanceManager(); + + //common public methods + void Update(); + + int Create(); + void Unload(int uid); + + void UnloadAll(); + void UnloadIf(std::function)> fn); + + //accessors & mutators + CombatInstance* Find(int uid); + int GetLoadedCount(); + std::map* GetContainer(); + + //hooks + lua_State* SetLuaState(lua_State* L); + lua_State* GetLuaState(); + sqlite3* SetDatabase(sqlite3* db); + sqlite3* GetDatabase(); + +private: + //members + std::map elementMap; + int counter = 0; + lua_State* lua = nullptr; + sqlite3* database = nullptr; +}; \ No newline at end of file diff --git a/server/combat/makefile b/server/combat/makefile index 211a55a..ef080f9 100644 --- a/server/combat/makefile +++ b/server/combat/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../entities ../../common/utilities +INCLUDES+=. .. ../characters ../creatures ../entities ../../common/gameplay ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/rooms/makefile b/server/rooms/makefile index fbab23c..7f32eee 100644 --- a/server/rooms/makefile +++ b/server/rooms/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../characters ../creatures ../entities ../monsters ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities +INCLUDES+=. .. ../characters ../combat ../creatures ../entities ../monsters ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index 24a8423..eb8e1bc 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -21,7 +21,9 @@ */ #pragma once +#include "barrier_manager.hpp" #include "character_data.hpp" +#include "combat_instance_manager.hpp" #include "creature_manager.hpp" #include "region_pager_lua.hpp" #include "trigger_manager.hpp" @@ -74,7 +76,9 @@ private: //members int roomIndex = 0; + BarrierManager barrierMgr; std::list characterList; + CombatInstanceManager CombatInstanceMgr; CreatureManager creatureMgr; RegionPagerLua pager; TriggerManager triggerMgr;