forked from endernon/PGRData
677 lines
No EOL
24 KiB
Lua
677 lines
No EOL
24 KiB
Lua
local XUiChatServeMain = XLuaUiManager.Register(XLuaUi, "UiChatServeMain")
|
||
local ToggleName = {
|
||
CS.XTextManager.GetText("World"),
|
||
CS.XTextManager.GetText("Team"),
|
||
CS.XTextManager.GetText("Guild"),
|
||
CS.XTextManager.GetText("Mentor"),
|
||
-- CS.XTextManager.GetText("System"),
|
||
}
|
||
|
||
local ToggleType = {
|
||
ChatChannelType.World,
|
||
ChatChannelType.Room,
|
||
ChatChannelType.Guild,
|
||
ChatChannelType.Mentor,
|
||
-- ChatChannelType.System,
|
||
}
|
||
|
||
local DefaultType = ChatChannelType.World
|
||
local ChannelRefreshTime = CS.XGame.ClientConfig:GetInt("ChannelInfoRefreshMin")
|
||
local FadeTime = CS.XGame.ClientConfig:GetInt("ChannelChangeFadeTime")
|
||
local XUiGridChatChannelItem = require("XUi/XUiChatServe/Item/XUiGridChatChannelItem")
|
||
|
||
local ChatRoomChannelNotOpen = CS.XTextManager.GetText("ChatRoomChannelNotOpen")
|
||
local IsMessageTipShow = false
|
||
function XUiChatServeMain:OnAwake()
|
||
self:InitAutoScript()
|
||
self.BtnRoom.CallBack = function() self:OnBtnRoomClick() end
|
||
self.BtnChannelSure.CallBack = function() self:OnBtnChannelSureClick() end
|
||
self.BtnChannelMask.CallBack = function() self:OnBtnChannelMaskClick() end
|
||
|
||
self.DynamicTableChannels = XDynamicTableNormal.New(self.ChannelList.gameObject)
|
||
self.DynamicTableChannels:SetProxy(XUiGridChatChannelItem)
|
||
self.DynamicTableChannels:SetDelegate(self)
|
||
|
||
self:SetBtnReportActive(false)
|
||
end
|
||
|
||
function XUiChatServeMain:OnDynamicTableEvent(event, index, grid)
|
||
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
||
grid:Init(self.UiRoot)
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
local curChannelData = self.ChannelInfos[index]
|
||
if curChannelData then
|
||
grid:SetItemData(curChannelData)
|
||
end
|
||
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
self:OnChannelInfoClick(index)
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:OnStart(isMain, ...)
|
||
local args = { ... }
|
||
self.SelType = args[1] or DefaultType
|
||
self.Inited = true
|
||
self.InputField.characterLimit = XDataCenter.ChatManager.GetWorldChatMaxCount()
|
||
self:CreateObject()
|
||
self.timerId = -1
|
||
|
||
self.ChannelSet = {}
|
||
for _, v in pairs(args) do
|
||
self.ChannelSet[v] = true
|
||
end
|
||
|
||
if XDataCenter.GuildManager.IsJoinGuild() and not self.ChannelSet[ChatChannelType.Guild] then
|
||
self.ChannelSet[ChatChannelType.Guild] = true
|
||
end
|
||
XDataCenter.GuildManager.RequestGuildData()
|
||
|
||
local mentorData = XDataCenter.MentorSystemManager.GetMentorData()
|
||
if mentorData:CheckCanUseChat(false) and not self.ChannelSet[ChatChannelType.Mentor] then
|
||
self.ChannelSet[ChatChannelType.Mentor] = true
|
||
end
|
||
|
||
self.CurrentSelectedChannel = XDataCenter.ChatManager.GetCurrentChatChannelId()
|
||
|
||
if isMain then
|
||
self.ImgBgMain:SetActive(true)
|
||
self.ImgBgCommon:SetActive(false)
|
||
else
|
||
self.ImgBgMain:SetActive(false)
|
||
self.ImgBgCommon:SetActive(true)
|
||
end
|
||
XRedPointManager.AddRedPointEvent(self.Content, self.OnCheckRedPoint, self, { XRedPointConditions.Types.CONDITION_RECEIVE_CHAT }, nil, false)
|
||
end
|
||
|
||
function XUiChatServeMain:OnEnable()
|
||
self:Refresh()
|
||
end
|
||
|
||
function XUiChatServeMain:OnDisable()
|
||
self:StopChannelTimer()
|
||
self:StopMsgTipsTimer()
|
||
self:RemoveTimer()
|
||
self.UiPanelEmoji:OnDisable()
|
||
self.UiPanelEmojiSetting:OnDisable()
|
||
end
|
||
|
||
function XUiChatServeMain:OnDestroy()
|
||
self:StopChannelTimer()
|
||
self:StopMsgTipsTimer()
|
||
self:RemoveTimer()
|
||
self.UiPanelEmoji:OnDestroy()
|
||
self.UiPanelEmojiSetting:OnDestroy()
|
||
-- 重置特效冷却时间
|
||
XDataCenter.ChatManager.SetEffectEnd(0)
|
||
end
|
||
|
||
function XUiChatServeMain:CreateObject()
|
||
self.UiPanelChatContent = XUiPanelChatContent.New(self, self.PanelChatContent, self)
|
||
local XUiPanelEmojiEx = require("XUi/XUiChatServe/ChatModel/EmojiModel/XUiPanelEmojiEx")
|
||
self.UiPanelEmoji = XUiPanelEmojiEx.New(self, self.PanelEmoji, self)
|
||
local clickCallBack = function(content)
|
||
self.UiPanelEmoji:Hide()
|
||
self:OnClickEmoji(content)
|
||
end
|
||
self.UiPanelEmoji:SetClickCallBack(clickCallBack)
|
||
self.UiPanelEmoji:Hide()
|
||
local XUiPanelEmojiSetting = require("XUi/XUiChatServe/ChatModel/EmojiModel/XUiPanelEmojiPackSetting")
|
||
self.UiPanelEmojiSetting = XUiPanelEmojiSetting.New(self, self.PanelEmojiSetup)
|
||
self.UiPanelEmojiSetting:Hide()
|
||
end
|
||
|
||
-- auto
|
||
-- Automatic generation of code, forbid to edit
|
||
function XUiChatServeMain:InitAutoScript()
|
||
self:AutoInitUi()
|
||
self:AutoAddListener()
|
||
end
|
||
|
||
function XUiChatServeMain:AutoInitUi()
|
||
self.PanelChatServe = self.Transform:Find("SafeAreaContentPane/PanelChatServe")
|
||
self.ImgBgleft = self.Transform:Find("SafeAreaContentPane/PanelChatServe/ImgBg/ImgBgleft")
|
||
self.PanelChatContent = self.Transform:Find("SafeAreaContentPane/PanelChatServe/PanelChatContent")
|
||
self.GridChatItem = self.Transform:Find("SafeAreaContentPane/PanelChatServe/PanelLeftToggle/Viewport/Content/GridChatItem")
|
||
self.PanelMsgTips = self.Transform:Find("SafeAreaContentPane/PanelChatServe/PanelMsgTips")
|
||
self.BtnPanelMsgTips = self.Transform:Find("SafeAreaContentPane/PanelChatServe/PanelMsgTips/BtnImgBg"):GetComponent("Button")
|
||
self.TxtMsgCount = self.Transform:Find("SafeAreaContentPane/PanelChatServe/PanelMsgTips/TxtMsgCount"):GetComponent("Text")
|
||
self.BtnSend = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnContent/BtnSend"):GetComponent("Button")
|
||
-- self.BtnAdd = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnContent/BtnAdd"):GetComponent("Button")
|
||
self.InputField = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnContent/InF_Content"):GetComponent("InputField")
|
||
self.TxtEnter = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnContent/InF_Content/TxtEnter"):GetComponent("Text")
|
||
self.PanelEmoji = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnContent/PanelEmoji")
|
||
self.BtnBack = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnContent/BtnBack"):GetComponent("Button")
|
||
self.BtnChat = self.Transform:Find("SafeAreaContentPane/PanelChatServe/BtnChat"):GetComponent("Button")
|
||
self.ImgBgMain = self.Transform:Find("SafeAreaContentPane/PanelChatServe/ImgBg/ImgBgMain").gameObject
|
||
self.ImgBgCommon = self.Transform:Find("SafeAreaContentPane/PanelChatServe/ImgBg/ImgBgCommon").gameObject
|
||
end
|
||
|
||
function XUiChatServeMain:AutoAddListener()
|
||
self:RegisterClickEvent(self.BtnPanelMsgTips, self.OnBtnPanelMsgTipsClick)
|
||
self:RegisterClickEvent(self.BtnSend, self.OnBtnSendClick)
|
||
self:RegisterClickEvent(self.BtnAdd, self.OnBtnAddClick)
|
||
self:RegisterClickEvent(self.BtnBack, self.Close)
|
||
self:RegisterClickEvent(self.BtnChat, self.OnBtnChatClick)
|
||
if self.BtnReport then
|
||
self:RegisterClickEvent(self.BtnReport, self.OnBtnReportClick)
|
||
end
|
||
end
|
||
-- auto
|
||
-------------------------------Event beg-------------------------------
|
||
function XUiChatServeMain:OnGetEvents()
|
||
return { XEventId.EVENT_CHAT_RECEIVE_WORLD_MSG, XEventId.EVENT_CHAT_RECEIVE_ROOM_MSG,
|
||
XEventId.EVENT_PULL_SCROLLVIEW_END, XEventId.EVENT_CHAT_CHANNEL_CHANGED,
|
||
XEventId.EVENT_CHAT_SERVER_CHANNEL_CHANGED, XEventId.EVENT_GUILD_RECEIVE_CHAT,
|
||
XEventId.EVENT_CHAT_RECEIVE_MENTOR_MSG, XEventId.EVENT_CHAT_MATCH_EFFECT, XEventId.EVENT_CHAT_EMOJI_REFRESH_RED}
|
||
end
|
||
|
||
function XUiChatServeMain:OnNotify(evt, ...)
|
||
if evt == XEventId.EVENT_CHAT_RECEIVE_WORLD_MSG then
|
||
self.UiPanelChatContent:ReceiveChatHandler(...)
|
||
elseif evt == XEventId.EVENT_CHAT_RECEIVE_ROOM_MSG then
|
||
self.UiPanelChatContent:ReceiveChatHandler(...)
|
||
elseif evt == XEventId.EVENT_GUILD_RECEIVE_CHAT then
|
||
self.UiPanelChatContent:ReceiveChatHandler(...)
|
||
elseif evt == XEventId.EVENT_CHAT_RECEIVE_MENTOR_MSG then
|
||
self.UiPanelChatContent:ReceiveChatHandler(...)
|
||
elseif evt == XEventId.EVENT_PULL_SCROLLVIEW_END then
|
||
self:ShowUnreadMsgCount(...)
|
||
elseif evt == XEventId.EVENT_CHAT_CHANNEL_CHANGED then
|
||
self:UpdateCurrentChannel()
|
||
elseif evt == XEventId.EVENT_CHAT_SERVER_CHANNEL_CHANGED then
|
||
-- 服务端分配聊天渠道
|
||
if self.SelType == ChatChannelType.World then
|
||
local args = { ... }
|
||
local currentChannelId = args[1]
|
||
self:ShowChangeChatChannel(currentChannelId)
|
||
self:UpdateCurrentChannel()
|
||
|
||
self:OnBtnChannelMaskClick()
|
||
end
|
||
elseif evt == XEventId.EVENT_CHAT_MATCH_EFFECT then
|
||
self:ShowKeywordEffect(...)
|
||
elseif evt == XEventId.EVENT_CHAT_EMOJI_REFRESH_RED then
|
||
self:RefreshRedPoint()
|
||
end
|
||
end
|
||
-------------------------------Event end-------------------------------
|
||
--------------------------------Btn Event beg-----------------------------------
|
||
function XUiChatServeMain:OnBtnPanelMsgTipsClick()
|
||
self.UiPanelChatContent.UnreadMsgCount = 0
|
||
if IsMessageTipShow then
|
||
self.UiPanelChatContent:RefreshChatList(self.SelType)
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:OnBtnAddClick()
|
||
self.UiPanelEmoji:OpenOrClosePanel()
|
||
end
|
||
|
||
function XUiChatServeMain:OnBtnChatClick(eventData)
|
||
self:Close(eventData)
|
||
end
|
||
|
||
function XUiChatServeMain:OnBtnSendClick()
|
||
if self.SelType == ChatChannelType.World and not XDataCenter.ChatManager.CheckCd() then
|
||
return
|
||
end
|
||
|
||
if self.SelType == ChatChannelType.Guild and XDataCenter.GuildManager.IsJoinGuild() then
|
||
if XDataCenter.GuildManager.IsGuildTourist() then
|
||
XUiManager.TipMsg(CS.XTextManager.GetText("GuildTourstAccess"))
|
||
return
|
||
end
|
||
end
|
||
|
||
local mentorData = XDataCenter.MentorSystemManager.GetMentorData()
|
||
if self.SelType == ChatChannelType.Mentor then
|
||
if not mentorData:CheckCanUseChat(true) then
|
||
return
|
||
end
|
||
end
|
||
local content = self.InputField.text
|
||
if string.IsNilOrEmpty(content) then
|
||
self.InputField.text = ''
|
||
-- 内容为空, 则选中它
|
||
self.InputField:ActivateInputField()
|
||
return
|
||
end
|
||
|
||
|
||
|
||
local sendChat = {}
|
||
sendChat.ChannelType = self.SelType
|
||
sendChat.MsgType = ChatMsgType.Normal
|
||
sendChat.Content = content
|
||
sendChat.TargetIds = { XPlayer.Id }
|
||
self.InputField.text = ''
|
||
|
||
self:SendChat(sendChat)
|
||
end
|
||
|
||
function XUiChatServeMain:OnClickEmoji(content)
|
||
local mentorData = XDataCenter.MentorSystemManager.GetMentorData()
|
||
if self.SelType == ChatChannelType.Mentor then
|
||
if not mentorData:CheckCanUseChat(true) then
|
||
return
|
||
end
|
||
end
|
||
|
||
local sendChat = {}
|
||
sendChat.ChannelType = self.SelType
|
||
sendChat.MsgType = ChatMsgType.Emoji
|
||
sendChat.Content = content
|
||
sendChat.TargetIds = { XPlayer.Id }
|
||
XDataCenter.ChatManager.SendChat(sendChat)
|
||
|
||
self:RefreshRedPoint()
|
||
end
|
||
|
||
function XUiChatServeMain:SendChat(sendChat)
|
||
if not sendChat then
|
||
return
|
||
end
|
||
|
||
--发送聊天信息
|
||
local callBack = function(refreshCoolingTime)
|
||
self:RefreshCoolTime(refreshCoolingTime)
|
||
end
|
||
XDataCenter.ChatManager.SendChat(sendChat, callBack, true)
|
||
end
|
||
|
||
function XUiChatServeMain:Close()
|
||
if self.InputField.isFocused then
|
||
return
|
||
end
|
||
--关闭聊天
|
||
self:PlayAnimationWithMask("AnimChatOut", function()
|
||
self.Super.Close(self)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_CARD_REFRESH_WELFARE_BTN)
|
||
end)
|
||
|
||
XEventManager.DispatchEvent(XEventId.EVENT_CHAT_CLOSE_NAMEPLATE)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_CHAT_CLOSE)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_CHAT_CLOSE)
|
||
end
|
||
--------------------------------Btn Event end-----------------------------------
|
||
function XUiChatServeMain:Refresh()
|
||
self:InitializationView()
|
||
self:InitTabBtnGroup()
|
||
self:RefreshMsgPanel()
|
||
self:UpdateCurrentChannel()
|
||
self:RefreshRedPoint()
|
||
end
|
||
|
||
function XUiChatServeMain:RefreshRedPoint()
|
||
local isRed = XDataCenter.ChatManager.CheckIsNewEmoji()
|
||
self.BtnAdd:ShowReddot(isRed)
|
||
end
|
||
|
||
function XUiChatServeMain:InitializationView()
|
||
--初始化界面
|
||
self.PanelMsgTips.gameObject:SetActive(false)
|
||
|
||
XLuaUiManager.SetMask(true)
|
||
self:PlayAnimation("AnimChatEnter", function()
|
||
XLuaUiManager.SetMask(false)
|
||
|
||
if self.SelType == ChatChannelType.World then
|
||
self:ShowChangeChatChannel(self.CurrentSelectedChannel)
|
||
end
|
||
end)
|
||
XEventManager.DispatchEvent(XEventId.EVENT_CHAT_OPEN)
|
||
CsXGameEventManager.Instance:Notify(XEventId.EVENT_CHAT_OPEN)
|
||
end
|
||
|
||
function XUiChatServeMain:InitTabBtnGroup()
|
||
if self.TabGroup then
|
||
return
|
||
end
|
||
|
||
self.TabGroup = {}
|
||
for i = 1, #ToggleType do
|
||
local uiButton
|
||
if i == 1 then
|
||
uiButton = self.BtnTabMatch
|
||
else
|
||
local itemGo = CS.UnityEngine.Object.Instantiate(self.BtnTabMatch.gameObject)
|
||
itemGo.transform:SetParent(self.ContentRT, false)
|
||
uiButton = itemGo.transform:GetComponent("XUiButton")
|
||
end
|
||
|
||
local title = ToggleName[i]
|
||
local type = ToggleType[i]
|
||
local unlock = self.ChannelSet[type]
|
||
uiButton:SetName(title)
|
||
uiButton:SetDisable(not unlock)
|
||
-- 如果其他频道需要红点显示,更换判断条件即可
|
||
if (type == ChatChannelType.Guild or type == ChatChannelType.Mentor) then
|
||
local needRedPoint = XDataCenter.ChatManager.CheckRedPointByType(type)
|
||
if type == ChatChannelType.Mentor then
|
||
local mentorData = XDataCenter.MentorSystemManager.GetMentorData()
|
||
needRedPoint = needRedPoint and mentorData:CheckCanUseChat(false)
|
||
end
|
||
uiButton:ShowReddot(needRedPoint)
|
||
end
|
||
table.insert(self.TabGroup, uiButton)
|
||
end
|
||
|
||
self.Content:Init(self.TabGroup, function(tabIndex) self:OnClickTabCallBack(tabIndex) end)
|
||
self.Content:SelectIndex(self:TypeToTabIndex(self.SelType))
|
||
end
|
||
|
||
function XUiChatServeMain:TypeToTabIndex(type)
|
||
for i = 1, #ToggleType do
|
||
if ToggleType[i] == type then
|
||
return i
|
||
end
|
||
end
|
||
return 0
|
||
end
|
||
|
||
function XUiChatServeMain:OnClickTabCallBack(tabIndex)
|
||
local type = ToggleType[tabIndex]
|
||
if not type or not self.ChannelSet[type] then
|
||
if type == ChatChannelType.Room then
|
||
XUiManager.TipMsg(ChatRoomChannelNotOpen)
|
||
elseif type == ChatChannelType.Mentor then
|
||
local mentorData = XDataCenter.MentorSystemManager.GetMentorData()
|
||
mentorData:CheckCanUseChat(true)
|
||
end
|
||
return
|
||
end
|
||
-- 如果其他频道需要红点显示,更换判断条件即可
|
||
if (type == ChatChannelType.Guild or type == ChatChannelType.Mentor) then
|
||
XDataCenter.ChatManager.SetChatRead(type)
|
||
local needRedPoint = XDataCenter.ChatManager.CheckRedPointByType(type)
|
||
self.TabGroup[tabIndex]:ShowReddot(needRedPoint)
|
||
end
|
||
self.SelType = type
|
||
self.UiPanelChatContent:RefreshChatList(type)
|
||
self.PanelChannelLabel.gameObject:SetActiveEx(self.SelType == ChatChannelType.World)
|
||
-- 部队频道清除cd
|
||
if self.SelType == ChatChannelType.Room then
|
||
self:SetInputFieldText()
|
||
self:SetInputInteractable(true)
|
||
self:RemoveTimer()
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:RefreshMsgPanel()
|
||
self.UiPanelChatContent:RefreshChatList(self.SelType)
|
||
end
|
||
|
||
function XUiChatServeMain:RefreshCoolTime(refreshCoolingTime)
|
||
if refreshCoolingTime <= 0 then
|
||
return
|
||
end
|
||
|
||
-- 部队不走冷却时间逻辑
|
||
if self.SelType == ChatChannelType.Room then return end
|
||
|
||
self:SetInputInteractable(false)
|
||
self:SetInputFieldText(CS.XTextManager.GetText("CountDownTips", refreshCoolingTime))
|
||
|
||
self:RemoveTimer()
|
||
|
||
local refresh = function()
|
||
refreshCoolingTime = refreshCoolingTime - 1
|
||
local stop = refreshCoolingTime <= 0 or XTool.UObjIsNil(self.InputField)
|
||
if stop then
|
||
self:SetInputFieldText()
|
||
self:SetInputInteractable(true)
|
||
self:RemoveTimer()
|
||
else
|
||
self:SetInputFieldText(CS.XTextManager.GetText("CountDownTips", refreshCoolingTime))
|
||
end
|
||
end
|
||
self.timerId = XScheduleManager.ScheduleForever(refresh, XScheduleManager.SECOND)
|
||
end
|
||
|
||
function XUiChatServeMain:SetInputInteractable(flag)
|
||
self.InputField.interactable = flag
|
||
self.BtnSend.interactable = flag
|
||
self.BtnAdd.interactable = flag
|
||
end
|
||
|
||
function XUiChatServeMain:SetInputFieldText(text)
|
||
if not XTool.UObjIsNil(self.InputField) then
|
||
self.InputField.text = text or ""
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:RemoveTimer()
|
||
if self.timerId ~= -1 then
|
||
XScheduleManager.UnSchedule(self.timerId)
|
||
self.timerId = -1
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:ShowUnreadMsgCount(count)
|
||
if XTool.UObjIsNil(self.GameObject) then
|
||
return
|
||
end
|
||
|
||
if count <= 0 then
|
||
-- 如果计时器开着,直接return
|
||
self.UiPanelChatContent.UnreadMsgCount = 0
|
||
if self.showMsgTimer and self.showMsgTimer ~= -1 then return end
|
||
self.PanelMsgTips.gameObject:SetActive(false)
|
||
else
|
||
-- 关计时器如果有
|
||
self:StopMsgTipsTimer()
|
||
self.PanelMsgTips.gameObject:SetActive(true)
|
||
self.TxtMsgCount.text = CS.XTextManager.GetText("ChatWorldNewMsg", count)
|
||
IsMessageTipShow = true
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:ShowKeywordEffect(effectInfo)
|
||
local index = XTool.RandomSelectByWeightArray(effectInfo.Weight)
|
||
local path = effectInfo.Path[index]
|
||
self.BgEffect.gameObject:SetActiveEx(false)
|
||
if not string.IsNilOrEmpty(path) then
|
||
self.BgEffect.gameObject:SetActiveEx(true)
|
||
self.BgEffect.gameObject:LoadUiEffect(path)
|
||
end
|
||
-- 播放完特效后调用
|
||
XDataCenter.ChatManager.SetEffectEnd()
|
||
end
|
||
|
||
function XUiChatServeMain:ShowChangeChatChannel(channelId)
|
||
if XTool.UObjIsNil(self.GameObject) then
|
||
return
|
||
end
|
||
|
||
self.PanelMsgTips.gameObject:SetActive(true)
|
||
|
||
local currentChannelId = XDataCenter.ChatManager.GetCurrentChatChannelId()
|
||
currentChannelId = currentChannelId >= 5 and (currentChannelId + 1) or currentChannelId
|
||
|
||
self.TxtMsgCount.text = CS.XTextManager.GetText("ChannelChanged", currentChannelId ~= XDataCenter.ChatManager.GetRecruitChannelId() and tostring(currentChannelId) or CS.XTextManager.GetText("ChannelRecruitIdStr"))
|
||
-- 开计时器关闭
|
||
self:StartMsgTipsTimer()
|
||
end
|
||
|
||
-- 只刷新tog红点不刷新界面
|
||
function XUiChatServeMain:OnCheckRedPoint()
|
||
for index, uiButton in ipairs(self.TabGroup) do
|
||
local type = ToggleType[index]
|
||
-- 如果其他频道需要红点显示,更换判断条件即可
|
||
if self.SelType ~= type and (type == ChatChannelType.Guild or type == ChatChannelType.Mentor) then
|
||
local needRedPoint = XDataCenter.ChatManager.CheckRedPointByType(type)
|
||
uiButton:ShowReddot(needRedPoint)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:StartMsgTipsTimer()
|
||
self:StopMsgTipsTimer()
|
||
self.showMsgTimer = XScheduleManager.ScheduleOnce(function()
|
||
self.PanelMsgTips.gameObject:SetActive(false)
|
||
IsMessageTipShow = false
|
||
end, FadeTime * 1000)
|
||
end
|
||
|
||
function XUiChatServeMain:StopMsgTipsTimer()
|
||
if self.showMsgTimer and self.showMsgTimer ~= -1 then
|
||
XScheduleManager.UnSchedule(self.showMsgTimer)
|
||
self.showMsgTimer = -1
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:SetChannelData()
|
||
XDataCenter.ChatManager.GetWorldChannelInfos(function(channelInfos)
|
||
-- 加载频道数据
|
||
self.ChannelInfos = channelInfos
|
||
self:InitChannelInfos(self.ChannelInfos)
|
||
self.DynamicTableChannels:SetDataSource(self.ChannelInfos)
|
||
self.DynamicTableChannels:ReloadDataASync()
|
||
self:UpdateChannelTotalCount()
|
||
end)
|
||
end
|
||
|
||
function XUiChatServeMain:InitChannelInfos(channelInfos)
|
||
local currentChannelId = XDataCenter.ChatManager.GetCurrentChatChannelId()
|
||
for _, info in pairs(channelInfos) do
|
||
info.IsSelected = currentChannelId == info.ChannelId
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:OnChannelInfoClick(index)
|
||
if self.ChannelInfos[index] then
|
||
self.CurrentSelectedChannel = self.ChannelInfos[index].ChannelId
|
||
end
|
||
for i = 1, #self.ChannelInfos do
|
||
local grid = self.DynamicTableChannels:GetGridByIndex(i)
|
||
local info = self.ChannelInfos[i]
|
||
info.IsSelected = i == index
|
||
if grid then
|
||
grid:SetChannelSelected(i == index)
|
||
end
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:OnBtnRoomClick()
|
||
self.PanelChannel.gameObject:SetActive(true)
|
||
|
||
-- 1分钟之内不重复请求
|
||
local now = XTime.GetServerNowTimestamp()
|
||
if now - XDataCenter.ChatManager.GetLastRequestChannelTime() <= 60 then
|
||
self.ChannelInfos = XDataCenter.ChatManager.GetAllChannelInfos()
|
||
self:InitChannelInfos(self.ChannelInfos)
|
||
self.DynamicTableChannels:SetDataSource(self.ChannelInfos)
|
||
self.DynamicTableChannels:ReloadDataASync()
|
||
self:UpdateChannelTotalCount()
|
||
else
|
||
self:SetChannelData()
|
||
XDataCenter.ChatManager.SetLastRequestChannelTime(now)
|
||
end
|
||
|
||
self:StartChannelTimer()
|
||
end
|
||
|
||
function XUiChatServeMain:StartChannelTimer()
|
||
self:StopChannelTimer()
|
||
self.channelTimer = XScheduleManager.ScheduleForever(function()
|
||
self:SetChannelData()
|
||
end, ChannelRefreshTime * 60 * 1000)
|
||
end
|
||
|
||
function XUiChatServeMain:StopChannelTimer()
|
||
if self.channelTimer and self.channelTimer ~= -1 then
|
||
XScheduleManager.UnSchedule(self.channelTimer)
|
||
self.channelTimer = -1
|
||
end
|
||
end
|
||
|
||
-- 切换窗口
|
||
function XUiChatServeMain:OnBtnChannelMaskClick()
|
||
self:StopChannelTimer()
|
||
self.PanelChannel.gameObject:SetActive(false)
|
||
|
||
end
|
||
|
||
function XUiChatServeMain:OnBtnChannelSureClick()
|
||
self:StopChannelTimer()
|
||
self.PanelChannel.gameObject:SetActive(false)
|
||
|
||
if self.CurrentSelectedChannel then
|
||
XDataCenter.ChatManager.SelectChatChannel(self.CurrentSelectedChannel, function()
|
||
self:ShowChangeChatChannel(self.CurrentSelectedChannel)
|
||
self:UpdateCurrentChannel()
|
||
end, function()
|
||
-- 发生服务端房间数量变化(例如当前房间不存在了)重新请求
|
||
self:SetChannelData()
|
||
end)
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:UpdateCurrentChannel()
|
||
local currentChannelId = XDataCenter.ChatManager.GetCurrentChatChannelId()
|
||
self.TxtRoomNumber.text = XDataCenter.ChatManager.GetRecruitChannelId() ~= currentChannelId and currentChannelId or CS.XTextManager.GetText("ChannelRecruitIdStr")
|
||
end
|
||
|
||
function XUiChatServeMain:UpdateChannelTotalCount()
|
||
self.TextTotalCount.text = #XDataCenter.ChatManager.GetAllChannelInfos()
|
||
end
|
||
|
||
-------------------举报聊天的按钮相关 begin---------------
|
||
function XUiChatServeMain:OnBtnReportClick()
|
||
self:SetBtnReportActive(false)
|
||
local playerId = self.MsgItem and self.MsgItem:GetPlayerId()
|
||
if not playerId then
|
||
return
|
||
end
|
||
|
||
if XDataCenter.RoomManager.RoomData and playerId == XPlayer.Id then
|
||
--在房间中不能在聊天打开自己详情面板
|
||
return
|
||
end
|
||
|
||
local chatContent = self.MsgItem:GetChatContent()
|
||
XDataCenter.PersonalInfoManager.ReqShowInfoPanel(playerId, nil, nil, nil, function(data)
|
||
local dataTemp = {Id = data.Id, TitleName = data.Name, PlayerLevel = data.Level, PlayerIntroduction = data.Sign}
|
||
XLuaUiManager.Open("UiReport", dataTemp, chatContent, nil, XReportConfigs.EnterType.Chat, nil, self.SelType)
|
||
end)
|
||
end
|
||
|
||
--长按聊天内容回调,XUiPanelChatContent调用
|
||
function XUiChatServeMain:LongClickMsgItem(msgItem)
|
||
self.MsgItem = msgItem
|
||
local offsetY = 2
|
||
local content = msgItem:GetContent()
|
||
if XTool.UObjIsNil(content) then
|
||
XLog.Error("检查当前长按的msgItem上是否有Content的引用")
|
||
return
|
||
end
|
||
|
||
local contentPosition = content.transform.localPosition
|
||
local height = content.rect.height
|
||
local width = content.rect.width
|
||
local localPositionX = contentPosition.x + width * 0.9
|
||
local localPositionY = contentPosition.y - height - offsetY
|
||
self.BtnReport.transform.position = content.transform:TransformPoint(CS.UnityEngine.Vector3(localPositionX, localPositionY, 0))
|
||
self:SetBtnReportActive(true)
|
||
end
|
||
|
||
function XUiChatServeMain:SetBtnReportActive(isActive)
|
||
if self.BtnReport then
|
||
self.BtnReport.gameObject:SetActiveEx(isActive)
|
||
end
|
||
end
|
||
|
||
function XUiChatServeMain:IsBtnReportActive()
|
||
return self.BtnReport.gameObject.activeSelf
|
||
end
|
||
|
||
function XUiChatServeMain:OpenPanelEmojiSetup()
|
||
self.UiPanelEmojiSetting:Show()
|
||
end
|
||
|
||
function XUiChatServeMain:OpenPanelEmoji()
|
||
self.UiPanelEmoji:Show()
|
||
end
|
||
-------------------举报聊天的按钮相关 end---------------
|
||
|
||
return XUiChatServeMain |