reworking level loading logic
This commit is contained in:
parent
b3a12305da
commit
e8cef497d4
@ -20,7 +20,6 @@ function drawGameworldBackground()
|
|||||||
for i = 1, #LevelTiles do
|
for i = 1, #LevelTiles do
|
||||||
for j = 1, #LevelTiles[i] do
|
for j = 1, #LevelTiles[i] do
|
||||||
if LevelTiles[i][j].id ~= 0 then
|
if LevelTiles[i][j].id ~= 0 then
|
||||||
|
|
||||||
local depth = TileData[LevelTiles[i][j].id].depth
|
local depth = TileData[LevelTiles[i][j].id].depth
|
||||||
drawTile(
|
drawTile(
|
||||||
LevelTiles[i][j],
|
LevelTiles[i][j],
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
function exportLevel(levelname, dirname)
|
function exportLevel(levelname, dirname)
|
||||||
dirname = "export/"..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)
|
local ok = love.filesystem.createDirectory(dirname)
|
||||||
if not ok then
|
if not ok then
|
||||||
@ -17,7 +22,7 @@ function exportLevel(levelname, dirname)
|
|||||||
exportTable.objects = { spawns = {}, rooms = {} }
|
exportTable.objects = { spawns = {}, rooms = {} }
|
||||||
logPrint(" - spawns")
|
logPrint(" - spawns")
|
||||||
for i, v in ipairs(LoadedObjects.Spawns) do
|
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
|
end
|
||||||
|
|
||||||
logPrint(" - rooms")
|
logPrint(" - rooms")
|
||||||
@ -26,8 +31,7 @@ function exportLevel(levelname, dirname)
|
|||||||
table.insert(exportTable.objects.rooms,{room:asRect():getCoords()})
|
table.insert(exportTable.objects.rooms,{room:asRect():getCoords()})
|
||||||
end
|
end
|
||||||
logPrint("Writing to file...")
|
logPrint("Writing to file...")
|
||||||
-- FIXME: serialize_lua_table isn't real...
|
local ok, err = love.filesystem.write(dirname.."/level.lua", "return "..serialize_lua_value(exportTable))
|
||||||
local ok, err = love.filesystem.write(dirname.."/level.bin", serialize_lua_table("string", "", exportTable))
|
|
||||||
if ok then
|
if ok then
|
||||||
logPrint("Exporting complete.")
|
logPrint("Exporting complete.")
|
||||||
else
|
else
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
function loadLevelTiles()
|
function loadLevelTiles()
|
||||||
math.randomseed(3)
|
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:
|
on level format:
|
||||||
@ -24,14 +29,14 @@ end
|
|||||||
function createRoomObjects()
|
function createRoomObjects()
|
||||||
LoadedObjects.Rooms = {}
|
LoadedObjects.Rooms = {}
|
||||||
for _, v in pairs(LevelData.objects.rooms) do
|
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
|
||||||
end
|
end
|
||||||
|
|
||||||
function getSpawns()
|
function getSpawns()
|
||||||
LoadedObjects.Spawns = {}
|
LoadedObjects.Spawns = {}
|
||||||
for _, v in pairs(LevelData.objects.spawns) do
|
for _, v in pairs(LevelData.objects.spawns) do
|
||||||
addSpawn(v[1],unpack(v[2]))
|
--addSpawn(v[1],unpack(v[2]))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -121,11 +126,8 @@ function reduceLevelCanvas(horizontal,vertical)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function getLevelTileData()
|
function getLevelTileData()
|
||||||
for k, v in pairs(tileset) do
|
TileData = dofile("data/tileset/"..LevelData.tileset_name..".lua")
|
||||||
if v == LevelData.tileset then
|
|
||||||
TileData = dofile("data/tileset/"..k..".lua")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function reloadLevelTiles()
|
function reloadLevelTiles()
|
||||||
@ -159,10 +161,10 @@ end
|
|||||||
|
|
||||||
function indexLevelTiles()
|
function indexLevelTiles()
|
||||||
TileIndex = {}
|
TileIndex = {}
|
||||||
|
local this_tileset = LevelData.tileset
|
||||||
-- index from tileset
|
-- index from tileset
|
||||||
local width = LevelData.tileset:getPixelWidth()/tile_properties.width
|
local width = this_tileset:getPixelWidth()/tile_properties.width
|
||||||
local height = LevelData.tileset:getPixelHeight()/tile_properties.height
|
local height = this_tileset:getPixelHeight()/tile_properties.height
|
||||||
for i = 0, height do
|
for i = 0, height do
|
||||||
for j = 0, width do
|
for j = 0, width do
|
||||||
TileIndex[i*width+j+1] = love.graphics.newQuad(
|
TileIndex[i*width+j+1] = love.graphics.newQuad(
|
||||||
@ -170,7 +172,7 @@ function indexLevelTiles()
|
|||||||
i*tile_properties.height,
|
i*tile_properties.height,
|
||||||
tile_properties.width,
|
tile_properties.width,
|
||||||
tile_properties.height,
|
tile_properties.height,
|
||||||
LevelData.tileset:getDimensions()
|
this_tileset:getDimensions()
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -220,6 +222,9 @@ end
|
|||||||
function instanceTile(id)
|
function instanceTile(id)
|
||||||
local tile = {}
|
local tile = {}
|
||||||
|
|
||||||
|
if type(id) == "table" then
|
||||||
|
id = id.id
|
||||||
|
end
|
||||||
tile.id = id
|
tile.id = id
|
||||||
local Properties = TileData[tile.id]
|
local Properties = TileData[tile.id]
|
||||||
|
|
||||||
@ -270,8 +275,9 @@ function optimizeTileObjects()
|
|||||||
end
|
end
|
||||||
for i = 1, #LevelTiles do
|
for i = 1, #LevelTiles do
|
||||||
for j = 1, #LevelTiles[i] do
|
for j = 1, #LevelTiles[i] do
|
||||||
if LevelTiles[i][j].id ~= 0 then
|
if LevelTiles[i][j].id ~= 0 and TileData[LevelTiles[i][j].id] then
|
||||||
local type = TileData[LevelTiles[i][j].id].type
|
local tile_dat = TileData[LevelTiles[i][j].id]
|
||||||
|
local type = tile_dat.type
|
||||||
if type == "whole" and not isTileOptimized[i][j] then
|
if type == "whole" and not isTileOptimized[i][j] then
|
||||||
isTileOptimized[i][j] = true
|
isTileOptimized[i][j] = true
|
||||||
local n = 1
|
local n = 1
|
||||||
@ -357,9 +363,9 @@ function createTileObjects()
|
|||||||
for i = 1, #LevelTiles do
|
for i = 1, #LevelTiles do
|
||||||
for j = 1, #LevelTiles[i] do
|
for j = 1, #LevelTiles[i] do
|
||||||
if LevelTiles[i][j].id ~= 0 then
|
if LevelTiles[i][j].id ~= 0 then
|
||||||
|
local tile_dat = TileData[LevelTiles[i][j].id] or {}
|
||||||
local type = TileData[LevelTiles[i][j].id].type
|
local type = tile_dat.type
|
||||||
local light = TileData[LevelTiles[i][j].id].light
|
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_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)
|
local base_y = tile_properties.scale * i * tile_properties.height + tile_properties.scale * (level_properties.offset.y - tile_properties.height)
|
||||||
|
|
||||||
|
@ -7,6 +7,7 @@ require "data/sfx"
|
|||||||
require "code/locale"
|
require "code/locale"
|
||||||
|
|
||||||
-- support functions
|
-- support functions
|
||||||
|
require "code/serialize"
|
||||||
require "code/math"
|
require "code/math"
|
||||||
require "code/draw"
|
require "code/draw"
|
||||||
require "code/hex"
|
require "code/hex"
|
||||||
|
Loading…
Reference in New Issue
Block a user