52 lines
1.2 KiB
Lua
52 lines
1.2 KiB
Lua
-- pieces of levels
|
|
|
|
Chunk = {all = {}}
|
|
Chunk.__index = Chunk
|
|
|
|
-- CLASS METHODS
|
|
|
|
-- box == nil for global chunks
|
|
function Chunk:new(filename, box)
|
|
local o = { filename = filename, box = box }
|
|
setmetatable(o, self)
|
|
self.all[o] = true
|
|
end
|
|
|
|
function Chunk:getExportList()
|
|
local r = {}
|
|
for chunk in pairs(self.all) do
|
|
table.insert(r, {chunk.filename, chunk.box})
|
|
end
|
|
return r
|
|
end
|
|
|
|
-- INSTANCE METHODS
|
|
|
|
function Chunk:containsPoint(pt)
|
|
return self.box == nil or self.box:containsPoint(pt)
|
|
end
|
|
|
|
function Chunk:load()
|
|
if self.loaded then
|
|
return
|
|
end
|
|
logPrint("loading chunk "..self.filename)
|
|
self.data = dofile(level_current.."/chunks/"..self.filename)
|
|
self.loaded = { rooms = {}, collisions = {} }
|
|
LevelTiles = self.data.tiles
|
|
indexLevelTiles()
|
|
optimizeTileObjects(self.loaded.collisions)
|
|
|
|
for _, v in ipairs(self.data.rooms or {}) do
|
|
local room = Collision:new(v[1],v[2],v[3],v[4])
|
|
table.insert(self.data.rooms, room)
|
|
table.insert(LoadedObjects.Rooms, room)
|
|
end
|
|
logPrint("loaded chunk with "..#self.loaded.collisions.." collisions")
|
|
end
|
|
|
|
function Chunk:save(chunkdir)
|
|
return love.filesystem.write(chunkdir.."/"..self.filename, "return "..serialize_lua_value(self.data))
|
|
end
|
|
|