PGRData/Script/matrix/xui/xuinewplayertask/XUiNewPlayerTask.lua

293 lines
No EOL
11 KiB
Lua

local XUiNewPlayerTask = XLuaUiManager.Register(XLuaUi, "UiNewPlayerTask")
local ITEM_TASK_PROGRESS_ID = CS.XGame.ClientConfig:GetInt("NewPlayerTaskExpId")
local FULL_PROGRESS = 0.9
function XUiNewPlayerTask:OnAwake()
self:InitBottomView()
self:InitDayTabView()
self:InitNewbieTaskView()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
self.BtnBack.CallBack = function() self:Close() end
self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end
self.BtnSkipChat.CallBack = function() self:OnEndTalkClick() end
XDataCenter.ItemManager.AddCountUpdateListener(ITEM_TASK_PROGRESS_ID, function()
self:RefreshBottomView()
end, self.TxtCurProgress)
self.OnStartState = false
-- local hintFirstOpenTab = string.format("%s%d", XDataCenter.TaskManager.NewPLayerTaskFirstTalk, 2)
-- XDataCenter.TaskManager.SaveNewPlayerHint(hintFirstOpenTab, 0)
end
function XUiNewPlayerTask:InitNewbieTaskView()
if not self.DynamicTableNewbieTask then
self.DynamicTableNewbieTask = XDynamicTableNormal.New(self.SViewTask.gameObject)
self.DynamicTableNewbieTask:SetProxy(XUiGridNewbieTaskItem)
self.DynamicTableNewbieTask:SetDelegate(self)
end
end
function XUiNewPlayerTask:InitDayTabView()
local tabName = "BtnNewbie"
self.BtnsTabInfos = XTaskConfig.GetNewPlayerTaskGroupTemplate()
self.BtnsDayTab = {}
self.BtnsDayTab[1] = self.BtnNewbieTaskTab
self.BtnsDayTab[1].gameObject.name = string.format( "%s%d", tabName, 1 )
self:UpdateTaskListTag(self.BtnsDayTab[1], self.BtnsTabInfos[1].OpenDay)
for i=2, #self.BtnsTabInfos do
local btnTab = self.BtnsDayTab[i]
if not btnTab then
local tabUi = CS.UnityEngine.Object.Instantiate(self.BtnNewbieTaskTab.gameObject)
tabUi.name = string.format( "%s%d", tabName, i )
tabUi.transform:SetParent(self.UiContent, false)
btnTab = tabUi.transform:GetComponent("XUiButton")
btnTab:SetName(CS.XTextManager.GetText("NewbieDayTab1", self.BtnsTabInfos[i].OpenDay))
tabUi:SetActive(true)
table.insert(self.BtnsDayTab, i, btnTab)
end
self:UpdateTaskListTag(btnTab, self.BtnsTabInfos[i].OpenDay)
end
self.TabBtnGroup:Init(self.BtnsDayTab, function(index) self:OnBtnDaySelected(index) end)
end
function XUiNewPlayerTask:UpdateTaskListTag(tab, openDay)
local curNewbieTask = XDataCenter.TaskManager.GetNewPlayerTaskListByGroup(openDay)
if curNewbieTask == nil then
tab:ShowTag(true)
return
end
for _, v in pairs(curNewbieTask) do
local stateTask = XDataCenter.TaskManager.GetTaskDataById(v)
if stateTask.State ~= XDataCenter.TaskManager.TaskState.Finish and stateTask.State ~= XDataCenter.TaskManager.TaskState.Invalid then
tab:ShowTag(false)
return
end
end
tab:ShowTag(true)
end
function XUiNewPlayerTask:InitBottomView()
local newbieActiveness = XTaskConfig.GetTaskNewbieActivenessTemplate()
self.TotalProgress = {}
self.TotalCount = #newbieActiveness.Activeness
self.MaxProgress = newbieActiveness.Activeness[self.TotalCount]
self.ProgressStage = {}
for i=1, self.TotalCount do
self.ProgressStage[i] = newbieActiveness.Activeness[i]
end
self.ImgProgressRect = self.ImgProgress:GetComponent("RectTransform")
self.TemplatePositon = self.PanelNewbieActive.transform.localPosition
self.TemplateRect = self.PanelNewbieActive:GetComponent("RectTransform")
self.TotalProgress[1] = XUiPanelNewbieActive.New(self.PanelNewbieActive.gameObject, self, 1, self.ProgressStage[1])
for i=2, #self.ProgressStage do
local progress = self.TotalProgress[i]
if not progress then
local ui = CS.UnityEngine.Object.Instantiate(self.PanelNewbieActive)
ui.transform:SetParent(self.ImgProgress.transform, false)
progress = XUiPanelNewbieActive.New(ui, self, i, self.ProgressStage[i])
table.insert(self.TotalProgress, i, progress)
end
end
end
function XUiNewPlayerTask:UpdateNewbieActivePositions()
-- 更新位置
local totalWdith = self.ImgProgressRect.rect.size.x
local activeWidthOffset = self.TemplateRect.rect.size.x / 2
for i=1, #self.ProgressStage do
local currProgress = self.ProgressStage[i] * 1.0 / self.MaxProgress * FULL_PROGRESS
local progress = self.TotalProgress[i]
if progress then
progress.Transform:GetComponent("RectTransform").anchoredPosition3D = CS.UnityEngine.Vector3(currProgress * totalWdith - activeWidthOffset, self.TemplatePositon.y, self.TemplatePositon.z)
end
end
end
function XUiNewPlayerTask:OnStart(selectIdx)
self.OnStartState = true
self.DefaultIdx = selectIdx
XEventManager.AddEventListener(XEventId.EVENT_TASK_SYNC, self.OnTaskChangeSync, self)
XEventManager.AddEventListener(XEventId.EVENT_NEWBIETASK_DAYCHANGED, self.OnTaskChangeSync, self)
end
function XUiNewPlayerTask:OnEnable()
local hintTab = XDataCenter.TaskManager.GetNewPlayerHint(XDataCenter.TaskManager.NewPlayerLastSelectTab, self.BtnsTabInfos[1].OpenDay)
hintTab = self.DefaultIdx or self.CurSelectDay or hintTab
self.DefaultIdx = nil
local hintFirstOpenTab = string.format("%s%d", XDataCenter.TaskManager.NewPLayerTaskFirstTalk, hintTab)
local hintTabFirstOpen = XDataCenter.TaskManager.GetNewPlayerHint(hintFirstOpenTab, 0)
self:UpdateTabGroupStatus()
self.TabBtnGroup:SelectIndex(hintTab)
-- 不是第一次播放了,可以直接播入場動畫
if self.OnStartState and hintTabFirstOpen == 1 then
self:PlayAnimation("AnimEnableOpen", function()
self.AnimEnableOpenDirector:Stop()
XLuaUiManager.SetMask(false)
end,
function()
XLuaUiManager.SetMask(true)
end)
end
self.OnStartState = false
end
function XUiNewPlayerTask:OnDestroy()
XEventManager.RemoveEventListener(XEventId.EVENT_TASK_SYNC, self.OnTaskChangeSync, self)
XEventManager.RemoveEventListener(XEventId.EVENT_NEWBIETASK_DAYCHANGED, self.OnTaskChangeSync, self)
end
function XUiNewPlayerTask:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid:Init(self)
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
local data = self.CurrentNewbieTasks[index]
if data ~= nil then
grid:OnRefreshDatas(data)
end
-- elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
end
end
-- [更新底部]
function XUiNewPlayerTask:RefreshBottomView()
local newbieActiveness = XTaskConfig.GetTaskNewbieActivenessTemplate()
local count = #newbieActiveness.Activeness
local maxProgress = newbieActiveness.Activeness[count]
local taskProgressCount = XDataCenter.ItemManager.GetCount(ITEM_TASK_PROGRESS_ID) or 0
self.TxtCurProgress.text = taskProgressCount
self.TxtTotalProgress.text = string.format("/%d", maxProgress)
local currentProgress = taskProgressCount * 1.0 / maxProgress * FULL_PROGRESS
self.ImgProgress.fillAmount = (currentProgress > FULL_PROGRESS) and 1 or currentProgress
for i=1, #self.TotalProgress do
self.TotalProgress[i]:UpdateNewbieActiveView(taskProgressCount, maxProgress)
end
-- 更新
self:UpdateNewbieActivePositions()
end
-- [更新左边立绘信息]
function XUiNewPlayerTask:RefreshLeftView(day)
local talkConfig = XDataCenter.TaskManager.GetNewPlayerTaskTalkConfig(day)
if not talkConfig then return end
self.RImgTabBoard:SetRawImage(talkConfig.RoleHalfIcon)
self.TxtBoardName.text = XCharacterConfigs.GetCharacterName(talkConfig.ShowCharId)
self.TxtBoardPinyin.text = talkConfig.SpellName
end
-- [刷新第几天的任务列表]
function XUiNewPlayerTask:RefreshNewbieTaskView(group)
local curNewbieTask = XDataCenter.TaskManager.GetNewPlayerTaskListByGroup(group)
if curNewbieTask == nil then return end
self.CurrentNewbieTasks = {}
for _, v in pairs(curNewbieTask) do
local stateTask = XDataCenter.TaskManager.GetTaskDataById(v)
if stateTask.State ~= XDataCenter.TaskManager.TaskState.Finish and stateTask.State ~= XDataCenter.TaskManager.TaskState.Invalid then
table.insert(self.CurrentNewbieTasks, v)
end
end
self.PanelNoneTask.gameObject:SetActive(#self.CurrentNewbieTasks <= 0)
self.BtnsDayTab[group]:ShowTag(#self.CurrentNewbieTasks <= 0)
if self.DynamicTableNewbieTask then
self.DynamicTableNewbieTask:SetDataSource(self.CurrentNewbieTasks)
self.DynamicTableNewbieTask:ReloadDataSync()
end
end
function XUiNewPlayerTask:IsCurrentLock(day)
if XPlayer.NewPlayerTaskActiveDay == nil then return true end
return day > XPlayer.NewPlayerTaskActiveDay
end
function XUiNewPlayerTask:UpdateTabGroupStatus()
for i=1, #self.BtnsDayTab do
if self:IsCurrentLock(self.BtnsTabInfos[i].OpenDay) then
self.BtnsDayTab[i]:SetButtonState(CS.UiButtonState.Disable)
self.BtnsDayTab[i]:ShowReddot(false)
else
self.BtnsDayTab[i]:ShowReddot(XDataCenter.TaskManager.GetNewbiePlayTaskReddotByOpenDay(self.BtnsTabInfos[i].OpenDay))
end
end
end
function XUiNewPlayerTask:OnTaskChangeSync()
if self.CurSelectDay then
self:UpdateTabGroupStatus()
self:RefreshLeftView(self.CurSelectDay)
self:RefreshBottomView()
self:RefreshNewbieTaskView(self.CurSelectDay)
end
end
function XUiNewPlayerTask:OnBtnDaySelected(day)
if self:IsCurrentLock(self.BtnsTabInfos[day].OpenDay) then
XUiManager.TipMsg(CS.XTextManager.GetText("NewbieDayUnlock"))
return
end
self:RefreshBottomView()
if self.CurSelectDay ~= nil and self.CurSelectDay == day then
self:RefreshLeftView(day)
self:RefreshNewbieTaskView(day)
else
self:RefreshLeftView(day)
self:RefreshNewbieTaskView(day)
local hintFirstOpenTab = string.format("%s%d", XDataCenter.TaskManager.NewPLayerTaskFirstTalk, day)
local isFirstOpen = XDataCenter.TaskManager.GetNewPlayerHint(hintFirstOpenTab, 0)
if isFirstOpen == 1 then
self.AnimQieHuan:PlayTimelineAnimation(function()
self:UpdateNewbieActivePositions()
end)
else
-- 第一次打開,設置已經標記
XDataCenter.TaskManager.SaveNewPlayerHint(hintFirstOpenTab, 1)
self.PanelRightCanvas.alpha = 0
self.PanelContent.gameObject:SetActive(false)
self.ImgMask.gameObject:SetActiveEx(true)
self.ChatContent.text = self.BtnsTabInfos[day].FirstTalk
self.BeginTalkEnable:PlayTimelineAnimation(function()
self.BtnSkipChat.gameObject:SetActive(true)
self.MaskClickCount = 0
end)
end
end
self.CurSelectDay = day
XDataCenter.TaskManager.SaveNewPlayerHint(XDataCenter.TaskManager.NewPlayerLastSelectTab, day)
end
function XUiNewPlayerTask:OnEndTalkClick()
if self.MaskClickCount and self.MaskClickCount >= 1 then return end
self.PanelRightCanvas.alpha = 1
self.PanelContent.gameObject:SetActive(true)
self.EndTalkEnable:PlayTimelineAnimation(function()
self.BtnSkipChat.gameObject:SetActive(false)
self.ImgMask.gameObject:SetActiveEx(false)
end)
self:UpdateNewbieActivePositions()
self.MaskClickCount = self.MaskClickCount + 1
end