Files
StellaSora_DataLua/lua/game/ui/startower/startowermenuctrl.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

222 lines
7.2 KiB
Lua

local StarTowerMenuCtrl = class("StarTowerMenuCtrl", BaseCtrl)
local GamepadUIManager = require("GameCore.Module.GamepadUIManager")
StarTowerMenuCtrl._mapNodeConfig = {
contentRoot = {
sNodeName = "----SafeAreaRoot----"
},
canvasGroup = {
sNodeName = "----SafeAreaRoot----",
sComponentName = "CanvasGroup"
},
btnBagPotential = {
sComponentName = "NaviButton",
callback = "OnBtnClick_BagPotential"
},
btnBagDisc = {
sComponentName = "NaviButton",
callback = "OnBtnClick_BagDisc"
},
btnMap = {
sComponentName = "NaviButton",
callback = "OnBtnClick_Map"
},
rtBuildScore = {},
imgRankIcon = {sComponentName = "Image"},
TMPBuildScore = {sComponentName = "TMP_Text"},
TMPBuildScoreTitle = {
sComponentName = "TMP_Text",
sLanguageId = "StartowerFastBattle_BuildScore"
},
aniBuildSweep = {
sNodeName = "rtBuildScore",
sComponentName = "Animator"
},
cgCoin = {
sNodeName = "imgCoinBg",
sComponentName = "CanvasGroup"
},
imgCoin = {sComponentName = "Image"},
txtCoinCount = {sComponentName = "TMP_Text"}
}
StarTowerMenuCtrl._mapEventConfig = {
LEVEL_ON_TELEPORTER_TRIGGER_RUN = "OnEvent_LevelTeleporter",
RefreshStarTowerCoin = "OnEvent_SetCoin",
ShowStarTowerCoin = "OnEvent_Show",
StarTowerSetButtonEnable = "OnEvent_StarTowerSetButtonEnable",
InputEnable = "OnEvent_InputEnable",
StarTowerRefreshBuildScore = "OnEvent_SetBuildLevel"
}
function StarTowerMenuCtrl:Awake()
self.bOpen = false
self.tbSequence = {}
self.nCoin = 0
self.gameObject:SetActive(true)
self._mapNode.rtBuildScore:SetActive(true)
self._mapNode.rtBuildScore:SetActive(false)
self:SetSprite_Coin(self._mapNode.imgCoin, AllEnum.CoinItemId.FixedRogCurrency)
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self.nCoin)
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgCoin, 0)
end
function StarTowerMenuCtrl:OnEnable()
if self._panel.nStarTowerId == 999 then
self:OnEvent_StarTowerSetButtonEnable(false, false)
self._mapNode.btnBagDisc.gameObject:SetActive(false)
self._mapNode.btnBagPotential.gameObject:SetActive(false)
self._mapNode.btnMap.gameObject:SetActive(false)
self._mapNode.rtBuildScore:SetActive(false)
else
EventManager.Hit("StarTowerSetButtonEnable", true, true)
end
GamepadUIManager.AddGamepadUINode("BattleMenu", self:GetGamepadUINode())
end
function StarTowerMenuCtrl:OnDisable()
end
function StarTowerMenuCtrl:OnBtnClick_BagPotential()
EventManager.Hit(EventId.StarTowerDepot, AllEnum.StarTowerDepotTog.Potential)
end
function StarTowerMenuCtrl:OnBtnClick_BagDisc()
EventManager.Hit(EventId.StarTowerDepot, AllEnum.StarTowerDepotTog.DiscSkill)
end
function StarTowerMenuCtrl:OnBtnClick_Map()
EventManager.Hit(EventId.BattleDashboardVisible, false)
EventManager.Hit(EventId.StarTowerMap)
end
function StarTowerMenuCtrl:OnEvent_SetCoin(nCount)
if nCount then
if nCount > self.nCoin then
local twCoin = DOTween.To(function()
return self.nCoin
end, function(v)
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self:ThousandsNumber(math.floor(v)))
end, nCount, 1)
local _cb = function()
self.nCoin = nCount
end
twCoin.onComplete = dotween_callback_handler(self, _cb)
else
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self:ThousandsNumber(nCount))
end
else
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgCoin, 0)
self.bOpen = false
return
end
if not self.bOpen then
local tweener1 = self._mapNode.cgCoin:DOFade(1, 1)
local tweener2 = self._mapNode.cgCoin:DOFade(0, 1)
local sequence = DOTween.Sequence()
sequence:Append(tweener1)
sequence:AppendInterval(3)
sequence:Append(tweener2)
table.insert(self.tbSequence, sequence)
end
end
function StarTowerMenuCtrl:OnEvent_SetBuildLevel(nScore)
local GetAnimName = function(nRank)
if nRank <= 5 then
return "BuildScore_Green"
elseif nRank <= 10 then
return "BuildScore_Green"
elseif nRank <= 20 then
return "BuildScore_Blue"
elseif nRank <= 30 then
return "BuildScore_Gold"
elseif nRank <= 40 then
return "BuildScore_RainBow"
end
end
if not self.bOpen then
return
end
self.nScore = nScore
local nLastScore = tonumber(NovaAPI.GetTMPText(self._mapNode.TMPBuildScore))
local nAfterScore = nScore
if nAfterScore ~= nLastScore then
local twCoin = DOTween.To(function()
return nLastScore
end, function(score)
NovaAPI.SetTMPText(self._mapNode.TMPBuildScore, math.floor(score))
end, nAfterScore, 1)
local _cb = function()
NovaAPI.SetTMPText(self._mapNode.TMPBuildScore, nAfterScore)
end
twCoin.onComplete = dotween_callback_handler(self, _cb)
end
local mapBeforeRank = PlayerData.Build:CalBuildRank(nLastScore)
local rank = PlayerData.Build:CalBuildRank(nAfterScore)
local wait = function()
local imagePath = "Icon/BuildRank/BuildRank_" .. rank.Id
self:SetPngSprite(self._mapNode.imgRankIcon, imagePath)
end
if rank.Id ~= mapBeforeRank.Id then
local sAnimName = GetAnimName(rank.Id)
self._mapNode.aniBuildSweep:Play(sAnimName)
self:AddTimer(1, 0.1, wait, true, true, true)
else
wait()
end
end
function StarTowerMenuCtrl:OnEvent_Show(bShow, nCount, nScore)
self.nScore = nScore
if nCount then
self.nCoin = nCount
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, self:ThousandsNumber(nCount))
else
NovaAPI.SetTMPText(self._mapNode.txtCoinCount, 0)
end
if bShow and not self.bOpen then
if 0 < #self.tbSequence then
for _, sequence in pairs(self.tbSequence) do
sequence:Kill()
end
self.tbSequence = {}
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgCoin, 1)
else
self._mapNode.cgCoin:DOFade(1, 1)
end
self._mapNode.rtBuildScore:SetActive(true)
local rank = PlayerData.Build:CalBuildRank(nScore)
local imagePath = "Icon/BuildRank/BuildRank_" .. rank.Id
self:SetPngSprite(self._mapNode.imgRankIcon, imagePath)
NovaAPI.SetTMPText(self._mapNode.TMPBuildScore, math.floor(nScore))
self.bOpen = true
elseif not bShow and self.bOpen then
if 0 < #self.tbSequence then
for _, sequence in pairs(self.tbSequence) do
sequence:Kill()
end
self.tbSequence = {}
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.cgCoin, 0)
self._mapNode.rtBuildScore:SetActive(false)
self.bOpen = false
end
end
function StarTowerMenuCtrl:OnEvent_StarTowerSetButtonEnable(bShow, bEnable)
if self._panel.nStarTowerId == 999 then
bEnable = false
bShow = false
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, bShow == true and 1 or 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.canvasGroup, bShow == true)
NovaAPI.SetCanvasGroupInteractable(self._mapNode.canvasGroup, bShow == true)
self._mapNode.btnBagDisc.interactable = bEnable == true
self._mapNode.btnBagPotential.interactable = bEnable == true
self._mapNode.btnMap.interactable = bEnable == true
end
function StarTowerMenuCtrl:OnEvent_LevelTeleporter()
self:OnEvent_StarTowerSetButtonEnable(false, false)
end
function StarTowerMenuCtrl:OnEvent_InputEnable(bEnable)
if self._panel.nStarTowerId == 999 then
bEnable = false
end
NovaAPI.SetCanvasGroupAlpha(self._mapNode.canvasGroup, bEnable == true and 1 or 0)
NovaAPI.SetCanvasGroupBlocksRaycasts(self._mapNode.canvasGroup, bEnable == true)
NovaAPI.SetCanvasGroupInteractable(self._mapNode.canvasGroup, bEnable == true)
self._mapNode.btnBagDisc.interactable = bEnable == true
self._mapNode.btnBagPotential.interactable = bEnable == true
self._mapNode.btnMap.interactable = bEnable == true
end
return StarTowerMenuCtrl