diff --git a/rsc/scripts/map_maker.lua b/rsc/scripts/map_maker.lua index 3c1ca18..ca9ebc8 100644 --- a/rsc/scripts/map_maker.lua +++ b/rsc/scripts/map_maker.lua @@ -1,3 +1,5 @@ +local mapSystem = require "map_system" + local mapMaker = {} --utility functions @@ -19,16 +21,16 @@ mapMaker.dirt = 18 + 3 * 4 --custom generation systems here function mapMaker.debugIsland(region) - for i = 1, Region.GetWidth(region) do - for j = 1, Region.GetHeight(region) do - local dist = mapMaker.dist(0, 0, i + Region.GetX(region) -1, j + Region.GetY(region) -1) + for i = 1, mapSystem.Region.GetWidth(region) do + for j = 1, mapSystem.Region.GetHeight(region) do + local dist = mapMaker.dist(0, 0, i + mapSystem.Region.GetX(region) -1, j + mapSystem.Region.GetY(region) -1) if dist < 10 then - Region.SetTile(region, i, j, 1, mapMaker.plains) + mapSystem.Region.SetTile(region, i, j, 1, mapMaker.plains) elseif dist < 12 then - Region.SetTile(region, i, j, 1, mapMaker.sand) + mapSystem.Region.SetTile(region, i, j, 1, mapMaker.sand) else - Region.SetTile(region, i, j, 1, mapMaker.water) - Region.SetSolid(region, i, j, true) + mapSystem.Region.SetTile(region, i, j, 1, mapMaker.water) + mapSystem.Region.SetSolid(region, i, j, true) end end end diff --git a/rsc/scripts/map_saver.lua b/rsc/scripts/map_saver.lua index f521381..6ec65fd 100644 --- a/rsc/scripts/map_saver.lua +++ b/rsc/scripts/map_saver.lua @@ -1 +1,3 @@ ---TODO: create a flexible saving & loading system \ No newline at end of file +local mapSaver = {} +--TODO: create a flexible saving & loading system +return mapSaver \ No newline at end of file diff --git a/rsc/scripts/setup_server.lua b/rsc/scripts/setup_server.lua index f9dbc07..15526d4 100644 --- a/rsc/scripts/setup_server.lua +++ b/rsc/scripts/setup_server.lua @@ -4,8 +4,30 @@ mapMaker = require "map_maker" mapSaver = require "map_saver" roomSystem = require "room_system" +local function dumpTable(t) + print(t) + for k, v in pairs(t) do + print("",k, v) + end +end + +dumpTable(mapMaker) +dumpTable(mapSaver) +dumpTable(roomSystem) +dumpTable(roomSystem.Room) +dumpTable(roomSystem.RoomManager) + --create the overworld, set it's generator, loader & saver -local overworld = roomSystem.CreateRoom("overworld", "overworld.bmp") -roomSystem.SetOnLoad(overworld, mapMaker.debugIsland, mapSaver.load, mapSaver.save) +local overworld = roomSystem.RoomManager.CreateRoom("overworld", "overworld.bmp") +roomSystem.Room.SetOnLoad(overworld, 1123) +roomSystem.Room.SetOnUnload(overworld, 458) + +if roomSystem.Room.GetOnLoad(overworld) == 1123 then + print("onload retreival works") +end + +if roomSystem.Room.GetOnUnload(overworld) == 458 then + print("onunload retreival works") +end print("Finished the lua script") diff --git a/server/rooms/room_api.cpp b/server/rooms/room_api.cpp index 57a90ec..e443bf8 100644 --- a/server/rooms/room_api.cpp +++ b/server/rooms/room_api.cpp @@ -55,12 +55,44 @@ static int getPager(lua_State* L) { //TODO: GetEntityList? +static int setLoadReference(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + luaL_unref(L, LUA_REGISTRYINDEX, room->GetLoadReference()); + room->SetLoadReference(luaL_ref(L, LUA_REGISTRYINDEX)); + return 0; +} + +static int getLoadReference(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + lua_pushinteger(L, room->GetLoadReference()); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; +} + +static int setUnloadReference(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + luaL_unref(L, LUA_REGISTRYINDEX, room->GetUnloadReference()); + room->SetUnloadReference(luaL_ref(L, LUA_REGISTRYINDEX)); + return 0; +} + +static int getUnloadReference(lua_State* L) { + RoomData* room = reinterpret_cast(lua_touserdata(L, 1)); + lua_pushinteger(L, room->GetUnloadReference()); + lua_gettable(L, LUA_REGISTRYINDEX); + return 1; +} + static const luaL_Reg roomLib[] = { {"GetPager",getPager}, {"SetRoomName", setRoomName}, {"GetRoomName", getRoomName}, {"SetTileset", setTilesetName}, {"GetTileset", getTilesetName}, + {"SetOnLoad", setLoadReference}, + {"GetOnLoad", getLoadReference}, + {"SetOnUnload", setUnloadReference}, + {"GetOnUnload", getUnloadReference}, {nullptr, nullptr} }; diff --git a/server/rooms/room_system_api.cpp b/server/rooms/room_system_api.cpp index d0d47e0..17b6243 100644 --- a/server/rooms/room_system_api.cpp +++ b/server/rooms/room_system_api.cpp @@ -48,7 +48,7 @@ int openRoomSystemAPI(lua_State* L) { //push the substable for (const luaL_Reg* lib = libs; lib->func; lib++) { - lua_pushcfunction(L, lib->func); + lib->func(L); lua_setfield(L, -2, lib->name); } return 1;