49 lines
1.1 KiB
Lua
49 lines
1.1 KiB
Lua
local utils = require "lib.utils.utils"
|
|
|
|
--- @class CharacterGrid
|
|
--- @field __grid {string: Id|nil}
|
|
local grid = {}
|
|
grid.__index = grid
|
|
|
|
local function encode(x, y)
|
|
return tostring(x) .. ";" .. tostring(y)
|
|
end
|
|
|
|
--- Adds a character id to the grid
|
|
--- @param id Id
|
|
function grid:add(id)
|
|
local character = Tree.level.characters[id]
|
|
if not character then return end
|
|
|
|
local centerX, centerY = math.floor(character.logic.mapLogic.position.x + 0.5),
|
|
math.floor(character.logic.mapLogic.position.y + 0.5)
|
|
local sizeX, sizeY = character.logic.mapLogic.size.x, character.logic.mapLogic.size.y
|
|
|
|
for y = centerY, centerY + sizeY - 1 do
|
|
for x = centerX, centerX + sizeX - 1 do
|
|
self.__grid[encode(x, y)] = character.id
|
|
end
|
|
end
|
|
end
|
|
|
|
--- @param x integer
|
|
--- @param y integer
|
|
function grid:get(x, y)
|
|
return self.__grid[encode(x, y)]
|
|
end
|
|
|
|
--- clears the grid
|
|
function grid:reset()
|
|
self.__grid = {}
|
|
end
|
|
|
|
--- Generates an empty grid
|
|
--- @return CharacterGrid
|
|
local function new()
|
|
return setmetatable({
|
|
__grid = {}
|
|
}, grid)
|
|
end
|
|
|
|
return { new = new }
|