Neckrat af792bd2d5 refactor character & grid again
Co-authored-by: Ivan Yuriev <ivanyr44@gmail.com>
2025-08-09 23:22:34 +03:00

59 lines
1.3 KiB
Lua

local utils = require "lib/utils"
--- @class Grid
local Grid = {}
Grid.__index = Grid
--- Создать пустую сетку width x height, заполненную initial (по умолчанию nil)
function Grid.new(width, height, initial)
local g = utils.generateList(width, function()
return utils.generateList(height, function()
return initial
end)
end)
return setmetatable(g, Grid)
end
--- @param x integer
--- @param y integer
function Grid:get(x, y)
local col = self[x]
return col and col[y] or nil
end
--- @param x integer
--- @param y integer
function Grid:set(x, y, value)
self[x][y] = value
end
--- @param x integer
--- @param y integer
function Grid:clear(x, y)
self[x][y] = nil
end
-- нормализуем прямоугольник (поддержка отрицательных размеров)
local function normalizeRect(x, y, w, h)
if w < 0 then
x = x + w + 1; w = -w
end
if h < 0 then
y = y + h + 1; h = -h
end
return x, y, w, h
end
--- Заполнить прямоугольник значением value
function Grid:fillRect(x, y, w, h, value)
x, y, w, h = normalizeRect(x, y, w, h)
local x2, y2 = x + w - 1, y + h - 1
for yy = y, y2 do
for xx = x, x2 do
self[xx][yy] = value
end
end
end
return Grid