293 lines
No EOL
11 KiB
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 |