diff --git a/code/gameworld.lua b/code/gameworld.lua index e8c6d34..c252b72 100644 --- a/code/gameworld.lua +++ b/code/gameworld.lua @@ -20,7 +20,6 @@ function drawGameworldBackground() for i = 1, #LevelTiles do for j = 1, #LevelTiles[i] do if LevelTiles[i][j].id ~= 0 then - local depth = TileData[LevelTiles[i][j].id].depth drawTile( LevelTiles[i][j], diff --git a/code/in_out.lua b/code/in_out.lua index 891c1b6..895ccee 100644 --- a/code/in_out.lua +++ b/code/in_out.lua @@ -1,5 +1,10 @@ function exportLevel(levelname, dirname) dirname = "export/"..dirname + + if love.filesystem.exists(dirname) then + -- TODO: prompt to overwrite + error("file already exists") + end local ok = love.filesystem.createDirectory(dirname) if not ok then @@ -17,7 +22,7 @@ function exportLevel(levelname, dirname) exportTable.objects = { spawns = {}, rooms = {} } logPrint(" - spawns") for i, v in ipairs(LoadedObjects.Spawns) do - exportTable.objects.spawns = {v.archetype.name,{},v.args} + --exportTable.objects.spawns = {v.archetype.name,{},v.args} end logPrint(" - rooms") @@ -26,8 +31,7 @@ function exportLevel(levelname, dirname) 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)) + local ok, err = love.filesystem.write(dirname.."/level.lua", "return "..serialize_lua_value(exportTable)) if ok then logPrint("Exporting complete.") else diff --git a/code/level.lua b/code/level.lua index 5995b50..315104e 100644 --- a/code/level.lua +++ b/code/level.lua @@ -1,6 +1,11 @@ function loadLevelTiles() math.randomseed(3) - LevelData = dofile("data/levels/"..level_current) + LevelData = dofile( love.filesystem.getSaveDirectory().."/export/unnamed_level/level.lua") + if type(LevelData.tileset) == "string" then + LevelData.tileset_name = LevelData.tileset + end + LevelData.tileset = tileset[LevelData.tileset_name] + --dofile("data/levels/"..level_current) --[[ on level format: @@ -24,14 +29,14 @@ end function createRoomObjects() LoadedObjects.Rooms = {} for _, v in pairs(LevelData.objects.rooms) do - table.insert(LoadedObjects.Rooms, Collision:new(v[1][1],v[1][2],v[2][1],v[2][2])) + table.insert(LoadedObjects.Rooms, Collision:new(v[1],v[2],v[3],v[4])) end end function getSpawns() LoadedObjects.Spawns = {} for _, v in pairs(LevelData.objects.spawns) do - addSpawn(v[1],unpack(v[2])) + --addSpawn(v[1],unpack(v[2])) end end @@ -121,11 +126,8 @@ function reduceLevelCanvas(horizontal,vertical) end function getLevelTileData() - for k, v in pairs(tileset) do - if v == LevelData.tileset then - TileData = dofile("data/tileset/"..k..".lua") - end - end + TileData = dofile("data/tileset/"..LevelData.tileset_name..".lua") + end function reloadLevelTiles() @@ -159,10 +161,10 @@ end function indexLevelTiles() TileIndex = {} - + local this_tileset = LevelData.tileset -- index from tileset - local width = LevelData.tileset:getPixelWidth()/tile_properties.width - local height = LevelData.tileset:getPixelHeight()/tile_properties.height + local width = this_tileset:getPixelWidth()/tile_properties.width + local height = this_tileset:getPixelHeight()/tile_properties.height for i = 0, height do for j = 0, width do TileIndex[i*width+j+1] = love.graphics.newQuad( @@ -170,7 +172,7 @@ function indexLevelTiles() i*tile_properties.height, tile_properties.width, tile_properties.height, - LevelData.tileset:getDimensions() + this_tileset:getDimensions() ) end end @@ -220,6 +222,9 @@ end function instanceTile(id) local tile = {} + if type(id) == "table" then + id = id.id + end tile.id = id local Properties = TileData[tile.id] @@ -270,8 +275,9 @@ function optimizeTileObjects() end for i = 1, #LevelTiles do for j = 1, #LevelTiles[i] do - if LevelTiles[i][j].id ~= 0 then - local type = TileData[LevelTiles[i][j].id].type + if LevelTiles[i][j].id ~= 0 and TileData[LevelTiles[i][j].id] then + local tile_dat = TileData[LevelTiles[i][j].id] + local type = tile_dat.type if type == "whole" and not isTileOptimized[i][j] then isTileOptimized[i][j] = true local n = 1 @@ -357,9 +363,9 @@ function createTileObjects() for i = 1, #LevelTiles do for j = 1, #LevelTiles[i] do if LevelTiles[i][j].id ~= 0 then - - local type = TileData[LevelTiles[i][j].id].type - local light = TileData[LevelTiles[i][j].id].light + local tile_dat = TileData[LevelTiles[i][j].id] or {} + local type = tile_dat.type + local light = tile_dat.light local base_x = tile_properties.scale * j * tile_properties.width + tile_properties.scale * (level_properties.offset.x - tile_properties.height) local base_y = tile_properties.scale * i * tile_properties.height + tile_properties.scale * (level_properties.offset.y - tile_properties.height) diff --git a/code/require.lua b/code/require.lua index d4b8390..9b42641 100644 --- a/code/require.lua +++ b/code/require.lua @@ -7,6 +7,7 @@ require "data/sfx" require "code/locale" -- support functions +require "code/serialize" require "code/math" require "code/draw" require "code/hex"