Removed MonsterManager's Singleton status, RoomData now has mgr members

RoomData now has monsterMgr and waypointMgr members, so that it can
compare it's characters to the monster & waypoints, etc.

RoomManager has been updated. It now has a database reference, which is
passed to the monsterMgr of new rooms. The room API also has functions
which expose these managers to lua.
This commit is contained in:
Kayne Ruse
2015-01-11 19:47:42 +11:00
parent 051ed0f14c
commit d0b2f8e12f
11 changed files with 72 additions and 26 deletions
-3
View File
@@ -26,7 +26,6 @@
#include "character_manager.hpp" #include "character_manager.hpp"
#include "client_manager.hpp" #include "client_manager.hpp"
#include "config_utility.hpp" #include "config_utility.hpp"
#include "monster_manager.hpp"
#include "room_manager.hpp" #include "room_manager.hpp"
#include "udp_network_utility.hpp" #include "udp_network_utility.hpp"
#include "waypoint_manager.hpp" #include "waypoint_manager.hpp"
@@ -43,7 +42,6 @@ int main(int argc, char* argv[]) {
CharacterManager::CreateSingleton(); CharacterManager::CreateSingleton();
ClientManager::CreateSingleton(); ClientManager::CreateSingleton();
ConfigUtility::CreateSingleton(); ConfigUtility::CreateSingleton();
MonsterManager::CreateSingleton();
RoomManager::CreateSingleton(); RoomManager::CreateSingleton();
UDPNetworkUtility::CreateSingleton(); UDPNetworkUtility::CreateSingleton();
@@ -62,7 +60,6 @@ int main(int argc, char* argv[]) {
CharacterManager::DeleteSingleton(); CharacterManager::DeleteSingleton();
ClientManager::DeleteSingleton(); ClientManager::DeleteSingleton();
ConfigUtility::DeleteSingleton(); ConfigUtility::DeleteSingleton();
MonsterManager::DeleteSingleton();
RoomManager::DeleteSingleton(); RoomManager::DeleteSingleton();
UDPNetworkUtility::DeleteSingleton(); UDPNetworkUtility::DeleteSingleton();
} }
+16 -8
View File
@@ -21,6 +21,14 @@
*/ */
#include "monster_manager.hpp" #include "monster_manager.hpp"
MonsterManager::MonsterManager() {
//EMPTY
}
MonsterManager::~MonsterManager() {
UnloadAll();
}
int MonsterManager::Create(std::string) { int MonsterManager::Create(std::string) {
//TODO //TODO
} }
@@ -49,14 +57,6 @@ std::map<int, MonsterData>* MonsterManager::GetContainer() {
//TODO //TODO
} }
sqlite3* MonsterManager::SetDatabase(sqlite3* db) {
//TODO
}
sqlite3* MonsterManager::GetDatabase() {
//TODO
}
lua_State* MonsterManager::SetLuaState(lua_State* L) { lua_State* MonsterManager::SetLuaState(lua_State* L) {
//TODO //TODO
} }
@@ -64,3 +64,11 @@ lua_State* MonsterManager::SetLuaState(lua_State* L) {
lua_State* MonsterManager::GetLuaState() { lua_State* MonsterManager::GetLuaState() {
//TODO //TODO
} }
sqlite3* MonsterManager::SetDatabase(sqlite3* db) {
//TODO
}
sqlite3* MonsterManager::GetDatabase() {
//TODO
}
+7 -10
View File
@@ -23,7 +23,6 @@
#define MONSTERMANAGER_HPP_ #define MONSTERMANAGER_HPP_
#include "monster_data.hpp" #include "monster_data.hpp"
#include "singleton.hpp"
#include "lua.hpp" #include "lua.hpp"
#include "sqlite3.h" #include "sqlite3.h"
@@ -32,8 +31,11 @@
#include <map> #include <map>
#include <string> #include <string>
class MonsterManager: public Singleton<MonsterManager> { class MonsterManager {
public: public:
MonsterManager();
~MonsterManager();
//common public methods //common public methods
int Create(std::string); int Create(std::string);
void Unload(int uid); void Unload(int uid);
@@ -47,21 +49,16 @@ public:
std::map<int, MonsterData>* GetContainer(); std::map<int, MonsterData>* GetContainer();
//hooks //hooks
sqlite3* SetDatabase(sqlite3* db);
sqlite3* GetDatabase();
lua_State* SetLuaState(lua_State* L); lua_State* SetLuaState(lua_State* L);
lua_State* GetLuaState(); lua_State* GetLuaState();
sqlite3* SetDatabase(sqlite3* db);
sqlite3* GetDatabase();
private: private:
friend Singleton<MonsterManager>;
MonsterManager() = default;
~MonsterManager() = default;
//members //members
std::map<int, MonsterData> elementMap; std::map<int, MonsterData> elementMap;
sqlite3* database = nullptr;
lua_State* lua = nullptr; lua_State* lua = nullptr;
sqlite3* database = nullptr;
}; };
#endif #endif
+1 -1
View File
@@ -1,5 +1,5 @@
#config #config
INCLUDES+=. ../entities ../server_utilities ../../common/map ../../common/utilities INCLUDES+=. ../entities ../monsters ../server_utilities ../waypoints ../../common/map ../../common/utilities
LIBS+= LIBS+=
CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES))
+17 -1
View File
@@ -53,6 +53,18 @@ static int getPager(lua_State* L) {
return 1; return 1;
} }
static int getMonsterMgr(lua_State* L) {
RoomData* room = reinterpret_cast<RoomData*>(lua_touserdata(L, 1));
lua_pushlightuserdata(L, reinterpret_cast<void*>(room->GetMonsterMgr()) );
return 1;
}
static int getWaypointMgr(lua_State* L) {
RoomData* room = reinterpret_cast<RoomData*>(lua_touserdata(L, 1));
lua_pushlightuserdata(L, reinterpret_cast<void*>(room->GetWaypointMgr()) );
return 1;
}
static int initialize(lua_State* L) { static int initialize(lua_State* L) {
//set the members of the given room //set the members of the given room
RoomData* room = static_cast<RoomData*>(lua_touserdata(L, 1)); RoomData* room = static_cast<RoomData*>(lua_touserdata(L, 1));
@@ -70,11 +82,15 @@ static int initialize(lua_State* L) {
} }
static const luaL_Reg roomLib[] = { static const luaL_Reg roomLib[] = {
{"GetPager",getPager},
{"SetName", setRoomName}, {"SetName", setRoomName},
{"GetName", getRoomName}, {"GetName", getRoomName},
{"SetTileset", setTilesetName}, {"SetTileset", setTilesetName},
{"GetTileset", getTilesetName}, {"GetTileset", getTilesetName},
{"GetPager",getPager},
{"GetMonsterMgr",getMonsterMgr},
{"GetWaypointMgr",getWaypointMgr},
{"Initialize", initialize}, {"Initialize", initialize},
{nullptr, nullptr} {nullptr, nullptr}
}; };
+8
View File
@@ -41,6 +41,14 @@ RegionPagerLua* RoomData::GetPager() {
return &pager; return &pager;
} }
MonsterManager* RoomData::GetMonsterMgr() {
return &monsterMgr;
}
WaypointManager* RoomData::GetWaypointMgr() {
return &waypointMgr;
}
std::list<Entity*>* RoomData::GetEntityList() { std::list<Entity*>* RoomData::GetEntityList() {
return &entityList; return &entityList;
} }
+6
View File
@@ -23,7 +23,9 @@
#define ROOMDATA_HPP_ #define ROOMDATA_HPP_
#include "entity.hpp" #include "entity.hpp"
#include "monster_manager.hpp"
#include "region_pager_lua.hpp" #include "region_pager_lua.hpp"
#include "waypoint_manager.hpp"
#include "lua.hpp" #include "lua.hpp"
@@ -43,6 +45,8 @@ public:
std::string GetTileset(); std::string GetTileset();
RegionPagerLua* GetPager(); RegionPagerLua* GetPager();
MonsterManager* GetMonsterMgr();
WaypointManager* GetWaypointMgr();
std::list<Entity*>* GetEntityList(); std::list<Entity*>* GetEntityList();
//TODO: triggers for unload, save, per-second, player enter, player exit, etc. //TODO: triggers for unload, save, per-second, player enter, player exit, etc.
@@ -55,6 +59,8 @@ private:
std::string tilesetName; std::string tilesetName;
RegionPagerLua pager; RegionPagerLua pager;
MonsterManager monsterMgr;
WaypointManager waypointMgr;
std::list<Entity*> entityList; std::list<Entity*> entityList;
}; };
+11
View File
@@ -36,6 +36,9 @@ int RoomManager::Create(std::string roomName, std::string tileset) {
newRoom->SetTileset(tileset); newRoom->SetTileset(tileset);
newRoom->pager.SetLuaState(lua); newRoom->pager.SetLuaState(lua);
newRoom->monsterMgr.SetLuaState(lua);
newRoom->monsterMgr.SetDatabase(database);
newRoom->waypointMgr.SetLuaState(lua);
//finish the routine //finish the routine
return counter++; return counter++;
@@ -122,3 +125,11 @@ lua_State* RoomManager::SetLuaState(lua_State* L) {
lua_State* RoomManager::GetLuaState() { lua_State* RoomManager::GetLuaState() {
return lua; return lua;
} }
sqlite3* RoomManager::SetDatabase(sqlite3* db) {
return database = db;
}
sqlite3* RoomManager::GetDatabase() {
return database;
}
+4
View File
@@ -27,6 +27,7 @@
#include "singleton.hpp" #include "singleton.hpp"
#include "lua.hpp" #include "lua.hpp"
#include "sqlite3.h"
#include <functional> #include <functional>
#include <map> #include <map>
@@ -51,6 +52,8 @@ public:
//hooks //hooks
lua_State* SetLuaState(lua_State* L); lua_State* SetLuaState(lua_State* L);
lua_State* GetLuaState(); lua_State* GetLuaState();
sqlite3* SetDatabase(sqlite3* db);
sqlite3* GetDatabase();
private: private:
friend Singleton<RoomManager>; friend Singleton<RoomManager>;
@@ -61,6 +64,7 @@ private:
//members //members
std::map<int, RoomData> elementMap; std::map<int, RoomData> elementMap;
lua_State* lua = nullptr; lua_State* lua = nullptr;
sqlite3* database = nullptr;
int counter = 0; int counter = 0;
}; };
+1 -2
View File
@@ -114,10 +114,9 @@ private:
lua_State* luaState = nullptr; lua_State* luaState = nullptr;
//ugly references; I hate this //ugly references; I hate this
ClientManager& clientMgr = ClientManager::GetSingleton();
AccountManager& accountMgr = AccountManager::GetSingleton(); AccountManager& accountMgr = AccountManager::GetSingleton();
CharacterManager& characterMgr = CharacterManager::GetSingleton(); CharacterManager& characterMgr = CharacterManager::GetSingleton();
ClientManager& clientMgr = ClientManager::GetSingleton();
MonsterManager& monsterMgr = MonsterManager::GetSingleton();
RoomManager& roomMgr = RoomManager::GetSingleton(); RoomManager& roomMgr = RoomManager::GetSingleton();
ConfigUtility& config = ConfigUtility::GetSingleton(); ConfigUtility& config = ConfigUtility::GetSingleton();
+1 -1
View File
@@ -105,6 +105,7 @@ void ServerApplication::Init(int argc, char* argv[]) {
characterMgr.SetDatabase(database); characterMgr.SetDatabase(database);
roomMgr.SetLuaState(luaState); roomMgr.SetLuaState(luaState);
roomMgr.SetDatabase(database);
std::cout << "Internal managers initialized" << std::endl; std::cout << "Internal managers initialized" << std::endl;
@@ -201,7 +202,6 @@ void ServerApplication::Quit() {
accountMgr.UnloadAll(); accountMgr.UnloadAll();
characterMgr.UnloadAll(); characterMgr.UnloadAll();
clientMgr.UnloadAll(); clientMgr.UnloadAll();
monsterMgr.UnloadAll();
roomMgr.UnloadAll(); roomMgr.UnloadAll();
//APIs //APIs