Files
StellaSora_DataLua/lua/game/ui/towerdefense/towerdefenseselectctrl.lua
T
SL1900 d51057c7f3 Update - 1.5.0.78
EN: 1.5.0.78
CN: 1.5.0.80
JP: 1.5.0.82
KR: 1.5.0.85
2026-01-13 14:00:00 +09:00

294 lines
9.7 KiB
Lua

local TowerDefenseSelectCtrl = class("TowerDefenseSelectCtrl", BaseCtrl)
local barMinX = -365
local barMaxX = 0
local scrollType = {levelIndex = 1, pos = 2}
TowerDefenseSelectCtrl._mapNodeConfig = {
TopBar = {
sNodeName = "TopBarPanel",
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
},
txt_story = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_Story"
},
redDotStory = {},
btn_Story = {
sComponentName = "UIButton",
callback = "OnBtnClick_Story"
},
txt_guide = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_Guide"
},
btn_Guide = {
sComponentName = "UIButton",
callback = "OnBtnClick_Guide"
},
txt_quest = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_QuestTitle"
},
redDotQuest = {},
btn_quest = {
sComponentName = "UIButton",
callback = "OnBtnClick_Quest"
},
txt_mainProcess = {sComponentName = "TMP_Text"},
imgMainBarFill = {
sComponentName = "RectTransform"
},
txt_LevelTab1 = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_LevelTab1"
},
imgSelected1 = {},
btn_LevelTab1 = {
sComponentName = "UIButton",
callback = "OnBtnClick_LevelTab1"
},
redDotTab1 = {},
txt_LevelTab2 = {
sComponentName = "TMP_Text",
sLanguageId = "TowerDef_LevelTab2"
},
imgSelected2 = {},
btn_LevelTab2 = {
sComponentName = "UIButton",
callback = "OnBtnClick_LevelTab2"
},
redDotTab2 = {},
loopSv = {
sNodeName = "sv",
sComponentName = "LoopScrollView"
},
blur = {},
guidPanel = {
sNodeName = "TowerDefenseGuidePanel",
sCtrlName = "Game.UI.TowerDefense.TowerDefenseGuideCtrl"
},
storyPanel = {
sNodeName = "TowerDefenseStory",
sCtrlName = "Game.UI.TowerDefense.TowerDefenseStoryCtrl"
},
questPanel = {
sNodeName = "TowerDefenseQuest",
sCtrlName = "Game.UI.TowerDefense.TowerDefenseQuestCtrl"
},
animator = {
sNodeName = "----SafeAreaRoot---",
sComponentName = "Animator"
}
}
TowerDefenseSelectCtrl._mapEventConfig = {
TowerDefenseLevelCell_OnSelected = "OnEvent_LevelSelected",
CloseTowerDefenseGuidePanel = "OnEvent_CloseTowerDefenseGuidePanel",
CloseTowerDefenseStoryPanel = "OnEvent_CloseTowerDefenseStoryPanel",
CloseTowerDefenseQuestPanel = "OnEvent_CloseTowerDefenseQuestPanel",
TowerDefenseQuestUpdate = "InitQuest"
}
TowerDefenseSelectCtrl._mapRedDotConfig = {
[RedDotDefine.Activity_TowerDefense_AllQuest] = {
sNodeName = "redDotQuest"
},
[RedDotDefine.Activity_TowerDefense_AllStory] = {
sNodeName = "redDotStory"
}
}
function TowerDefenseSelectCtrl:Awake()
local param = self:GetPanelParam()
if type(param) == "table" then
self.nActId = param[1]
end
self.TowerDefenseData = PlayerData.Activity:GetActivityDataById(self.nActId)
self._mapNode.guidPanel.gameObject:SetActive(false)
self._mapNode.storyPanel.gameObject:SetActive(false)
self._mapNode.questPanel.gameObject:SetActive(false)
self._mapNode.blur.gameObject:SetActive(false)
self._mapNode.animator:Play("TowerDefenseSelectBg_in")
self.scrollType = scrollType.pos
self.nScrollIndex = 0
self.scrollPos = 1
end
function TowerDefenseSelectCtrl:OnEnable()
if self._panel.nSelectedTabIndex == 0 then
self._panel.nSelectedTabIndex = 1
end
if self._panel.nlevelId ~= 0 then
local tempData = self.TowerDefenseData:GetTempData()
if tempData ~= nil and tempData.nLevelId == self._panel.nlevelId and tempData.bResult then
for index, value in ipairs(self.tbLevel) do
if value.nLevelId == self._panel.nlevelId then
self.nScrollIndex = index
break
end
end
if self.nScrollIndex == #self.tbLevel and self._panel.nSelectedTabIndex == 1 then
self._panel.nSelectedTabIndex = 2
self.nScrollIndex = 0
self.scrollType = scrollType.pos
self.scrollPos = 1
else
self.scrollType = scrollType.levelIndex
end
self.TowerDefenseData:ClearTempData()
end
end
self:Init()
end
function TowerDefenseSelectCtrl:OnDisable()
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self.tbGridCtrl = {}
end
function TowerDefenseSelectCtrl:OnDestroy()
self.TowerDefenseData:RefreshRedDotbyTab(self._panel.nSelectedTabIndex)
end
function TowerDefenseSelectCtrl:Init()
self.tblevel = {}
self.tbGridCtrl = {}
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_LevelTab, {1}, self._mapNode.redDotTab1)
RedDotManager.RegisterNode(RedDotDefine.Activity_TowerDefense_LevelTab, {2}, self._mapNode.redDotTab2)
self:UpdateLevel()
self:InitQuest()
self:SetTabUI()
end
function TowerDefenseSelectCtrl:InitQuest()
local allCount = self.TowerDefenseData:GetAllQuestCount()
local receivedCount = self.TowerDefenseData:GetAllReceivedCount()
NovaAPI.SetTMPText(self._mapNode.txt_mainProcess, receivedCount .. "/" .. allCount)
self._mapNode.imgMainBarFill.anchoredPosition = Vector2(barMinX + (barMaxX - barMinX) * (receivedCount / allCount), self._mapNode.imgMainBarFill.anchoredPosition.y)
end
function TowerDefenseSelectCtrl:SetTabUI()
self._mapNode.imgSelected1:SetActive(self._panel.nSelectedTabIndex == 1)
self._mapNode.imgSelected2:SetActive(self._panel.nSelectedTabIndex == 2)
local selectedColor = Color(0.9803921568627451, 0.9803921568627451, 0.9803921568627451)
local normalColor = Color(0.14901960784313725, 0.25882352941176473, 0.47058823529411764)
if self._panel.nSelectedTabIndex == 1 then
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab1, selectedColor)
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab2, normalColor)
elseif self._panel.nSelectedTabIndex == 2 then
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab1, normalColor)
NovaAPI.SetTMPColor(self._mapNode.txt_LevelTab2, selectedColor)
end
end
function TowerDefenseSelectCtrl:UpdateLevel()
self.tbLevel = self.TowerDefenseData:GetLevelsByTab(self._panel.nSelectedTabIndex)
local sortFunc = function(a, b)
local aConfig = ConfigTable.GetData("TowerDefenseLevel", a.nLevelId)
local bConfig = ConfigTable.GetData("TowerDefenseLevel", b.nLevelId)
return aConfig.Id < bConfig.Id
end
table.sort(self.tbLevel, sortFunc)
for nInstanceId, objCtrl in pairs(self.tbGridCtrl) do
self:UnbindCtrlByNode(objCtrl)
self.tbGridCtrl[nInstanceId] = nil
end
self._mapNode.loopSv:Init(#self.tbLevel, self, self.OnRefreshGrid)
if self.scrollType == scrollType.levelIndex then
self._mapNode.loopSv:SetScrollGridPos(self.nScrollIndex, 0)
elseif self.scrollType == scrollType.pos then
self._mapNode.loopSv:SetScrollPos(self.scrollPos, 0)
end
local wait = function()
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
self:PlayGridAnim()
end
cs_coroutine.start(wait)
end
function TowerDefenseSelectCtrl:OnRefreshGrid(goGrid, gridIndex)
local nIndex = gridIndex + 1
local nInstanceId = goGrid:GetInstanceID()
if not self.tbGridCtrl[nInstanceId] then
self.tbGridCtrl[nInstanceId] = self:BindCtrlByNode(goGrid, "Game.UI.TowerDefense.TowerDefenseLevelCellCtrl")
end
self.tbGridCtrl[nInstanceId]:SetData(self.nActId, self.tbLevel[nIndex])
end
function TowerDefenseSelectCtrl:PlayGridAnim()
local listInUse = {}
listInUse = self._mapNode.loopSv:GetInUseGridIndex()
local tbGridInUse = {}
for i = 0, listInUse.Count - 1 do
table.insert(tbGridInUse, listInUse[i])
end
for k, v in ipairs(tbGridInUse) do
local goGrid = self._mapNode.loopSv.transform:Find("Viewport/Content/" .. v)
local animRoot = goGrid:GetComponent("Animator")
local delayTime = (k - 1) * 0.1
animRoot:Play("ready")
if 0 < delayTime then
self:AddTimer(1, delayTime, function()
animRoot:Play("go")
end, true, true, true)
else
animRoot:Play("go")
end
end
end
function TowerDefenseSelectCtrl:OnBtnClick_Guide()
self._mapNode.blur.gameObject:SetActive(true)
self._mapNode.guidPanel.gameObject:SetActive(true)
self._mapNode.guidPanel:SetData(self.nActId)
end
function TowerDefenseSelectCtrl:OnBtnClick_LevelTab1()
if self._panel.nSelectedTabIndex == 1 then
return
end
self.scrollPos = 1
self._panel.nlevelId = 0
self.scrollType = self.scrollPos
self.TowerDefenseData:RefreshRedDotbyTab(self._panel.nSelectedTabIndex)
self._panel.nSelectedTabIndex = 1
self:SetTabUI()
self:UpdateLevel()
end
function TowerDefenseSelectCtrl:OnBtnClick_LevelTab2()
if self._panel.nSelectedTabIndex == 2 then
return
end
self.scrollPos = 1
self._panel.nlevelId = 0
self.scrollType = self.scrollPos
self.TowerDefenseData:RefreshRedDotbyTab(self._panel.nSelectedTabIndex)
self._panel.nSelectedTabIndex = 2
self:SetTabUI()
self:UpdateLevel()
end
function TowerDefenseSelectCtrl:OnBtnClick_Story()
self._mapNode.blur.gameObject:SetActive(true)
self._mapNode.storyPanel.gameObject:SetActive(true)
self._mapNode.storyPanel:SetData(self.nActId)
end
function TowerDefenseSelectCtrl:OnBtnClick_Quest()
self._mapNode.blur.gameObject:SetActive(true)
self._mapNode.questPanel.gameObject:SetActive(true)
self._mapNode.questPanel:PlayAnim_In()
self._mapNode.questPanel:SetData(self.nActId, true)
end
function TowerDefenseSelectCtrl:OnEvent_LevelSelected(nLevelId)
if not self.TowerDefenseData:IsLevelUnlock(nLevelId) then
return
end
if not self.TowerDefenseData:IsPreLevelPass(nLevelId) then
return
end
self.scrollPos = self._mapNode.loopSv:GetScrollPos()
self._panel.nlevelId = nLevelId
self.TowerDefenseData:EnterLevelSelect(nLevelId)
EventManager.Hit(EventId.OpenPanel, PanelId.TowerDefenseLevelDetailPanel, self.nActId, nLevelId)
end
function TowerDefenseSelectCtrl:OnEvent_CloseTowerDefenseGuidePanel()
self._mapNode.guidPanel.gameObject:SetActive(false)
self._mapNode.blur.gameObject:SetActive(false)
end
function TowerDefenseSelectCtrl:OnEvent_CloseTowerDefenseStoryPanel()
self._mapNode.storyPanel.gameObject:SetActive(false)
self._mapNode.blur.gameObject:SetActive(false)
end
function TowerDefenseSelectCtrl:OnEvent_CloseTowerDefenseQuestPanel()
self._mapNode.questPanel.gameObject:SetActive(false)
self._mapNode.blur.gameObject:SetActive(false)
end
return TowerDefenseSelectCtrl