08b515afd9
EN: 2.0.0.143 CN: 2.0.0.142 JP: 2.0.0.145 KR: 2.0.0.150
269 lines
10 KiB
Lua
269 lines
10 KiB
Lua
local MathParkourLevelSelectCtrl = class("MathParkourLevelSelectCtrl", BaseCtrl)
|
|
local SpineManager = require("Game.Spine.SpineManager")
|
|
local layoutRight = 915
|
|
local layoutRightDefault = 322
|
|
local layoutMax = -427
|
|
MathParkourLevelSelectCtrl._mapNodeConfig = {
|
|
TopBar = {
|
|
sNodeName = "TopBarPanel",
|
|
sCtrlName = "Game.UI.TopBarEx.TopBarCtrl"
|
|
},
|
|
btnCloseBg = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_CloseBg"
|
|
},
|
|
togRoot = {nCount = 7},
|
|
btnTask = {
|
|
sComponentName = "UIButton",
|
|
callback = "OnBtnClick_Task"
|
|
},
|
|
txtTask = {
|
|
sComponentName = "TMP_Text",
|
|
sLanguageId = "MathParkour_QuestTitle"
|
|
},
|
|
Sp_BookScene = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
Sp_BookSceneFront = {
|
|
sComponentName = "RectTransform"
|
|
},
|
|
rt_Toggle = {},
|
|
srToggle = {
|
|
sComponentName = "UIScrollRect"
|
|
},
|
|
rt_ToggleTrans = {
|
|
sNodeName = "rt_Toggle",
|
|
sComponentName = "RectTransform"
|
|
},
|
|
levelDetail = {
|
|
sNodeName = "LevelDetailsPanel",
|
|
sCtrlName = "Game.UI.Activity.MathParkour.MathParkourLevelDetailCtrl"
|
|
},
|
|
charSpine = {sNodeName = "Sp_char"},
|
|
reward_reddot = {}
|
|
}
|
|
MathParkourLevelSelectCtrl._mapEventConfig = {
|
|
MathParkourLevelUpdate = "OnEvent_LevelUpdate"
|
|
}
|
|
MathParkourLevelSelectCtrl._mapRedDotConfig = {}
|
|
function MathParkourLevelSelectCtrl:Awake()
|
|
local param = self:GetPanelParam()
|
|
if type(param) == "table" then
|
|
self.nActId = param[1]
|
|
end
|
|
end
|
|
function MathParkourLevelSelectCtrl:OnEnable()
|
|
self._mapNode.rt_Toggle.gameObject:SetActive(false)
|
|
local aniamtor = self.gameObject:GetComponent("Animator")
|
|
if aniamtor ~= nil then
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
aniamtor:Play("MathParkourLevelsSelect_in")
|
|
self._mapNode.rt_Toggle.gameObject:SetActive(true)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
self._mapNode.Sp_BookSceneFront.gameObject:SetActive(true)
|
|
local bInActGroup, nActGroupId = PlayerData.Activity:IsActivityInActivityGroup(self.nActId)
|
|
if bInActGroup then
|
|
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
|
local actGroupId = mapActivityData.MidGroupId
|
|
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
|
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
|
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
|
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
|
RedDotManager.RegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
|
nActGroupId,
|
|
taskActId,
|
|
mapActivityData.MiniGameRedDot
|
|
}, self._mapNode.reward_reddot)
|
|
end
|
|
end
|
|
self:RefreshLevelList()
|
|
self._mapNode.levelDetail:ClosePanel()
|
|
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRightDefault, -32, 0)
|
|
self._mapNode.Sp_BookScene.localPosition = Vector3(0, self._mapNode.Sp_BookScene.localPosition.y, 0)
|
|
self._mapNode.rt_ToggleTrans.localPosition = Vector3(0, self._mapNode.rt_ToggleTrans.localPosition.y, 0)
|
|
if 0 < self._panel.nSelectIndex then
|
|
local cacheLevelId = self.actData:GetCacheLevelId()
|
|
if cacheLevelId ~= nil then
|
|
for i, v in ipairs(self.tbLevelData) do
|
|
if v.nId == cacheLevelId then
|
|
self._panel.nSelectIndex = i
|
|
self.actData:ClearCacheLevelId()
|
|
break
|
|
end
|
|
end
|
|
end
|
|
self:AddTimer(1, 1.5, function()
|
|
self:ShowDetail(self.tbLevelData[self._panel.nSelectIndex], self._panel.nSelectIndex, false)
|
|
local imgSelect = self._mapNode.togRoot[self._panel.nSelectIndex].transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
|
imgSelect.gameObject:SetActive(true)
|
|
if self._panel.nSelectIndex > 4 then
|
|
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRight, -32, 0)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
local moveTime = 0.2
|
|
local moveX = -325 - 340 * (self._panel.nSelectIndex - 5)
|
|
self._mapNode.rt_ToggleTrans:DOLocalMoveX(moveX, moveTime)
|
|
self._mapNode.Sp_BookScene:DOLocalMoveX(moveX, moveTime)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
end, true, true, true)
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 1.5)
|
|
else
|
|
EventManager.Hit(EventId.TemporaryBlockInput, 1)
|
|
end
|
|
SpineManager.PlayAnim(self._mapNode.Sp_BookScene.gameObject, "in", false)
|
|
SpineManager.PlayAnim(self._mapNode.Sp_BookSceneFront, "in_Front", false)
|
|
self:AddTimer(1, 1, function()
|
|
SpineManager.PlayAnim(self._mapNode.Sp_BookScene.gameObject, "idle", true)
|
|
self._mapNode.Sp_BookSceneFront.gameObject:SetActive(false)
|
|
end, true, true, true)
|
|
function self.onScrollValueChanged(value)
|
|
self._mapNode.Sp_BookScene.localPosition = Vector3(self._mapNode.rt_ToggleTrans.localPosition.x, self._mapNode.Sp_BookScene.localPosition.y, 0)
|
|
end
|
|
self._mapNode.srToggle.onValueChanged:AddListener(self.onScrollValueChanged)
|
|
SpineManager.PlayAnim(self._mapNode.charSpine, "in", false)
|
|
self:AddTimer(1, 0.9, function()
|
|
SpineManager.PlayAnim(self._mapNode.charSpine, "idle", true)
|
|
end, true, true, true)
|
|
end
|
|
function MathParkourLevelSelectCtrl:OnDisable()
|
|
if self.onScrollValueChanged ~= nil then
|
|
self._mapNode.srToggle.onValueChanged:RemoveListener(self.onScrollValueChanged)
|
|
self.onScrollValueChanged = nil
|
|
end
|
|
end
|
|
function MathParkourLevelSelectCtrl:RefreshLevelList()
|
|
self.actData = PlayerData.Activity:GetActivityDataById(self.nActId)
|
|
if self.actData == nil then
|
|
return
|
|
end
|
|
self.tbLevelData = self.actData:GetAllLevelData()
|
|
for i = 1, 7 do
|
|
local levelData = self.tbLevelData[i]
|
|
if levelData ~= nil then
|
|
self:SetLevelToggle(levelData, self._mapNode.togRoot[i], i)
|
|
self._mapNode.togRoot[i]:SetActive(true)
|
|
else
|
|
self._mapNode.togRoot[i]:SetActive(false)
|
|
end
|
|
end
|
|
end
|
|
function MathParkourLevelSelectCtrl:OnEvent_LevelUpdate()
|
|
self:RefreshLevelList()
|
|
end
|
|
function MathParkourLevelSelectCtrl:OnDestroy()
|
|
if PlayerData.Activity:IsActivityInActivityGroup(self.nActId) then
|
|
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
|
local actGroupId = mapActivityData.MidGroupId
|
|
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
|
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
|
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
|
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
|
RedDotManager.UnRegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
|
actGroupId,
|
|
taskActId,
|
|
mapActivityData.MiniGameRedDot
|
|
}, self._mapNode.reward_reddot)
|
|
return
|
|
end
|
|
end
|
|
end
|
|
function MathParkourLevelSelectCtrl:SetLevelToggle(levelData, toggle, nIndex)
|
|
local rt_Targets = toggle.transform:Find("tog/grpText/rt_Targets")
|
|
local rtLockPreLv = toggle.transform:Find("tog/grpText/rtLockPreLv")
|
|
local txt_Open = toggle.transform:Find("tog/AnimRoot/AnimSwitch/txt_Open"):GetComponent("TextMeshProUGUI")
|
|
local txt_Lock = toggle.transform:Find("tog/AnimRoot/AnimSwitch/txt_Lock"):GetComponent("TextMeshProUGUI")
|
|
local levelUnlock = self.actData:GetLevelUnlock(levelData.nId)
|
|
local tog = toggle.transform:Find("tog"):GetComponent("UIButton")
|
|
tog.onClick:RemoveAllListeners()
|
|
rt_Targets.gameObject:SetActive(levelUnlock)
|
|
rtLockPreLv.gameObject:SetActive(not levelUnlock)
|
|
txt_Open.gameObject:SetActive(levelUnlock)
|
|
txt_Lock.gameObject:SetActive(not levelUnlock)
|
|
local sLevelIndex = string.format("%02d", nIndex)
|
|
NovaAPI.SetTMPText(txt_Open, sLevelIndex)
|
|
NovaAPI.SetTMPText(txt_Lock, sLevelIndex)
|
|
local imgSelect = toggle.transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
|
imgSelect.gameObject:SetActive(false)
|
|
if not levelUnlock then
|
|
return
|
|
end
|
|
for i = 1, 3 do
|
|
local btnTarget = rt_Targets.transform:Find("btnTarget" .. i):GetComponent("Button")
|
|
btnTarget.interactable = i <= levelData.nStar
|
|
end
|
|
tog.onClick:AddListener(function()
|
|
self:ShowDetail(levelData, nIndex, true)
|
|
imgSelect.gameObject:SetActive(true)
|
|
end)
|
|
local bNewDot = toggle.transform:Find("tog/AnimRoot/AnimSwitch/redH")
|
|
RedDotManager.RegisterNode(RedDotDefine.Activity_MathParkour_New_Level, {
|
|
self.nActId,
|
|
levelData.nId
|
|
}, bNewDot)
|
|
end
|
|
function MathParkourLevelSelectCtrl:ShowDetail(levelData, nIndex, bScroll)
|
|
local tempIndex = self._panel.nSelectIndex
|
|
if 0 < tempIndex then
|
|
local imgSelect = self._mapNode.togRoot[tempIndex].transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
|
imgSelect.gameObject:SetActive(false)
|
|
end
|
|
self._panel.nSelectIndex = nIndex
|
|
self._mapNode.levelDetail:ShowPanel(self.nActId, levelData)
|
|
if bScroll and 4 < nIndex then
|
|
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRight, -32, 0)
|
|
local wait = function()
|
|
coroutine.yield(CS.UnityEngine.WaitForEndOfFrame())
|
|
local moveTime = 0.2
|
|
local moveX = -325 - 340 * (nIndex - 5)
|
|
self._mapNode.rt_ToggleTrans:DOLocalMoveX(moveX, moveTime)
|
|
self._mapNode.Sp_BookScene:DOLocalMoveX(moveX, moveTime)
|
|
end
|
|
cs_coroutine.start(wait)
|
|
end
|
|
end
|
|
function MathParkourLevelSelectCtrl:OnBtnClick_CloseBg()
|
|
local tempIndex = self._panel.nSelectIndex
|
|
if 0 < tempIndex then
|
|
local imgSelect = self._mapNode.togRoot[tempIndex].transform:Find("tog/AnimRoot/AnimSwitch/imgSelect")
|
|
imgSelect.gameObject:SetActive(false)
|
|
end
|
|
self._panel.nSelectIndex = 0
|
|
self._mapNode.levelDetail:ClosePanel()
|
|
local moveTime = 0.2
|
|
EventManager.Hit(EventId.TemporaryBlockInput, moveTime)
|
|
local layout = layoutRight
|
|
self.tweener = DOTween.To(function()
|
|
return layout
|
|
end, function(v)
|
|
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, math.floor(v), -32, 0)
|
|
end, layoutRightDefault, moveTime):OnComplete(function()
|
|
NovaAPI.SetLayoutGroupPadding(self._mapNode.rt_Toggle, 194, layoutRightDefault, -32, 0)
|
|
end)
|
|
end
|
|
function MathParkourLevelSelectCtrl:OnBtnClick_Task()
|
|
if PlayerData.Activity:IsActivityInActivityGroup(self.nActId) then
|
|
local mapActivityData = ConfigTable.GetData("Activity", self.nActId)
|
|
local actGroupId = mapActivityData.MidGroupId
|
|
local actGroupData = PlayerData.Activity:GetActivityGroupDataById(actGroupId)
|
|
local taskActId = actGroupData:GetActivityDataByIndex(AllEnum.ActivityThemeFuncIndex.Task).ActivityId
|
|
local taskActData = PlayerData.Activity:GetActivityDataById(taskActId)
|
|
if taskActData ~= nil and taskActData:CheckActivityOpen() then
|
|
EventManager.Hit(EventId.OpenPanel, PanelId.Task_20104, taskActId, GameEnum.ActivityTaskTabType.Tab4)
|
|
return
|
|
end
|
|
RedDotManager.UnRegisterNode(RedDotDefine.Activity_Group_Task_Group, {
|
|
actGroupId,
|
|
taskActId,
|
|
mapActivityData.MiniGameRedDot
|
|
}, self._mapNode.reward_reddot)
|
|
self._mapNode.reward_reddot:SetActive(false)
|
|
EventManager.Hit(EventId.OpenMessageBox, ConfigTable.GetUIText("Activity_End_Notice"))
|
|
end
|
|
end
|
|
return MathParkourLevelSelectCtrl
|