Fixed the scripts struggling with nested API tables
I actually don't remember what the RoomData's lua references where for, but I'm pretty srue it wasn't this. I'll figure something out when I've had a sleep.
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
local mapSystem = require "map_system"
|
||||||
|
|
||||||
local mapMaker = {}
|
local mapMaker = {}
|
||||||
|
|
||||||
--utility functions
|
--utility functions
|
||||||
@@ -19,16 +21,16 @@ mapMaker.dirt = 18 + 3 * 4
|
|||||||
|
|
||||||
--custom generation systems here
|
--custom generation systems here
|
||||||
function mapMaker.debugIsland(region)
|
function mapMaker.debugIsland(region)
|
||||||
for i = 1, Region.GetWidth(region) do
|
for i = 1, mapSystem.Region.GetWidth(region) do
|
||||||
for j = 1, Region.GetHeight(region) do
|
for j = 1, mapSystem.Region.GetHeight(region) do
|
||||||
local dist = mapMaker.dist(0, 0, i + Region.GetX(region) -1, j + Region.GetY(region) -1)
|
local dist = mapMaker.dist(0, 0, i + mapSystem.Region.GetX(region) -1, j + mapSystem.Region.GetY(region) -1)
|
||||||
if dist < 10 then
|
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
|
elseif dist < 12 then
|
||||||
Region.SetTile(region, i, j, 1, mapMaker.sand)
|
mapSystem.Region.SetTile(region, i, j, 1, mapMaker.sand)
|
||||||
else
|
else
|
||||||
Region.SetTile(region, i, j, 1, mapMaker.water)
|
mapSystem.Region.SetTile(region, i, j, 1, mapMaker.water)
|
||||||
Region.SetSolid(region, i, j, true)
|
mapSystem.Region.SetSolid(region, i, j, true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1 +1,3 @@
|
|||||||
--TODO: create a flexible saving & loading system
|
local mapSaver = {}
|
||||||
|
--TODO: create a flexible saving & loading system
|
||||||
|
return mapSaver
|
||||||
@@ -4,8 +4,30 @@ mapMaker = require "map_maker"
|
|||||||
mapSaver = require "map_saver"
|
mapSaver = require "map_saver"
|
||||||
roomSystem = require "room_system"
|
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
|
--create the overworld, set it's generator, loader & saver
|
||||||
local overworld = roomSystem.CreateRoom("overworld", "overworld.bmp")
|
local overworld = roomSystem.RoomManager.CreateRoom("overworld", "overworld.bmp")
|
||||||
roomSystem.SetOnLoad(overworld, mapMaker.debugIsland, mapSaver.load, mapSaver.save)
|
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")
|
print("Finished the lua script")
|
||||||
|
|||||||
@@ -55,12 +55,44 @@ static int getPager(lua_State* L) {
|
|||||||
|
|
||||||
//TODO: GetEntityList?
|
//TODO: GetEntityList?
|
||||||
|
|
||||||
|
static int setLoadReference(lua_State* L) {
|
||||||
|
RoomData* room = reinterpret_cast<RoomData*>(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<RoomData*>(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<RoomData*>(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<RoomData*>(lua_touserdata(L, 1));
|
||||||
|
lua_pushinteger(L, room->GetUnloadReference());
|
||||||
|
lua_gettable(L, LUA_REGISTRYINDEX);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
static const luaL_Reg roomLib[] = {
|
static const luaL_Reg roomLib[] = {
|
||||||
{"GetPager",getPager},
|
{"GetPager",getPager},
|
||||||
{"SetRoomName", setRoomName},
|
{"SetRoomName", setRoomName},
|
||||||
{"GetRoomName", getRoomName},
|
{"GetRoomName", getRoomName},
|
||||||
{"SetTileset", setTilesetName},
|
{"SetTileset", setTilesetName},
|
||||||
{"GetTileset", getTilesetName},
|
{"GetTileset", getTilesetName},
|
||||||
|
{"SetOnLoad", setLoadReference},
|
||||||
|
{"GetOnLoad", getLoadReference},
|
||||||
|
{"SetOnUnload", setUnloadReference},
|
||||||
|
{"GetOnUnload", getUnloadReference},
|
||||||
{nullptr, nullptr}
|
{nullptr, nullptr}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ int openRoomSystemAPI(lua_State* L) {
|
|||||||
|
|
||||||
//push the substable
|
//push the substable
|
||||||
for (const luaL_Reg* lib = libs; lib->func; lib++) {
|
for (const luaL_Reg* lib = libs; lib->func; lib++) {
|
||||||
lua_pushcfunction(L, lib->func);
|
lib->func(L);
|
||||||
lua_setfield(L, -2, lib->name);
|
lua_setfield(L, -2, lib->name);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user