local utils = require "lib/utils" --- @class Grid local grid = {} grid.__index = grid --- Adds a character id to the grid --- @param character Character function grid:add(character) local centerX, centerY = math.floor(character.position.x), math.floor(character.position.y) local sizeX, sizeY = character.size.x, character.size.y for y = centerY, centerY + sizeY - 1 do for x = centerX, centerX + sizeX - 1 do self[x][y] = character.id end end end --- Removes a character id from the grid --- @param character Character function grid:remove(character) local centerX, centerY = math.floor(character.position.x), math.floor(character.position.y) local sizeX, sizeY = character.size.x, character.size.y for y = centerY, centerY + sizeY - 1 do for x = centerX, centerX + sizeX - 1 do self[x][y] = nil end end end --- Generates an empty grid --- @param width number --- @param height number --- @return Grid local function generateGrid(width, height) local g = utils.generateList(width, function(_) return utils.generateList(height, function(_) return {} end) end) return setmetatable(g, grid) end return { new = generateGrid }