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
+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;
};