2022-05-22 03:05:24 +02:00
|
|
|
require("common.globals")
|
2022-04-03 19:51:56 +02:00
|
|
|
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")
|
2022-04-03 19:51:56 +02:00
|
|
|
|
|
|
|
---@class LinkField: Field
|
|
|
|
---@field link Page
|
2022-04-05 23:53:19 +02:00
|
|
|
local LinkField = {
|
2022-05-06 01:02:30 +02:00
|
|
|
__name = "LinkField"
|
2022-04-05 23:53:19 +02:00
|
|
|
}
|
2022-04-03 19:51:56 +02:00
|
|
|
|
2022-04-12 23:45:28 +02:00
|
|
|
---Create a new LinkField instance
|
2022-05-06 01:02:30 +02:00
|
|
|
---@param params? LinkField # initial parameters
|
2022-04-03 19:51:56 +02:00
|
|
|
---@return LinkField
|
2022-05-06 01:02:30 +02:00
|
|
|
function LinkField.new(params)
|
|
|
|
params = params or {}
|
2022-04-03 19:51:56 +02:00
|
|
|
|
2022-05-06 01:02:30 +02:00
|
|
|
params.link = params.link or nil
|
2022-04-03 19:51:56 +02:00
|
|
|
|
2022-05-06 01:02:30 +02:00
|
|
|
return CreateInstance(LinkField, params, Field)
|
2022-04-03 19:51:56 +02:00
|
|
|
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
|
|
|
|
|
2022-04-12 23:45:28 +02:00
|
|
|
---@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
|
2022-04-03 19:51:56 +02:00
|
|
|
function LinkField:handleButtonInput(button)
|
2022-04-11 18:47:26 +02:00
|
|
|
if not self.link then
|
|
|
|
game.Log(tostring(self) .. " does not have a valid link", game.LOGGER_ERROR)
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
|
2022-04-03 19:51:56 +02:00
|
|
|
if button == game.BUTTON_STA then
|
2022-05-22 03:05:24 +02:00
|
|
|
self:_navigate()
|
2022-04-03 19:51:56 +02:00
|
|
|
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
|