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