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

808 lines
25 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
local uiCtrl = require_ex('UI/Panels/Base/UICtrl')
local PANEL_ID = PanelId.QuickMenu
local PhaseLevel = require_ex('Phase/Level/PhaseLevel').PhaseLevel
local QuickMenuCellState = {
Normal = "Normal",
Locked = "Locked",
Forbidden = "Forbidden",
}
local CLEAR_SCREEN_EXPECTED_PANEL_LIST = {
PANEL_ID,
PanelId.Joystick,
PanelId.MissionHud,
PanelId.MiniMap,
PanelId.WeeklyRaidTaskTrackHud,
PanelId.CommonTaskTrackHud,
}
local DEFAULT_DELAY_RECOVER_SCREEN_FRAME_COUNT = 1
local EXTRA_DELAY_RECOVER_SCREEN_FRAME_COUNT = 5
local QUICK_MENU_INVALID_ITEM_ID = QuickMenuConst.QUICK_MENU_ITEM_ID_GETTER.none
QuickMenuCtrl = HL.Class('QuickMenuCtrl', uiCtrl.UICtrl)
QuickMenuCtrl.m_mainHudCtrl = HL.Field(HL.Forward("MainHudCtrl"))
QuickMenuCtrl.m_centerCells = HL.Field(HL.Forward("UIListCache"))
QuickMenuCtrl.m_quickMenuCenterItemData = HL.Field(HL.Table)
QuickMenuCtrl.m_quickMenuUpdateThread = HL.Field(HL.Thread)
QuickMenuCtrl.m_currentArrowAngle = HL.Field(HL.Number) << 0
QuickMenuCtrl.m_currentSelectedCenterItemId = HL.Field(HL.String) << ""
QuickMenuCtrl.m_quickMenuLeftItemData = HL.Field(HL.Table)
QuickMenuCtrl.m_quickMenuRightItemData = HL.Field(HL.Table)
QuickMenuCtrl.m_currentStickPushed = HL.Field(HL.Boolean) << false
QuickMenuCtrl.s_clearScreenKey = HL.StaticField(HL.Number) << -1
QuickMenuCtrl.s_releaseCloseEnabled = HL.StaticField(HL.Boolean) << true
QuickMenuCtrl.s_messages = HL.StaticField(HL.Table) << {
[MessageConst.SELECT_QUICK_MENU_SYSTEM] = '_OnSelectSystem',
}
QuickMenuCtrl.OnCreate = HL.Override(HL.Any) << function(self, arg)
local _, mainHudCtrl = UIManager:IsOpen(PanelId.MainHud)
self.m_mainHudCtrl = mainHudCtrl
self:_InitQuickMenu()
self:_InitQuickMenuCenterCells()
self:_InitQuickMenuLeftCells()
self:_InitQuickMenuRightCells()
AudioManager.PostEvent("au_ui_menu_dial_open")
QuickMenuCtrl.ActivateQuickMenu()
end
QuickMenuCtrl.OnClose = HL.Override() << function(self)
self.m_quickMenuUpdateThread = self:_ClearCoroutine(self.m_quickMenuUpdateThread)
AudioManager.PostEvent("au_ui_menu_dial_close")
QuickMenuCtrl.DeactivateQuickMenu()
end
QuickMenuCtrl.ActivateQuickMenu = HL.StaticMethod() << function()
UIManager:ClearScreenWithOutAnimation(function(clearScreenKey)
QuickMenuCtrl.s_clearScreenKey = clearScreenKey
local isOpen = UIManager:IsOpen(PANEL_ID)
if not isOpen then
QuickMenuCtrl.DeactivateQuickMenu()
end
end, CLEAR_SCREEN_EXPECTED_PANEL_LIST)
end
QuickMenuCtrl.DeactivateQuickMenu = HL.StaticMethod() << function()
if QuickMenuCtrl.s_clearScreenKey <= 0 then
return
end
UIManager:RecoverScreen(QuickMenuCtrl.s_clearScreenKey)
QuickMenuCtrl.s_clearScreenKey = -1
end
QuickMenuCtrl.OnToggleReleaseClose = HL.StaticMethod(HL.Any) << function(arg)
QuickMenuCtrl.s_releaseCloseEnabled = unpack(arg)
end
QuickMenuCtrl._OnSelectSystem = HL.Method(HL.Any) << function(self, arg)
local systemId = unpack(arg)
self:_SelectQuickMenuItem(self.m_quickMenuCenterItemData[systemId])
end
QuickMenuCtrl._OnPanelInputBlocked = HL.Override(HL.Boolean) << function(self, active)
if not active then
self:Close()
end
end
QuickMenuCtrl._BuildMenuItemData = HL.Method(HL.String).Return(HL.Opt(HL.Table)) << function(self, itemId)
local cellData = { itemId = itemId }
local itemConfig = QuickMenuConst.QUICK_MENU_ITEM_CONFIG[itemId]
if itemConfig == nil then
return
end
local phaseId = PhaseId[itemConfig.phaseId]
local mainHudInfo
if itemConfig.mainHudId ~= nil then
mainHudInfo = self.m_mainHudCtrl:GetMainHudBtnInfo(itemConfig.mainHudId)
if mainHudInfo == nil then
logger.error("快捷轮盘中的mainHudId配置错误无法找到对应MainHud按钮", itemId)
return
end
if mainHudInfo.phaseId ~= nil then
phaseId = mainHudInfo.phaseId
end
end
if mainHudInfo ~= nil then
cellData.onUse = function()
self.m_mainHudCtrl:OnMainHudBtnClick(mainHudInfo)
end
else
cellData.onUse = function()
if itemConfig.onUse ~= nil then
itemConfig.onUse()
else
if phaseId ~= nil then
PhaseManager:OpenPhase(phaseId)
else
logger.error("快捷轮盘无可用的使用回调", itemId)
end
end
end
end
local name, icon
if mainHudInfo ~= nil and mainHudInfo.iconSpriteGetter ~= nil then
icon = self:LoadSprite(UIConst.UI_SPRITE_MAIN_HUD, mainHudInfo.iconSpriteGetter())
end
if phaseId ~= nil then
local systemViewConfig = PhaseManager:GetPhaseSystemViewConfig(phaseId)
if systemViewConfig ~= nil then
name = systemViewConfig.systemName
if icon == nil then
icon = self:LoadSprite(UIConst.UI_SPRITE_MAIN_HUD, systemViewConfig.systemIcon)
end
end
end
if itemConfig.nameTextId ~= nil then
if type(itemConfig.nameTextId) == "string" then
name = Language[itemConfig.nameTextId]
else
local nameTextId = itemConfig.nameTextId()
if nameTextId ~= nil then
name = Language[nameTextId]
end
end
end
if itemConfig.iconId ~= nil then
if type(itemConfig.iconId) == "string" then
icon = self:LoadSprite(UIConst.UI_SPRITE_MAIN_HUD, itemConfig.iconId)
else
local iconId = itemConfig.iconId()
if iconId ~= nil then
icon = self:LoadSprite(UIConst.UI_SPRITE_MAIN_HUD, iconId)
end
end
end
if name == nil or icon == nil then
logger.error("快捷轮盘没有配置名称或图标", itemId)
return
end
cellData.name = name
cellData.icon = icon
cellData.redDotName = itemConfig.redDotName
if cellData.redDotName == nil then
if mainHudInfo ~= nil and mainHudInfo.redDotName ~= nil then
cellData.redDotName = mainHudInfo.redDotName
else
if phaseId ~= nil then
cellData.redDotName = PhaseManager:GetPhaseRedDotName(phaseId)
else
cellData.redDotName = itemConfig.redDotName
end
end
end
if QuickMenuConst.QUICK_MENU_AUDIO[itemId] ~= nil then
cellData.onPressAudio = QuickMenuConst.QUICK_MENU_AUDIO[itemId]
else
cellData.onPressAudio = "Au_UI_Button_Common"
end
local isLocked, isForbidden = false, false
if phaseId ~= nil then
isLocked = not PhaseManager:IsPhaseUnlocked(phaseId)
isForbidden = not PhaseManager:CheckCanOpenPhase(phaseId)
end
if mainHudInfo ~= nil then
isForbidden = isForbidden or not self.m_mainHudCtrl:IsMainHudBtnVisible(mainHudInfo)
end
if itemConfig.getIsLocked ~= nil then
isLocked = isLocked or itemConfig.getIsLocked()
end
if itemConfig.getIsForbidden ~= nil then
isForbidden = isForbidden or itemConfig.getIsForbidden()
end
cellData.isLocked = isLocked
cellData.isForbidden = isForbidden
return cellData
end
QuickMenuCtrl._BuildMenuItemDataListAndGetValid = HL.Method(HL.Any).Return(HL.Table, HL.Table) << function(self, itemList)
if not itemList then
return nil, nil
end
local firstValidItemData, lastItemIgnoreForbiddenData
for _, itemId in ipairs(itemList) do
local itemData = self:_BuildMenuItemData(itemId)
if itemData and not itemData.isLocked then
if not itemData.isForbidden and firstValidItemData == nil then
firstValidItemData = itemData
end
lastItemIgnoreForbiddenData = itemData
end
end
return firstValidItemData, lastItemIgnoreForbiddenData
end
QuickMenuCtrl._InitQuickMenuCenterCells = HL.Method() << function(self)
self.m_quickMenuCenterItemData = {}
local itemCount = #QuickMenuConst.QUICK_MENU_CENTER_ITEM_LIST
if itemCount == nil or itemCount <= 0 then
return
end
local rotateAngle = 360 / itemCount
self.m_centerCells:Refresh(itemCount, function(centerCell, luaIndex)
local itemCell = centerCell.quickMenuCell
local targetAngle = rotateAngle * (luaIndex - 1)
local angleLeftBound, angleRightBound = targetAngle - rotateAngle / 2, targetAngle + rotateAngle / 2
centerCell.transform.localEulerAngles = Vector3(0, 0, -targetAngle)
centerCell.gameObject:SetActive(true)
itemCell.iconNode.localEulerAngles = Vector3(0, 0, targetAngle)
local centerItemData = {
centerCell = centerCell,
itemCell = itemCell,
angleLeftBound = angleLeftBound,
angleRightBound = angleRightBound,
}
local itemId
if QuickMenuConst.QUICK_MENU_CENTER_ITEM_LIST[luaIndex] == QUICK_MENU_INVALID_ITEM_ID then
itemId = QUICK_MENU_INVALID_ITEM_ID
centerItemData.name = QUICK_MENU_INVALID_ITEM_ID
centerItemData.isLocked = true
itemCell.stateController:SetState(QuickMenuCellState.Locked)
else
local itemData
if type(QuickMenuConst.QUICK_MENU_CENTER_ITEM_LIST[luaIndex]) == "table" then
local first, last = self:_BuildMenuItemDataListAndGetValid(QuickMenuConst.QUICK_MENU_CENTER_ITEM_LIST[luaIndex])
itemData = first and first or last
else
itemData = self:_BuildMenuItemData(QuickMenuConst.QUICK_MENU_CENTER_ITEM_LIST[luaIndex])
end
if itemData then
itemId = itemData.itemId
itemCell.nameTxt.gameObject:SetActive(false)
self:_RefreshQuickMenuCell(itemCell, itemData)
if itemData.isLocked then
itemCell.stateController:SetState(QuickMenuCellState.Locked)
elseif itemData.isForbidden then
itemCell.stateController:SetState(QuickMenuCellState.Forbidden)
else
itemCell.stateController:SetState(QuickMenuCellState.Normal)
end
centerItemData.name = itemData.name
centerItemData.isLocked = itemData.isLocked
centerItemData.isForbidden = itemData.isForbidden
centerItemData.onUse = itemData.onUse
self:_InitQuickMenuRefreshMessages(itemId, itemCell)
else
itemId = QUICK_MENU_INVALID_ITEM_ID
centerItemData.name = QUICK_MENU_INVALID_ITEM_ID
centerItemData.isLocked = true
itemCell.stateController:SetState(QuickMenuCellState.Locked)
end
itemCell.gameObject.name = itemId
end
centerItemData.id = itemId
self.m_quickMenuCenterItemData[itemId] = centerItemData
centerCell.gameObject.name = string.format("QuickMenuCenterCell_%s", itemId)
end)
end
QuickMenuCtrl._InitQuickMenuLeftCells = HL.Method() << function(self)
self.m_quickMenuLeftItemData = {}
local anyValidItem = false
for index, itemList in ipairs(QuickMenuConst.QUICK_MENU_LEFT_ITEM_CELLS_LIST) do
local validItemData = self:_BuildMenuItemDataListAndGetValid(itemList)
local cell = self.view.quickMenuLeftCells[string.format("quickMenuCell%d", index)]
if validItemData ~= nil then
self:_RefreshQuickMenuCell(cell, validItemData)
cell.nameTxt.text = validItemData.name
cell.nameTxt.gameObject:SetActive(true)
cell.stateController:SetState("Normal")
self.m_quickMenuLeftItemData[index] = {
id = validItemData.itemId,
onUse = validItemData.onUse,
onPressAudio = validItemData.onPressAudio,
}
anyValidItem = true
self:_InitQuickMenuRefreshMessages(validItemData.itemId, cell)
else
cell.nameTxt.gameObject:SetActive(false)
cell.stateController:SetState("Locked")
end
end
if not anyValidItem then
self.view.leftNode:SetState("Invalid")
return
end
self.view.leftNode:SetState("Normal")
self:BindInputPlayerAction("quickMenu_left_up_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuLeftItemData[1], true)
end)
self:BindInputPlayerAction("quickMenu_left_right_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuLeftItemData[2], true)
end)
self:BindInputPlayerAction("quickMenu_left_down_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuLeftItemData[3], true)
end)
self:BindInputPlayerAction("quickMenu_left_left_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuLeftItemData[4], true)
end)
self:BindInputPlayerAction("quickMenu_left_up_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuLeftItemData[1])
end)
self:BindInputPlayerAction("quickMenu_left_right_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuLeftItemData[2])
end)
self:BindInputPlayerAction("quickMenu_left_down_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuLeftItemData[3])
end)
self:BindInputPlayerAction("quickMenu_left_left_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuLeftItemData[4])
end)
end
QuickMenuCtrl._InitQuickMenuRightCells = HL.Method() << function(self)
self.m_quickMenuRightItemData = {}
local anyValidItem = false
for index, itemList in ipairs(QuickMenuConst.QUICK_MENU_RIGHT_ITEM_CELLS_LIST) do
local validItemData = self:_BuildMenuItemDataListAndGetValid(itemList)
local cell = self.view.quickMenuRightCells[string.format("quickMenuCell%d", index)]
if validItemData ~= nil then
self:_RefreshQuickMenuCell(cell, validItemData)
cell.nameTxt.text = validItemData.name
cell.nameTxt.gameObject:SetActive(true)
cell.stateController:SetState("Normal")
self.m_quickMenuRightItemData[index] = {
id = validItemData.itemId,
onUse = validItemData.onUse,
onPressAudio = validItemData.onPressAudio,
}
anyValidItem = true
self:_InitQuickMenuRefreshMessages(validItemData.itemId, cell)
else
cell.nameTxt.gameObject:SetActive(false)
cell.stateController:SetState("Locked")
end
end
if not anyValidItem then
self.view.rightNode:SetState("Invalid")
return
end
self.view.rightNode:SetState("Normal")
self:BindInputPlayerAction("quickMenu_right_up_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuRightItemData[1], true)
end)
self:BindInputPlayerAction("quickMenu_right_right_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuRightItemData[2], true)
end)
self:BindInputPlayerAction("quickMenu_right_down_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuRightItemData[3], true)
end)
self:BindInputPlayerAction("quickMenu_right_left_select", function()
self:_SelectQuickMenuItem(self.m_quickMenuRightItemData[4], true)
end)
self:BindInputPlayerAction("quickMenu_right_up_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuRightItemData[1])
end)
self:BindInputPlayerAction("quickMenu_right_right_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuRightItemData[2])
end)
self:BindInputPlayerAction("quickMenu_right_down_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuRightItemData[3])
end)
self:BindInputPlayerAction("quickMenu_right_left_onPress", function()
self:_QuickMenuItemOnPress(self.m_quickMenuRightItemData[4])
end)
end
QuickMenuCtrl._InitQuickMenuRefreshMessages = HL.Method(HL.String, HL.Table) << function(self, itemId, itemCell)
local itemConfig = QuickMenuConst.QUICK_MENU_ITEM_CONFIG[itemId]
if itemConfig ~= nil and itemConfig.refreshMessageList ~= nil then
for _, message in pairs(itemConfig.refreshMessageList) do
MessageManager:Register(message, function(msgArg)
local itemData = self:_BuildMenuItemData(itemId)
if itemData == nil then
return
end
self:_RefreshQuickMenuCell(itemCell, itemData)
end, self)
end
end
end
QuickMenuCtrl._InitQuickMenu = HL.Method() << function(self)
self.m_quickMenuUpdateThread = self:_StartCoroutine(function()
while true do
coroutine.step()
local lastSelectedId = self.m_currentSelectedCenterItemId
self:_UpdateSelectArrowState()
self:_UpdateSelectItemState()
local needUpdateSystemInfo = lastSelectedId ~= self.m_currentSelectedCenterItemId
if not self.m_isClosed then
if needUpdateSystemInfo then
self:_UpdateSystemInfo()
end
self:_UpdateQuickMenuState()
end
end
end)
self.m_centerCells = UIUtils.genCellCache(self.view.quickMenuCenterCell)
self:BindInputPlayerAction("quickMenu_cancel_selected_system", function()
if not QuickMenuCtrl.s_releaseCloseEnabled then
return
end
self:PlayAnimationOutAndClose()
end)
self.view.tipsTxt.text = Language["LUA_QUICK_MENU_CENTER_SELECT"]
self.view.controllerHintPlaceholder:InitControllerHintPlaceholder({self.view.inputGroup.groupId})
self.view.selectArrow.gameObject:SetActive(false)
end
QuickMenuCtrl._QuickMenuItemOnPress = HL.Method(HL.Opt(HL.Any)) << function(self, itemData)
local isValid = true
if self.m_currentSelectedCenterItemId == QUICK_MENU_INVALID_ITEM_ID then
isValid = false
elseif itemData == nil then
isValid = false
elseif itemData.isLocked or itemData.isForbidden then
isValid = false
end
if isValid then
if itemData.onPressAudio ~= nil then
AudioAdapter.PostEvent(itemData.onPressAudio)
else
AudioAdapter.PostEvent("Au_UI_Button_Common")
end
end
end
QuickMenuCtrl._SelectQuickMenuItem = HL.Method(HL.Opt(HL.Any, HL.Boolean)) << function(self, itemData, onlyShowToastIfInvalid)
if QuickMenuCtrl.s_clearScreenKey <= 0 then
return
end
local isValid = true
if self.m_currentSelectedCenterItemId == QUICK_MENU_INVALID_ITEM_ID then
isValid = false
elseif itemData == nil then
isValid = false
elseif itemData.isLocked or itemData.isForbidden then
isValid = false
end
if not isValid then
Notify(MessageConst.SHOW_TOAST, Language.LUA_INVALID_SYSTEM_COMMON_DESCRIPTION)
if onlyShowToastIfInvalid then
return
end
end
local clearScreenKey
if isValid then
clearScreenKey = UIManager:ClearScreen({ PANEL_ID })
if not clearScreenKey then
return
end
PhaseLevel.s_forceTransitionBehindFastMode = true
end
if self:IsShow() then
self:Close()
end
if isValid then
itemData.onUse()
local delayFrameCount = self:_IsQuickMenuItemNeedExtraDelayRecoverScreen(itemData.id) and
EXTRA_DELAY_RECOVER_SCREEN_FRAME_COUNT or
DEFAULT_DELAY_RECOVER_SCREEN_FRAME_COUNT
TimerManager:StartFrameTimer(delayFrameCount, function()
UIManager:RecoverScreen(clearScreenKey)
PhaseLevel.s_forceTransitionBehindFastMode = false
end)
end
end
QuickMenuCtrl._GetQuickMenuItemIsInConfig = HL.Method(HL.Table, HL.Number).Return(HL.Boolean) << function(self, configTable, phaseId)
if configTable == nil then
return
end
for _, id in ipairs(configTable) do
if id == phaseId then
return true
end
end
return false
end
QuickMenuCtrl._IsQuickMenuItemNeedExtraDelayRecoverScreen = HL.Method(HL.String).Return(HL.Boolean) << function(self, itemId)
local itemConfig = QuickMenuConst.QUICK_MENU_ITEM_CONFIG[itemId]
if itemConfig == nil then
return false
end
return itemConfig.needExtraDelayRecoverScreen == true
end
QuickMenuCtrl._GetQuickMenuItemIsLocked = HL.Method(HL.Number).Return(HL.Boolean) << function(self, phaseId)
return not PhaseManager:IsPhaseUnlocked(phaseId)
end
QuickMenuCtrl._RefreshQuickMenuCell = HL.Method(HL.Table, HL.Table) << function(self, itemCell, itemData)
itemCell.systemIcon.sprite = itemData.icon
itemCell.systemIconShadow.sprite = itemData.icon
local redDot = itemData.redDotName
if not string.isEmpty(redDot) and not itemData.isLocked and not itemData.isForbidden then
itemCell.redDot.gameObject:SetActive(true)
itemCell.redDot:InitRedDot(redDot)
else
itemCell.redDot.gameObject:SetActive(false)
end
end
QuickMenuCtrl._UpdateQuickMenuState = HL.Method() << function(self)
local rightStickValue = InputManagerInst:GetGamepadStickValue(false)
local useRightStick = rightStickValue.x ~= 0 or rightStickValue.y ~= 0
if not useRightStick and not string.isEmpty(self.m_currentSelectedCenterItemId) and QuickMenuCtrl.s_releaseCloseEnabled then
self:_SelectQuickMenuItem(self.m_quickMenuCenterItemData[self.m_currentSelectedCenterItemId])
end
end
QuickMenuCtrl._UpdateSelectArrowState = HL.Method() << function(self)
if QuickMenuCtrl.s_clearScreenKey <= 0 then
return
end
local stickValue = InputManagerInst:GetGamepadStickValue(false)
if stickValue.magnitude < self.view.config.RIGHT_STICK_DEAD_ZONE_VALUE then
self.m_currentStickPushed = false
return
end
local angle = 180 * (math.acos(Vector2.Dot(stickValue.normalized, Vector2(0, 1))) / math.pi)
if stickValue.x < 0 then
angle = 360 - angle
end
self.m_currentArrowAngle = angle
self.view.selectArrow.eulerAngles = Vector3(0, 0, -angle)
self.view.selectArrow.gameObject:SetActive(true)
self.m_currentStickPushed = true
end
QuickMenuCtrl._UpdateSelectItemState = HL.Method() << function(self)
if self.m_currentArrowAngle == 0 and not self.m_currentStickPushed then
if not self.m_currentSelectedCenterItemId == QUICK_MENU_INVALID_ITEM_ID then
local itemData = self.m_quickMenuCenterItemData[self.m_currentSelectedCenterItemId]
if itemData ~= nil and itemData.itemCell ~= nil then
itemData.centerCell.selectedMark.gameObject:SetActive(false)
end
self.m_currentSelectedCenterItemId = QUICK_MENU_INVALID_ITEM_ID
end
return
end
local triggerItemId
for itemId, itemData in pairs(self.m_quickMenuCenterItemData) do
local centerCell = itemData.centerCell
local angleLeftBound, angleRightBound = itemData.angleLeftBound, itemData.angleRightBound
local isSelected = false
if angleLeftBound < 0 then
angleLeftBound = 360 + angleLeftBound
isSelected = (self.m_currentArrowAngle >= angleLeftBound and self.m_currentArrowAngle <= 360) or
(self.m_currentArrowAngle >= 0 and self.m_currentArrowAngle < angleRightBound)
else
isSelected = self.m_currentArrowAngle >= angleLeftBound and self.m_currentArrowAngle < angleRightBound
end
if centerCell ~= nil and centerCell.selectedMark ~= nil then
centerCell.selectedMark.gameObject:SetActive(isSelected)
end
if isSelected then
if self.m_currentSelectedCenterItemId ~= itemId then
triggerItemId = itemId
end
self.m_currentSelectedCenterItemId = itemId
end
end
if not string.isEmpty(triggerItemId) then
CS.Beyond.Gameplay.Conditions.OnQuickMenuSystemHover.Trigger(triggerItemId)
end
end
QuickMenuCtrl._UpdateSystemInfo = HL.Method() << function(self)
if self.view == nil then
return
end
local tipsTextId = string.isEmpty(self.m_currentSelectedCenterItemId) and "LUA_QUICK_MENU_CENTER_SELECT" or "LUA_QUICK_MENU_CENTER_CONFIRM"
self.view.tipsTxt.text = Language[tipsTextId]
local itemData = self.m_quickMenuCenterItemData[self.m_currentSelectedCenterItemId]
if itemData == nil then
self.view.systemInfo.gameObject:SetActive(false)
return
end
local name = itemData.isLocked and Language.LUA_LOCKED_SYSTEM_TITLE or itemData.name
self.view.systemNameTxt.text = name
self.view.systemInfo.gameObject:SetActive(true)
AudioManager.PostEvent("au_ui_hover_dial")
end
HL.Commit(QuickMenuCtrl)