-- pieces of levels Chunk = { -- set of all chunks in the level. -- chunks are the keys, for easier removal. all = {}, } Chunk.__index = Chunk --[[ instance fields: [string] filename [Rect or nil] box [table or nil] data data loaded from the chunks file. may be nil. [table or nil] loaded entities that exist in the 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