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 = {}
|
||||
|
||||
--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
|
||||
|
||||
@@ -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"
|
||||
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")
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user