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:
Kayne Ruse
2014-11-23 06:38:40 +11:00
parent 20d40d5b81
commit 5eeda8235d
5 changed files with 69 additions and 11 deletions
+9 -7
View File
@@ -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
+2
View File
@@ -1 +1,3 @@
local mapSaver = {}
--TODO: create a flexible saving & loading system
return mapSaver
+24 -2
View File
@@ -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")
+32
View File
@@ -55,12 +55,44 @@ static int getPager(lua_State* L) {
//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[] = {
{"GetPager",getPager},
{"SetRoomName", setRoomName},
{"GetRoomName", getRoomName},
{"SetTileset", setTilesetName},
{"GetTileset", getTilesetName},
{"SetOnLoad", setLoadReference},
{"GetOnLoad", getLoadReference},
{"SetOnUnload", setUnloadReference},
{"GetOnUnload", getUnloadReference},
{nullptr, nullptr}
};
+1 -1
View File
@@ -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;