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