304 lines
No EOL
11 KiB
Lua
304 lines
No EOL
11 KiB
Lua
-- 新手任务二期
|
||
local XUiNewbieTaskMain = XLuaUiManager.Register(XLuaUi, "UiNewbieTaskMain")
|
||
local XUiNewbieTaskAnim = require("XUi/XUiNewbieTask/SpineAnim/XUiNewbieTaskAnim")
|
||
local XUiGridNewbieTask = require("XUi/XUiNewbieTask/XUiGridNewbieTask")
|
||
local XUiGridNewbieActive = require("XUi/XUiNewbieTask/XUiGridNewbieActive")
|
||
local XUiPanelNewbieTaskSuccess = require("XUi/XUiNewbieTask/XUiPanelNewbieTaskSuccess")
|
||
|
||
local FULL_PROGRESS = 0.9
|
||
|
||
function XUiNewbieTaskMain:OnAwake()
|
||
self:RegisterUiEvents()
|
||
|
||
self.PanelNewbieTask.gameObject:SetActiveEx(true)
|
||
self.PanelSpine.gameObject:SetActiveEx(true)
|
||
self.PlayerTaskSuccess.gameObject:SetActiveEx(false)
|
||
self.PanelNoneTask.gameObject:SetActiveEx(false)
|
||
self.GridNewbieTaskItem.gameObject:SetActiveEx(false)
|
||
self.PanelNewbieActive.gameObject:SetActiveEx(false)
|
||
|
||
self.BtnDayTab = {}
|
||
self.TotalProgress = {}
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnStart()
|
||
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
|
||
|
||
self.RegisterDay = XDataCenter.NewbieTaskManager.GetNewbieTaskRegisterDay()
|
||
self.NewbieActiveness = XTaskConfig.GetNewbieTaskTwoActivenessTemplate()
|
||
self:InitDynamicTable()
|
||
self:InitView()
|
||
|
||
-- Spine动画
|
||
self.NewbieTaskAnim = XUiNewbieTaskAnim.New(self.PanelLeft, self)
|
||
self.NewbieTaskSuccess = XUiPanelNewbieTaskSuccess.New(self.PlayerTaskSuccess, self)
|
||
|
||
self.CurrentIndex = self:GetNewRegisterDay()
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnEnable()
|
||
self.TabBtnGroup:SelectIndex(self.CurrentIndex or 1)
|
||
self:RefreshBtnDayTabStatus()
|
||
self:RefreshProgress()
|
||
|
||
self.NewbieTaskAnim:OnEnable()
|
||
|
||
-- 保存每日是否进入过
|
||
XDataCenter.NewbieTaskManager.SaveDailyFirstEnter()
|
||
self:CheckRewardReceiveStatus()
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnGetEvents()
|
||
return{
|
||
XEventId.EVENT_FINISH_TASK,
|
||
XEventId.EVENT_TASK_SYNC,
|
||
XEventId.EVENT_NEWBIE_TASK_UNLOCK_PERIOD_CHANGED,
|
||
}
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnNotify(event, ...)
|
||
if event == XEventId.EVENT_FINISH_TASK or event == XEventId.EVENT_TASK_SYNC then
|
||
self:RefreshBtnDayTabStatus()
|
||
self:SetupDynamicTable()
|
||
self:RefreshProgress()
|
||
self:CheckTabAnimation()
|
||
elseif event == XEventId.EVENT_NEWBIE_TASK_UNLOCK_PERIOD_CHANGED then
|
||
self:RefreshBtnDayTabStatus()
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnDisable()
|
||
self.NewbieTaskAnim:OnDisable()
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnDestroy()
|
||
self.NewbieTaskAnim:OnDestroy()
|
||
end
|
||
|
||
function XUiNewbieTaskMain:InitView()
|
||
self:InitDayTab()
|
||
self:InitProgress()
|
||
end
|
||
|
||
function XUiNewbieTaskMain:InitDayTab()
|
||
self.BtnNewbieTaskTab.gameObject:SetActiveEx(false)
|
||
self.BtnDayTab = {}
|
||
for i = 1, #self.RegisterDay do
|
||
local go = XUiHelper.Instantiate(self.BtnNewbieTaskTab, self.TabBtnGroup.transform)
|
||
local btn = go:GetComponent("XUiButton")
|
||
btn:SetName(CSXTextManagerGetText("NewbieDayTab2", XTool.ConvertNumberString(self.RegisterDay[i])))
|
||
self.BtnDayTab[i] = btn
|
||
btn.gameObject:SetActiveEx(true)
|
||
end
|
||
self.TabBtnGroup:Init(self.BtnDayTab, function(tabIndex)
|
||
self:OnClickTabCallBack(tabIndex)
|
||
end)
|
||
end
|
||
|
||
function XUiNewbieTaskMain:InitProgress()
|
||
self.TotalCount = #self.NewbieActiveness.Activeness
|
||
self.MaxProgress = self.NewbieActiveness.Activeness[self.TotalCount]
|
||
local uiName = self.PanelNewbieActive.name
|
||
for i = 1, self.TotalCount do
|
||
local progress = self.TotalProgress[i]
|
||
if not progress then
|
||
local ui = XUiHelper.Instantiate(self.PanelNewbieActive, self.ImgProgress.transform)
|
||
ui.name = string.format("%s%s", uiName, i)
|
||
progress = XUiGridNewbieActive.New(ui, self, i, self.NewbieActiveness.Activeness[i], self.MaxProgress)
|
||
self.TotalProgress[i] = progress
|
||
ui.gameObject:SetActiveEx(true)
|
||
end
|
||
end
|
||
|
||
self.ImgProgressRect = self.ImgProgress:GetComponent("RectTransform")
|
||
self.TemplatePosition = self.PanelNewbieActive.transform.localPosition
|
||
self.TemplateRect = self.PanelNewbieActive:GetComponent("RectTransform")
|
||
|
||
-- 设置总进度值 (读进度奖励配置表的最后的一个值)
|
||
self.TxtTotalProgress.text = string.format("/%d", self.MaxProgress)
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnClickTabCallBack(tabIndex)
|
||
local day = self.RegisterDay[tabIndex]
|
||
|
||
if not XDataCenter.NewbieTaskManager.CheckUnlockPeriod(day) then
|
||
XUiManager.TipMsg(CSXTextManagerGetText("NewbieDayUnlock"))
|
||
-- 未解锁提醒动画
|
||
self.NewbieTaskAnim:ActiveTriggerAnimation(XNewbieEventType.CLICK_UNLOCK_TAB)
|
||
return
|
||
end
|
||
|
||
self.CurrentIndex = tabIndex
|
||
self.CurrentDay = day
|
||
|
||
self:SetupDynamicTable()
|
||
local isSave = XDataCenter.NewbieTaskManager.SaveRegisterDayBtnClick(day)
|
||
if isSave then
|
||
self:RefreshBtnDayTabStatus()
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskMain:InitDynamicTable()
|
||
self.DynamicTable = XDynamicTableNormal.New(self.SViewTask)
|
||
self.DynamicTable:SetProxy(XUiGridNewbieTask, self)
|
||
self.DynamicTable:SetDelegate(self)
|
||
end
|
||
|
||
function XUiNewbieTaskMain:SetupDynamicTable()
|
||
self.DynamicTableDataList = XDataCenter.NewbieTaskManager.GetTaskDataList(self.CurrentDay)
|
||
self.PanelNoneTask.gameObject:SetActive(#self.DynamicTableDataList <= 0)
|
||
self.DynamicTable:SetDataSource(self.DynamicTableDataList)
|
||
self.DynamicTable:ReloadDataSync(1)
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnDynamicTableEvent(event, index, grid)
|
||
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
grid:Refresh(self.DynamicTableDataList[index])
|
||
end
|
||
end
|
||
|
||
-- 显示最新解锁的任务
|
||
function XUiNewbieTaskMain:GetNewRegisterDay()
|
||
local index = 1
|
||
for i, day in pairs(self.RegisterDay) do
|
||
if XDataCenter.NewbieTaskManager.CheckUnlockPeriod(day) then
|
||
if i > index then
|
||
index = i
|
||
end
|
||
end
|
||
end
|
||
return index
|
||
end
|
||
|
||
function XUiNewbieTaskMain:RefreshBtnDayTabStatus()
|
||
for i, btn in pairs(self.BtnDayTab) do
|
||
local day = self.RegisterDay[i]
|
||
-- 刷新红点 和 按钮锁定状态
|
||
if XDataCenter.NewbieTaskManager.CheckUnlockPeriod(day) then
|
||
if self.CurrentIndex ~= i then
|
||
btn:SetButtonState(CS.UiButtonState.Normal)
|
||
end
|
||
btn:ShowReddot(XDataCenter.NewbieTaskManager.CheckRegisterDayRedPoint(day))
|
||
-- 刷新任务Tag
|
||
btn:ShowTag(XDataCenter.NewbieTaskManager.CheckTaskFinishByDay(day))
|
||
else
|
||
btn:SetButtonState(CS.UiButtonState.Disable)
|
||
btn:ShowReddot(false)
|
||
btn:ShowTag(false)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskMain:RefreshProgressTransform()
|
||
-- 异形屏适配需要
|
||
XScheduleManager.ScheduleOnce(function()
|
||
if not self.GameObject or not self.GameObject:Exist() then
|
||
return
|
||
end
|
||
|
||
-- 更新位置
|
||
local totalWidth = self.ImgProgressRect.rect.size.x
|
||
local activeWidthOffset = self.TemplateRect.rect.size.x / 2
|
||
for i = 1, self.TotalCount do
|
||
local currentProgress = self.NewbieActiveness.Activeness[i] * 1.0 / self.MaxProgress * FULL_PROGRESS
|
||
local progress = self.TotalProgress[i]
|
||
if progress then
|
||
progress.Transform:GetComponent("RectTransform").anchoredPosition3D = CS.UnityEngine.Vector3(currentProgress * totalWidth - activeWidthOffset, self.TemplatePosition.y, self.TemplatePosition.z)
|
||
end
|
||
end
|
||
end, 1)
|
||
end
|
||
|
||
function XUiNewbieTaskMain:RefreshProgress()
|
||
-- 刷新进度奖励位置
|
||
self:RefreshProgressTransform()
|
||
|
||
local progressNumber = XDataCenter.NewbieTaskManager.GetCurrentTaskProgress()
|
||
-- 当前进度值
|
||
self.TxtCurProgress.text = progressNumber
|
||
local currentProgress = progressNumber * 1.0 / self.MaxProgress * FULL_PROGRESS
|
||
self.ImgProgress.fillAmount = (currentProgress > FULL_PROGRESS) and 1 or currentProgress
|
||
|
||
for _, progress in pairs(self.TotalProgress) do
|
||
progress:Refresh(progressNumber)
|
||
end
|
||
end
|
||
|
||
-- 领取完奖励后的操作 如果有自选和非自选礼包直接打开
|
||
function XUiNewbieTaskMain:OnRewardTaskFinish(rewards)
|
||
local asynOpenBagItem = asynTask(function(itemData, cb)
|
||
XLuaUiManager.Open("UiBagItemInfoPanel", itemData, nil, nil, cb)
|
||
end)
|
||
|
||
local asynOpenSelectGift = asynTask(function(itemId, cb)
|
||
XLuaUiManager.Open("UiNewbieSelectGift", itemId, cb)
|
||
end)
|
||
|
||
RunAsyn(function()
|
||
for _, reward in pairs(rewards) do
|
||
if XArrangeConfigs.GetType(reward.TemplateId) ~= XArrangeConfigs.Types.Item then -- 是道具
|
||
goto CONTINUE
|
||
end
|
||
|
||
local itemData = XDataCenter.ItemManager.GetItem(reward.TemplateId)
|
||
local data = XDataCenter.ItemManager.ConvertToGridData({ itemData })
|
||
local itemId = data[1].Data.Id
|
||
if not XDataCenter.ItemManager.IsUseable(itemId) then
|
||
goto CONTINUE
|
||
end
|
||
|
||
if XDataCenter.ItemManager.IsSelectGift(itemId) then
|
||
-- 自选礼包
|
||
asynOpenSelectGift(itemId)
|
||
else
|
||
-- 非自选礼包
|
||
asynOpenBagItem(data[1])
|
||
end
|
||
|
||
:: CONTINUE ::
|
||
end
|
||
self:CheckRewardReceiveStatus()
|
||
end)
|
||
end
|
||
|
||
-- 判断是否领取所有奖励 以及是否领取了荣誉奖励
|
||
function XUiNewbieTaskMain:CheckRewardReceiveStatus()
|
||
if XDataCenter.NewbieTaskManager.CheckNewbieHonorReward() then
|
||
self:Close()
|
||
elseif XDataCenter.NewbieTaskManager.CheckTaskAllFinish() and XDataCenter.NewbieTaskManager.CheckProgressRewardAllReceive() then
|
||
-- 荣誉界面不需要Spine动画了, 直接掉Disable方法
|
||
self.NewbieTaskAnim:OnDisable()
|
||
-- 开始展示荣誉奖励
|
||
self.PanelNewbieTask.gameObject:SetActiveEx(false)
|
||
self.PanelSpine.gameObject:SetActiveEx(false)
|
||
self.PlayerTaskSuccess.gameObject:SetActiveEx(true)
|
||
self:PlayAnimation("PlayerTaskSuccessEnable")
|
||
else
|
||
-- 有未领取的奖励
|
||
self.PlayerTaskSuccess.gameObject:SetActiveEx(false)
|
||
end
|
||
end
|
||
|
||
-- 检测是否播放页签动画
|
||
-- 条件是:领取完毕某个页签所有奖励
|
||
function XUiNewbieTaskMain:CheckTabAnimation()
|
||
local isTaskFinish = XDataCenter.NewbieTaskManager.CheckTaskFinishByDay(self.CurrentDay)
|
||
if isTaskFinish then
|
||
self.NewbieTaskAnim:ActiveTriggerAnimation(XNewbieEventType.REWARD_TAB)
|
||
end
|
||
end
|
||
|
||
function XUiNewbieTaskMain:RegisterUiEvents()
|
||
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.OnBtnBackClick)
|
||
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, self.OnBtnMainUiClick)
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnBtnBackClick()
|
||
self:Close()
|
||
end
|
||
|
||
function XUiNewbieTaskMain:OnBtnMainUiClick()
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
|
||
return XUiNewbieTaskMain |