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
logPrint("error creating directory")
end end
exportFile = io.open(filename, "w+")
if exportFile then
logPrint("Exporting level \"".. levelname .. "\"...")
exportFile:write("return {")
logPrint("- level name") logPrint("Exporting level \"".. levelname .. "\"...")
exportFile:write("\n name = \"" .. 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("- tileset") logPrint(" - rooms")
for k, v in pairs(tileset) do
if v == LevelData.tileset then
exportFile:write("\n tileset = tileset." .. k .. ",")
end
end
logPrint("- properties") for i, room in ipairs(LoadedObjects.Rooms) do
exportFile:write("\n properties = {") table.insert(exportTable.objects.rooms,{room:asRect():getCoords()})
logPrint(" - darkness: ".. tostring(LevelData.properties.darkness)) end
exportFile:write("\n darkness = " .. tostring(LevelData.properties.darkness)) logPrint("Writing to file...")
exportFile:write("\n },") -- FIXME: serialize_lua_table isn't real...
local ok, err = love.filesystem.write(dirname.."/level.bin", serialize_lua_table("string", "", exportTable))
logPrint("- tiles") if ok then
exportFile:write("\n tiles = {") logPrint("Exporting complete.")
local rows = #LevelTiles else
for i = 1, #LevelTiles do logPrint("Exporting failed: "..err)
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()
end end
end end