295 lines
10 KiB
Lua
295 lines
10 KiB
Lua
local XUiPanelLineChapter = require("XUi/XUiNewChar/XUiPanelLineChapter")
|
||
local XUiNewCharActivity = XLuaUiManager.Register(XLuaUi, "UiNewCharActivity")
|
||
|
||
local PageIndex = {
|
||
Main = 1,
|
||
Teaching = 2,
|
||
Profile = 3,
|
||
}
|
||
|
||
local Delay = {
|
||
[PageIndex.Teaching] = 500,
|
||
[PageIndex.Profile] = 350,
|
||
}
|
||
|
||
function XUiNewCharActivity:OnAwake()
|
||
if XLuaUiManager.IsUiLoad("UiNewCharActivity") then
|
||
XLuaUiManager.Remove("UiNewCharActivity")
|
||
end
|
||
self:InitUiView()
|
||
self:InitSceneRoot()
|
||
self.CurrentView = PageIndex.Main
|
||
self.StageGroup = {}
|
||
self.TabBtns = {}
|
||
self.SwitchEffect = {}
|
||
-- self.InitEffect = {}
|
||
-- self.MsgBtnAnimEnable = true
|
||
--XEventManager.AddEventListener(XEventId.EVENT_ON_FESTIVAL_CHANGED, self.RefreshFestivalNodes, self)
|
||
self:UpdateCamera(PageIndex.Main)
|
||
end
|
||
|
||
function XUiNewCharActivity:OnStart(actId)
|
||
-- 进入活动时刷新
|
||
local actTemplate = XFubenNewCharConfig.GetDataById(actId)
|
||
self.ActTemplate = actTemplate
|
||
self.ActId = actId
|
||
-- 初始化prefab组件
|
||
local chapterGo = self.PanelTeaching:LoadPrefab(actTemplate.FubenPrefab)
|
||
self.PanelLineChapter = XUiPanelLineChapter.New(self, chapterGo, actTemplate)
|
||
|
||
local now = XTime.GetServerNowTimestamp()
|
||
local _, endTimeSecond = XFunctionManager.GetTimeByTimeId(actTemplate.TimeId)
|
||
if endTimeSecond then
|
||
self.TxtDay.text = XUiHelper.GetTime(endTimeSecond - now, XUiHelper.TimeFormatType.ACTIVITY)
|
||
self:CreateActivityTimer(now, endTimeSecond)
|
||
end
|
||
--self.TxtChapterName.text = actTemplate.Name
|
||
--self.TxtChapter.text = (self.ChapterId >= 10) and self.ChapterId or string.format("0%d", self.ChapterId)
|
||
local itemId = XDataCenter.ItemManager.ItemId
|
||
if self.PanelAsset then
|
||
if not self.AssetPanel then
|
||
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, itemId.FreeGem, itemId.ActionPoint, itemId.Coin)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiNewCharActivity:OnEnable()
|
||
self:PlayAnimation("PanelMainEnable")
|
||
|
||
if self.RedPointId then
|
||
XRedPointManager.Check(self.RedPointId)
|
||
end
|
||
|
||
if self.CurrentView == PageIndex.Teaching then
|
||
self.PanelLineChapter:OnShow(0)
|
||
end
|
||
end
|
||
|
||
function XUiNewCharActivity:OnDestroy()
|
||
self.IsOpenDetails = nil
|
||
self:StopActivityTimer()
|
||
--XEventManager.RemoveEventListener(XEventId.EVENT_ON_FESTIVAL_CHANGED, self.RefreshFestivalNodes, self)
|
||
end
|
||
|
||
function XUiNewCharActivity:InitUiView()
|
||
self.BtnBack.CallBack = function() self:OnBtnBackClick() end
|
||
self.BtnMainUi.CallBack = function() self:OnBtnMainUiClick() end
|
||
self.BtnProfile.CallBack = function() self:OnBtnProfileClick() end
|
||
self.BtnReward.CallBack = function() self:OnBtnRewardClick() end
|
||
self.BtnObtain.CallBack = function() self:OnBtnObtainClick() end
|
||
self.BtnCharDetail.CallBack = function() self:OnBtnCharDetailClick() end
|
||
self.BtnTeaching.CallBack = function() self:OnBtnTeachingClick() end
|
||
end
|
||
|
||
function XUiNewCharActivity:InitSceneRoot()
|
||
local root = self.UiModelGo.transform
|
||
self.CameraFar = {
|
||
root:FindTransform("FarCamera1"),
|
||
root:FindTransform("FarCamera2"),
|
||
root:FindTransform("FarCamera3"),
|
||
}
|
||
self.CameraNear = {
|
||
root:FindTransform("NearCamera1"),
|
||
root:FindTransform("NearCamera2"),
|
||
root:FindTransform("NearCamera3"),
|
||
}
|
||
end
|
||
|
||
function XUiNewCharActivity:UpdateCamera(camera)
|
||
for _, cameraIndex in pairs(PageIndex) do
|
||
self.CameraNear[cameraIndex].gameObject:SetActive(cameraIndex == camera)
|
||
self.CameraFar[cameraIndex].gameObject:SetActive(cameraIndex == camera)
|
||
end
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnBackClick()
|
||
if self.CurrentView ~= PageIndex.Main then
|
||
self:SwitchPanelProfile(false)
|
||
self:UpdateCamera(PageIndex.Main)
|
||
if self.CurrentView == PageIndex.Teaching then
|
||
self.PanelLineChapter:OnHide()
|
||
end
|
||
|
||
self.AnimTimer = XScheduleManager.ScheduleOnce(function()
|
||
self.PanelTeaching.gameObject:SetActiveEx(false)
|
||
self:OnSwitchView()
|
||
end, Delay[self.CurrentView])
|
||
|
||
self.CurrentView = PageIndex.Main
|
||
else
|
||
self:Close()
|
||
end
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnMainUiClick()
|
||
XLuaUiManager.RunMain()
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnTeachingClick()
|
||
self.CurrentView = PageIndex.Teaching
|
||
self:OnSwitchView()
|
||
self.PanelTeaching.gameObject:SetActiveEx(true)
|
||
self.PanelLineChapter:OnShow()
|
||
self:UpdateCamera(PageIndex.Teaching)
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnProfileClick()
|
||
self.CurrentView = PageIndex.Profile
|
||
self.CurrentMsgIndex = 0
|
||
self:OnSwitchView()
|
||
self:SwitchPanelProfile(true)
|
||
self:UpdateCamera(PageIndex.Profile)
|
||
self:PlayAnimation("MsgEnable")
|
||
self:RefreshProfile()
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnRewardClick()
|
||
if XLuaUiManager.IsUiLoad("UiActivityBase") then
|
||
XLuaUiManager.Remove("UiActivityBase")
|
||
end
|
||
-- 活动奖励,点击跳转活动任务界面
|
||
XFunctionManager.SkipInterface(self.ActTemplate.SkipIdAct)
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnCharDetailClick()
|
||
-- 打开通用角色信息面板
|
||
XLuaUiManager.Open("UiCharacterDetail", self.ActTemplate.CharacterId)
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnObtainClick()
|
||
-- 前往获取,点击跳转主题抽卡界面
|
||
XFunctionManager.SkipInterface(self.ActTemplate.SkipIdDraw)
|
||
end
|
||
|
||
function XUiNewCharActivity:RefreshProfile()
|
||
self.MsgList = XFubenNewCharConfig.GetMsgGroupById(self.ActId)
|
||
for index, v in ipairs(self.MsgList) do
|
||
if not self.TabBtns[index] then
|
||
self.TabBtns[index] = self["BtnMsg"..index]
|
||
-- self.InitEffect[index] = XUiHelper.TryGetComponent(self.TabBtns[index].transform, "Press/Effect", "RectTransform")
|
||
self.SwitchEffect[index] = XUiHelper.TryGetComponent(self.TabBtns[index].transform, "Normal/Effect", "RectTransform")
|
||
self.TabBtns[index]:SetNameByGroup(0, v.Title)
|
||
--解锁条件
|
||
local desc = XConditionManager.GetConditionDescById(v.ConditionId)
|
||
self.TabBtns[index]:SetNameByGroup(1, desc)
|
||
self.TabBtns[index]:SetRawImage(v.BtnBg)
|
||
end
|
||
|
||
if v.IsLock then
|
||
local result = XConditionManager.CheckCondition(v.ConditionId)
|
||
-- XUiButtonState.Press 是第二种Normal状态(只在还未选择任何线索时显示)
|
||
self.TabBtns[index]:SetButtonState(result and XUiButtonState.Press or XUiButtonState.Disable)
|
||
end
|
||
end
|
||
self.BtnGrp:Init(self.TabBtns, function(index) self:OnBtnMsg(index) end, 0)
|
||
self.MsgContent.gameObject:SetActiveEx(false)
|
||
self.MsgContentBg.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
function XUiNewCharActivity:OnBtnMsg(index)
|
||
local btn = self.TabBtns[index]
|
||
if btn.ButtonState == CS.UiButtonState.Disable then
|
||
local desc = XConditionManager.GetConditionDescById(self.MsgList[index].ConditionId)
|
||
XUiManager.TipMsg(desc)
|
||
return
|
||
end
|
||
|
||
for i, v in ipairs(self.TabBtns) do
|
||
if v.ButtonState ~= CS.UiButtonState.Disable then
|
||
-- 点击线索后,其他线索变为第一种Normal状态(置为灰色)
|
||
v:SetButtonState(self.CurrentMsgIndex == i and XUiButtonState.Select or XUiButtonState.Normal)
|
||
end
|
||
-- 特效只在切换时显示
|
||
self.SwitchEffect[i].gameObject:SetActive(self.CurrentMsgIndex == i)
|
||
-- self.InitEffect[i].gameObject:SetActive(MsgBtnAnimEnable)
|
||
end
|
||
|
||
--if self.MsgBtnAnimEnable then
|
||
-- self.MsgBtnAnimEnable = false
|
||
--end
|
||
if self.CurrentMsgIndex == index then
|
||
-- 点击已选中线索则为取消选中
|
||
self:RefreshProfile()
|
||
self.CurrentMsgIndex = 0
|
||
return
|
||
end
|
||
|
||
self.MsgContent.gameObject:SetActiveEx(true)
|
||
self.MsgContentBg.gameObject:SetActiveEx(true)
|
||
-- 将选中的线索层级置为内容区之上,其他层级置为内容区之下
|
||
self.MsgContent:SetSiblingIndex(self.MsgContent.parent.childCount - 1)
|
||
btn.transform:SetSiblingIndex(btn.transform.parent.childCount - 1)
|
||
self.TxtSerial.text = string.format("NO.%d", index)
|
||
self.TxtMsg.text = string.gsub(self.MsgList[index].Content, "\\n", "\n")
|
||
-- 每次查看线索时,文本都从最开头进行显示
|
||
self.MsgScrollRect.verticalNormalizedPosition = 1
|
||
self.CurrentMsgIndex = index
|
||
-- 用于将Press状态的按钮强制转换为Select状态,且需确保其位于判等返回函数之后
|
||
self.BtnGrp:SelectIndex(index, false)
|
||
self:PlayAnimation("MsgContentEnable")
|
||
end
|
||
|
||
function XUiNewCharActivity:OnSwitchView(nextView)
|
||
if self.CurrentView == PageIndex.Main then
|
||
self.PanelMain.gameObject:SetActiveEx(true)
|
||
self:PlayAnimation("PanelMainEnable", function ()
|
||
end)
|
||
else
|
||
self:PlayAnimation("PanelMainDisable", function ()
|
||
self.PanelMain.gameObject:SetActiveEx(false)
|
||
end)
|
||
-- self.MsgBtnAnimEnable = true
|
||
end
|
||
end
|
||
|
||
function XUiNewCharActivity:SwitchPanelProfile(state)
|
||
self.PanelProfile.gameObject:SetActiveEx(state)
|
||
self.PanelProfileBg.gameObject:SetActiveEx(state)
|
||
self.MsgContentBg.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
function XUiNewCharActivity:ReopenAssetPanel()
|
||
if self.IsOpenDetails then
|
||
return
|
||
end
|
||
if self.AssetPanel then
|
||
self.AssetPanel.GameObject:SetActiveEx(true)
|
||
end
|
||
end
|
||
|
||
-- 背景
|
||
function XUiNewCharActivity:SwitchBg(actTemplate)
|
||
if not actTemplate or not actTemplate.MainBackgound then return end
|
||
self.RImgFestivalBg:SetRawImage(actTemplate.MainBackgound)
|
||
end
|
||
|
||
-- 计时器
|
||
function XUiNewCharActivity:CreateActivityTimer(startTime, endTime)
|
||
local time = XTime.GetServerNowTimestamp()
|
||
self:StopActivityTimer()
|
||
self.ActivityTimer = XScheduleManager.ScheduleForever(function()
|
||
time = XTime.GetServerNowTimestamp()
|
||
if time > endTime then
|
||
self:Close()
|
||
XUiManager.TipError(CS.XTextManager.GetText("ActivityMainLineEnd"))
|
||
self:StopActivityTimer()
|
||
return
|
||
end
|
||
self.TxtDay.text = XUiHelper.GetTime(endTime - time, XUiHelper.TimeFormatType.ACTIVITY)
|
||
end, XScheduleManager.SECOND, 0)
|
||
end
|
||
|
||
function XUiNewCharActivity:StopActivityTimer()
|
||
if self.ActivityTimer then
|
||
XScheduleManager.UnSchedule(self.ActivityTimer)
|
||
self.ActivityTimer = nil
|
||
end
|
||
if self.AnimTimer then
|
||
XScheduleManager.UnSchedule(self.AnimTimer)
|
||
self.AnimTimer = nil
|
||
end
|
||
end
|
||
|
||
function XUiNewCharActivity:OnCheckBtnGameRedPoint(count)
|
||
self.BtnSkip:ShowReddot(count>=0)
|
||
end
|