diff --git a/server/characters/makefile b/server/characters/makefile index 6b2b2e2..391a7b9 100644 --- a/server/characters/makefile +++ b/server/characters/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../entities ../monsters ../rooms ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities +INCLUDES+=. .. ../creatures ../entities ../monsters ../rooms ../triggers ../../common/gameplay ../../common/map ../../common/network ../../common/network/packet_types ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/creatures/creature_manager.cpp b/server/creatures/creature_manager.cpp index b9df850..a271cf3 100644 --- a/server/creatures/creature_manager.cpp +++ b/server/creatures/creature_manager.cpp @@ -29,8 +29,14 @@ CreatureManager::~CreatureManager() { UnloadAll(); } +void CreatureManager::Update() { + for (auto& it : elementMap) { + it.second.Update(); + } +} + int CreatureManager::Create(std::string avatar, int scriptRef) { - //implicitly create the new + //implicitly create the new object elementMap.emplace(counter, CreatureData(avatar, scriptRef)); //TODO: do various things like saving to the database diff --git a/server/creatures/creature_manager.hpp b/server/creatures/creature_manager.hpp index 098060e..7a3f1eb 100644 --- a/server/creatures/creature_manager.hpp +++ b/server/creatures/creature_manager.hpp @@ -36,6 +36,8 @@ public: ~CreatureManager(); //common public methods + void Update(); + int Create(std::string avatar, int scriptRef); void Unload(int uid); diff --git a/server/creatures/creature_manager_api.cpp b/server/creatures/creature_manager_api.cpp index 8b0b2d5..26c38ca 100644 --- a/server/creatures/creature_manager_api.cpp +++ b/server/creatures/creature_manager_api.cpp @@ -32,7 +32,7 @@ static int create(lua_State* L) { return 2; } -//TOOD: this needs to take the userdata as a parameter too +//TOOD: overload this to take the userdata as a parameter static int unload(lua_State* L) { CreatureManager* mgr = static_cast(lua_touserdata(L, 1)); mgr->Unload(lua_tointeger(L, 2)); diff --git a/server/rooms/makefile b/server/rooms/makefile index 54de217..3908a57 100644 --- a/server/rooms/makefile +++ b/server/rooms/makefile @@ -1,5 +1,5 @@ #config -INCLUDES+=. .. ../characters ../entities ../monsters ../triggers ../../common/gameplay ../../common/map ../../common/utilities +INCLUDES+=. .. ../characters ../creatures ../entities ../monsters ../triggers ../../common/gameplay ../../common/map ../../common/utilities LIBS+= CXXFLAGS+=-std=c++11 $(addprefix -I,$(INCLUDES)) diff --git a/server/rooms/room_api.cpp b/server/rooms/room_api.cpp index 8add626..455ce02 100644 --- a/server/rooms/room_api.cpp +++ b/server/rooms/room_api.cpp @@ -50,20 +50,18 @@ static int getTilesetName(lua_State* L) { return 1; } +static int getCreatureMgr(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + lua_pushlightuserdata(L, reinterpret_cast(room->GetCreatureMgr()) ); + return 1; +} + static int getPager(lua_State* L) { RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); lua_pushlightuserdata(L, reinterpret_cast(room->GetPager()) ); return 1; } -/* -static int getMonsterMgr(lua_State* L) { - RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); - lua_pushlightuserdata(L, reinterpret_cast(room->GetMonsterMgr()) ); - return 1; -} -*/ - static int getTriggerMgr(lua_State* L) { RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); lua_pushlightuserdata(L, reinterpret_cast(room->GetTriggerMgr()) ); @@ -87,12 +85,11 @@ static int forEachCharacter(lua_State* L) { return 0; } -/* -static int forEachMonster(lua_State* L) { +static int forEachCreature(lua_State* L) { RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); - MonsterManager* monsterMgr = room->GetMonsterMgr(); - //pass each monster to the given function - for (auto& it : *monsterMgr->GetContainer()) { + CreatureManager* creatureMgr = room->GetCreatureMgr(); + //pass each creature to the given function + for (auto& it : *creatureMgr->GetContainer()) { lua_pushvalue(L, -1); lua_pushlightuserdata(L, static_cast(&it.second)); //call each iteration, throwing an exception if something happened @@ -105,7 +102,6 @@ static int forEachMonster(lua_State* L) { } return 0; } -*/ static int setOnTick(lua_State* L) { RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); @@ -139,12 +135,12 @@ static const luaL_Reg roomLib[] = { {"SetTileset", setTilesetName}, {"GetTileset", getTilesetName}, + {"GetCreatureMgr",getCreatureMgr}, {"GetPager",getPager}, -// {"GetMonsterMgr",getMonsterMgr}, {"GetTriggerMgr",getTriggerMgr}, {"ForEachCharacter", forEachCharacter}, -// {"ForEachMonster", forEachMonster}, + {"ForEachCreature", forEachCreature}, {"SetOnTick", setOnTick}, {"GetOnTick", getOnTick}, diff --git a/server/rooms/room_data.cpp b/server/rooms/room_data.cpp index 008ec9d..aef217e 100644 --- a/server/rooms/room_data.cpp +++ b/server/rooms/room_data.cpp @@ -43,10 +43,10 @@ void RoomData::RunFrame() { } //update the entities in the room + creatureMgr.Update(); for (auto& it : characterList) { it->Update(); } - //TODO: (3) iterate through the monster map //TODO: (3) trigger script for monsters //build a list of game entities @@ -100,6 +100,8 @@ void RoomData::RunFrame() { //next entityStack.pop(); } + + //TODO: creature/character collisions } std::string RoomData::SetName(std::string s) { @@ -118,6 +120,14 @@ std::string RoomData::GetTileset() { return tilesetName; } +std::list* RoomData::GetCharacterList() { + return &characterList; +} + +CreatureManager* RoomData::GetCreatureMgr() { + return &creatureMgr; +} + RegionPagerLua* RoomData::GetPager() { return &pager; } @@ -126,10 +136,6 @@ TriggerManager* RoomData::GetTriggerMgr() { return &triggerMgr; } -std::list* RoomData::GetCharacterList() { - return &characterList; -} - lua_State* RoomData::SetLuaState(lua_State* L) { lua = L; pager.SetLuaState(lua); diff --git a/server/rooms/room_data.hpp b/server/rooms/room_data.hpp index de91b02..4b530bc 100644 --- a/server/rooms/room_data.hpp +++ b/server/rooms/room_data.hpp @@ -22,6 +22,7 @@ #pragma once #include "character_data.hpp" +#include "creature_manager.hpp" #include "region_pager_lua.hpp" #include "trigger_manager.hpp" @@ -47,9 +48,10 @@ public: std::string SetTileset(std::string); std::string GetTileset(); + std::list* GetCharacterList(); + CreatureManager* GetCreatureMgr(); RegionPagerLua* GetPager(); TriggerManager* GetTriggerMgr(); - std::list* GetCharacterList(); //API interfaces lua_State* SetLuaState(lua_State* L); @@ -68,9 +70,10 @@ private: std::string tilesetName; //members + std::list characterList; + CreatureManager creatureMgr; RegionPagerLua pager; TriggerManager triggerMgr; - std::list characterList; //API lua_State* lua = nullptr;