implement a generic UIElement constructor

This commit is contained in:
PeaAshMeter 2025-11-07 09:04:02 +03:00
parent 12d57892be
commit c741bf3952
2 changed files with 13 additions and 11 deletions

View File

@ -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

View File

@ -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