Files
Endfield-Data/LuaScripts/UI/Panels/ControllerSideMenu/ControllerSideMenuCtrl.lua
2026-01-31 21:42:01 +07:00

131 lines
3.4 KiB
Lua

local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.ControllerSideMenu
ControllerSideMenuCtrl = HL.Class('ControllerSideMenuCtrl', uiCtrl.UICtrl)
ControllerSideMenuCtrl.s_messages = HL.StaticField(HL.Table) << {
}
ControllerSideMenuCtrl.m_cells = HL.Field(HL.Forward('UIListCache'))
ControllerSideMenuCtrl.m_menuListCpt = HL.Field(CS.Beyond.UI.ControllerSideMenuItemList)
ControllerSideMenuCtrl.m_infos = HL.Field(HL.Table)
ControllerSideMenuCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
self:BindInputPlayerAction("common_close_controller_side_menu", function()
AudioAdapter.PostEvent("Au_UI_Button_Back")
self:PlayAnimationOutAndClose()
end)
self.m_cells = UIUtils.genCellCache(self.view.btnCell)
self.m_menuListCpt = arg.menuBtnList
self.view.titleText.text = arg.title or Language[self.m_menuListCpt.title]
self.view.titleIcon.sprite = arg.icon
self.m_infos = arg.btnInfos
self.m_cells:Refresh(#self.m_infos, function(cell, index)
self:_RefreshCell(cell, index)
if index == 1 then
InputManagerInst.controllerNaviManager:SetTarget(cell.button)
end
end)
local targetScreenRect = UIUtils.getTransformScreenRect(self.m_menuListCpt.contentPosTrans, self.uiCamera)
local pos = UIUtils.screenPointToUI(targetScreenRect.center, self.uiCamera, self.view.transform)
pos.y = -pos.y
self.view.listContent.anchoredPosition = pos
self.view.listContent.sizeDelta = self.m_menuListCpt.contentPosTrans.rect.size
self.view.listStateController:SetState(self.m_menuListCpt.isFullScreen and "FullScreen" or "Window")
self:_ShowControllerHint(arg.hintPlaceholder)
end
ControllerSideMenuCtrl._ShowControllerHint = HL.Method(HL.Forward('ControllerHintPlaceholder')) << function(self, hintPlaceholder)
local hintArgs = hintPlaceholder:GetArgs()
hintArgs.panelId = PANEL_ID
hintArgs.groupIds = { self.view.inputGroup.groupId }
hintArgs.optionalActionIds = nil
hintArgs.offset = 1
Notify(MessageConst.SHOW_CONTROLLER_HINT, hintArgs)
end
ControllerSideMenuCtrl.OnClose = HL.Override() << function(self)
Notify(MessageConst.HIDE_CONTROLLER_HINT, { panelId = PANEL_ID, })
end
ControllerSideMenuCtrl._RefreshCell = HL.Method(HL.Any, HL.Number) << function(self, cell, index)
cell.button.onClick:RemoveAllListeners()
cell.button.onClick:AddListener(function()
self:_OnClickBtn(index)
end)
local info = self.m_infos[index]
local cellName
if type(info) == "table" then
cell.icon.sprite = info.sprite
cell.text.text = Language[info.textId]
cellName = info.textId .. info.priority
else
cell.icon.sprite = info:GetSprite()
cell.text.text = info:GetText()
cellName = info:GetItemName()
end
cell.icon.gameObject:SetActive(cell.icon.sprite ~= nil)
cell.gameObject.name = cellName
end
ControllerSideMenuCtrl._OnClickBtn = HL.Method(HL.Number) << function(self, index)
self:PlayAnimationOutWithCallback(function()
local info = self.m_infos[index]
self:Close()
if type(info) == "table" then
if info.action then
info.action()
elseif info.button then
info.button.onClick:Invoke(nil)
end
else
info:Execute()
end
end)
end
HL.Commit(ControllerSideMenuCtrl)