Files
StellaSora_DataLua/lua/game/ui/startowerfastbattle/startowerfastbattleoptionctrl.lua
T
SL1900 35c8d87e86 Update - 1.4.0.73
EN: 1.4.0.73
CN: 1.4.0.74
JP: 1.4.0.77
KR: 1.4.0.80
2025-12-25 19:00:00 +09:00

233 lines
8.4 KiB
Lua

local StarTowerFastBattleOptionCtrl = class("StarTowerFastBattleOptionCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
StarTowerFastBattleOptionCtrl._mapNodeConfig = {
goBlur = {
sNodeName = "t_fullscreen_blur_blue"
},
trRoot = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "Transform"
},
rtSelectOption = {},
TMP_Title = {sComponentName = "TMP_Text"},
rtChoose = {nCount = 5},
btnChoose = {
sComponentName = "NaviButton",
nCount = 5,
callback = "OnBtnClick_Select"
},
imgIconLeave = {nCount = 5},
TMPChoose = {sComponentName = "TMP_Text", nCount = 5},
imgFunc = {nCount = 5},
Select = {nCount = 5},
goCoin = {sNodeName = "imgBg_Coin"},
imgCoin = {sComponentName = "Image"},
textCoinCount = {sComponentName = "TMP_Text"},
btnBack = {
sComponentName = "UIButton",
callback = "OnBtnClick_Back"
},
btnDepot = {
sComponentName = "UIButton",
callback = "OnBtnClick_Depot"
}
}
StarTowerFastBattleOptionCtrl._mapEventConfig = {
RefreshStrengthMachineCost = "OnEvent_RefreshStrengthMachineCost",
RefreshStarTowerCoin = "OnEvent_RefreshStarTowerCoin",
GamepadUIChange = "OnEvent_GamepadUIChange",
GamepadUIReopen = "OnEvent_Reopen"
}
function StarTowerFastBattleOptionCtrl:Awake()
self._mapNode.goBlur:SetActive(false)
self._mapNode.rtSelectOption:SetActive(false)
for i = 1, 5 do
self._mapNode.rtChoose[i]:SetActive(false)
self._mapNode.imgIconLeave[i]:SetActive(false)
self._mapNode.imgFunc[i]:SetActive(false)
self._mapNode.Select[i]:SetActive(false)
NovaAPI.SetTMPText(self._mapNode.TMPChoose[i], "")
if i == 5 then
NovaAPI.SetTMPText(self._mapNode.TMPChoose[i], ConfigTable.GetUIText("StartowerFastBattle_LastRoom_Option"))
end
end
self.tbStrengthMachineCost = ConfigTable.GetConfigNumberArray("StrengthenMachineGoldConsume")
end
function StarTowerFastBattleOptionCtrl:OnEnable()
self.handler = {}
for k, v in ipairs(self._mapNode.btnChoose) do
self.handler[k] = ui_handler(self, self.OnBtnSelect_Select, v, k)
v.onSelect:AddListener(self.handler[k])
end
self.nSelectIdx = 0
self.closeCallBack = self._panel.closeCallback
self._mapNode.goBlur:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self:Refresh()
self._mapNode.rtSelectOption:SetActive(true)
EventManager.Hit(EventId.TemporaryBlockInput, 1)
end
cs_coroutine.start(wait)
GamepadUIManager.EnableGamepadUI("StarTowerFastBattleOptionCtrl", self:GetGamepadUINode())
self:SetSprite_Coin(self._mapNode.imgCoin, AllEnum.CoinItemId.FixedRogCurrency)
NovaAPI.SetTMPText(self._mapNode.textCoinCount, self:ThousandsNumber(self._panel.nCoinCount))
end
function StarTowerFastBattleOptionCtrl:OnDisable()
GamepadUIManager.DisableGamepadUI("StarTowerFastBattleOptionCtrl")
if self.closeCallBack ~= nil and type(self.closeCallBack) == "function" then
self.closeCallBack()
end
self.closeCallBack = nil
for k, v in ipairs(self._mapNode.btnChoose) do
v.onSelect:RemoveListener(self.handler[k])
end
end
function StarTowerFastBattleOptionCtrl:OnDestroy()
end
function StarTowerFastBattleOptionCtrl:Refresh()
self._mapNode.rtChoose[1]:SetActive(self._panel.bShop)
NovaAPI.SetTMPText(self._mapNode.TMPChoose[1], ConfigTable.GetUIText("StarTower_Sweep_Option_1"))
self._mapNode.rtChoose[2]:SetActive(self._panel.bMachine)
self:RefreshMachineCost()
NovaAPI.SetTMPText(self._mapNode.TMPChoose[3], ConfigTable.GetUIText("StarTower_Sweep_Option_3"))
self._mapNode.rtChoose[3]:SetActive(not self._panel.bLastFloor)
self._mapNode.rtChoose[5]:SetActive(self._panel.bLastFloor)
local sTips = ConfigTable.GetUIText("StarTower_Sweep_Option_Title")
if self._panel.bLastFloor then
sTips = ConfigTable.GetUIText("StartowerFastBattle_LastRoom_Title")
end
NovaAPI.SetTMPText(self._mapNode.TMP_Title, sTips)
local tbBtnObj = {}
local bFirst = true
local add = function(i)
table.insert(tbBtnObj, self._mapNode.btnChoose[i])
if bFirst then
bFirst = false
self.nSelectIdx = i
end
end
if self._panel.bShop then
add(1)
end
if self._panel.bMachine then
add(2)
end
if self._panel.bLastFloor then
add(5)
else
add(3)
end
GamepadUIManager.SetNavigation(tbBtnObj, false)
self:SelectChoose()
end
function StarTowerFastBattleOptionCtrl:RefreshMachineCost()
self.nMachineCost = 120
if nil ~= self.tbStrengthMachineCost then
local times = self._panel.nMachineCount + 1
self.nMachineCost = self.tbStrengthMachineCost[times]
if self.nMachineCost == nil then
self.nMachineCost = self.tbStrengthMachineCost[#self.tbStrengthMachineCost]
end
self.nMachineCost = self.nMachineCost - self._panel.nDiscount
if self._panel.bFirstFree then
self.nMachineCost = 0
end
end
local sCost = self.nMachineCost == 0 and ConfigTable.GetUIText("ST_StrengthenMachine_Free") or tostring(self.nMachineCost)
NovaAPI.SetTMPText(self._mapNode.TMPChoose[2], orderedFormat(ConfigTable.GetUIText("StarTower_Sweep_Option_2"), self._panel.nCoinCount < self.nMachineCost and "#BD3059" or "#264278", sCost))
end
function StarTowerFastBattleOptionCtrl:OnBtnClick_Select(btn)
local nIdx = table.indexof(self._mapNode.btnChoose, btn)
if nIdx == 1 then
EventManager.Hit("StarTowerFastBattleOpenShop")
elseif nIdx == 2 then
EventManager.Hit("StarTowerFastBattleOpenMachine")
elseif nIdx == 3 then
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerFastBattleOption)
elseif nIdx == 5 then
EventManager.Hit("TryCloseStarTowerLastShop", self._panel.bMachine, self.nMachineCost)
end
end
function StarTowerFastBattleOptionCtrl:OnEvent_RefreshStrengthMachineCost(nMachineCount, bFirstFree)
self._panel.nMachineCount = nMachineCount
self._panel.bFirstFree = bFirstFree
self:RefreshMachineCost()
end
function StarTowerFastBattleOptionCtrl:OnEvent_RefreshStarTowerCoin(nCoinCount)
self._panel.nCoinCount = nCoinCount
self:RefreshMachineCost()
NovaAPI.SetTMPText(self._mapNode.textCoinCount, self:ThousandsNumber(self._panel.nCoinCount))
end
function StarTowerFastBattleOptionCtrl:OnBtnSelect_Select(btn, nIndex)
if self.nSelectIdx == nIndex then
return
end
for k, v in ipairs(self._mapNode.Select) do
if k == nIndex then
if GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Other and GamepadUIManager.GetCurUIType() ~= AllEnum.GamepadUIType.Mouse then
v:SetActive(true)
else
v:SetActive(false)
end
elseif k == self.nSelectIdx then
v:SetActive(false)
end
end
self.nSelectIdx = nIndex
end
function StarTowerFastBattleOptionCtrl:OnBtnClick_Back()
EventManager.Hit("LeaveStarTowerFastBattle", function()
self.closeCallBack = nil
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerFastBattleOption)
end)
end
function StarTowerFastBattleOptionCtrl:OnBtnClick_Depot()
EventManager.Hit("StarTowerSetButtonEnable", false, false)
self._mapNode.trRoot.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
EventManager.Hit(EventId.StarTowerDepot, AllEnum.StarTowerDepotTog.Potential)
end
function StarTowerFastBattleOptionCtrl:OnEvent_GamepadUIChange(sName, nBeforeType, nAfterType)
if sName ~= "StarTowerFastBattleOptionCtrl" then
return
end
local bNeedSelect = nBeforeType == AllEnum.GamepadUIType.Other and nAfterType ~= AllEnum.GamepadUIType.Mouse or nBeforeType == AllEnum.GamepadUIType.Mouse and nAfterType ~= AllEnum.GamepadUIType.Other
if bNeedSelect then
for k, v in ipairs(self._mapNode.btnChoose) do
if k == self.nSelectIdx then
self._mapNode.Select[k]:SetActive(true)
GamepadUIManager.SetSelectedUI(self._mapNode.btnChoose[self.nSelectIdx].gameObject)
end
end
else
for k, v in ipairs(self._mapNode.btnChoose) do
self._mapNode.Select[k]:SetActive(false)
end
end
end
function StarTowerFastBattleOptionCtrl:OnEvent_Reopen(sName)
if sName ~= "StarTowerFastBattleOptionCtrl" then
return
end
self._mapNode.goBlur.gameObject:SetActive(true)
self._mapNode.trRoot.gameObject:SetActive(true)
local nSelect = self.nSelectIdx ~= 0 and self.nSelectIdx or 3
GamepadUIManager.SetSelectedUI(self._mapNode.btnChoose[nSelect].gameObject)
self:SelectChoose()
end
function StarTowerFastBattleOptionCtrl:SelectChoose()
local nUIType = GamepadUIManager.GetCurUIType()
if nUIType ~= AllEnum.GamepadUIType.Other and nUIType ~= AllEnum.GamepadUIType.Mouse then
if self.nSelectIdx ~= 0 then
self._mapNode.Select[self.nSelectIdx]:SetActive(true)
GamepadUIManager.SetSelectedUI(self._mapNode.btnChoose[self.nSelectIdx].gameObject)
end
else
for k, v in ipairs(self._mapNode.btnChoose) do
self._mapNode.Select[k]:SetActive(false)
end
end
end
return StarTowerFastBattleOptionCtrl