67 lines
1.4 KiB
Lua
67 lines
1.4 KiB
Lua
-- 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
|
|
|