trying to do chunked level loading

This commit is contained in:
binarycat 2022-03-13 12:00:45 -04:00
parent 236e23177d
commit b3a12305da
3 changed files with 39 additions and 85 deletions

7
code/chunk.lua Normal file
View File

@ -0,0 +1,7 @@
-- pieces of levels
Chunk = {}
Chunk.__index = Chunk
function Chunk:new(file, rect)
end

View File

@ -100,7 +100,7 @@ function stepEditor()
if name_prompt.canceled then return end if name_prompt.canceled then return end
Prompt:new({ Prompt:new({
name = "filename", name = "filename",
input = "level.lua", input = "unnamed_level",
func = function(file_prompt) func = function(file_prompt)
if file_prompt.canceled then return end if file_prompt.canceled then return end
exportLevel(name_prompt.input, file_prompt.input) exportLevel(name_prompt.input, file_prompt.input)

View File

@ -1,90 +1,37 @@
function exportLevel(levelname, filename) function exportLevel(levelname, dirname)
love.filesystem.createDirectory("export") dirname = "export/"..dirname
filename = filename or "output.lua"
if string.sub(filename, 1, 1) ~= "/" then local ok = love.filesystem.createDirectory(dirname)
filename = "export/"..filename if not ok then
end logPrint("error creating directory")
exportFile = io.open(filename, "w+") end
if exportFile then
logPrint("Exporting level \"".. levelname .. "\"...") logPrint("Exporting level \"".. levelname .. "\"...")
exportFile:write("return {") local exportTable = {}
exportTable.name = levelname
logPrint("- level name") exportTable.tileset = "library"
exportFile:write("\n name = \"" .. levelname .. "\",") exportTable.properties = LevelData.properties
exportTable.tiles = LevelTiles
logPrint("- tileset")
for k, v in pairs(tileset) do
if v == LevelData.tileset then
exportFile:write("\n tileset = tileset." .. k .. ",")
end
end
logPrint("- properties")
exportFile:write("\n properties = {")
logPrint(" - darkness: ".. tostring(LevelData.properties.darkness))
exportFile:write("\n darkness = " .. tostring(LevelData.properties.darkness))
exportFile:write("\n },")
logPrint("- tiles")
exportFile:write("\n tiles = {")
local rows = #LevelTiles
for i = 1, #LevelTiles do
if i > 1 then
exportFile:write(", ")
end
exportFile:write("\n { ")
for j = 1, #LevelTiles[i] do
if j ~= 1 then
exportFile:write(", ")
end
exportFile:write(tostring(LevelTiles[i][j].id))
end
exportFile:write("}")
logPrint(" - row "..i.."/"..rows.." "..math.floor(100*((i-1)*100/rows))/100 .."%")
end
exportFile:write("\n },")
logPrint("- objects") logPrint("- objects")
exportFile:write("\n objects = {") exportTable.objects = { spawns = {}, rooms = {} }
logPrint(" - spawns") logPrint(" - spawns")
exportFile:write("\n spawns = {")
for i, v in ipairs(LoadedObjects.Spawns) do for i, v in ipairs(LoadedObjects.Spawns) do
if i > 1 then exportTable.objects.spawns = {v.archetype.name,{},v.args}
exportFile:write(",")
end end
exportFile:write("\n {")
exportFile:write(v.archetype.type)
exportFile:write(",{")
for i=1, #v.args do
if i > 1 then
exportFile:write(",")
end
exportFile:write(v.args[i])
end
exportFile:write("}}")
end
exportFile:write("\n },")
logPrint(" - rooms") logPrint(" - rooms")
exportFile:write("\n rooms = {")
for i, room in ipairs(LoadedObjects.Rooms) do for i, room in ipairs(LoadedObjects.Rooms) do
if i > 1 then table.insert(exportTable.objects.rooms,{room:asRect():getCoords()})
exportFile:write(",")
end end
exportFile:write("\n {{") logPrint("Writing to file...")
exportFile:write(room.from.x) -- FIXME: serialize_lua_table isn't real...
exportFile:write(",") local ok, err = love.filesystem.write(dirname.."/level.bin", serialize_lua_table("string", "", exportTable))
exportFile:write(room.from.y) if ok then
exportFile:write("},{")
exportFile:write(room.to.x)
exportFile:write(",")
exportFile:write(room.to.y)
exportFile:write("}}")
end
exportFile:write("\n },")
exportFile:write("\n },")
logPrint("Exporting complete.") logPrint("Exporting complete.")
exportFile:write("\n}") else
exportFile:close() logPrint("Exporting failed: "..err)
end end
end end