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:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,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))
|
||||
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user