forked from endernon/PGRData
154 lines
No EOL
5.2 KiB
Lua
154 lines
No EOL
5.2 KiB
Lua
XUiPanelChatContent = XClass(nil, "XUiPanelChatContent")
|
|
|
|
XUiPanelChatContent.WorldChatBoxType = {
|
|
OtherChatBox = 1,
|
|
OtherChatBoxEmoji = 2,
|
|
SelfChatBox = 3,
|
|
SelfChatBoxEmoji = 4
|
|
}
|
|
|
|
function XUiPanelChatContent:Ctor(rootUi, ui, parent)
|
|
self.RootUi = rootUi
|
|
self.GameObject = ui.gameObject
|
|
self.Transform = ui.transform
|
|
self.Parent = parent
|
|
self:InitAutoScript()
|
|
self.DynamicListManager = XDynamicList.New(self.PanelChatView.transform, self)
|
|
self.DynamicListManager:SetReverse(true)
|
|
|
|
self.PanelChatPools = XUiPanelChatPools.New(self.PanelChatPools)
|
|
self.PanelChatPools:InitData(self.DynamicListManager)
|
|
|
|
self.UnreadMsgCount = 0
|
|
end
|
|
|
|
|
|
-- auto
|
|
-- Automatic generation of code, forbid to edit
|
|
function XUiPanelChatContent:InitAutoScript()
|
|
self:AutoInitUi()
|
|
self.SpecialSoundMap = {}
|
|
self:AutoAddListener()
|
|
end
|
|
|
|
function XUiPanelChatContent:AutoInitUi()
|
|
self.PanelChatView = self.Transform:Find("PanelChatView")
|
|
self.PanelChatPools = self.Transform:Find("PanelChatView/PanelChatPools")
|
|
end
|
|
|
|
function XUiPanelChatContent:GetAutoKey(uiNode, eventName)
|
|
if not uiNode then
|
|
return
|
|
end
|
|
return eventName .. uiNode:GetHashCode()
|
|
end
|
|
|
|
function XUiPanelChatContent:RegisterListener(uiNode, eventName, func)
|
|
local key = self:GetAutoKey(uiNode, eventName)
|
|
if not key then
|
|
return
|
|
end
|
|
local listener = self.AutoCreateListeners[key]
|
|
if listener ~= nil then
|
|
uiNode[eventName]:RemoveListener(listener)
|
|
end
|
|
|
|
if func ~= nil then
|
|
if type(func) ~= "function" then
|
|
XLog.Error("XUiPanelChatContent:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
|
|
end
|
|
|
|
listener = function(...)
|
|
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
|
|
func(self, ...)
|
|
end
|
|
|
|
uiNode[eventName]:AddListener(listener)
|
|
self.AutoCreateListeners[key] = listener
|
|
end
|
|
end
|
|
|
|
function XUiPanelChatContent:AutoAddListener()
|
|
self.AutoCreateListeners = {}
|
|
end
|
|
-- auto
|
|
--初始化聊天纪录
|
|
function XUiPanelChatContent:RefreshChatList(channelType)
|
|
self.ChannelType = channelType
|
|
local msgData = XDataCenter.ChatManager.GetChatList(channelType)
|
|
self:InitWorldChatDynamicList(msgData)
|
|
end
|
|
|
|
function XUiPanelChatContent:ReceiveChatHandler(chatData)
|
|
if XTool.UObjIsNil(self.GameObject) then
|
|
return
|
|
end
|
|
|
|
--接收到消息
|
|
if chatData == nil then
|
|
return
|
|
end
|
|
if self.ChannelType ~= chatData.ChannelType then
|
|
return
|
|
end
|
|
local tempTable = {}
|
|
table.insert(tempTable, chatData)
|
|
|
|
if (self.DynamicListManager:GetBarValue() > 0.1 and chatData.SenderId ~= XPlayer.Id) or (chatData.SenderId ~= XPlayer.Id and self.RootUi:IsBtnReportActive()) then
|
|
self.UnreadMsgCount = self.UnreadMsgCount + 1
|
|
self.DynamicListManager:InsertData(tempTable, DLInsertDataDir.Head, false)
|
|
else
|
|
self.UnreadMsgCount = 0
|
|
local msgData = XDataCenter.ChatManager.GetChatList(self.ChannelType)
|
|
self:InitWorldChatDynamicList(msgData)
|
|
end
|
|
XDataCenter.ChatManager.SetChatRead(self.ChannelType)
|
|
XDataCenter.ChatManager.KeywordMatch(self.ChannelType, chatData)
|
|
self.RootUi:ShowUnreadMsgCount(self.UnreadMsgCount)
|
|
end
|
|
|
|
function XUiPanelChatContent:InitWorldChatDynamicList(msgData)
|
|
--初始化私聊动态列表数据
|
|
msgData = msgData or {}
|
|
self.DynamicListManager:SetData(msgData, function(data, cb)
|
|
local poolName = nil
|
|
local ctor = nil
|
|
if data.MsgType == ChatMsgType.Normal and data.SenderId == XPlayer.Id then
|
|
poolName = "myMsg"
|
|
ctor = XUiPanelWorldChatMyMsgItem.New
|
|
elseif data.MsgType == ChatMsgType.Normal and data.SenderId ~= XPlayer.Id then
|
|
poolName = "ohterMsg"
|
|
ctor = XUiPanelWorldChatMyMsgItem.New
|
|
elseif data.MsgType == ChatMsgType.Emoji and data.SenderId == XPlayer.Id then
|
|
poolName = "myEmoji"
|
|
ctor = XUiPanelWorldChatMyMsgEmoji.New
|
|
elseif data.MsgType == ChatMsgType.Emoji and data.SenderId ~= XPlayer.Id then
|
|
poolName = "otherEmoji"
|
|
ctor = XUiPanelWorldChatMyMsgEmoji.New
|
|
elseif data.MsgType == ChatMsgType.System then
|
|
poolName = "system"
|
|
ctor = XUiPanelWorldChatSystemItem.New
|
|
elseif data.MsgType == ChatMsgType.SpringFestival and data.SenderId ~= XPlayer.Id then
|
|
poolName = "otherHelp"
|
|
ctor = XUiPanelWorldChatMyHelp.New
|
|
elseif data.MsgType == ChatMsgType.SpringFestival and data.SenderId == XPlayer.Id then
|
|
poolName = "myHelp"
|
|
ctor = XUiPanelWorldChatMyHelp.New
|
|
end
|
|
if cb and poolName and ctor then
|
|
local item = cb(poolName, ctor)
|
|
item.RootUi = self.RootUi
|
|
item:Refresh(data, handler(self, self.LongClickCb))
|
|
else
|
|
XLog.Error("------Init social worldChatData item is error!------")
|
|
end
|
|
end, handler(self, self.ScrollCallBack))
|
|
end
|
|
|
|
function XUiPanelChatContent:LongClickCb(msgItem)
|
|
self.RootUi:LongClickMsgItem(msgItem)
|
|
end
|
|
|
|
function XUiPanelChatContent:ScrollCallBack()
|
|
self.RootUi:SetBtnReportActive(false)
|
|
end |