427 lines
No EOL
14 KiB
Lua
427 lines
No EOL
14 KiB
Lua
---@desc 提示类型
|
||
---@field YK 月卡提示
|
||
---@field Gift 礼包提示
|
||
local TipsType = {
|
||
YK = 1,
|
||
Gift = 2,
|
||
DormTerminal = 3, -- 宿舍终端提示
|
||
}
|
||
|
||
local XUiGridTip = XClass(nil, "XUiGridTip")
|
||
|
||
function XUiGridTip:Ctor(ui, clickCb)
|
||
XTool.InitUiObjectByUi(self, ui)
|
||
self.ClickCb = clickCb
|
||
|
||
self.BtnTip.CallBack = function() self:OnClick() end
|
||
end
|
||
|
||
function XUiGridTip:Refresh(data)
|
||
self.Data = data
|
||
self.TxtTips.text = data.Data
|
||
end
|
||
|
||
function XUiGridTip:OnClick()
|
||
if self.ClickCb then self.ClickCb(self.Data.Type) end
|
||
end
|
||
|
||
--=========================================类分界线=========================================--
|
||
--主界面会频繁打开,采用常量缓存
|
||
local RedPointConditionGroup = {
|
||
Week = {
|
||
XRedPointConditions.Types.CONDITION_MAIN_WEEK
|
||
},
|
||
Friend = {
|
||
XRedPointConditions.Types.CONDITION_MAIN_FRIEND
|
||
},
|
||
Set = {
|
||
XRedPointConditions.Types.CONDITION_MAIN_SET
|
||
},
|
||
--2.5,2.6隐藏,2.7出了周历后应该会再次启用
|
||
--[[
|
||
Screen={
|
||
XRedPointConditions.Types.CONDITION_SCENE_SETTING
|
||
}
|
||
--]]
|
||
}
|
||
|
||
local XUiMainPanelBase = require("XUi/XUiMain/XUiMainPanelBase")
|
||
|
||
---@class XUiMainTerminal 终端界面类
|
||
---@field uiMain 主界面引用
|
||
local XUiMainTerminal = XClass(XUiMainPanelBase, "XUiMainTerminal")
|
||
|
||
-- 一分钟
|
||
local Minute = XScheduleManager.SECOND * 60
|
||
-- Unity Time
|
||
local CsTime = CS.UnityEngine.Time
|
||
-- 音乐图标 旋转速度
|
||
local RotateSpeed = CS.XGame.ClientConfig:GetFloat("MusicPlayerIconRotateSpeed")
|
||
-- 音乐名滚动速度
|
||
local SubtitleSpeed = CS.XGame.ClientConfig:GetFloat("MusicPlayerTextScrollSpeed")
|
||
|
||
local CsVector3 = CS.UnityEngine.Vector3
|
||
|
||
function XUiMainTerminal:OnStart(uiMain)
|
||
self.UiMain = uiMain
|
||
-- XTool.InitUiObjectByUi(self, self.UiMain.PanelRightMidSecond)
|
||
self.GridTips = {}
|
||
self:InitUi()
|
||
self:InitCb()
|
||
end
|
||
|
||
function XUiMainTerminal:Show()
|
||
--时间刷新
|
||
self:RefreshTime()
|
||
if not self.TimerId then
|
||
self.TimerId = XScheduleManager.ScheduleForever(function()
|
||
self:RefreshTime()
|
||
end, Minute)
|
||
end
|
||
|
||
--刷新播放器
|
||
self:RefreshMusicPlayer()
|
||
--刷新子菜单
|
||
self:RefreshSubMenu()
|
||
--刷新提示栏
|
||
self:RefreshGridTips()
|
||
|
||
|
||
--Update Timer
|
||
if not self.UpdateTimer then
|
||
self.UpdateTimer = XScheduleManager.ScheduleForever(function()
|
||
self:Update()
|
||
end, 0, XScheduleManager.SECOND)
|
||
end
|
||
|
||
--改变状态-触发红点检查
|
||
XEventManager.DispatchEvent(XEventId.EVENT_MAINUI_TERMINAL_STATUS_CHANGE)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_MAINUI_TERMINAL_STATUS_CHANGE)
|
||
--2.5,2.6隐藏,2.7出了周历后应该会再次启用
|
||
--[[
|
||
XRedPointManager.Check(self.ScreenPointId)
|
||
--]]
|
||
XDataCenter.UiPcManager.OnUiEnable(self, "OnBtnTanchuangCloseBig")
|
||
end
|
||
|
||
function XUiMainTerminal:Update()
|
||
if not self.GameObject.activeInHierarchy then
|
||
return
|
||
end
|
||
|
||
if self.NeedScroll then
|
||
self:OnScrollTxtName(self.PanelAuthorName, self.OriginPos, self.ContentWidth, self.MaskWidth)
|
||
end
|
||
|
||
self:OnRotateMusicIcon()
|
||
end
|
||
|
||
function XUiMainTerminal:OnDisable()
|
||
if self.TimerId then
|
||
XScheduleManager.UnSchedule(self.TimerId)
|
||
self.TimerId = nil
|
||
end
|
||
|
||
if self.UpdateTimer then
|
||
XScheduleManager.UnSchedule(self.UpdateTimer)
|
||
self.UpdateTimer = nil
|
||
end
|
||
--改变状态-触发红点检查
|
||
XEventManager.DispatchEvent(XEventId.EVENT_MAINUI_TERMINAL_STATUS_CHANGE)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_MAINUI_TERMINAL_STATUS_CHANGE)
|
||
XDataCenter.UiPcManager.OnUiDisableAbandoned(true, self)
|
||
end
|
||
|
||
function XUiMainTerminal:InitCb()
|
||
--界面关闭
|
||
self.BtnTanchuangCloseBig.CallBack = function()
|
||
self:OnBtnTanchuangCloseBig()
|
||
end
|
||
--音乐播放
|
||
self.BtnMusicPlayer.CallBack = function()
|
||
self:OnBtnMusicPlayerClick()
|
||
end
|
||
--活动日历
|
||
self.BtnWeek.CallBack = function()
|
||
self:OnBtnWeekClick()
|
||
end
|
||
--场景切换
|
||
self.BtnScreen.CallBack=function()
|
||
XLuaUiManager.Open("UiSceneSettingMain")
|
||
end
|
||
--拍照分享
|
||
self.BtnScreenShot.CallBack = function()
|
||
self:OnBtnScreenShotClick()
|
||
end
|
||
--好友/社交
|
||
self.BtnSocial.CallBack = function()
|
||
self:OnBtnSocialClick()
|
||
end
|
||
--系统设置
|
||
self.BtnSet.CallBack = function()
|
||
self.OnBtnSetClick()
|
||
end
|
||
end
|
||
|
||
function XUiMainTerminal:InitUi()
|
||
self.OriginPos = self.PanelAuthorName.transform.localPosition
|
||
|
||
self.GridTip.gameObject:SetActiveEx(false)
|
||
|
||
--子菜单动态列表
|
||
self.DynamicTable = XDynamicTableNormal.New(self.ScrollView)
|
||
self.DynamicTable:SetProxy(require("XUi/XUiMain/XUiChildItem/XUiGridSubMenuItem"))
|
||
self.DynamicTable:SetDelegate(self)
|
||
|
||
--按钮筛选显示
|
||
self.BtnWeek.gameObject:SetActiveEx(XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.ActivityCalendar) and not XUiManager.IsHideFunc)
|
||
self.BtnScreenShot.gameObject:SetActiveEx(not XUiManager.IsHideFunc)
|
||
self.BtnSocial.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.SocialFriend) and not XUiManager.IsHideFunc)
|
||
self.BtnSet.gameObject:SetActiveEx(not XFunctionManager.CheckFunctionFitter(XFunctionManager.FunctionName.Setting))
|
||
|
||
--红点注册
|
||
self.WeekPointId = XRedPointManager.AddRedPointEvent(self.BtnWeek, self.CheckBtnWeekRedPoint, self, RedPointConditionGroup.Week)
|
||
XRedPointManager.AddRedPointEvent(self.BtnSocial.ReddotObj, self.CheckBtnSocialRedPoind, self, RedPointConditionGroup.Friend)
|
||
XRedPointManager.AddRedPointEvent(self.BtnSet, self.CheckBtnSetRedPoint, self, RedPointConditionGroup.Set)
|
||
--2.5,2.6隐藏,2.7出了周历后应该会再次启用
|
||
--[[
|
||
self.ScreenPointId=XRedPointManager.AddRedPointEvent(self.BtnScreen,self.CheckBtnScreenRedPoint,self,RedPointConditionGroup.Screen)
|
||
--]]
|
||
end
|
||
|
||
function XUiMainTerminal:RefreshTime()
|
||
local timeOfNow = XTime.GetServerNowTimestamp()
|
||
local dayOfWeek = os.date("%A", timeOfNow)
|
||
self.TxtDate.text = os.date("%m/%d", timeOfNow)
|
||
self.TxtWeekday.text = CS.XTextManager.GetText(dayOfWeek)
|
||
self.BtnWeek:SetNameByGroup(0, os.date("%d", timeOfNow))
|
||
self.BtnWeek:SetNameByGroup(1, os.date("%a", timeOfNow))
|
||
self.TxtTime.text = XTime.TimestampToGameDateTimeString(timeOfNow, "HH:mm")
|
||
end
|
||
|
||
function XUiMainTerminal:RefreshMusicPlayer()
|
||
if XUiManager.IsHideFunc then
|
||
self.BtnMusicPlayer.gameObject:SetActiveEx(false)
|
||
end
|
||
|
||
local albumId = XDataCenter.MusicPlayerManager.GetUiMainNeedPlayedAlbumId()
|
||
local template = XMusicPlayerConfigs.GetAlbumTemplateById(albumId)
|
||
if not template then
|
||
return
|
||
end
|
||
self.TxtMusicName.text = string.gsub(XUiHelper.ReplaceTextNewLine(template.Name), "\n", "")
|
||
self.TxtAuthorName.text = string.gsub(XUiHelper.ReplaceTextNewLine(template.Composer), "\n", "")
|
||
self.RImgMusicIcon:SetRawImage(template.Cover)
|
||
self.RImgMusicBg:SetRawImage(template.Bg)
|
||
|
||
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self.PanelAuthorName)
|
||
self.ContentWidth = self.PanelAuthorName.sizeDelta.x
|
||
self.MaskWidth = self.PanelMusicName.sizeDelta.x
|
||
|
||
self.NeedScroll = self.ContentWidth > self.MaskWidth
|
||
self.PanelAuthorName.transform.localPosition = self.OriginPos
|
||
end
|
||
|
||
--音乐选择界面关闭回调
|
||
function XUiMainTerminal:OnMusicPlayerClose()
|
||
self:RefreshMusicPlayer()
|
||
end
|
||
|
||
function XUiMainTerminal:RefreshSubMenu()
|
||
local dataList = self:GetSubMenuList()
|
||
if XTool.IsTableEmpty(dataList) then
|
||
self.SubMenuList = {
|
||
{ Id = -1, Title = "Loading", SubTitle = "...", StyleType = 1 }
|
||
}
|
||
else
|
||
self.SubMenuList = dataList
|
||
end
|
||
self.DynamicTable:SetDataSource(self.SubMenuList)
|
||
self.DynamicTable:ReloadDataASync()
|
||
end
|
||
|
||
function XUiMainTerminal:GetSubMenuList()
|
||
local func = function(list, subType)
|
||
local newList = {}
|
||
for _, item in ipairs(list or {}) do
|
||
item = XTool.Clone(item)
|
||
item.SubMenuType = subType
|
||
table.insert(newList, item)
|
||
end
|
||
return newList
|
||
end
|
||
--系统相关按钮
|
||
local systemList = func(XUiConfigs.GetSystemSubMenuList(), XUiConfigs.SubMenuType.System)
|
||
--运营相关按钮
|
||
local operateList = func(XDataCenter.NoticeManager.GetMainUiSubMenu(), XUiConfigs.SubMenuType.Operate)
|
||
|
||
return appendArray(systemList, operateList)
|
||
end
|
||
|
||
function XUiMainTerminal:RefreshGridTips()
|
||
local tips = {}
|
||
if XDataCenter.PurchaseManager.CheckYKContinueBuy() then
|
||
local tip = {
|
||
Data = XUiHelper.GetText("PurchaseYKExpireDes"),
|
||
Type = TipsType.YK
|
||
}
|
||
table.insert(tips, tip)
|
||
end
|
||
local giftCount = XDataCenter.PurchaseManager.ExpireCount or 0
|
||
if giftCount > 0 then
|
||
local tip = {
|
||
Data = giftCount == 1 and XUiHelper.GetText("PurchaseGiftValitimeTips1") or XUiHelper.GetText("PurchaseGiftValitimeTips2"),
|
||
Type = TipsType.Gift
|
||
}
|
||
table.insert(tips, tip)
|
||
end
|
||
-- 宿舍终端提示 可领取 > 可派遣
|
||
local dispatchedCount, unDispatchCount = XDataCenter.DormQuestManager.GetEntranceShowData()
|
||
if dispatchedCount > 0 then
|
||
local tip = {
|
||
Data = XUiHelper.GetText("DormQuestTerminalMainTeamRegress", dispatchedCount),
|
||
Type = TipsType.DormTerminal
|
||
}
|
||
table.insert(tips, tip)
|
||
elseif unDispatchCount > 0 then
|
||
local tip = {
|
||
Data = XUiHelper.GetText("DormQuestTerminalMainTeamFree", unDispatchCount),
|
||
Type = TipsType.DormTerminal
|
||
}
|
||
table.insert(tips, tip)
|
||
end
|
||
for idx, tip in ipairs(tips) do
|
||
local grid = self.GridTips[idx]
|
||
if not grid then
|
||
local ui = idx == 1 and self.GridTip or XUiHelper.Instantiate(self.GridTip, self.PanelMobileList)
|
||
grid = XUiGridTip.New(ui, handler(self, self.OnGridTipClick))
|
||
self.GridTips[idx] = grid
|
||
end
|
||
grid:Refresh(tip)
|
||
end
|
||
|
||
local tipCount = #tips
|
||
for idx, grid in ipairs(self.GridTips) do
|
||
grid.GameObject:SetActiveEx(idx <= tipCount)
|
||
end
|
||
local childCount = self.PanelMobileList.childCount
|
||
self.ScrollView.transform:SetSiblingIndex(childCount - 1)
|
||
end
|
||
|
||
--region ------------------界面事件 start-------------------
|
||
|
||
--界面关闭
|
||
function XUiMainTerminal:OnBtnTanchuangCloseBig()
|
||
if self.UiMain.OnShowMain then
|
||
self.UiMain:OnShowMain(true)
|
||
end
|
||
self:OnDisable()
|
||
end
|
||
|
||
--音乐播放器
|
||
function XUiMainTerminal:OnBtnMusicPlayerClick()
|
||
XUiHelper.RecordBuriedSpotTypeLevelOne(XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnMusicPlayer)
|
||
XLuaUiManager.Open("UiMusicPlayer", handler(self, self.OnMusicPlayerClose))
|
||
end
|
||
|
||
--活动日历
|
||
function XUiMainTerminal:OnBtnWeekClick()
|
||
XDataCenter.ActivityCalendarManager.SaveWeekClick()
|
||
if self.WeekPointId then
|
||
XRedPointManager.Check(self.WeekPointId)
|
||
end
|
||
XUiHelper.RecordBuriedSpotTypeLevelOne(XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnWeek)
|
||
XLuaUiManager.Open("UiWeekCalendar")
|
||
end
|
||
|
||
--拍照分享
|
||
function XUiMainTerminal:OnBtnScreenShotClick()
|
||
if XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Photograph) then
|
||
XUiHelper.RecordBuriedSpotTypeLevelOne(XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnScreenShot)
|
||
XLuaUiManager.Open("UiPhotograph")
|
||
end
|
||
end
|
||
|
||
--好友/社交
|
||
function XUiMainTerminal:OnBtnSocialClick()
|
||
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.SocialFriend) then
|
||
return
|
||
end
|
||
XUiHelper.RecordBuriedSpotTypeLevelOne(XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnSocial)
|
||
XLuaUiManager.Open("UiSocial")
|
||
end
|
||
|
||
--系统设置
|
||
function XUiMainTerminal:OnBtnSetClick()
|
||
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Setting) then
|
||
return
|
||
end
|
||
XUiHelper.RecordBuriedSpotTypeLevelOne(XGlobalVar.BtnBuriedSpotTypeLevelOne.BtnUiMainBtnSet)
|
||
XLuaUiManager.Open("UiSet", false)
|
||
end
|
||
|
||
--歌名滚动
|
||
function XUiMainTerminal:OnScrollTxtName(transform, originPos, width, contentWidth)
|
||
transform:Translate(CsVector3.left * CsTime.deltaTime * SubtitleSpeed)
|
||
local pos = transform.localPosition
|
||
local distance = math.abs(pos.x - originPos.x)
|
||
if distance > width then
|
||
pos.x = originPos.x + contentWidth
|
||
pos.y = 0
|
||
pos.z = 0
|
||
transform.localPosition = pos
|
||
end
|
||
end
|
||
|
||
--歌曲Icon旋转
|
||
function XUiMainTerminal:OnRotateMusicIcon()
|
||
self.RImgMusicIcon.transform:Rotate(0, 0, CsTime.deltaTime * RotateSpeed);
|
||
end
|
||
|
||
function XUiMainTerminal:OnGridTipClick(tipType)
|
||
if tipType == TipsType.YK then
|
||
XDataCenter.PurchaseManager.SetYKContinueBuy()
|
||
XLuaUiManager.Open("UiPurchase", XPurchaseConfigs.TabsConfig.YK)
|
||
elseif tipType == TipsType.Gift then
|
||
XLuaUiManager.Open("UiPurchase", XPurchaseConfigs.TabsConfig.LB)
|
||
elseif tipType == TipsType.DormTerminal then
|
||
XHomeDormManager.EnterDorm(XPlayer.Id, nil, false, function()
|
||
XLuaUiManager.Open("UiDormTerminalSystem")
|
||
end)
|
||
end
|
||
XEventManager.DispatchEvent(XEventId.EVENT_MAINUI_TERMINAL_STATUS_CHANGE)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_MAINUI_TERMINAL_STATUS_CHANGE)
|
||
end
|
||
|
||
function XUiMainTerminal:OnDynamicTableEvent(evt, index, grid)
|
||
if evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
||
grid:Init(self)
|
||
elseif evt == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
local data = self.SubMenuList[index]
|
||
if not data then
|
||
return
|
||
end
|
||
grid:OnRefresh(data)
|
||
end
|
||
end
|
||
--endregion------------------界面事件 finish------------------
|
||
|
||
--region ------------------红点检查 start-------------------
|
||
function XUiMainTerminal:CheckBtnWeekRedPoint(count)
|
||
self.BtnWeek:ShowReddot(count >= 0 and XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.ActivityCalendar))
|
||
end
|
||
|
||
function XUiMainTerminal:CheckBtnSocialRedPoind(count)
|
||
self.BtnSocial:ShowReddot(count >= 0 and XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.SocialFriend))
|
||
end
|
||
|
||
function XUiMainTerminal:CheckBtnSetRedPoint(count)
|
||
self.BtnSet:ShowReddot(count >= 0)
|
||
end
|
||
|
||
function XUiMainTerminal:CheckBtnScreenRedPoint(count)
|
||
self.BtnScreen:ShowReddot(count>=0)
|
||
end
|
||
--endregion------------------红点检查 finish------------------
|
||
|
||
return XUiMainTerminal |