| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- local UIChatPrivateView = require("UIChat/UIChatPrivateView_Generate")
- local NickNameCtr = require("Common/NickNameCtr")
- local curSelectedIdx
- local curSelectedHead
- local curSelectedUid
- local regexPattern = "%[e%d+%]"
- local emojiFormat = "[e%s]"
- local lastClickLogTime
- local lastClickNum
- function UIChatPrivateView:OnAwake(data)
- self.controller = require("UIChat/UIChatPrivateCtr")
- self.controller:Init(self)
- self.controller:SetData(data)
- end
- function UIChatPrivateView:AddEventListener()
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.REFRESH_PRIVATE_CHAT, function(idx, uid)
- --self.inputField.inputField.text = ""
- --if curSelectedIdx == nil then
- -- self:RefreshPrivateTargets()
- --end
- --if curSelectedIdx ~= idx then return end
- --self:RefreshCurTargetPrivateChats(idx)
- local needRefreshHeads, needRefreshChats = false, false
- if curSelectedUid ~= uid or curSelectedIdx ~= idx then
- needRefreshHeads = true
- else
- needRefreshChats = true
- end
- if uid == nil then
- curSelectedIdx = 1
- end
- if needRefreshHeads then
- self:RefreshLeftHeads()
- else
- if needRefreshChats then
- self:RefreshCurTargetPrivateChats(curSelectedIdx)
- end
- end
- end)
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.REFRESH_PRIVATE_BRIEFINFO, function(briefInfo)
- self:RefreshLeftHeads()
- --self:RefreshTargetBrief(briefInfo)
- end)
- end
- function UIChatPrivateView:FillContent(data, uiBase)
- self.uiBase = uiBase
- local gameObject = self.uiBase:GetRoot()
- if gameObject ~= nil then
- self.gameObject = gameObject
- self.transform = gameObject.transform
- end
- self:InitGenerate(self.transform, data)
- self:OnceInit()
- self:Init()
- end
- function UIChatPrivateView:OnceInit()
- self:InitEmojiPanel()
- self:InitPrivatePanel()
- end
- function UIChatPrivateView:Init()
- self.headItemLuaList = {}
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PRIVATER_CHAT_BTN_DISPLAY, false)
- local data = self.controller:GetData()
- curSelectedIdx = data
- lastClickLogTime = nil
- lastClickNum = nil
- self:RefreshPrivateTargets()
- self.inputField.inputField.characterLimit = Constant.CHAT_BYTE_LIMIT
- end
- function UIChatPrivateView:InitPrivatePanel()
- local loopGridViewInitParam = SuperScrollView.LoopGridViewInitParam.CopyDefaultInitParam()
- loopGridViewInitParam.mSnapVecThreshold = 9999
- self.scrollView.loopListView:InitListView(0, function(gridView, itemIndex)
- return self:RefreshPrivateChats(gridView, itemIndex)
- end)
- end
- function UIChatPrivateView:InitEmojiPanel()
- local emojis = ManagerContainer.CfgMgr:GetEmojiCfg()
- CommonUtil.LoopGridViewEleCreateNoItem(self,
- self.emojiWindow.loopVerticalScrollRect,
- emojis,
- 0,
- self, function (owner, go, idx, logicData)
- local textTrans = go.transform:Find("Text")
- local text = textTrans:GetComponent(Enum.TypeInfo.SymbolText)
- local index = idx
- if idx < 10 then
- index = "0"..idx
- end
- text.text = string.format(emojiFormat, index)
- local uiTrigger = textTrans:GetComponent(Enum.TypeInfo.UIEventTriggerListener)
- uiTrigger.onClick = function()
- self:OnEmojiClick(idx)
- end
- uiTrigger.onBeginDrag = function()
- self.emojiWindow.loopVerticalScrollRect:OnBeginDrag(UIEventTriggerListener.currentEventData)
- end
- uiTrigger.onDrag = function()
- self.emojiWindow.loopVerticalScrollRect:OnDrag(UIEventTriggerListener.currentEventData)
- end
- uiTrigger.onEndDrag = function()
- self.emojiWindow.loopVerticalScrollRect:OnEndDrag(UIEventTriggerListener.currentEventData)
- end
- end)
- end
- function UIChatPrivateView:OnEmojiClick(idx)
- local count = 0
- for k, v in string.gmatch(self.inputField.inputField.text, regexPattern) do
- count = count + 1
- end
- if count >= 5 then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ChatError2")
- return
- end
- if idx < 10 then
- idx = "0"..idx
- end
- self.inputField.inputField.text = self.inputField.inputField.text..string.format(emojiFormat, idx)
- end
- function UIChatPrivateView:RefreshPrivateTargets()
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- self.empty:SetActive(#privateChats == 0)
- self.exist:SetActive(#privateChats > 0)
- if #privateChats > 0 and curSelectedIdx == nil then
- curSelectedIdx = 1
- end
- if curSelectedIdx ~= nil then
- self.controller:QueryAllPrivateBriefInfo()
- --self:RefreshLeftHeads()
- self:RefreshCurTargetPrivateChats(curSelectedIdx)
- end
- end
- function UIChatPrivateView:RefreshLeftHeads()
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- CommonUtil.LoopGridViewEleCreateNoItem(self,
- self.headList.loopVerticalScrollRect,
- privateChats,
- 0,
- self, self.UpdatePrivateTargets)
- end
- function UIChatPrivateView:UpdatePrivateTargets(go, idx, logicData)
- local transform = go.transform
- local toggle = transform:GetComponent(Enum.TypeInfo.Toggle)
- local on = transform:Find("On")
- local off = transform:Find("Off")
- -- local frameImage = transform:Find("Image"):GetComponent(Enum.TypeInfo.Image)
- -- local headImage = transform:Find("Head"):GetComponent(Enum.TypeInfo.Image)
- local headItem = transform:Find("HeadBox/HeadItem")
- local redPoint = transform:Find("RedPoint")
- local Closed = transform:Find("Closed")
- local closedBtn = Closed:GetComponent(Enum.TypeInfo.Button)
- local nameText = transform:Find("Name"):GetComponent(Enum.TypeInfo.Text)
- on.gameObject:SetActive(curSelectedIdx == idx + 1)
- off.gameObject:SetActive(curSelectedIdx ~= idx + 1)
- Closed.gameObject:SetActive(curSelectedIdx == idx + 1)
- local jobIcon = nil
- if logicData.fromData.jobId ~= nil then
- local jobCfg = ManagerContainer.CfgMgr:GetJobDataById(logicData.fromData.jobId)
- if jobCfg ~= nil then
- jobIcon = jobCfg.JobIcon;
- end
- end
- local tempData = {HeadIcon = logicData.fromData.imgId, ProfessionIcon = jobIcon, Level = logicData.fromData.level, IsHero = true};
- local headItemLua = CommonUtil.BindGridViewItem2Lua(self, "HeadItem", headItem.gameObject)
- CommonUtil.SetPlayerHeadAndFrame(self,headItemLua,tempData,false,logicData.fromData.headFrameId)
- headItemLua.head.image.raycastTarget = false
- CommonUtil.SetTotalChildrenGray(headItem.gameObject, logicData.fromData.onlineState == false)
- redPoint.gameObject:SetActive(curSelectedIdx ~= idx + 1 and logicData.isNew)
- go.name = logicData.fromData.uid
- if curSelectedIdx == idx + 1 then
- curSelectedHead = go
- curSelectedUid = logicData.fromData.uid
- logicData.isNew = false
- local needQuery = ManagerContainer.DataMgr.ChatData:NeedQueryOfflinePrivateInfo(logicData.fromData)
- if needQuery then
- self.controller:SendOfflinePrivateChatQuery(logicData.fromData.uid)
- else
- self:RefreshCurTargetPrivateChats(curSelectedIdx)
- end
- --self.controller:QueryPrivateBriefInfo(logicData.fromData.uid)
- end
- nameText.text = CommonUtil.GetVaildNickName(logicData.fromData.nickname)
- self.uiBase:AddButtonUniqueEventListener(closedBtn,self, self.OnTargetCloseClick, idx + 1)
- self.uiBase:AddToggleUniqueEventListener(toggle, self, self.OnPrivateTargetSelected, idx + 1)
- end
- function UIChatPrivateView:OnPrivateTargetSelected(toggle, params, result)
- if not result then return end
- local idx = params[0]
- if not idx or curSelectedIdx == idx then return end
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- local fromData = privateChats[idx].fromData
- curSelectedUid = fromData.uid
- curSelectedIdx = idx
- curSelectedHead = toggle.gameObject
- self:RefreshLeftHeads()
- end
- function UIChatPrivateView:OnTargetCloseClick(button, params)
- local idx = params[0]
- ManagerContainer.DataMgr.ChatData:RemovePrivateChatData(idx)
- curSelectedIdx = 1
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- if #privateChats == 0 then
- curSelectedIdx = nil
- self:RefreshPrivateTargets()
- else
- self:RefreshLeftHeads()
- end
- end
- function UIChatPrivateView:RefreshTargetBrief(briefInfo)
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- local curTargetFromData = privateChats[curSelectedIdx].fromData
- if briefInfo.uid ~= curTargetFromData.uid then return end
- --curTargetFromData = briefInfo
- local nameText = curSelectedHead.transform:Find("Name"):GetComponent(Enum.TypeInfo.Text)
- nameText.text = CommonUtil.GetVaildNickName(briefInfo.nickname)
- local jobIcon = nil
- if curTargetFromData.jobId ~= nil then
- local jobCfg = ManagerContainer.CfgMgr:GetJobDataById(curTargetFromData.jobId)
- if jobCfg ~= nil then
- jobIcon = jobCfg.JobIcon;
- end
- end
- local headTrans = curSelectedHead.transform:Find("HeadBox/HeadItem")
- local tempData = {HeadIcon = curTargetFromData.imgId, ProfessionIcon = jobIcon, Level = curTargetFromData.level, IsHero = true};
- local headItemLua = CommonUtil.GetBindGridViewItem2Lua(self, "HeadItem", headTrans.gameObject)
- CommonUtil.SetPlayerHeadAndFrame(self,headItemLua,tempData,false,curTargetFromData.headFrameId)
- CommonUtil.SetTotalChildrenGray(headItemLua.gameObject, curTargetFromData.onlineState == false)
- end
- function UIChatPrivateView:RefreshCurTargetPrivateChats(idx)
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- if curSelectedHead ~= nil then
- local fromData = privateChats[idx].fromData
- local nameText = curSelectedHead.transform:Find("Name"):GetComponent(Enum.TypeInfo.Text)
- nameText.text = CommonUtil.GetVaildNickName(fromData.nickname)
- end
- --self.controller:QueryPrivateBriefInfo(privateChats[idx].fromData.uid)
- local datas = privateChats[idx].chats
- local max = #datas
- self.scrollView.loopListView:SetListItemCount(max, true)
- --self.scrollView.loopListView:FinishSnapImmediately()
- self.scrollView.loopListView:MovePanelToItemIndex(max - 1, 0)
- --local scrollView = self.scrollView
- --CommonUtil.LoopGridViewEleCreateNew(self,
- -- scrollView.loopVerticalScrollRect,
- -- nil,
- -- datas,
- -- 0,
- -- self, self.RefreshPrivateChats)
- --
- --if #datas > 0 then
- -- scrollView.loopVerticalScrollRect:MoveTo(#datas - 1)
- --end
- end
- function UIChatPrivateView:RefreshPrivateChats(gridView, itemIndex)
- local item = gridView:NewListViewItem(Enum.PrefabNames.PrivateChatItem)
- local itemLua = CommonUtil.BindGridViewItem2Lua(self, Enum.PrefabNames.PrivateChatItem, item.gameObject)
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- local datas = privateChats[curSelectedIdx]
- local lastChat = datas.chats[itemIndex]
- local logicData = {lastChat, datas.chats[itemIndex + 1]}
- CommonUtil.UpdateItemPrefab(self, itemLua, logicData)
- return item
- end
- --function UIChatPrivateView:RefreshPrivateChats(itemlua, idx)
- -- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- -- local datas = privateChats[curSelectedIdx]
- -- local lastChat = datas.chats[idx]
- -- local logicData = {lastChat, datas.chats[idx + 1]}
- -- CommonUtil.UpdateItemPrefab(self, itemlua, logicData)
- --end
- function UIChatPrivateView:RemoveEventListener()
- ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
- end
- function UIChatPrivateView:OnBtnClose(button, params)
- if self.emojiWindow.activeSelf then
- self:OnEmojiBgClick()
- return
- end
- self:UIClose()
- end
- function UIChatPrivateView:OnClickBtnLog(button, params)
- local curTime = ManagerContainer.LuaTimerMgr:CurLuaServerTime()
- if not lastClickLogTime or (curTime - lastClickLogTime) > 15000 then
- lastClickLogTime = curTime
- lastClickNum = 0
- end
- if not lastClickNum then
- lastClickNum = 0
- end
- lastClickNum = lastClickNum + 1
- if lastClickNum >= 30 then
- lastClickNum = 0
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay('Egg1')
- end
- end
- function UIChatPrivateView:OnEmojiBgClick(button, params)
- self.emojiWindow:SetActive(not self.emojiWindow.activeSelf)
- end
- function UIChatPrivateView:OnInputChanged(content)
- local temp = self.inputField.inputField.text
- --local length = StringUtil.GetTextLeng(self.inputField.inputField.textComponent, temp)
- --LogError(length)
- --if string.len(temp) > Constant.CHAT_BYTE_LIMIT then
- --temp = string.sub(temp, 0, Constant.CHAT_BYTE_LIMIT)
- --end
- temp = string.gsub(temp, "#h", "")
- temp = string.gsub(temp, "#t", "")
- temp = string.gsub(temp, "#", "")
- temp = StringUtil.FilterEmoji(temp)
- self.inputField.inputField.text = temp
- end
- function UIChatPrivateView:OnSendClick(button, params)
- if self.emojiWindow.activeSelf then
- self:OnEmojiBgClick()
- end
- local _openCreateName = NickNameCtr:NeedOpenCreate()
- if _openCreateName then
- NickNameCtr:OpenNickNamePage(true);
- return;
- end
- local emojis = ManagerContainer.CfgMgr:GetEmojiCfg()
- for k, v in string.gmatch(self.inputField.inputField.text, regexPattern) do
- local num = tonumber(string.match(k, '%d+'))
- if num >= #emojis then
- self.inputField.inputField.text = string.gsub(self.inputField.inputField.text, k, "")
- end
- end
- if self.inputField.inputField.text == "[]" then
- self.inputField.inputField.text = ""
- end
- if self.inputField.inputField.text == "" then
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ChatContentEmpty")
- return
- end
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- local datas = privateChats[curSelectedIdx]
- local content = self.inputField.inputField.text
- local level = ManagerContainer.DataMgr.UserData:GetRoleLv()
- if SDKMgr.Instance:CheckSpeech(level, ChannelType.PRIVATE, content) then
- self.controller:SendPrivateChat(content, datas.fromData.uid)
- self.inputField.inputField.text = ""
- else
- ManagerContainer.LuaUIMgr:ErrorNoticeDisplay("ShieldTips01")
- end
- end
- function UIChatPrivateView:AddUIEventListener()
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
- self.uiBase:AddButtonEventListener(self.AnyBtn.button, self, self.OnBtnClose)
- self.uiBase:AddButtonEventListener(self.btnClose.button, self, self.OnBtnClose)
- self.uiBase:AddButtonUniqueEventListener(self.btnLog.button, self, self.OnClickBtnLog)
- self.uiBase:AddButtonEventListener(self.btnSend.button,self, self.OnSendClick)
- self.uiBase:AddButtonEventListener(self.btnEmoji.button, self, self.OnEmojiBgClick)
- self.uiBase:AddInputFileEventListener(self.inputField.inputField, function(input, content)
- self:OnInputChanged(content)
- end)
- self.scrollView.uIEventTriggerListener.onClick = function()
- if self.emojiWindow.activeSelf then
- self:OnEmojiBgClick()
- return
- end
- end
- end
- function UIChatPrivateView:OnHide()
- end
- function UIChatPrivateView:OnShow(data)
- self.controller:SetData(data)
- self:Init()
- end
- function UIChatPrivateView:OnClose()
- CommonUtil.ClearGridViewItem(self,"HeadItem")
- local privateChats = ManagerContainer.DataMgr.ChatData:GetPrivateSortChatDatas()
- if #privateChats > 0 then
- local logicData = privateChats[curSelectedIdx]
- if logicData then
- logicData.isNew = false
- end
- end
- ManagerContainer.DataMgr.ChatData:CheckHasNewPrivateChat()
- ManagerContainer.DataMgr.ChatData:SavePrivateDatas()
- end
- function UIChatPrivateView:OnDispose()
- self.emojiWindow:SetActive(false)
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PRIVATER_CHAT_BTN_DISPLAY, true)
- curSelectedIdx = nil
- curSelectedHead = nil
- curSelectedUid = nil
- lastClickLogTime = nil
- lastClickNum = nil
- self.scrollView.uIEventTriggerListener.onClick = nil
- self.scrollView.loopListView:Dispose()
- self.emojiWindow.loopVerticalScrollRect:ClearCells()
- end
- return UIChatPrivateView
|