diff --git a/lib/simple_ui/element.lua b/lib/simple_ui/element.lua index 228d9ce..62c38cf 100644 --- a/lib/simple_ui/element.lua +++ b/lib/simple_ui/element.lua @@ -3,10 +3,8 @@ local Rect = require "lib.simple_ui.rect" --- @class UIElement --- @field bounds Rect Прямоугольник, в границах которого размещается элемент. Размеры и положение в *локальных* координатах --- @field transform love.Transform Преобразование из локальных координат элемента (bounds) в экранные координаты -local uiElement = { - bounds = Rect {}, - transform = love.math.newTransform() -} +--- +local uiElement = {} uiElement.__index = uiElement function uiElement:update(dt) end @@ -18,4 +16,14 @@ function uiElement:hitTest(screenX, screenY) return self.bounds:hasPoint(lx, ly) end +--- @generic T : UIElement +--- @param values table +--- @param self T +--- @return T +function uiElement.new(self, values) + values.bounds = values.bounds or Rect {} + values.transform = values.transform or love.math.newTransform() + return setmetatable(values, self) +end + return uiElement diff --git a/lib/simple_ui/level/layout.lua b/lib/simple_ui/level/layout.lua index 27162b4..623afc5 100644 --- a/lib/simple_ui/level/layout.lua +++ b/lib/simple_ui/level/layout.lua @@ -12,12 +12,6 @@ local Rect = require "lib.simple_ui.rect" local skillButton = setmetatable({}, Element) skillButton.__index = skillButton -function skillButton.new(icon) - return setmetatable({ - icon = icon - }, skillButton) -end - function skillButton:update(dt) local mx, my = love.mouse.getPosition() if self:hitTest(mx, my) then @@ -77,7 +71,7 @@ function skillRow.new(characterId) local char = Tree.level.characters[characterId] char:try(Tree.behaviors.spellcaster, function(behavior) for i, spell in ipairs(behavior.spellbook) do - local skb = skillButton.new(spell.tag) + local skb = skillButton:new { icon = spell.tag } skb.onClick = function() skb.selected = not skb.selected if t.selected then t.selected.selected = false end