50 lines
1.3 KiB
Lua

local utils = require "lib.utils.utils"
--- @class Level
--- @field size Vec3
--- @field characters Character[]
--- @field characterGrid CharacterGrid
--- @field selector Selector
--- @field camera Camera
--- @field tileGrid TileGrid
local level = {}
level.__index = level
local path = nil
--- @param type "procedural"|"handmaded"
--- @param template Procedural|Handmaded
local function new(type, template)
local size = Vec3 { 30, 30 } -- magic numbers for testing purposes only
print(type, template, size)
return setmetatable({
size = size,
characters = {},
characterGrid = (require "lib.level.grid.character_grid").new(),
tileGrid = (require "lib.level.grid.tile_grid").new(type, template, size),
selector = (require "lib.level.selector").new(),
camera = (require "lib.level.camera").new(),
}, level)
end
function level:update(dt)
self.characterGrid:reload()
utils.each(self.characters, function(el)
el:update(dt)
end)
self.camera:update(dt)
self.selector:update(dt)
end
function level:draw()
self.tileGrid:draw()
while not self.characterGrid.yOrderQueue:is_empty() do -- по сути это сортировка кучей за n log n, но линейное
self.characterGrid.yOrderQueue:pop():draw()
end
end
return {
new = new
}