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
Prompt:new({
name = "filename",
input = "level.lua",
input = "unnamed_level",
func = function(file_prompt)
if file_prompt.canceled then return end
exportLevel(name_prompt.input, file_prompt.input)

View File

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