d51057c7f3
EN: 1.5.0.78 CN: 1.5.0.80 JP: 1.5.0.82 KR: 1.5.0.85
294 lines
9.7 KiB
Lua
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
|