require("common.globals") require("common.class") local Util = require("common.util") local Field = require("api.page.field") ---@class LinkField: Field ---@field link Page local LinkField = { __name = "LinkField" } ---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 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 self:_navigate() end return false end ---@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 return LinkField