Major Update - 2.0.0.143

EN: 2.0.0.143
CN: 2.0.0.142
JP: 2.0.0.145
KR: 2.0.0.150
This commit is contained in:
SL1900
2026-10-20 13:00:00 +09:00
parent 4bcada6061
commit 08b515afd9
1773 changed files with 1095195 additions and 65670 deletions
@@ -0,0 +1,276 @@
local StarTowerAutoDecisionHUDCtrl = class("StarTowerAutoDecisionHUDCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local Time = CS.UnityEngine.Time
local TimerManager = require("GameCore.Timer.TimerManager")
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
local StarTowerAutoDecision = require("Game.Adventure.StarTower.StarTowerAutoDecision")
local AUTO_INPUT_LAYER = "StarTowerAutoDecisionHUDCtrl"
local LOCKED_TIPS_INTERVAL = 0.8
local AUTO_SWITCH_COOLDOWN = 0.25
local mapPauseKeyboardInput = {
enter = true,
numpadEnter = true,
space = true
}
StarTowerAutoDecisionHUDCtrl._mapNodeConfig = {
rtAutoOpen = {
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerAutoDecisionPhoneCtrl"
},
animAutoOpen = {sNodeName = "rtAutoOpen", sComponentName = "Animator"},
rtAutoBattle = {
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerAutoDecisionPhoneCtrl"
},
animAutoBattle = {
sNodeName = "rtAutoBattle",
sComponentName = "Animator"
},
rtAutoBattleShortcut = {
sNodeName = "rtAutoBattle",
sComponentName = "NaviButton",
callback = "OnBtnClick_Stop"
},
goAutoInputBlock = {
sComponentName = "UIButton",
callback = "OnBtnClick_InputBlock"
},
btnAutoOn = {
sComponentName = "UIButton",
callback = "OnBtnClick_AutoOn"
},
btnStop = {
sComponentName = "UIButton",
callback = "OnBtnClick_Stop"
},
txtAutoOn = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_Enable"
},
btnOpenSetting = {
sComponentName = "UIButton",
callback = "OnBtnClick_OpenSetting"
},
txtAutoSearch = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_Ongoing"
}
}
StarTowerAutoDecisionHUDCtrl._mapEventConfig = {
StarTowerAutoDecisionStateChanged = "OnEvent_AutoDecisionStateChanged",
StarTowerAutoDecisionSettingStateChanged = "OnEvent_AutoDecisionSettingStateChanged",
OpenStarTowerDepot = "OnEvent_OpenStarTowerDepot",
CloseStarTowerDepot = "OnEvent_CloseStarTowerDepot",
LuaEventName_KeyboardButtonPress = "OnEvent_KeyboardButtonPress",
LuaEventName_MouseButtonPress = "OnEvent_MouseButtonPress",
LuaEventName_GamepadButtonPress = "OnEvent_GamepadButtonPress"
}
function StarTowerAutoDecisionHUDCtrl:Awake()
self._bInputLocked = false
self._bDepotOpen = false
self._nNextLockedTipsTime = 0
self._nNextSettingBusyTipsTime = 0
end
function StarTowerAutoDecisionHUDCtrl:OnEnable()
self._bSettingOpen = PanelManager.CheckPanelOpen(PanelId.StarTowerAutoDecisionSettingPanel)
self.canvas = self.gameObject.transform:GetComponent("Canvas")
NovaAPI.SetCanvasOverrideSorting(self.canvas, true)
NovaAPI.SetCanvasSortingName(self.canvas, AllEnum.SortingLayerName.UI_Top)
NovaAPI.SetCanvasSortingOrder(self.canvas, AllEnum.UI_SORTING_ORDER.StarTowerAutoDecisionHUD)
self:Refresh()
end
function StarTowerAutoDecisionHUDCtrl:OnDisable()
TimerManager.Remove(self._timerAutoOpenHide, false)
TimerManager.Remove(self._timerAutoBattleHide, false)
TimerManager.Remove(self._timerAutoSwitch, false)
self._timerAutoOpenHide = nil
self._timerAutoBattleHide = nil
self._timerAutoSwitch = nil
self._mapNode.rtAutoOpen.gameObject:SetActive(false)
self._mapNode.rtAutoBattle.gameObject:SetActive(false)
self:SetInputLocked(false)
end
function StarTowerAutoDecisionHUDCtrl:RefreshAutoNode(sNodeName, sAnimatorName, sAnimationPrefix, sTimerName, bVisible)
local objCtrl = self._mapNode[sNodeName]
local animator = self._mapNode[sAnimatorName]
if self._bSettingOpen then
TimerManager.Remove(self[sTimerName], false)
self[sTimerName] = nil
objCtrl.gameObject:SetActive(false)
return
end
if bVisible then
local bPlayIn = self[sTimerName] ~= nil or not objCtrl.gameObject.activeSelf
TimerManager.Remove(self[sTimerName], false)
self[sTimerName] = nil
objCtrl.gameObject:SetActive(true)
if bPlayIn then
animator:Play(sAnimationPrefix .. "_in", 0, 0)
end
objCtrl:Refresh()
elseif objCtrl.gameObject.activeSelf and self[sTimerName] == nil then
animator:Play(sAnimationPrefix .. "_out", 0, 0)
self[sTimerName] = self:AddTimer(1, 0.2, function()
self[sTimerName] = nil
objCtrl.gameObject:SetActive(false)
end, true, true, true)
if self[sTimerName] == nil then
objCtrl.gameObject:SetActive(false)
end
end
end
function StarTowerAutoDecisionHUDCtrl:CanUseAutoOpenButtons(bSetting)
local objLevelData = self._panel.LevelData
return self._timerAutoSwitch == nil and not self._bDepotOpen and not self._bSettingOpen and not self._bInputLocked and objLevelData ~= nil and objLevelData.bEnd ~= true and not objLevelData:IsAutoDecisionEnabled() and (bSetting or not objLevelData:IsAutoDecisionBusy())
end
function StarTowerAutoDecisionHUDCtrl:RefreshButtonInteractable()
local bInteractable = self._timerAutoSwitch == nil and not self._bDepotOpen
local bAutoOpenInteractable = self:CanUseAutoOpenButtons()
self._mapNode.btnAutoOn.interactable = bAutoOpenInteractable
self._mapNode.btnOpenSetting.interactable = self:CanUseAutoOpenButtons(true)
self._mapNode.btnStop.interactable = bInteractable and self._bInputLocked
self._mapNode.rtAutoBattleShortcut.interactable = bInteractable and self._bInputLocked
end
function StarTowerAutoDecisionHUDCtrl:StartSwitchCooldown()
self._timerAutoSwitch = self:AddTimer(1, AUTO_SWITCH_COOLDOWN, function()
self._timerAutoSwitch = nil
self:RefreshButtonInteractable()
end, true, true, true)
self:RefreshButtonInteractable()
end
function StarTowerAutoDecisionHUDCtrl:Refresh(bEnabled)
if type(bEnabled) ~= "boolean" then
bEnabled = self._panel.LevelData ~= nil and self._panel.LevelData:IsAutoDecisionEnabled()
end
local bOpen = not self._bDepotOpen and not bEnabled
local bBattle = not self._bDepotOpen and bEnabled
if not bEnabled then
self:SetInputLocked(false)
end
self:RefreshAutoNode("rtAutoOpen", "animAutoOpen", "StarTowerAutoOpen", "_timerAutoOpenHide", bOpen)
self:RefreshAutoNode("rtAutoBattle", "animAutoBattle", "StarTowerAutoBattle", "_timerAutoBattleHide", bBattle)
if bEnabled then
self:SetInputLocked(true)
end
self:RefreshButtonInteractable()
end
function StarTowerAutoDecisionHUDCtrl:SetInputLocked(bLocked)
bLocked = bLocked == true
self._mapNode.goAutoInputBlock.gameObject:SetActive(bLocked)
if self._bInputLocked == bLocked then
return
end
self._bInputLocked = bLocked
if bLocked then
GamepadUIManager.EnableGamepadUI(AUTO_INPUT_LAYER, {
{
mapNode = self._mapNode.rtAutoBattleShortcut,
sComponentName = "NaviButton",
sAction = "buttonSouth"
}
}, self._mapNode.rtAutoBattleShortcut.gameObject, false, false, AllEnum.UI_SORTING_ORDER.StarTowerAutoDecisionHUD)
else
GamepadUIManager.DisableGamepadUI(AUTO_INPUT_LAYER)
end
end
function StarTowerAutoDecisionHUDCtrl:ShowInputLockedTips()
if not self._bInputLocked then
return
end
local nNow = Time.realtimeSinceStartup
if nNow < self._nNextLockedTipsTime then
return
end
self._nNextLockedTipsTime = nNow + LOCKED_TIPS_INTERVAL
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("AutoDecision_InputLocked"))
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_AutoDecisionStateChanged(mapState)
if type(mapState) ~= "table" then
self:Refresh()
return
end
local bEnabled = mapState.bEnabled == true and mapState.bPaused ~= true
self:Refresh(bEnabled)
if mapState.nFailReason == StarTowerAutoDecision.FailReason.TokenNotEnough then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("AutoDecision_InsufficientToken"))
end
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_OpenStarTowerDepot()
self._bDepotOpen = true
self:Refresh()
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_CloseStarTowerDepot()
self._bDepotOpen = false
self:Refresh()
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_AutoDecisionSettingStateChanged(bOpen)
self._bSettingOpen = bOpen == true
self:Refresh()
end
function StarTowerAutoDecisionHUDCtrl:OnBtnClick_AutoOn()
if not (self._mapNode.btnAutoOn.interactable and self:CanUseAutoOpenButtons()) or PanelManager.CheckPanelOpen(PanelId.StarTowerAutoDecisionSettingPanel) then
return
end
self:StartSwitchCooldown()
if PlayerData.StarTowerAutoPlan:GetTokenCount() <= 0 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("AutoDecision_InsufficientToken"))
return
end
local bSuccess = self._panel.LevelData:SetAutoDecisionEnabled(true)
if not bSuccess then
TimerManager.Remove(self._timerAutoSwitch, false)
self._timerAutoSwitch = nil
self:RefreshButtonInteractable()
self:OnBtnClick_OpenSetting()
elseif self._panel.LevelData:IsAutoDecisionEnabled() then
local nCurPlanId = PlayerData.StarTowerAutoPlan:GetSelectedPlanId()
local sPlanName = PlayerData.StarTowerAutoPlan:GetPlanById(nCurPlanId).sName
local sTip = orderedFormat(ConfigTable.GetUIText("AutoDecision_PlanActivatedTip"), sPlanName)
EventManager.Hit(EventId.OpenMessageBox, sTip)
end
end
function StarTowerAutoDecisionHUDCtrl:OnBtnClick_Stop()
if not self._mapNode.btnStop.interactable then
return
end
self:StartSwitchCooldown()
self:SetInputLocked(false)
if self._panel.LevelData ~= nil then
self._panel.LevelData:SetAutoDecisionEnabled(false, true)
end
end
function StarTowerAutoDecisionHUDCtrl:OnBtnClick_InputBlock()
self:ShowInputLockedTips()
end
function StarTowerAutoDecisionHUDCtrl:OnBtnClick_OpenSetting()
if not (self._mapNode.btnOpenSetting.interactable and self:CanUseAutoOpenButtons(true)) or PanelManager.CheckPanelOpen(PanelId.StarTowerAutoDecisionSettingPanel) then
return
end
if not StarTowerSettingGate.CanOpen(self._panel.LevelData) or PanelManager.CheckPanelOpen(PanelId.StarTowerFastBattleLog) or PanelManager.CheckPanelOpen(PanelId.StarTowerShop) or PanelManager.CheckPanelOpen(PanelId.NoteSkillInfo) then
local nNow = Time.realtimeSinceStartup
if nNow >= self._nNextSettingBusyTipsTime then
self._nNextSettingBusyTipsTime = nNow + LOCKED_TIPS_INTERVAL
local sTips = ConfigTable.GetUIText("AutoDecision_SettingBusy")
EventManager.Hit(EventId.OpenMessageBox, sTips)
end
return
end
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerAutoDecisionSettingPanel)
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_KeyboardButtonPress(mapInput)
if not self._bInputLocked or mapPauseKeyboardInput[mapInput.name] then
return
end
self:ShowInputLockedTips()
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_MouseButtonPress(mapInput)
if not self._bInputLocked or mapInput.name == "leftButton" or mapInput.name == "rightButton" then
return
end
self:ShowInputLockedTips()
end
function StarTowerAutoDecisionHUDCtrl:OnEvent_GamepadButtonPress(mapInput)
if not self._bInputLocked or mapInput.name == "buttonSouth" then
return
end
self:ShowInputLockedTips()
end
return StarTowerAutoDecisionHUDCtrl
@@ -0,0 +1,20 @@
local StarTowerAutoDecisionHUDPanel = class("StarTowerAutoDecisionHUDPanel", BasePanel)
StarTowerAutoDecisionHUDPanel._bIsMainPanel = false
StarTowerAutoDecisionHUDPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
StarTowerAutoDecisionHUDPanel._tbDefine = {
{
sPrefabPath = "StarTowerFastBattle/StarTowerAutoBattlePopup.prefab",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerAutoDecisionHUDCtrl"
}
}
function StarTowerAutoDecisionHUDPanel:Awake()
local tbParam = self:GetPanelParam()
self.LevelData = tbParam and tbParam[1] or nil
end
function StarTowerAutoDecisionHUDPanel:OnEnable()
end
function StarTowerAutoDecisionHUDPanel:OnDisable()
end
function StarTowerAutoDecisionHUDPanel:OnDestroy()
end
return StarTowerAutoDecisionHUDPanel
@@ -0,0 +1,48 @@
local StarTowerAutoDecisionPhoneCtrl = class("StarTowerAutoDecisionPhoneCtrl", BaseCtrl)
StarTowerAutoDecisionPhoneCtrl._mapNodeConfig = {
txtVitaToken = {sComponentName = "TMP_Text"},
txtVitaName = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_VitaName"
},
imgBattleCD = {sComponentName = "Image"}
}
StarTowerAutoDecisionPhoneCtrl._mapEventConfig = {
[EventId.CoinResChange] = "OnEvent_CoinResChange"
}
local tbColors = {
[1] = "#ea5964",
[2] = "#ffde6a",
[3] = "#bde34f"
}
function StarTowerAutoDecisionPhoneCtrl:Refresh()
self.nTokenCount = PlayerData.StarTowerAutoPlan:GetTokenCount()
self.nMaxTokenCount = ConfigTable.GetConfigNumber("TowerVitaEnergyMax") or 0
local nPercent = self.nMaxTokenCount > 0 and math.floor(self.nTokenCount * 100 / self.nMaxTokenCount) or 0
local nRatio = nPercent / 100
NovaAPI.SetImageFillAmount(self._mapNode.imgBattleCD, nRatio)
local color
if 0 <= nRatio and nRatio < 0.1 then
color = tbColors[1]
elseif 0.1 <= nRatio and nRatio < 0.3 then
color = tbColors[2]
elseif 0.3 <= nRatio then
color = tbColors[3]
end
if nRatio < 0.01 and 0 < nRatio then
nRatio = 0.01
end
NovaAPI.SetTMPText(self._mapNode.txtVitaToken, nPercent .. "%")
local _, myColor = ColorUtility.TryParseHtmlString(color)
NovaAPI.SetImageColor(self._mapNode.imgBattleCD, myColor)
NovaAPI.SetTMPColor(self._mapNode.txtVitaToken, myColor)
end
function StarTowerAutoDecisionPhoneCtrl:OnEnable()
self:Refresh()
end
function StarTowerAutoDecisionPhoneCtrl:OnEvent_CoinResChange(nItemId)
if nItemId == AllEnum.CoinItemId.AutoDecisionToken then
self:Refresh()
end
end
return StarTowerAutoDecisionPhoneCtrl
@@ -0,0 +1,133 @@
local StarTowerAutoDecisionRenameCtrl = class("StarTowerAutoDecisionRenameCtrl", BaseCtrl)
StarTowerAutoDecisionRenameCtrl._mapNodeConfig = {
blur = {sNodeName = "blurRename"},
aniBlur = {sNodeName = "blurRename", sComponentName = "Animator"},
aniWindow = {
sNodeName = "---Rename---",
sComponentName = "Animator"
},
goWindow = {
sNodeName = "---Rename---"
},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_Rename"
},
txtOldName = {
sComponentName = "TMP_Text",
sLanguageId = "Build_OldName"
},
txtNameDesc = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_NameDesc"
},
txtCurName = {sComponentName = "TMP_Text"},
inputRename = {
sComponentName = "TMP_InputField"
},
btnBlur = {
sNodeName = "snapshot",
sComponentName = "Button",
callback = "OnBtnClick_Cancel"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnCancel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtBtnConfirm = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_Btn_Confirm"
},
txtBtnCancel = {
sComponentName = "TMP_Text",
sLanguageId = "Friend_Btn_Cancel"
}
}
StarTowerAutoDecisionRenameCtrl._mapEventConfig = {}
function StarTowerAutoDecisionRenameCtrl:Open(mapPlan, callback)
self.gameObject:SetActive(true)
self.mapPlan = mapPlan
self.sCurName = mapPlan.sName
self.callback = callback
self:Refresh()
self:PlayInAni()
end
function StarTowerAutoDecisionRenameCtrl:Refresh()
local bInit = NovaAPI.IsDirtyWordsInit()
if not bInit then
NovaAPI.InitDirtyWords()
end
NovaAPI.SetTMPInputFieldText(self._mapNode.inputRename, "")
if self.sCurName ~= nil and self.sCurName ~= "" then
NovaAPI.SetTMPText(self._mapNode.txtCurName, self.sCurName)
elseif self.mapPlan.sName == "" or self.mapPlan.sName == nil then
NovaAPI.SetTMPText(self._mapNode.txtCurName, ConfigTable.GetUIText("RoguelikeBuild_EmptyBuildName"))
else
NovaAPI.SetTMPText(self._mapNode.txtCurName, self.mapPlan.sName)
end
end
function StarTowerAutoDecisionRenameCtrl:PlayInAni()
self._mapNode.goWindow:SetActive(true)
self._mapNode.blur:SetActive(true)
self._mapNode.aniWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function StarTowerAutoDecisionRenameCtrl:PlayOutAni()
self._mapNode.aniWindow:Play("t_window_04_t_out")
self._mapNode.aniBlur:SetTrigger("tOut")
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
self:AddTimer(1, 0.2, "Close", true, true, true)
end
function StarTowerAutoDecisionRenameCtrl:Close()
self.gameObject:SetActive(false)
end
function StarTowerAutoDecisionRenameCtrl:Awake()
end
function StarTowerAutoDecisionRenameCtrl:OnEnable()
end
function StarTowerAutoDecisionRenameCtrl:OnDisable()
end
function StarTowerAutoDecisionRenameCtrl:OnDestroy()
end
function StarTowerAutoDecisionRenameCtrl:OnBtnClick_Cancel(btn)
self:PlayOutAni()
end
function StarTowerAutoDecisionRenameCtrl:OnBtnClick_Confirm(btn)
local sNewName = NovaAPI.GetTMPInputFieldText(self._mapNode.inputRename)
if sNewName == "" then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("BUILD_05"))
return
end
local bInit = NovaAPI.IsDirtyWordsInit()
if not bInit then
NovaAPI.InitDirtyWords()
end
if NovaAPI.IsDirtyString(sNewName) then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("PLAYER_01"))
return
end
if self.bSkip then
self:PlayOutAni()
if self.callback then
self.callback(sNewName)
end
else
local nPlanId = self.mapPlan.nPlanId or self.mapPlan.Id
PlayerData.StarTowerAutoPlan:SendRenamePlan(nPlanId, sNewName, function()
self.mapPlan.sName = sNewName
if self.callback then
self.callback(sNewName)
end
self:PlayOutAni()
end)
end
end
return StarTowerAutoDecisionRenameCtrl
@@ -0,0 +1,492 @@
local StarTowerAutoDecisionSettingCtrl = class("StarTowerAutoDecisionSettingCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
local ClientManager = CS.ClientManager
StarTowerAutoDecisionSettingCtrl._mapNodeConfig = {
imgBlurredBg = {},
goContentAnim = {},
animRoot = {
sNodeName = "goContentAnim",
sComponentName = "Animator"
},
presetListLSV = {
sComponentName = "LoopScrollView"
},
txtPresetTitle = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_PresetSelect"
},
btnClosePanel = {
sComponentName = "UIButton",
callback = "OnBtnClick_ClosePanel"
},
txtTime = {sComponentName = "TMP_Text"},
txtBtnReset = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_PresetReset"
},
btnResetPlan = {
sComponentName = "UIButton",
callback = "OnBtnClick_Reset"
},
btnRename = {
sComponentName = "UIButton",
callback = "OnBtnClick_Rename"
},
txtPresetName = {sComponentName = "TMP_Text"},
goRename = {
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerAutoDecisionRenameCtrl"
},
PresetFirst = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
PresetOnly = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
PotentialSort = {
sCtrlName = "Game.UI.Settings.OptionMultiSelect"
},
txtTitlePotential = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_Potential"
},
PotentialReroll = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
PotentialRerollCoin = {
sCtrlName = "Game.UI.TemplateEx.TemplateSimpleQuantitySelectorCtrl"
},
txtPotentialRerollCoin = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_PotentialCoinRerollNum"
},
PriorityConsumption = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
ShopSelect = {
sCtrlName = "Game.UI.Settings.OptionMultiSelect"
},
goShopDropdown = {
sCtrlName = "Game.UI.TemplateEx.TemplateDropdownCtrl"
},
txtTitleShop = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_Shop"
},
txtShopUpgrade = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_ShopUpgradePrice"
},
ShopCoin = {
sCtrlName = "Game.UI.TemplateEx.TemplateSimpleQuantitySelectorCtrl"
},
txtShopCoinReroll = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_PotentialCoinRerollNum"
},
ShopRefresh = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
LastStageRefresh = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
LastStageAllin = {
sCtrlName = "Game.UI.Settings.OptionSwitchCtrl"
},
txtTitleEvent = {
sComponentName = "TMP_Text",
sLanguageId = "AutoDecision_Event"
},
TendencySelect = {
sCtrlName = "Game.UI.Settings.OptionChooseCtrl"
},
EventSelect = {
sCtrlName = "Game.UI.Settings.OptionMultiSelect"
},
txtTokenBar = {sComponentName = "TMP_Text"},
rtTokenBarFill = {
sComponentName = "RectTransform"
},
btnAddToken = {
sComponentName = "UIButton",
callback = "OnBtnClick_AddToken"
}
}
StarTowerAutoDecisionSettingCtrl._mapEventConfig = {
CloseAutoDecisionSetting = "OnEvent_CloseAutoDecisionSetting",
SelectTemplateDD = "OnEvent_ShopDropdown",
RefreshTokenItemList = "RefreshTokenValue"
}
local _GetOptionTextList = function(mapConfig)
local tbOptionTextList = {}
if mapConfig ~= nil then
local sKey = "OptionText"
for i = 1, 10 do
local sThisKey = sKey .. i
local sValue = mapConfig[sThisKey]
if sValue ~= nil and sValue ~= "" then
table.insert(tbOptionTextList, sValue)
else
break
end
end
end
return tbOptionTextList
end
local _IsArrayEqual = function(tbLeft, tbRight)
if type(tbLeft) ~= "table" or type(tbRight) ~= "table" then
return tbLeft == tbRight
end
if #tbLeft ~= #tbRight then
return false
end
for i = 1, #tbLeft do
if tbLeft[i] ~= tbRight[i] then
return false
end
end
return true
end
local _GetOptionListValue = function(mapOption)
if type(mapOption) ~= "table" or type(mapOption.List) ~= "table" then
return nil
end
return mapOption.List.Values or mapOption.List.List or mapOption.List.Value
end
local _IsServerOptionEqual = function(mapLeft, mapRight)
if type(mapLeft) ~= "table" or type(mapRight) ~= "table" then
return mapLeft == mapRight
end
if mapLeft.Id ~= mapRight.Id then
return false
end
if mapLeft.Boolean ~= mapRight.Boolean or mapLeft.Integer ~= mapRight.Integer then
return false
end
return _IsArrayEqual(_GetOptionListValue(mapLeft), _GetOptionListValue(mapRight))
end
local _IsServerProjectEqual = function(mapLeft, mapRight)
if type(mapLeft) ~= "table" or type(mapRight) ~= "table" then
return mapLeft == mapRight
end
if mapLeft.Id ~= mapRight.Id then
return false
end
if mapLeft.Name ~= mapRight.Name then
return false
end
local tbLeftOptions = mapLeft.Options or {}
local tbRightOptions = mapRight.Options or {}
if #tbLeftOptions ~= #tbRightOptions then
return false
end
for i = 1, #tbLeftOptions do
if not _IsServerOptionEqual(tbLeftOptions[i], tbRightOptions[i]) then
return false
end
end
return true
end
function StarTowerAutoDecisionSettingCtrl:CacheOriginalServerProject()
self.mapOriginalServerProjectByPlanId = {}
self.mapOriginalDirtyByPlanId = {}
for _, mapPlan in pairs(self.tbPresetList or {}) do
self.mapOriginalServerProjectByPlanId[mapPlan.nPlanId] = PlayerData.StarTowerAutoPlan:BuildServerProject(mapPlan.nPlanId)
self.mapOriginalDirtyByPlanId[mapPlan.nPlanId] = PlayerData.StarTowerAutoPlan:IsDirty(mapPlan.nPlanId)
end
end
function StarTowerAutoDecisionSettingCtrl:RefreshPresetList()
if self.nCurSelectIndex == nil or self.nCurSelectIndex <= 0 then
self.nCurSelectIndex = PlayerData.StarTowerAutoPlan:GetSelectedPlanId()
end
self.tbPresetList = PlayerData.StarTowerAutoPlan:GetPlanList(true)
self.tbGoGrid = {}
self._mapNode.presetListLSV:Init(#self.tbPresetList, self, self.OnGridRefresh, self.OnGridClick)
end
function StarTowerAutoDecisionSettingCtrl:OnGridRefresh(go, nGridIndex)
local nIndex = nGridIndex + 1
if self.tbGoGrid[nIndex] == nil then
self.tbGoGrid[nIndex] = go
end
local imgSelectBg = go.transform:Find("btnGrid/AnimRoot/phoneItem/imgSelectBg")
imgSelectBg.gameObject:SetActive(nIndex == self.nCurSelectIndex)
local imgChoose = go.transform:Find("btnGrid/AnimRoot/phoneItem/imgChoose")
imgChoose.gameObject:SetActive(nIndex == self.nCurSelectIndex)
local txtName = go.transform:Find("btnGrid/AnimRoot/phoneItem/goNormal/txtName"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtName, self.tbPresetList[nIndex].sName)
local txtName1 = go.transform:Find("btnGrid/AnimRoot/phoneItem/imgSelectBg/txtName1"):GetComponent("TMP_Text")
NovaAPI.SetTMPText(txtName1, self.tbPresetList[nIndex].sName)
end
function StarTowerAutoDecisionSettingCtrl:OnGridClick(go, nGridIndex)
local nIndex = nGridIndex + 1
self.nCurSelectIndex = nIndex
for k, v in pairs(self.tbGoGrid) do
local imgSelectBg = v.transform:Find("btnGrid/AnimRoot/phoneItem/imgSelectBg")
imgSelectBg.gameObject:SetActive(k == self.nCurSelectIndex)
local imgChoose = v.transform:Find("btnGrid/AnimRoot/phoneItem/imgChoose")
imgChoose.gameObject:SetActive(k == self.nCurSelectIndex)
end
self:RefreshPresetDetail()
local sCurPlanName = self.tbPresetList[nIndex].sName
local sTip = orderedFormat(ConfigTable.GetUIText("AutoDecision_SelectPlanTip"), sCurPlanName)
EventManager.Hit(EventId.OpenMessageBox, sTip)
EventManager.Hit(EventId.TemporaryBlockInput, 0.2)
end
function StarTowerAutoDecisionSettingCtrl:RefreshPresetBase()
self._mapNode.PresetFirst:SetText(ConfigTable.GetUIText("AutoDecision_PresetFirst"))
local func_Handler = ui_handler(self, self.OnBtnClick_PresetSwitch)
self._mapNode.PresetFirst:Init(func_Handler, true)
self._mapNode.PresetFirst:SetEnable(true)
self._mapNode.PresetOnly:SetText(ConfigTable.GetUIText("AutoDecision_PresetOnly"))
func_Handler = ui_handler(self, self.OnBtnClick_PresetOnlySwitch)
local sPresetOnlyLockTxt = orderedFormat(ConfigTable.GetUIText("AutoDecision_SettingLock"), ConfigTable.GetUIText("AutoDecision_PresetFirst"))
self._mapNode.PresetOnly:Init(func_Handler, true, sPresetOnlyLockTxt)
local mapConfigPotentialSort = ConfigTable.GetData("TowerVitaOption", AllEnum.StarTowerAutoDecisionSettings.PotentialSort)
local tbPotentialSortOption = _GetOptionTextList(mapConfigPotentialSort)
func_Handler = ui_handler(self, self.OnBtnClick_PotentialSort)
self._mapNode.PotentialSort:Init(tbPotentialSortOption, ConfigTable.GetUIText("AutoDecision_PotentialSort"), func_Handler)
self._mapNode.PotentialReroll:SetText(ConfigTable.GetUIText("AutoDecision_PotentialNoMatchReroll"))
func_Handler = ui_handler(self, self.OnBtnClick_PotentialRerollSwitch)
self._mapNode.PotentialReroll:Init(func_Handler, true)
func_Handler = ui_handler(self, self.OnBtnClick_PotentialRerollCoin)
local sGrayText = ConfigTable.GetUIText("AutoDecision_PotentialRefreshGray")
self._mapNode.PotentialRerollCoin:Init(1000, 100, func_Handler, sGrayText)
local mapConfigShopSort = ConfigTable.GetData("TowerVitaOption", AllEnum.StarTowerAutoDecisionSettings.ShopSort)
local tbShopSortOption = _GetOptionTextList(mapConfigShopSort)
func_Handler = ui_handler(self, self.OnBtnClick_ShopSort)
self._mapNode.ShopSelect:Init(tbShopSortOption, ConfigTable.GetUIText("AutoDecision_ShopSort"), func_Handler)
self._mapNode.ShopRefresh:SetText(ConfigTable.GetUIText("AutoDecision_ShopCoinReroll"))
func_Handler = ui_handler(self, self.OnBtnClick_ShopRefreshSwitch)
self._mapNode.ShopRefresh:Init(func_Handler, true)
func_Handler = ui_handler(self, self.OnBtnClick_ShopCoin)
local sShopGrayText = ConfigTable.GetUIText("AutoDecision_ShopRefreshGray")
self._mapNode.ShopCoin:Init(1000, 100, func_Handler, sShopGrayText)
self._mapNode.LastStageRefresh:SetText(ConfigTable.GetUIText("AutoDecision_ShopFinalReroll"))
func_Handler = ui_handler(self, self.OnBtnClick_ShopFinalRerollSwitch)
self._mapNode.LastStageRefresh:Init(func_Handler, true)
self._mapNode.LastStageAllin:SetText(ConfigTable.GetUIText("AutoDecision_ShopFinalAllIn"))
func_Handler = ui_handler(self, self.OnBtnClick_ShopFinalAllInSwitch)
self._mapNode.LastStageAllin:Init(func_Handler, true)
local mapConfigEventSort = ConfigTable.GetData("TowerVitaOption", AllEnum.StarTowerAutoDecisionSettings.EventSort)
local tbEventSortOption = _GetOptionTextList(mapConfigEventSort)
func_Handler = ui_handler(self, self.OnBtnClick_EventSort)
self._mapNode.EventSelect:Init(tbEventSortOption, ConfigTable.GetUIText("AutoDecision_EventSort"), func_Handler)
end
function StarTowerAutoDecisionSettingCtrl:RefreshPresetDetail()
self.mapCurPreset = self.tbPresetList[self.nCurSelectIndex]
NovaAPI.SetTMPText(self._mapNode.txtPresetName, self.mapCurPreset.sName)
self._mapNode.PresetFirst:SetOn(self.mapCurPreset.mapPotential.bPresetFirst)
if not self.mapCurPreset.mapPotential.bPresetFirst then
self.mapCurPreset.mapPotential.bPresetOnly = false
end
self._mapNode.PresetOnly:SetOn(self.mapCurPreset.mapPotential.bPresetOnly)
self._mapNode.PresetOnly:SetEnable(self.mapCurPreset.mapPotential.bPresetFirst)
self._mapNode.PotentialSort:SetSelect(self.mapCurPreset.mapPotential.tbPotentialSort)
self._mapNode.PotentialReroll:SetOn(self.mapCurPreset.mapPotential.bPotentialReroll)
self._mapNode.PotentialRerollCoin:SetGray(not self.mapCurPreset.mapPotential.bPotentialReroll)
self._mapNode.PotentialRerollCoin:SetValue(self.mapCurPreset.mapPotential.nPotentialRerollCoinNum)
local mapConfigShopChoose = ConfigTable.GetData("TowerVitaOption", AllEnum.StarTowerAutoDecisionSettings.ShopFirstChoose)
local tbShopChooseOption = _GetOptionTextList(mapConfigShopChoose)
self.nShopChooseOptionCount = #tbShopChooseOption
func_Handler = ui_handler(self, self.OnBtnClick_ShopChoose)
self._mapNode.PriorityConsumption:Init(func_Handler, self.mapCurPreset.mapShop.nShopFirst, self.nShopChooseOptionCount)
self._mapNode.PriorityConsumption:SetText(tbShopChooseOption[1], tbShopChooseOption[2], tbShopChooseOption[3], ConfigTable.GetUIText("AutoDecision_ShopFirst"))
local mapConfigShopDropdown = ConfigTable.GetData("TowerVitaOption", AllEnum.StarTowerAutoDecisionSettings.ShopUpgradeDropdown)
self.tbDropdownOption = _GetOptionTextList(mapConfigShopDropdown)
local nRecordValue = self.mapCurPreset.mapShop.nShopUpgradePrice
local nDropdownValue = 0
for nIndex, sValue in ipairs(self.tbDropdownOption) do
if tonumber(sValue) == nRecordValue then
nDropdownValue = nIndex - 1
break
end
end
self._mapNode.goShopDropdown:SetList(self.tbDropdownOption, nDropdownValue, true)
self._mapNode.ShopSelect:SetSelect(self.mapCurPreset.mapShop.tbShopSort)
self._mapNode.ShopRefresh:SetOn(self.mapCurPreset.mapShop.bShopCoinReroll)
self._mapNode.ShopCoin:SetGray(not self.mapCurPreset.mapShop.bShopCoinReroll)
self._mapNode.ShopCoin:SetValue(self.mapCurPreset.mapShop.nShopCoinNum)
self._mapNode.LastStageRefresh:SetOn(self.mapCurPreset.mapShop.bShopFinalReroll)
self._mapNode.LastStageAllin:SetOn(self.mapCurPreset.mapShop.bShopFinalAllIn)
local mapConfigTendency = ConfigTable.GetData("TowerVitaOption", AllEnum.StarTowerAutoDecisionSettings.EventTendency)
local tbTendencyOption = _GetOptionTextList(mapConfigTendency)
self.nTendencyCount = #tbTendencyOption
func_Handler = ui_handler(self, self.OnBtnClick_TendencySelect)
self._mapNode.TendencySelect:Init(func_Handler, self.mapCurPreset.mapEvent.nEventTendency, self.nTendencyCount)
self._mapNode.TendencySelect:SetText(tbTendencyOption[1], tbTendencyOption[2], tbTendencyOption[3], ConfigTable.GetUIText("AutoDecision_EventTendency"))
self._mapNode.EventSelect:SetSelect(self.mapCurPreset.mapEvent.tbEventSort)
end
local nMaxBarLength = 344
function StarTowerAutoDecisionSettingCtrl:RefreshTokenValue()
local nTokenCount = PlayerData.StarTowerAutoPlan:GetTokenCount()
local nMaxTokenCount = PlayerData.StarTowerAutoPlan:GetMaxTokenCount()
local nRatio = nTokenCount / nMaxTokenCount
if nRatio < 0.01 and 0 < nRatio then
nRatio = 0.01
end
NovaAPI.SetTMPText(self._mapNode.txtTokenBar, math.floor(nRatio * 100) .. "%")
local nBarLength = nMaxBarLength * nRatio
self._mapNode.rtTokenBarFill.sizeDelta = Vector2(nBarLength, self._mapNode.rtTokenBarFill.sizeDelta.y)
end
function StarTowerAutoDecisionSettingCtrl:SetTime()
local curTime = ClientManager.serverTimeStamp
NovaAPI.SetTMPText(self._mapNode.txtTime, (os.date("%H:%M", curTime)))
end
function StarTowerAutoDecisionSettingCtrl:ShowPhoneTime()
self:SetTime()
if nil == self.phoneTimer then
self.phoneTimer = self:AddTimer(0, 1, "SetTime", true, true, true)
end
end
function StarTowerAutoDecisionSettingCtrl:Awake()
self._mapNode.imgBlurredBg:SetActive(false)
self._mapNode.goContentAnim:SetActive(false)
end
function StarTowerAutoDecisionSettingCtrl:OnEnable()
self._bSettingActive = true
self.tbPresetList = nil
self.phoneTimer = nil
self.nCurSelectIndex = 0
if PanelManager.CheckPanelOpen(PanelId.StarTowerFastBattle) then
local canvas = self.gameObject:GetComponent("Canvas")
NovaAPI.SetCanvasSortingOrder(canvas, AllEnum.UI_SORTING_ORDER.StarTowerAutoDecisionSetting)
end
GamepadUIManager.EnableGamepadUI("StarTowerAutoDecisionSettingCtrl", {}, nil, true, false, self._panel._nIndex)
EventManager.Hit("StarTowerAutoDecisionSettingStateChanged", true)
local wait = function()
self._mapNode.imgBlurredBg:SetActive(true)
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if not self._bSettingActive then
return
end
self._mapNode.goContentAnim:SetActive(true)
self.nCurSelectIndex = 0
local init = function()
if not self._bSettingActive then
return
end
self:ShowPhoneTime()
self:RefreshTokenValue()
self:RefreshPresetList()
self:RefreshPresetBase()
self:RefreshPresetDetail()
self:CacheOriginalServerProject()
end
PlayerData.StarTowerAutoPlan:EnsureInited(init)
end
cs_coroutine.start(wait)
end
function StarTowerAutoDecisionSettingCtrl:OnDisable()
self._bSettingActive = false
if self.phoneTimer ~= nil then
self.phoneTimer:Cancel()
self.phoneTimer = nil
end
StarTowerSettingGate.ResumeAfterSetting()
GamepadUIManager.DisableGamepadUI("StarTowerAutoDecisionSettingCtrl")
if self.tbPresetList == nil or self.nCurSelectIndex == nil or self.nCurSelectIndex <= 0 then
EventManager.Hit("StarTowerAutoDecisionSettingStateChanged", false)
return
end
for k, v in pairs(self.tbPresetList) do
PlayerData.StarTowerAutoPlan:UpdatePlanFromDecisionPlan(v.nPlanId, v)
local mapOriginalProject = self.mapOriginalServerProjectByPlanId and self.mapOriginalServerProjectByPlanId[v.nPlanId] or nil
local mapCurProject = PlayerData.StarTowerAutoPlan:BuildServerProject(v.nPlanId)
local bOriginalDirty = self.mapOriginalDirtyByPlanId and self.mapOriginalDirtyByPlanId[v.nPlanId]
if bOriginalDirty ~= true and _IsServerProjectEqual(mapOriginalProject, mapCurProject) then
PlayerData.StarTowerAutoPlan:ClearDirty(v.nPlanId)
end
end
PlayerData.StarTowerAutoPlan:SyncDirtyPlans()
PlayerData.StarTowerAutoPlan:SendSetSelectedPlanId(self.nCurSelectIndex)
EventManager.Hit("StarTowerAutoDecisionSettingStateChanged", false)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_Reset()
local msg = {
nType = AllEnum.MessageBox.Confirm,
sTitle = ConfigTable.GetUIText("AutoDecision_ResetConfirmTitle"),
sContent = ConfigTable.GetUIText("AutoDecision_ResetConfirm"),
callbackConfirm = function()
self.tbPresetList[self.nCurSelectIndex] = PlayerData.StarTowerAutoPlan:GetDefaultPlan(self.tbPresetList[self.nCurSelectIndex].nPlanId)
self:RefreshPresetDetail()
self:RefreshPresetList()
end
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_Rename()
local cb = function(sNewName)
self:RefreshPresetList()
self:RefreshPresetDetail()
end
self._mapNode.goRename:Open(self.tbPresetList[self.nCurSelectIndex], cb)
end
function StarTowerAutoDecisionSettingCtrl:OnEvent_CloseAutoDecisionSetting()
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerAutoDecisionSettingPanel)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ClosePanel()
self._mapNode.animRoot:Play("PhonePanel_out")
local nAnimLength = NovaAPI.GetAnimClipLength(self._mapNode.animRoot, {
"PhonePanel_out"
})
self:AddTimer(1, nAnimLength, function()
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerAutoDecisionSettingPanel)
end)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_PresetSwitch(_, bOn)
self.mapCurPreset.mapPotential.bPresetFirst = bOn
if not bOn then
self.mapCurPreset.mapPotential.bPresetOnly = false
self._mapNode.PresetOnly:SetOn(false)
end
self._mapNode.PresetOnly:SetEnable(bOn)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_PresetOnlySwitch(_, bOn)
self.mapCurPreset.mapPotential.bPresetOnly = bOn
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_PotentialSort(_, tbCurSelect)
self.mapCurPreset.mapPotential.tbPotentialSort = tbCurSelect
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_PotentialRerollSwitch(_, bOn)
self.mapCurPreset.mapPotential.bPotentialReroll = bOn
self._mapNode.PotentialRerollCoin:SetGray(not bOn)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_PotentialRerollCoin(_, nAmount)
self.mapCurPreset.mapPotential.nPotentialRerollCoinNum = nAmount
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ShopChoose(_, nChosenIndex)
self.mapCurPreset.mapShop.nShopFirst = nChosenIndex
end
function StarTowerAutoDecisionSettingCtrl:OnEvent_ShopDropdown(nDropdownValue)
local nOptionIndex = nDropdownValue + 1
local nUpgradePrice = tonumber(self.tbDropdownOption[nOptionIndex])
if nUpgradePrice ~= nil then
self.mapCurPreset.mapShop.nShopUpgradePrice = nUpgradePrice
end
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ShopSort(_, tbCurSelect)
self.mapCurPreset.mapShop.tbShopSort = tbCurSelect
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ShopRefreshSwitch(_, bOn)
self.mapCurPreset.mapShop.bShopCoinReroll = bOn
self._mapNode.ShopCoin:SetGray(not bOn)
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ShopFinalAllInSwitch(_, bOn)
self.mapCurPreset.mapShop.bShopFinalAllIn = bOn
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ShopCoin(_, nAmount)
self.mapCurPreset.mapShop.nShopCoinNum = nAmount
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_ShopFinalRerollSwitch(_, bOn)
self.mapCurPreset.mapShop.bShopFinalReroll = bOn
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_TendencySelect(_, nChosenIndex)
self.mapCurPreset.mapEvent.nEventTendency = nChosenIndex
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_EventSort(_, tbCurSelect)
self.mapCurPreset.mapEvent.tbEventSort = tbCurSelect
end
function StarTowerAutoDecisionSettingCtrl:OnBtnClick_AddToken()
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerTokenBuyPanel)
end
return StarTowerAutoDecisionSettingCtrl
@@ -0,0 +1,17 @@
local StarTowerAutoDecisionSettingPanel = class("StarTowerAutoDecisionSettingPanel", BasePanel)
StarTowerAutoDecisionSettingPanel._bIsMainPanel = false
StarTowerAutoDecisionSettingPanel._tbDefine = {
{
sPrefabPath = "StarTowerFastBattle/StarTowerAutoBattlePanel.prefab",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerAutoDecisionSettingCtrl"
}
}
function StarTowerAutoDecisionSettingPanel:Awake()
end
function StarTowerAutoDecisionSettingPanel:OnEnable()
end
function StarTowerAutoDecisionSettingPanel:OnDisable()
end
function StarTowerAutoDecisionSettingPanel:OnDestroy()
end
return StarTowerAutoDecisionSettingPanel
@@ -1,4 +1,5 @@
local StarTowerFastBattleCtrl = class("StarTowerFastBattleCtrl", BaseCtrl)
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
local LocalSettingData = require("GameCore.Data.LocalSettingData")
local Actor2DManager = require("Game.Actor2D.Actor2DManager")
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
@@ -124,7 +125,12 @@ StarTowerFastBattleCtrl._mapEventConfig = {
RefreshNoteCount = "OnEvent_RefreshNoteCount",
TryCloseStarTowerLastShop = "OnEvent_TryCloseStarTowerLastShop",
ShowNPCAffinity = "OnEvent_AffinityTips",
LeaveStarTowerFastBattle = "OnEvent_Leave"
LeaveStarTowerFastBattle = "OnEvent_Leave",
StarTowerFastBattleLeaveForRecharge = "OnEvent_LeaveForRecharge",
StarTowerAutoDecisionStateChanged = "OnEvent_AutoDecisionStateChanged",
StarTowerAutoDecisionRequestManual = "OnEvent_AutoDecisionRequestManual",
StarTowerAutoDecisionRequestFailed = "OnEvent_AutoDecisionRequestFailed",
StarTowerFastBattleOptionReady = "OnEvent_StarTowerFastBattleOptionReady"
}
StarTowerFastBattleCtrl._mapRedDotConfig = {}
local theme_sprite_path = "UI/big_sprites/"
@@ -140,7 +146,7 @@ local room_bg = {
function StarTowerFastBattleCtrl:Awake()
self.bHandleOver = false
self.bOpenOption = false
self.bAuto = true
self.bAutoAdvance = true
self.bPause = false
self.nNextCaseId = -1
self.nNextRoomType = -1
@@ -164,6 +170,11 @@ end
function StarTowerFastBattleCtrl:FadeOut()
end
function StarTowerFastBattleCtrl:OnEnable()
StarTowerSettingGate.Begin()
StarTowerSettingGate.Transition(self, 1.3)
self.bAutoAdvance = true
self.bPause = false
self:RefreshPauseStatus()
self:InitGroupTheme()
self:RefreshRoomFloor()
self:RefreshRoomBg()
@@ -179,12 +190,24 @@ function StarTowerFastBattleCtrl:OnEnable()
GamepadUIManager.EnableGamepadUI("StarTowerFastBattleCtrl", {}, nil, true)
end
function StarTowerFastBattleCtrl:OnDisable()
StarTowerSettingGate.Clear(self)
self._panel.LevelData:SetAutoDecisionEnabled(false)
self.nNextCaseId = -1
self.nNextRoomType = -1
self.tbHistoryLog = nil
GamepadUIManager.DisableGamepadUI("StarTowerFastBattleCtrl")
end
function StarTowerFastBattleCtrl:OnDestroy()
local func_OpenRecharge = self._func_OpenRechargeAfterLeave
self._func_OpenRechargeAfterLeave = nil
if type(func_OpenRecharge) == "function" then
cs_coroutine.start(function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
if PanelManager.GetCurPanelId() == PanelId.MainView and not PanelManager.CheckPanelOpen(PanelId.StarTowerFastBattle) and not PanelManager.CheckNextPanelOpening() then
func_OpenRecharge()
end
end)
end
end
function StarTowerFastBattleCtrl:OnRelease()
end
@@ -209,6 +232,10 @@ function StarTowerFastBattleCtrl:Init()
self:RefreshPauseStatus()
end
function StarTowerFastBattleCtrl:StartFastBattle()
StarTowerSettingGate.Begin()
StarTowerSettingGate.Transition(self, NovaAPI.GetAnimClipLength(self.Animator, {
"StarTowerFastBattlePanel_open"
}))
EventManager.Hit("InitStarTowerNote", self._panel.LevelData._mapNote)
self.Animator:Play("StarTowerFastBattlePanel_open")
CS.WwiseAudioManager.Instance:PlaySound("ui_startower_fastBattle_elevator_door")
@@ -217,8 +244,9 @@ function StarTowerFastBattleCtrl:StartFastBattle()
end, true, true, true)
end
function StarTowerFastBattleCtrl:EnterRoom()
self.bHandleOver = false
self._panel.LevelData:EnterRoom(self.nNextCaseId, self.nNextRoomType)
if self._panel.LevelData:EnterRoom(self.nNextCaseId, self.nNextRoomType) then
self.bHandleOver = false
end
end
function StarTowerFastBattleCtrl:InitGroupTheme()
local mapStarTowerCfg = ConfigTable.GetData("StarTower", self._panel.nStarTowerId)
@@ -313,6 +341,7 @@ function StarTowerFastBattleCtrl:RefreshBuildScore()
local nLastScore = tonumber(NovaAPI.GetTMPText(self._mapNode.textBulidScoreNum))
local nAfterScore = self._panel.LevelData:CalBuildScore()
if nAfterScore ~= nLastScore then
StarTowerSettingGate.Transition(self, 1)
local twCoin = DOTween.To(function()
return nLastScore
end, function(score)
@@ -404,20 +433,29 @@ function StarTowerFastBattleCtrl:GetTeamNeedExpByLevel(nGroupId, nLevel)
return nNeedExp, bMaxLevel
end
function StarTowerFastBattleCtrl:LeaveStarTower(callback)
if self._panel.LevelData.bEnd then
return
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = ConfigTable.GetUIText("StarTower_Sweep_BackTips_Content"),
sConfirm = ConfigTable.GetUIText("StarTower_Sweep_Leave_Btn"),
sCancel = ConfigTable.GetUIText("StarTower_Sweep_GiveUp_Btn"),
callbackConfirm = function()
if self._panel.LevelData.bEnd then
return
end
self._panel.LevelData:StarTowerLeave()
if callback ~= nil then
callback()
end
self._panel.LevelData:StarTowerLeave()
PanelManager.Home()
end,
callbackCancel = function()
local giveUpCallBack = function()
if not self._panel.LevelData:EndExploration() then
return
end
local mapStarTowerState = PlayerData.State:GetStarTowerState()
PlayerData.StarTower:GiveUpReconnect(mapStarTowerState.Id, mapStarTowerState.CharIds, false, function()
local wait = function()
@@ -445,22 +483,59 @@ function StarTowerFastBattleCtrl:LeaveStarTower(callback)
end
function StarTowerFastBattleCtrl:OnHandleCasesOver()
local CurHandleCasesOver = function()
self.bOpenOption = false
self.Animator:Play("StarTowerFastBattlePanel_idle")
if self.bAuto and not self.bPause then
self:EnterRoom()
end
self:ContinueAfterShop()
end
local bShop, bMachine, nMachineCount, nDiscount, bFirstFree = self._panel.LevelData:GetShopAndMachine()
if bShop or bMachine then
self.bOpenOption = true
local bLastShopRoom = self._panel.LevelData:CheckLastShopRoom()
local nItemCount = self._panel.LevelData._mapItem[AllEnum.CoinItemId.FixedRogCurrency] or 0
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerFastBattleOption, bShop, bMachine, nMachineCount, nItemCount, CurHandleCasesOver, nDiscount, bFirstFree, bLastShopRoom)
self:OpenShopOption(CurHandleCasesOver, bShop, bMachine, nMachineCount, nDiscount, bFirstFree)
else
CurHandleCasesOver()
end
end
function StarTowerFastBattleCtrl:ContinueAfterShop()
if self._panel.LevelData.bEnd then
return
end
self.bOpenOption = false
self.Animator:Play("StarTowerFastBattlePanel_idle")
if self.bAutoAdvance and not self.bPause then
self:EnterRoom()
else
StarTowerSettingGate.Ready(self, StarTowerSettingGate.Begin())
end
end
function StarTowerFastBattleCtrl:OpenShopOption(closeCallback, bShop, bMachine, nMachineCount, nDiscount, bFirstFree)
StarTowerSettingGate.Begin()
self.bOpenOption = true
if bShop == nil then
bShop, bMachine, nMachineCount, nDiscount, bFirstFree = self._panel.LevelData:GetShopAndMachine()
end
if bShop or bMachine then
local bLastShopRoom = self._panel.LevelData:CheckLastShopRoom()
local nItemCount = self._panel.LevelData._mapItem[AllEnum.CoinItemId.FixedRogCurrency] or 0
local bAutoDisplay = self._panel.LevelData:IsAutoDecisionEnabled()
EventManager.Hit(EventId.OpenPanel, PanelId.StarTowerFastBattleOption, bShop, bMachine, nMachineCount, nItemCount, closeCallback, nDiscount, bFirstFree, bLastShopRoom, bAutoDisplay)
end
end
function StarTowerFastBattleCtrl:TryResumeAutoShopOption()
if not self.bOpenOption or not self._panel.LevelData:IsAutoDecisionEnabled() then
return false
end
if self._panel.LevelData:IsAutoDecisionBusy() then
return true
end
return self._panel.LevelData:TryAutoShopEntry(function()
local bPanelOpen, bPanelActive = PanelManager.CheckPanelOpen(PanelId.StarTowerFastBattleOption)
if bPanelOpen and bPanelActive then
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerFastBattleOption)
else
self:ContinueAfterShop()
end
end)
end
function StarTowerFastBattleCtrl:OnEvent_StarTowerFastBattleOptionReady()
self:TryResumeAutoShopOption()
end
function StarTowerFastBattleCtrl:OnBackButtonClick()
if not self.bHandleOver then
return
@@ -495,17 +570,32 @@ function StarTowerFastBattleCtrl:OnNoteDetailsButtonClick()
EventManager.Hit("OpenStarTowerDepot", LevelData._mapPotential, LevelData._mapNote, LevelData._mapFateCard, LevelData._mapItem, LevelData.tbActiveSecondaryIds, AllEnum.StarTowerDepotTog.DiscSkill)
end
function StarTowerFastBattleCtrl:OnFastBattleButtonClick()
if self.bPause and PanelManager.CheckPanelOpen(PanelId.StarTowerAutoDecisionSettingPanel) then
return
end
self.bPause = not self.bPause
self._panel.LevelData:SetAutoDecisionPaused(self.bPause)
self:RefreshPauseStatus(true)
if self.bPause and self.bHandleOver and not self.bOpenOption then
StarTowerSettingGate.Ready(self, StarTowerSettingGate.Begin())
end
if not self.bHandleOver or self.bPause then
return
end
if self.bOpenOption then
self:TryResumeAutoShopOption()
return
end
if self.nNextCaseId < 0 or 0 > self.nNextRoomType then
return
end
self:EnterRoom()
end
function StarTowerFastBattleCtrl:OnEvent_InitRoom()
StarTowerSettingGate.Begin()
StarTowerSettingGate.Transition(self, 0.1 + math.max(1, NovaAPI.GetAnimClipLength(self.Animator, {
"StarTowerFastBattlePanel_up"
})))
self.Animator:Play("StarTowerFastBattlePanel_close")
self:AddTimer(1, 0.1, function()
CS.WwiseAudioManager.Instance:PlaySound("ui_startower_fastBattle_elevator")
@@ -525,20 +615,22 @@ function StarTowerFastBattleCtrl:OnEvent_InitRoom()
end, true, true, true)
end
function StarTowerFastBattleCtrl:OnEvent_EventHandleOver()
if self.bOpenOption then
return
end
self.bHandleOver = true
self.nNextCaseId, self.nNextRoomType = self._panel.LevelData:GetDoorCase()
if self.bOpenOption then
self:TryResumeAutoShopOption()
return
end
self:OnHandleCasesOver()
end
function StarTowerFastBattleCtrl:OnEvent_EnterDangerRoom(nCaseId, nRoomType)
if self.bOpenOption then
return
end
self.bHandleOver = true
self.nNextCaseId = nCaseId
self.nNextRoomType = nRoomType
if self.bOpenOption then
self:TryResumeAutoShopOption()
return
end
self:OnHandleCasesOver()
end
function StarTowerFastBattleCtrl:OnEvent_RefreshFastBattleInfo(tbChangeFateCard, mapChangeNote, mapItemChange, nLevelChange, nExpChange, mapPotentialChange)
@@ -595,20 +687,20 @@ function StarTowerFastBattleCtrl:OnEvent_RefreshFastBattleInfo(tbChangeFateCard,
self.tbTips = {}
end
end
function StarTowerFastBattleCtrl:OnEvent_StarTowerFastBattleOpenShop()
function StarTowerFastBattleCtrl:OnEvent_StarTowerFastBattleOpenShop(bAuto)
if not self.bOpenOption then
return
end
local bSuccess = self._panel.LevelData:OpenShop()
local bSuccess = self._panel.LevelData:OpenShop(bAuto)
if not bSuccess then
printError("打开商店界面失败")
end
end
function StarTowerFastBattleCtrl:OnEvent_StarTowerFastBattleOpenMachine()
function StarTowerFastBattleCtrl:OnEvent_StarTowerFastBattleOpenMachine(bAuto)
if not self.bOpenOption then
return
end
local bSuccess = self._panel.LevelData:OpenStrengthMachine()
local bSuccess = self._panel.LevelData:OpenStrengthMachine(bAuto)
if not bSuccess then
printError("打开强化界面失败")
end
@@ -659,4 +751,56 @@ end
function StarTowerFastBattleCtrl:OnEvent_Leave(callback)
self:LeaveStarTower(callback)
end
function StarTowerFastBattleCtrl:OnEvent_LeaveForRecharge(callback)
self._panel.LevelData:StarTowerLeave()
self._func_OpenRechargeAfterLeave = callback
PanelManager.Home()
end
function StarTowerFastBattleCtrl:OnEvent_AutoDecisionStateChanged(mapState)
if self._panel.LevelData.bEnd then
return
end
if type(mapState) ~= "table" or mapState.bEnabled ~= true or mapState.bPaused == true then
return
end
if self.bAutoAdvance and not self.bPause then
return
end
self.bAutoAdvance = true
self.bPause = false
self:RefreshPauseStatus()
end
function StarTowerFastBattleCtrl:OnEvent_AutoDecisionRequestFailed(objLevelData)
if self._panel.LevelData ~= objLevelData or objLevelData.bEnd then
return
end
self.bPause = true
self:RefreshPauseStatus()
if not objLevelData:HasPendingCases() then
local bShop, bMachine = objLevelData:GetShopAndMachine()
if bShop or bMachine then
self:OnEvent_AutoDecisionRequestManual()
end
end
end
function StarTowerFastBattleCtrl:OnEvent_AutoDecisionRequestManual()
local bNpcOptionOpen = PanelManager.CheckPanelOpen(PanelId.NpcOptionPanel)
if bNpcOptionOpen then
return
end
if self._panel.LevelData:HasPendingCases() then
self._panel.LevelData:HandleCases()
return
end
local bShop, bMachine = self._panel.LevelData:GetShopAndMachine()
if bShop or bMachine then
if not self.bOpenOption then
self:OpenShopOption(function()
self:ContinueAfterShop()
end)
end
return
end
self._panel.LevelData:HandleCases()
end
return StarTowerFastBattleCtrl
@@ -33,6 +33,9 @@ function StarTowerFastBattleLogCtrl:Awake()
self._mapNode.goWindow:SetActive(false)
end
function StarTowerFastBattleLogCtrl:OnEnable()
local canvas = self.gameObject:GetComponent("Canvas")
NovaAPI.SetCanvasOverrideSorting(canvas, true)
NovaAPI.SetCanvasSortingOrder(canvas, AllEnum.UI_SORTING_ORDER.StarTowerAutoDecisionHUD + 1)
self._mapNode.goBlur:SetActive(true)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
@@ -1,5 +1,6 @@
local StarTowerFastBattleLogPanel = class("StarTowerFastBattleLogPanel", BasePanel)
StarTowerFastBattleLogPanel._bIsMainPanel = false
StarTowerFastBattleLogPanel._sSortingLayerName = AllEnum.SortingLayerName.UI_Top
StarTowerFastBattleLogPanel._tbDefine = {
{
sPrefabPath = "StarTowerFastBattle/StarTowerFastBattleLogPanel.prefab",
@@ -1,5 +1,6 @@
local StarTowerFastBattleOptionCtrl = class("StarTowerFastBattleOptionCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
StarTowerFastBattleOptionCtrl._mapNodeConfig = {
goBlur = {
sNodeName = "t_fullscreen_blur_blue"
@@ -36,7 +37,11 @@ StarTowerFastBattleOptionCtrl._mapEventConfig = {
RefreshStrengthMachineCost = "OnEvent_RefreshStrengthMachineCost",
RefreshStarTowerCoin = "OnEvent_RefreshStarTowerCoin",
GamepadUIChange = "OnEvent_GamepadUIChange",
GamepadUIReopen = "OnEvent_Reopen"
GamepadUIReopen = "OnEvent_Reopen",
StarTowerAutoPreviewShopOption = "OnEvent_AutoPreviewShopOption",
StarTowerAutoExecuteShopOption = "OnEvent_AutoExecuteShopOption",
StarTowerAutoDecisionStateChanged = "OnEvent_AutoDecisionStateChanged",
StarTowerSweepEnd = "OnEvent_StarTowerSweepEnd"
}
function StarTowerFastBattleOptionCtrl:Awake()
self._mapNode.goBlur:SetActive(false)
@@ -54,19 +59,25 @@ function StarTowerFastBattleOptionCtrl:Awake()
self.tbStrengthMachineCost = ConfigTable.GetConfigNumberArray("StrengthenMachineGoldConsume")
end
function StarTowerFastBattleOptionCtrl:OnEnable()
local nSettingSerial = StarTowerSettingGate.Begin()
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.bAutoSelecting = false
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)
if self._panel.bAutoDisplay then
EventManager.Hit("StarTowerFastBattleOptionReady")
end
EventManager.Hit(EventId.TemporaryBlockInput, 1)
StarTowerSettingGate.ReadyAfter(self, nSettingSerial, 1)
end
cs_coroutine.start(wait)
GamepadUIManager.EnableGamepadUI("StarTowerFastBattleOptionCtrl", self:GetGamepadUINode())
@@ -74,17 +85,22 @@ function StarTowerFastBattleOptionCtrl:OnEnable()
NovaAPI.SetTMPText(self._mapNode.textCoinCount, self:ThousandsNumber(self._panel.nCoinCount))
end
function StarTowerFastBattleOptionCtrl:OnDisable()
StarTowerSettingGate.Clear(self)
GamepadUIManager.DisableGamepadUI("StarTowerFastBattleOptionCtrl")
if self.closeCallBack ~= nil and type(self.closeCallBack) == "function" then
self.closeCallBack()
end
local closeCallback = self.closeCallBack
self.closeCallBack = nil
if type(closeCallback) == "function" then
closeCallback()
end
for k, v in ipairs(self._mapNode.btnChoose) do
v.onSelect:RemoveListener(self.handler[k])
end
end
function StarTowerFastBattleOptionCtrl:OnDestroy()
end
function StarTowerFastBattleOptionCtrl:OnEvent_StarTowerSweepEnd()
self.closeCallBack = nil
end
function StarTowerFastBattleOptionCtrl:Refresh()
self._mapNode.rtChoose[1]:SetActive(self._panel.bShop)
NovaAPI.SetTMPText(self._mapNode.TMPChoose[1], ConfigTable.GetUIText("StarTower_Sweep_Option_1"))
@@ -137,18 +153,56 @@ function StarTowerFastBattleOptionCtrl:RefreshMachineCost()
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)
function StarTowerFastBattleOptionCtrl:OnBtnClick_Select(btn, bAuto)
if self.bAutoSelecting and bAuto ~= true then
return
end
local nIdx = table.indexof(self._mapNode.btnChoose, btn)
if nIdx == 1 or nIdx == 2 or nIdx == 3 then
StarTowerSettingGate.Begin()
end
if nIdx == 1 then
EventManager.Hit("StarTowerFastBattleOpenShop")
EventManager.Hit("StarTowerFastBattleOpenShop", bAuto == true)
elseif nIdx == 2 then
EventManager.Hit("StarTowerFastBattleOpenMachine")
EventManager.Hit("StarTowerFastBattleOpenMachine", bAuto == true)
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_AutoPreviewShopOption(nIndex)
if not self:IsOptionAvailable(nIndex) then
return
end
self.bAutoSelecting = true
for k, selectNode in ipairs(self._mapNode.Select) do
selectNode:SetActive(k == nIndex)
end
self.nSelectIdx = nIndex
GamepadUIManager.SetSelectedUI(self._mapNode.btnChoose[nIndex].gameObject)
end
function StarTowerFastBattleOptionCtrl:OnEvent_AutoExecuteShopOption(nIndex)
if not self:IsOptionAvailable(nIndex) then
return
end
self.bAutoSelecting = false
self:OnBtnClick_Select(self._mapNode.btnChoose[nIndex], true)
end
function StarTowerFastBattleOptionCtrl:OnEvent_AutoDecisionStateChanged(mapState)
if type(mapState) == "table" and mapState.bPending ~= true then
self.bAutoSelecting = false
end
end
function StarTowerFastBattleOptionCtrl:IsOptionAvailable(nIndex)
if nIndex == 1 then
return self._panel.bShop == true
end
if nIndex == 2 then
return self._panel.bMachine == true
end
return false
end
function StarTowerFastBattleOptionCtrl:OnEvent_RefreshStrengthMachineCost(nMachineCount, bFirstFree)
self._panel.nMachineCount = nMachineCount
self._panel.bFirstFree = bFirstFree
@@ -183,6 +237,7 @@ function StarTowerFastBattleOptionCtrl:OnBtnClick_Back()
end)
end
function StarTowerFastBattleOptionCtrl:OnBtnClick_Depot()
StarTowerSettingGate.Begin()
EventManager.Hit("StarTowerSetButtonEnable", false, false)
self._mapNode.trRoot.gameObject:SetActive(false)
self._mapNode.goBlur.gameObject:SetActive(false)
@@ -210,11 +265,13 @@ function StarTowerFastBattleOptionCtrl:OnEvent_Reopen(sName)
if sName ~= "StarTowerFastBattleOptionCtrl" then
return
end
local nSettingSerial = StarTowerSettingGate.Begin()
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()
StarTowerSettingGate.ReadyAfter(self, nSettingSerial, 1)
end
function StarTowerFastBattleOptionCtrl:SelectChoose()
local nUIType = GamepadUIManager.GetCurUIType()
@@ -17,6 +17,7 @@ function StarTowerFastBattleOptionPanel:Awake()
self.nDiscount = tbParams[6]
self.bFirstFree = tbParams[7]
self.bLastFloor = tbParams[8]
self.bAutoDisplay = tbParams[9] == true
end
end
function StarTowerFastBattleOptionPanel:OnEnable()
@@ -1,5 +1,6 @@
local StarTowerFastBattlePanel = class("StarTowerFastBattlePanel", BasePanel)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
local StarTowerSettingGate = require("Game.Adventure.StarTower.StarTowerSettingGate")
StarTowerFastBattlePanel._tbDefine = {
{
sPrefabPath = "StarTowerFastBattle/StarTowerFastBattlePanel.prefab",
@@ -28,6 +29,10 @@ StarTowerFastBattlePanel._tbDefine = {
{
sPrefabPath = "StarTower/StarTowerDepotPanel.prefab",
sCtrlName = "Game.UI.StarTower.Depot.StarTowerDepotCtrl"
},
{
sPrefabPath = "StarTowerFastBattle/StarTowerAutoBattlePopup.prefab",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerAutoDecisionHUDCtrl"
}
}
function StarTowerFastBattlePanel:Awake()
@@ -37,6 +42,7 @@ function StarTowerFastBattlePanel:Awake()
local tbStarTowerInfo = tbParams[1]
local luaClass = require("Game.Adventure.StarTower.StarTowerSweepData")
self.LevelData = luaClass.new(tbStarTowerInfo.Meta.Id)
StarTowerSettingGate.Start(self.LevelData)
self.LevelData:Init(tbStarTowerInfo.Meta, tbStarTowerInfo.Room, tbStarTowerInfo.Bag)
EventManager.Hit("SetStarTowerSweepData", self.LevelData)
self.tbTeam = self.LevelData.tbTeam
@@ -78,18 +84,12 @@ function StarTowerFastBattlePanel:Awake()
GamepadUIManager.EnterAdventure(true)
end
function StarTowerFastBattlePanel:SetTop(goCanvas)
local nTopLayer = 0
if nil ~= self.trUIRoot then
local nChildCount = self.trUIRoot.childCount
local trChild
for i = 1, nChildCount do
trChild = self.trUIRoot:GetChild(i - 1)
nTopLayer = math.max(nTopLayer, NovaAPI.GetCanvasSortingOrder(trChild:GetComponent("Canvas")))
end
end
if 0 < nTopLayer then
NovaAPI.SetCanvasSortingOrder(goCanvas, nTopLayer + 1)
end
NovaAPI.SetCanvasSortingOrder(goCanvas, AllEnum.UI_SORTING_ORDER.StarTowerSweepPopup)
end
function StarTowerFastBattlePanel:OpenDepotDetailPanel(nPanelId, ...)
PanelManager.OpenPanelWithContext(nPanelId, {
nSortingOrderBase = AllEnum.UI_SORTING_ORDER.StarTowerSweepDetail
}, ...)
end
function StarTowerFastBattlePanel:CheckMainChar(nCharId)
if self.tbTeam ~= nil then
@@ -121,10 +121,13 @@ function StarTowerFastBattlePanel:OnEnable()
cs_coroutine.start(wait)
end
function StarTowerFastBattlePanel:OnDisable()
StarTowerSettingGate.Stop(self.LevelData)
PlayerData.State:SetStarTowerSweepState(false)
GamepadUIManager.QuitAdventure()
end
function StarTowerFastBattlePanel:OnDestroy()
StarTowerSettingGate.Stop(self.LevelData)
self.LevelData:EndExploration()
self.LevelData:UnBindEvent()
EventManager.Hit("SetStarTowerSweepData")
end
@@ -0,0 +1,190 @@
local StarTowerTokenBuyConfirmCtrl = class("StarTowerTokenBuyConfirmCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
StarTowerTokenBuyConfirmCtrl._mapNodeConfig = {
goWindow = {},
animWindow = {sNodeName = "goWindow", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "TokenBuy_Confirm_Title"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
imgCoin = {sComponentName = "Image"},
txtCoinCount = {sComponentName = "TMP_Text"},
imgToken = {sComponentName = "Image"},
txtTokenCount = {sComponentName = "TMP_Text"},
txtHave = {
sComponentName = "TMP_Text",
sLanguageId = "TokenBuy_Confirm_Text"
},
txtBeforeValue = {sComponentName = "TMP_Text"},
txtAfterValue = {sComponentName = "TMP_Text"},
goMaxValue = {},
txtMaxValue = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Count_Max"
},
rtGoValue = {
sNodeName = "goValue",
sComponentName = "RectTransform"
},
rtCountBg = {
sNodeName = "imgCountBg",
sComponentName = "RectTransform"
},
btnCancel = {
sComponentName = "UIButton",
callback = "OnBtnClick_Cancel"
},
btnConfirm1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtCancelBtn = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Cancel_Btn_Text"
},
txtConfirmBtn = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Confirm_Btn_Text"
},
goQuantitySelector = {
sNodeName = "tc_quantity_selector",
sCtrlName = "Game.UI.TemplateEx.TemplateQuantitySelectorCtrl"
}
}
StarTowerTokenBuyConfirmCtrl._mapEventConfig = {}
function StarTowerTokenBuyConfirmCtrl:Awake()
end
function StarTowerTokenBuyConfirmCtrl:OnEnable()
end
function StarTowerTokenBuyConfirmCtrl:ShowPanel()
self._mapNode.animWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self.nBuyCount = 1
self.nTokenEveryBuy = ConfigTable.GetConfigNumber("TowerVitaEnergyPurchasedValue")
local mapVitaTokenPrice = ConfigTable.GetConfigArray("TowerVitaEnergyPurchasedPrice")
self.nTokenPrice = tonumber(mapVitaTokenPrice[2])
self.nCoinId = tonumber(mapVitaTokenPrice[1])
self.nMaxToken = self._panel.nMaxToken or ConfigTable.GetConfigNumber("TowerVitaEnergyMax")
self:RefreshMaxBuy()
self:RefreshAddCount()
end
function StarTowerTokenBuyConfirmCtrl:OnDisable()
end
function StarTowerTokenBuyConfirmCtrl:OnDestroy()
end
function StarTowerTokenBuyConfirmCtrl:RefreshMaxBuy()
self.nCurTokenCount = PlayerData.StarTowerAutoPlan:GetTokenCount()
self.nMaxBuy = math.ceil((self.nMaxToken - self.nCurTokenCount) / self.nTokenEveryBuy)
local callback = function(nCount)
self.nBuyCount = nCount
self:RefreshAddCount()
end
self._mapNode.goQuantitySelector:Init(callback, 1, self.nMaxBuy)
end
function StarTowerTokenBuyConfirmCtrl:RefreshAddCount()
local sTokenName, sCoinName = "", ""
local mapTokenCfgData = ConfigTable.GetData_Item(AllEnum.CoinItemId.AutoDecisionToken)
if mapTokenCfgData ~= nil then
self:SetPngSprite(self._mapNode.imgToken, mapTokenCfgData.Icon)
sTokenName = mapTokenCfgData.Title
end
local nHas = PlayerData.StarTowerAutoPlan:GetTokenCount()
if self.nCoinId ~= 0 then
local mapCoinCfg = ConfigTable.GetData_Item(self.nCoinId)
if mapCoinCfg ~= nil then
self:SetPngSprite(self._mapNode.imgCoin, mapCoinCfg.Icon)
sCoinName = mapCoinCfg.Title
end
end
self.nCost = self.nBuyCount * self.nTokenPrice
local nRatio = nHas * 100 / self.nMaxToken
if nRatio < 1 and 0 < nRatio then
nRatio = 1
end
local nCurRatio = 0 < self.nMaxToken and math.floor(nRatio) or 0
NovaAPI.SetTMPText(self._mapNode.txtBeforeValue, nCurRatio .. "%")
local nAfterTemp = (nHas + self.nBuyCount * self.nTokenEveryBuy) * 100 / self.nMaxToken
if nAfterTemp < 1 and 0 < nAfterTemp then
nAfterTemp = 1
end
local nAfterRatio = 0 < self.nMaxToken and math.floor(nAfterTemp) or 0
NovaAPI.SetTMPText(self._mapNode.txtAfterValue, nAfterRatio .. "%")
self._mapNode.goMaxValue.gameObject:SetActive(nHas + self.nBuyCount * self.nTokenEveryBuy >= self.nMaxToken)
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, string.format("%sx%s", sCoinName, self.nCost))
local nCountTemp = self.nBuyCount * self.nTokenEveryBuy * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
NovaAPI.SetTMPText(self._mapNode.txtTokenCount, string.format("%sx%s", sTokenName, math.floor(nCountTemp) .. "%"))
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtGoValue)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCountBg)
end
function StarTowerTokenBuyConfirmCtrl:Close()
self._mapNode.animWindow:Play("t_window_04_t_out")
end
function StarTowerTokenBuyConfirmCtrl:OnBtnClick_Close()
EventManager.Hit("CloseTokenBuyPanel")
end
function StarTowerTokenBuyConfirmCtrl:OnBtnClick_Cancel()
EventManager.Hit("CloseTokenBuyPanel")
end
function StarTowerTokenBuyConfirmCtrl:OnBtnClick_Confirm()
local nHasCoin = PlayerData.Coin:GetCoinCount(self.nCoinId)
if nHasCoin < self.nCost then
local itemCfg = ConfigTable.GetData_Item(self.nCoinId)
local itemCostCfg = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
if not itemCfg or not itemCostCfg then
return
end
local sTip = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGemZero"), itemCfg.Id, self.nCost - nHasCoin, itemCostCfg.Id)
local confirmCallback = function()
local nStoneCount = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE)
nStoneCount = nStoneCount + PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.FREESTONE)
if nStoneCount < self.nCost - nHasCoin then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", itemCostCfg.Id),
callbackConfirm = function()
self._panel:JumpToRecharge()
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
else
PlayerData.Coin:SendGemConvertReqReq(self.nCost - nHasCoin, nil)
end
EventManager.Hit("ShowTokenTopRes", false)
end
local cancelCallback = function()
EventManager.Hit("ShowTokenTopRes", false)
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = sTip,
callbackConfirm = confirmCallback,
callbackCancel = cancelCallback,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
EventManager.Hit("ShowTokenTopRes", false)
return
end
local callback = function(bSuccess)
if bSuccess then
local nCountTemp = self.nBuyCount * self.nTokenEveryBuy * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
EventManager.Hit(EventId.OpenMessageBox, orderedFormat(ConfigTable.GetUIText("TokenBuy_Success"), nRatio))
EventManager.Hit("RefreshTokenItemList")
EventManager.Hit("CloseTokenBuyPanel")
end
end
PlayerData.StarTowerAutoPlan:SendTokenBuy(self.nBuyCount, callback)
end
return StarTowerTokenBuyConfirmCtrl
@@ -0,0 +1,178 @@
local StarTowerTokenBuyCtrl = class("StarTowerTokenBuyCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
StarTowerTokenBuyCtrl._mapNodeConfig = {
imgBlurredBg = {},
safeAreaRoot = {
sNodeName = "----SafeAreaRoot----"
},
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
MainRoot = {
sNodeName = "---Main---",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerTokenBuyMainCtrl"
},
ConfirmRoot = {
sNodeName = "---Confirm---",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerTokenBuyConfirmCtrl"
},
ItemUseRoot = {
sNodeName = "---ItemUse---",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerTokenBuyItemUseCtrl"
},
goToken = {},
animToken = {sNodeName = "goToken", sComponentName = "Animator"},
goResBarAnimRoot = {},
animResBar = {
sNodeName = "goResBarAnimRoot",
sComponentName = "Animator"
},
txtUpperTokenCount = {sComponentName = "TMP_Text"},
imgTokenFiller = {sComponentName = "Image"},
btnBg = {
sComponentName = "Button",
callback = "OnBtnClick_Close"
}
}
StarTowerTokenBuyCtrl._mapEventConfig = {
CloseTokenBuyPanel = "OnEvent_CloseTokenBuyPanel",
ChangeTokenBuyPanel = "OnEvent_ChangeTokenBuyPanel",
ShowTokenTopRes = "OnEvent_ShowTokenTopResBar",
[EventId.IsNewDay] = "OnEvent_NewDay",
RefreshTokenItemList = "RefreshTopFiller"
}
local nMaxFillerWidth = 290
function StarTowerTokenBuyCtrl:Awake()
self.tbWindowStack = {}
if self._panel.nPanelType ~= AllEnum.TokenBuyPanelType.Main then
self.nDirectPanelType = self._panel.nPanelType
end
self._panel.nMaxToken = ConfigTable.GetConfigNumber("TowerVitaEnergyMax")
end
function StarTowerTokenBuyCtrl:OnEnable()
if PanelManager.CheckPanelOpen(PanelId.StarTowerFastBattle) then
local canvas = self.gameObject:GetComponent("Canvas")
NovaAPI.SetCanvasSortingOrder(canvas, AllEnum.UI_SORTING_ORDER.StarTowerAutoDecisionTokenBuy)
end
GamepadUIManager.EnableGamepadUI("StarTowerTokenBuyCtrl", {}, nil, true, false, self._panel._nIndex)
self.animRoot = self.gameObject:GetComponent("Animator")
self._mapNode.safeAreaRoot.gameObject:SetActive(false)
self._mapNode.btnBg.gameObject:SetActive(false)
self._mapNode.imgBlurredBg.gameObject:SetActive(true)
self._mapNode.goResBarAnimRoot.gameObject:SetActive(false)
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self._mapNode.safeAreaRoot.gameObject:SetActive(true)
self._mapNode.btnBg.gameObject:SetActive(true)
table.insert(self.tbWindowStack, self._panel.nPanelType)
self:ChangePanelType()
end
cs_coroutine.start(wait)
self:RefreshTopFiller()
end
function StarTowerTokenBuyCtrl:RefreshTopFiller()
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
local nRatio = nCurToken / self._panel.nMaxToken
if nRatio < 0.01 and 0 < nRatio then
nRatio = 0.01
end
NovaAPI.SetImageFillAmount(self._mapNode.imgTokenFiller, nRatio)
local nPercent = math.floor(nCurToken * 100 / self._panel.nMaxToken)
if 0 < nCurToken then
nPercent = math.max(1, nPercent)
end
NovaAPI.SetTMPText(self._mapNode.txtUpperTokenCount, nPercent .. "%")
end
function StarTowerTokenBuyCtrl:ChangePanelType()
self._mapNode.MainRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.TokenBuyPanelType.Main)
self._mapNode.ConfirmRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.TokenBuyPanelType.BuyConfirm)
self._mapNode.ItemUseRoot.gameObject:SetActive(self._panel.nPanelType == AllEnum.TokenBuyPanelType.ItemUse)
if self.nDirectPanelType ~= nil then
local bShowToken = self.nDirectPanelType == AllEnum.TokenBuyPanelType.BuyConfirm
self._mapNode.goToken.gameObject:SetActive(not bShowToken)
self._mapNode.goResBarAnimRoot.gameObject:SetActive(bShowToken)
local sAnim = bShowToken and "tc_top_bar_02_t_in" or "tc_top_bar_01_t_in"
self._mapNode.animResBar:Play(sAnim)
self.nDirectPanelType = nil
else
local bShowRecover = self._panel.nPanelType ~= AllEnum.TokenBuyPanelType.BuyConfirm
local sRecoverAnim = bShowRecover and "EnergyBuy_Time_in" or "EnergyBuy_Time_out"
local sTokenAnim = bShowRecover and "tc_top_bar_02_t_in" or "tc_top_bar_02_t_out"
local sResBarAnim = not bShowRecover and "tc_top_bar_01_t_in" or "tc_top_bar_01_t_out"
self._mapNode.goResBarAnimRoot.gameObject:SetActive(not bShowRecover)
self._mapNode.goToken.gameObject:SetActive(bShowRecover)
self._mapNode.animToken:Play(sTokenAnim)
self.animRoot:Play(sRecoverAnim)
self._mapNode.animResBar:Play(sResBarAnim)
end
if self._panel.nPanelType == AllEnum.TokenBuyPanelType.Main then
self._mapNode.MainRoot:ShowPanel()
elseif self._panel.nPanelType == AllEnum.TokenBuyPanelType.BuyConfirm then
self._mapNode.ConfirmRoot:ShowPanel()
elseif self._panel.nPanelType == AllEnum.TokenBuyPanelType.ItemUse then
self._mapNode.ItemUseRoot:ShowPanel()
end
end
function StarTowerTokenBuyCtrl:ClosePanel(nPanelType)
self._mapNode.animToken:Play("tc_top_bar_02_t_out")
self._mapNode.animResBar:Play("tc_top_bar_01_t_out")
self.animRoot:Play("EnergyBuy_Time_out")
if nPanelType == AllEnum.TokenBuyPanelType.Main then
self._mapNode.MainRoot:Close()
elseif nPanelType == AllEnum.TokenBuyPanelType.BuyConfirm then
self._mapNode.ConfirmRoot:Close()
elseif nPanelType == AllEnum.TokenBuyPanelType.ItemUse then
self._mapNode.ItemUseRoot:Close()
end
end
function StarTowerTokenBuyCtrl:OnDisable()
GamepadUIManager.DisableGamepadUI("StarTowerTokenBuyCtrl")
end
function StarTowerTokenBuyCtrl:OnDestroy()
end
function StarTowerTokenBuyCtrl:OnEvent_ChangeTokenBuyPanel(nPanelType)
self:ClosePanel(self._panel.nPanelType)
self._panel.nPanelType = nPanelType
table.insert(self.tbWindowStack, self._panel.nPanelType)
self:AddTimer(1, 0.3, function()
self:ChangePanelType()
end, true, true, true)
end
function StarTowerTokenBuyCtrl:OnEvent_CloseTokenBuyPanel(bCloseAll)
local nPanelType = table.remove(self.tbWindowStack, #self.tbWindowStack)
if nPanelType ~= self._panel.nPanelType or bCloseAll then
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerTokenBuyPanel)
else
self:ClosePanel(self._panel.nPanelType)
self:AddTimer(1, 0.3, function()
if #self.tbWindowStack > 0 then
self._panel.nPanelType = self.tbWindowStack[#self.tbWindowStack]
self:ChangePanelType()
else
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerTokenBuyPanel)
end
end, true, true, true)
end
end
function StarTowerTokenBuyCtrl:OnBtnClick_Close()
self:OnEvent_CloseTokenBuyPanel(true)
end
function StarTowerTokenBuyCtrl:OnEvent_ShowTokenTopResBar(bShow)
self._mapNode.goResBarAnimRoot.gameObject:SetActive(bShow)
self:RefreshTopFiller()
end
function StarTowerTokenBuyCtrl:OnEvent_NewDay()
if PanelManager.GetCurPanelId() == PanelId.MainView then
EventManager.Hit("NewDay_Clear_Guide")
local msg = {
nType = AllEnum.MessageBox.Alert,
sContent = ConfigTable.GetUIText("Alert_NextDay"),
callbackConfirm = function()
PanelManager.Home()
end
}
EventManager.Hit(EventId.OpenMessageBox, msg)
end
end
return StarTowerTokenBuyCtrl
@@ -0,0 +1,86 @@
local StarTowerTokenBuyItemCtrl = class("StarTowerTokenBuyItemCtrl", BaseCtrl)
StarTowerTokenBuyItemCtrl._mapNodeConfig = {
btnUse = {
sComponentName = "UIButton",
callback = "OnBtnClick_Use"
},
txtBtnUse = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Item_Use"
},
btnUseGray = {
sComponentName = "UIButton",
callback = "OnBtnClick_Use"
},
txtBtnUseGray = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Buy_Item_Use"
},
txtPermanent = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Permanent_Time"
},
txtHaveCount = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Count_Text"
},
txtHaveCountValue = {sComponentName = "TMP_Text"},
ctrlItem = {
sNodeName = "goEnergyItem",
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
btnItem = {
sComponentName = "UIButton",
callback = "OnBtnClick_Item"
},
txtItemName = {sComponentName = "TMP_Text"},
txtTokenValue = {sComponentName = "TMP_Text"},
imgToken = {sComponentName = "Image"}
}
StarTowerTokenBuyItemCtrl._mapEventConfig = {}
function StarTowerTokenBuyItemCtrl:SetItem(mapItemData)
self.mapItemData = mapItemData
NovaAPI.SetTMPText(self._mapNode.txtHaveCountValue, mapItemData.nCount)
self._mapNode.btnUseGray.gameObject:SetActive(mapItemData.nCount == 0)
self._mapNode.btnUse.gameObject:SetActive(mapItemData.nCount > 0)
local itemId = mapItemData.nTid
local mapItemCfg = ConfigTable.GetData_Item(itemId)
self._mapNode.ctrlItem:SetItem(itemId, nil, nil, nil, nil, nil, nil, true, nil, true)
NovaAPI.SetTMPText(self._mapNode.txtItemName, mapItemCfg.Title)
local nCountTemp = mapItemData.nTokenValue * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtTokenValue, "+" .. nRatio .. "%")
end
function StarTowerTokenBuyItemCtrl:OnBtnClick_Use()
if self.mapItemData.nCount == 0 then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = ConfigTable.GetUIText("TokenBuy_NoItem"),
bBlur = false
})
return
end
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
if nCurToken >= self._panel.nMaxToken then
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = ConfigTable.GetUIText("TokenBuy_HitLimit"),
bBlur = false
})
return
end
self._panel.mapItemData = self.mapItemData
EventManager.Hit("ChangeTokenBuyPanel", AllEnum.TokenBuyPanelType.ItemUse)
end
function StarTowerTokenBuyItemCtrl:OnBtnClick_Item(btn)
local mapData = {
nTid = self.mapItemData.nTid,
bShowDepot = true,
bShowJumpto = false
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
return StarTowerTokenBuyItemCtrl
@@ -0,0 +1,207 @@
local StarTowerTokenBuyItemUseCtrl = class("StarTowerTokenBuyItemUseCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
StarTowerTokenBuyItemUseCtrl._mapNodeConfig = {
goWindow = {},
animWindow = {sNodeName = "goWindow", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Title"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
btnItem = {
sComponentName = "UIButton",
callback = "OnBtnClick_Item"
},
ctrlItem = {
sNodeName = "goItem",
sCtrlName = "Game.UI.TemplateEx.TemplateItemCtrl"
},
txtItemName = {sComponentName = "TMP_Text"},
txtItemDesc = {sComponentName = "TMP_Text"},
txtHaveCount = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Count_Text"
},
txtHaveCountValue = {sComponentName = "TMP_Text"},
txtAddValue = {sComponentName = "TMP_Text"},
txtPermanent = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Permanent_Time"
},
txtStock = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Count"
},
goQuantitySelector = {
sNodeName = "tc_quantity_selector",
sCtrlName = "Game.UI.TemplateEx.TemplateQuantitySelectorCtrl"
},
txtHave = {
sComponentName = "TMP_Text",
sLanguageId = "TokenBuy_Confirm_Text"
},
imgArrow = {},
txtBeforeValue = {sComponentName = "TMP_Text"},
txtAfterValue = {sComponentName = "TMP_Text"},
goMaxValue = {},
txtMaxValue = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Count_Max"
},
rtCountBg = {
sNodeName = "imgCountBg",
sComponentName = "RectTransform"
},
btnConfirm2 = {
sComponentName = "UIButton",
callback = "OnBtnClick_Confirm"
},
txtConfirmBtn = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Btn_Text"
}
}
StarTowerTokenBuyItemUseCtrl._mapEventConfig = {}
function StarTowerTokenBuyItemUseCtrl:Awake()
end
function StarTowerTokenBuyItemUseCtrl:OnEnable()
end
function StarTowerTokenBuyItemUseCtrl:ShowPanel()
self.mapItemData = self._panel.mapItemData
self.bBlur = self._panel.bBlur
self.nUseCount = 1
self.nMaxCount = 0
self.nMinCount = 0
self._mapNode.animWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:RefreshItem()
local callback = function(nCount)
self.nUseCount = nCount
self:RefreshAddCount()
end
self._mapNode.goQuantitySelector:Init(callback, self.nUseCount, self.nUseCountLimit)
self:RefreshAddCount()
end
function StarTowerTokenBuyItemUseCtrl:OnDisable()
end
function StarTowerTokenBuyItemUseCtrl:OnDestroy()
end
function StarTowerTokenBuyItemUseCtrl:RefreshItem()
local itemId = self.mapItemData.nTid
self._mapNode.ctrlItem:SetItem(itemId, nil, nil, nil, nil, nil, nil, true, nil, true)
local mapItemCfg = ConfigTable.GetData_Item(itemId)
if mapItemCfg then
NovaAPI.SetTMPText(self._mapNode.txtItemName, mapItemCfg.Title)
NovaAPI.SetTMPText(self._mapNode.txtItemDesc, mapItemCfg.Desc)
end
NovaAPI.SetTMPText(self._mapNode.txtHaveCountValue, self.mapItemData.nCount)
self.nMaxCount = self.mapItemData.nCount
local nCountTemp = self.mapItemData.nTokenValue * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtAddValue, string.format("+%s", nRatio .. "%"))
self.nUseCountLimit = 0
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
for i = 1, self.nMaxCount do
nCurToken = nCurToken + self.mapItemData.nTokenValue
self.nUseCountLimit = i
if nCurToken >= self._panel.nMaxToken then
break
end
end
end
function StarTowerTokenBuyItemUseCtrl:RefreshAddCount()
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
local nCountTemp = nCurToken * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtBeforeValue, nRatio .. "%")
local nAfterValue = nCurToken + self.mapItemData.nTokenValue * self.nUseCount
nCountTemp = nAfterValue * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
nRatio = math.floor(nCountTemp)
NovaAPI.SetTMPText(self._mapNode.txtAfterValue, nRatio .. "%")
self._mapNode.imgArrow.gameObject:SetActive(0 < self.nUseCount)
self._mapNode.txtAfterValue.gameObject:SetActive(0 < self.nUseCount)
self._mapNode.goMaxValue.gameObject:SetActive(nAfterValue >= self._panel.nMaxToken)
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtCountBg)
end
function StarTowerTokenBuyItemUseCtrl:Close()
self._mapNode.animWindow:Play("t_window_04_t_out")
EventManager.Hit("ConsumableUsed")
end
function StarTowerTokenBuyItemUseCtrl:OnBtnClick_Close()
EventManager.Hit("CloseTokenBuyPanel")
end
function StarTowerTokenBuyItemUseCtrl:OnBtnClick_Confirm()
if self.nUseCount <= 0 then
return
end
local itemList = {}
local nUseCount = 0
for id, count in pairs(self.mapItemData.mapId) do
if nUseCount < self.nUseCount then
local tbItem = {}
tbItem.Tid = self.mapItemData.nTid
tbItem.Id = id
if nUseCount + count > self.nUseCount then
tbItem.Qty = self.nUseCount - nUseCount
else
tbItem.Qty = count
end
table.insert(itemList, tbItem)
else
break
end
nUseCount = nUseCount + count
end
local nMaxCount = 0
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
for i = 1, self.nUseCount do
nMaxCount = i
nCurToken = nCurToken + self.mapItemData.nTokenValue
if nCurToken >= self._panel.nMaxToken then
break
end
end
if nMaxCount < self.nUseCount then
local sTip = ConfigTable.GetUIText("Energy_Use_Tip_2")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = sTip,
bBlur = false
})
return
end
if nil ~= next(itemList) then
local msgCallback = function()
local nCountTemp = self.mapItemData.nTokenValue * self.nUseCount * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRatio = math.floor(nCountTemp)
EventManager.Hit(EventId.OpenMessageBox, orderedFormat(ConfigTable.GetUIText("TokenBuy_Success"), nRatio))
EventManager.Hit("CloseTokenBuyPanel")
EventManager.Hit("RefreshTokenItemList")
end
PlayerData.Item:SendUseItemMsg(itemList, msgCallback)
end
end
function StarTowerTokenBuyItemUseCtrl:OnBtnClick_Item(btn)
local mapData = {
nTid = self.mapItemData.nTid,
bShowDepot = true,
bShowJumpto = false
}
EventManager.Hit(EventId.OpenPanel, PanelId.ItemTips, btn.transform, mapData)
end
return StarTowerTokenBuyItemUseCtrl
@@ -0,0 +1,236 @@
local StarTowerTokenBuyMainCtrl = class("StarTowerTokenBuyMainCtrl", BaseCtrl)
local LayoutRebuilder = CS.UnityEngine.UI.LayoutRebuilder
local tbResidentTokenItemId = {81011}
local GetTokenValue = function(nItemId)
local mapItemCfg = ConfigTable.GetData_Item(nItemId)
if mapItemCfg == nil then
return 0
end
local mapUseCfg = decodeJson(mapItemCfg.UseArgs) or {}
local nTokenValue = mapUseCfg[tostring(AllEnum.CoinItemId.AutoDecisionToken)] or mapUseCfg[AllEnum.CoinItemId.AutoDecisionToken]
return tonumber(nTokenValue) or 0
end
local GetItemInstances = function(mapItemData)
local mapId = {}
local nTotalCount = 0
for _, mapInstanceGroup in pairs(mapItemData.mapExpires or {}) do
for nInstanceId, nCount in pairs(mapInstanceGroup.mapId or {}) do
mapId[nInstanceId] = (mapId[nInstanceId] or 0) + nCount
nTotalCount = nTotalCount + nCount
end
end
return mapId, nTotalCount
end
StarTowerTokenBuyMainCtrl._mapNodeConfig = {
goWindow = {},
animWindow = {sNodeName = "goWindow", sComponentName = "Animator"},
txtWindowTitle = {
sComponentName = "TMP_Text",
sLanguageId = "TokenBuy_WindowTitle"
},
btnClose = {
sComponentName = "UIButton",
callback = "OnBtnClick_Close"
},
goBuyItem = {},
txtBuyName = {
sComponentName = "TMP_Text",
sLanguageId = "TokenBuy_Desc"
},
imgEnergyBg = {},
txtBuyCount = {sComponentName = "TMP_Text"},
btnBuy = {
sComponentName = "UIButton",
callback = "OnBtnClick_Buy"
},
btnBuyGray = {
sComponentName = "UIButton",
callback = "OnBtnClick_BuyGray"
},
txtBuyButton = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Btn_Text"
},
txtBuyButtonGray = {
sComponentName = "TMP_Text",
sLanguageId = "Energy_Item_Use_Btn_Text"
},
imgBuyCoin = {sComponentName = "Image"},
txtBuyCost = {sComponentName = "TMP_Text"},
goItemContent = {sComponentName = "Transform"},
rtItemContent = {
sNodeName = "goItemContent",
sComponentName = "RectTransform"
},
goItem = {},
goItemList = {
sComponentName = "RectTransform"
}
}
StarTowerTokenBuyMainCtrl._mapEventConfig = {
RefreshTokenItemList = "RefreshTokenItem"
}
function StarTowerTokenBuyMainCtrl:Awake()
end
function StarTowerTokenBuyMainCtrl:OnEnable()
self.tbItemCtrl = {}
end
function StarTowerTokenBuyMainCtrl:OnDisable()
for _, v in ipairs(self.tbItemCtrl) do
local obj = v.gameObject
self:UnbindCtrlByNode(v)
destroy(obj)
end
self.tbItemCtrl = {}
end
function StarTowerTokenBuyMainCtrl:OnDestroy()
end
function StarTowerTokenBuyMainCtrl:ShowPanel()
self._mapNode.goItem.gameObject:SetActive(false)
self._mapNode.animWindow:Play("t_window_04_t_in")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
self:RefreshTokenItem()
local mapVitaTokenPrice = ConfigTable.GetConfigArray("TowerVitaEnergyPurchasedPrice")
self.nTokenPrice = tonumber(mapVitaTokenPrice[2])
self.nCoinId = tonumber(mapVitaTokenPrice[1])
local nRecoverValue = ConfigTable.GetConfigNumber("TowerVitaEnergyPurchasedValue")
local nCountTemp = nRecoverValue * 100 / self._panel.nMaxToken
if nCountTemp < 1 and 0 < nCountTemp then
nCountTemp = 1
end
local nRecoverRatio = math.floor(nCountTemp)
self:SetSprite_Coin(self._mapNode.imgBuyCoin, self.nCoinId)
NovaAPI.SetTMPText(self._mapNode.txtBuyCost, self.nTokenPrice)
NovaAPI.SetTMPText(self._mapNode.txtBuyCount, "+" .. nRecoverRatio .. "%")
local hasCount = PlayerData.Coin:GetCoinCount(self.nCoinId)
NovaAPI.SetTMPColor(self._mapNode.txtBuyCost, hasCount < self.nTokenPrice and Red_Unable or Blue_Normal)
self._mapNode.btnBuy.gameObject:SetActive(true)
self._mapNode.btnBuyGray.gameObject:SetActive(false)
end
function StarTowerTokenBuyMainCtrl:RefreshTokenItem()
self.tbItems = {}
local tbItems = PlayerData.Item:GetItemsByStype(GameEnum.itemStype.TokenItem)
local mapResidentItem = {}
for _, nItemId in ipairs(tbResidentTokenItemId) do
mapResidentItem[nItemId] = false
end
for _, mapItemData in ipairs(tbItems) do
local nTokenValue = GetTokenValue(mapItemData.Tid)
if 0 < nTokenValue then
local mapId, nCount = GetItemInstances(mapItemData)
if 0 < nCount then
table.insert(self.tbItems, {
nTid = mapItemData.Tid,
mapId = mapId,
nTokenValue = nTokenValue,
nCount = nCount,
nSort = 0
})
if mapResidentItem[mapItemData.Tid] ~= nil then
mapResidentItem[mapItemData.Tid] = true
end
end
end
end
for _, nItemId in ipairs(tbResidentTokenItemId) do
if mapResidentItem[nItemId] == false and ConfigTable.GetData_Item(nItemId) ~= nil then
table.insert(self.tbItems, {
nTid = nItemId,
mapId = {},
nCount = 0,
nTokenValue = GetTokenValue(nItemId),
nSort = -1
})
end
end
table.sort(self.tbItems, function(a, b)
if a.nSort == b.nSort then
return a.nTid < b.nTid
end
return a.nSort > b.nSort
end)
for _, v in ipairs(self.tbItemCtrl) do
v.gameObject:SetActive(false)
end
for k, v in ipairs(self.tbItems) do
if nil == self.tbItemCtrl[k] then
local obj = instantiate(self._mapNode.goItem, self._mapNode.goItemList)
obj.gameObject:SetActive(true)
local objCtrl = self:BindCtrlByNode(obj, "Game.UI.StarTowerFastBattle.StarTowerTokenBuyItemCtrl")
objCtrl:SetItem(v)
self.tbItemCtrl[k] = objCtrl
else
self.tbItemCtrl[k].gameObject:SetActive(true)
self.tbItemCtrl[k]:SetItem(v)
end
end
LayoutRebuilder.ForceRebuildLayoutImmediate(self._mapNode.rtItemContent)
end
function StarTowerTokenBuyMainCtrl:Close()
self._mapNode.animWindow:Play("t_window_04_t_out")
EventManager.Hit(EventId.TemporaryBlockInput, 0.3)
end
function StarTowerTokenBuyMainCtrl:OnBtnClick_Close()
EventManager.Hit("CloseTokenBuyPanel")
end
function StarTowerTokenBuyMainCtrl:OnBtnClick_Buy()
local nHasCoin = PlayerData.Coin:GetCoinCount(self.nCoinId)
if nHasCoin < self.nTokenPrice then
local itemCfg = ConfigTable.GetData_Item(self.nCoinId)
local itemCostCfg = ConfigTable.GetData_Item(AllEnum.CoinItemId.STONE)
if not itemCfg or not itemCostCfg then
return
end
local sTip = orderedFormat(ConfigTable.GetUIText("Recruit_ExchangeGemZero"), itemCfg.Id, self.nTokenPrice - nHasCoin, itemCostCfg.Id)
local confirmCallback = function()
local nStoneCount = PlayerData.Coin:GetCoinCount(AllEnum.CoinItemId.STONE)
nStoneCount = nStoneCount + PlayerData.Item:GetItemCountByID(AllEnum.CoinItemId.FREESTONE)
if nStoneCount < self.nTokenPrice - nHasCoin then
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = orderedFormat(ConfigTable.GetUIText("Recruit_Charge") or "", itemCostCfg.Id),
callbackConfirm = function()
self._panel:JumpToRecharge()
end,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
else
PlayerData.Coin:SendGemConvertReqReq(self.nTokenPrice - nHasCoin, nil)
end
EventManager.Hit("ShowTokenTopRes", false)
end
local cancelCallback = function()
EventManager.Hit("ShowTokenTopRes", false)
end
local msg = {
nType = AllEnum.MessageBox.Confirm,
sContent = sTip,
callbackConfirm = confirmCallback,
callbackCancel = cancelCallback,
bBlur = false
}
EventManager.Hit(EventId.OpenMessageBox, msg)
EventManager.Hit("ShowTokenTopRes", false)
return
end
local nCurToken = PlayerData.StarTowerAutoPlan:GetTokenCount()
if nCurToken >= self._panel.nMaxToken then
local sTip = ConfigTable.GetUIText("TokenBuy_HitLimit")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
sContent = sTip
})
return
end
EventManager.Hit("ChangeTokenBuyPanel", AllEnum.TokenBuyPanelType.BuyConfirm)
end
function StarTowerTokenBuyMainCtrl:OnBtnClick_BuyGray()
local sTip = ConfigTable.GetUIText("TokenBuy_NoCoin")
EventManager.Hit(EventId.OpenMessageBox, {
nType = AllEnum.MessageBox.Tips,
bPositive = true,
sContent = sTip
})
end
return StarTowerTokenBuyMainCtrl
@@ -0,0 +1,35 @@
local StarTowerTokenBuyPanel = class("StarTowerTokenBuyPanel", BasePanel)
StarTowerTokenBuyPanel._bIsMainPanel = false
StarTowerTokenBuyPanel._tbDefine = {
{
sPrefabPath = "StarTowerFastBattle/StarTowerTokenBuyPanel.prefab",
sCtrlName = "Game.UI.StarTowerFastBattle.StarTowerTokenBuyCtrl"
}
}
function StarTowerTokenBuyPanel:Awake()
self.nPanelType = self._tbParam[1] or AllEnum.TokenBuyPanelType.Main
self.mapItemData = self._tbParam[2]
self.bBlur = self._tbParam[3]
self.nMaxToken = ConfigTable.GetConfigNumber("TowerVitaEnergyMax")
self.callback = self._tbParam[4]
end
function StarTowerTokenBuyPanel:JumpToRecharge()
if ConfigTable.GetConfigNumber("IsShowComBtn") ~= 1 then
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Function_NotAvailable"))
return
end
if self.callback ~= nil then
self.callback()
end
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerTokenBuyPanel)
EventManager.Hit(EventId.ClosePanel, PanelId.StarTowerAutoDecisionSettingPanel)
local func_OpenRecharge = function()
EventManager.Hit(EventId.OpenPanel, PanelId.Mall, AllEnum.MallToggle.Gem)
end
if PanelManager.GetCurPanelId() == PanelId.StarTowerFastBattle then
EventManager.Hit("StarTowerFastBattleLeaveForRecharge", func_OpenRecharge)
else
func_OpenRecharge()
end
end
return StarTowerTokenBuyPanel