ExperimentalGear/scripts/api/page/linkfield.lua

70 lines
2.0 KiB
Lua
Raw Normal View History

2022-05-22 03:05:24 +02:00
require("common.globals")
require("common.class")
2022-05-22 03:05:24 +02:00
local Util = require("common.util")
2022-04-27 12:29:54 +02:00
local Field = require("api.page.field")
---@class LinkField: Field
---@field link Page
2022-04-05 23:53:19 +02:00
local LinkField = {
__name = "LinkField"
2022-04-05 23:53:19 +02:00
}
---Create a new LinkField instance
---@param params? LinkField # initial parameters
---@return LinkField
function LinkField.new(params)
params = params or {}
params.link = params.link or nil
return CreateInstance(LinkField, params, Field)
end
2022-05-22 03:05:24 +02:00
function LinkField:_navigate()
local parentPage = self:getParentPage()
if parentPage and parentPage.viewHandler then
game.Log(tostring(self) .. " viewHandler:navigate(" .. tostring(self.link) .. ") called", game.LOGGER_INFO)
parentPage.viewHandler:navigate(self.link)
return true
else
local target = (parentPage and parentPage.viewHandler or "PageView")
game.Log(tostring(self) .. " can't access " .. tostring(target) .. " instance", game.LOGGER_ERROR)
end
end
---@param button integer # options are under the `game` table prefixed with `BUTTON`
---@return boolean # true if further button input processing should be stopped, otherwise false
function LinkField:handleButtonInput(button)
if not self.link then
game.Log(tostring(self) .. " does not have a valid link", game.LOGGER_ERROR)
return false
end
if button == game.BUTTON_STA then
2022-05-22 03:05:24 +02:00
self:_navigate()
end
return false
end
2022-05-22 03:05:24 +02:00
---@param x number
---@param y number
---@param button integer
---@return boolean # true if further button input processing should be stopped, otherwise false
function LinkField:handleMouseInput(x, y, button)
if not Util.areaOverlap(x, y, self.posX, self.posY, self.aabbW, self.aabbH) then
return false
end
if not self.link then
game.Log(tostring(self) .. " does not have a valid link", game.LOGGER_ERROR)
return false
end
if button == game.MOUSE_LEFT then
self:_navigate()
end
end
2022-04-05 23:53:19 +02:00
return LinkField