2025-06-04 05:12:01 +08:00

353 lines
9.5 KiB
Plaintext

autoImport("WrapScrollViewHelper")
autoImport("ChatRoomCombineCell")
ChatZoneView = class("ChatZoneView",SubView)
function ChatZoneView:OnEnter()
self.super.OnEnter(self)
self:ResetNewMessage()
self.ContentTable:SetActive(true)
end
function ChatZoneView:OnExit()
self.ContentTable:SetActive(false)
ChatZoneView.super.OnExit(self)
end
function ChatZoneView:Init()
self:FindObjs()
self:AddEvts()
self:AddViewEvts()
self:InitShow()
end
function ChatZoneView:FindObjs()
self.ChatZone = self.container.ChatZone
-- self.ContentScrollView = self.container.ContentScrollView
-- self.ContentPanel = self.container.ContentPanel
-- self.ContentTable = self.container.ContentTable
self.ContentScrollView = self:FindGO("ContentScrollView" , self.ChatZone):GetComponent(UIScrollView)
self.ContentPanel = self.ContentScrollView.gameObject:GetComponent(UIPanel)
self.ContentTable = self:FindGO("ContentTable" , self.ChatZone)
self.MemberContainer = self:FindGO("MemberContainer" , self.ChatZone)
self.Title = self:FindGO("Title"):GetComponent(UILabel)
self.CloseBtn = self:FindGO("CloseBtn" , self.ChatZone)
self.NewMessage = self:FindGO("NewMessageBg",self.ChatZone)
self.NewMessageLabel = self:FindGO("NewMessageLabel",self.NewMessage):GetComponent(UILabel)
end
function ChatZoneView:AddEvts()
self:AddClickEvent(self.CloseBtn,function (g)
self:OnButtonCloseClick(g)
end)
self:AddClickEvent(self.NewMessage,function (g)
self:HandleNewMessage()
end)
-- self.ContentScrollView.onMomentumMove=function()
-- if self.itemTableContent:GetIsMoveToFirst() then
-- self:ResetNewMessage()
-- else
-- self.isLock = true
-- end
-- end
end
function ChatZoneView:AddViewEvts()
self:AddListenEvt(ServiceEvent.ChatRoomEnterChatRoom , self.OnReceiveEnter)
self:AddListenEvt(ServiceEvent.ChatRoomExitChatRoom, self.OnReceiveExistChatZoom)
self:AddListenEvt(ServiceEvent.ChatRoomRoomMemberUpdate, self.OnReceiveMembersUpdate)
self:AddListenEvt(ServiceEvent.ChatRoomKickChatMember, self.OnReceiveBeKicked)
self:AddListenEvt(ServiceEvent.ChatRoomChatRoomTip, self.OnReceiveTip)
end
local config = {}
function ChatZoneView:InitShow()
self.curChannel = ChatChannelEnum.Zone
self.TitleSL = SpriteLabel.new(self.Title.gameObject,nil,30,36,true)
self.funkey = {}
-- self.itemTableContent = UITableListCtrl.new(self.ContentTable , "Chat" , 1)
-- local config = {
-- cellType = ChatTypeEnum.MySelfMessage,
-- cellName = "ChatRoomMySelfCell",
-- control = ChatRoomMySelfCell
-- }
-- self.itemTableContent:SetType(config)
-- config.cellType = ChatTypeEnum.SomeoneMessage
-- config.cellName = "ChatRoomSomeoneCell"
-- config.control = ChatRoomSomeoneCell
-- self.itemTableContent:SetType(config)
-- config.cellType = ChatTypeEnum.SystemMessage
-- config.cellName = "ChatRoomSystemCell"
-- config.control = ChatRoomSystemCell
-- self.itemTableContent:SetType(config)
-- self.itemTableContent:AddEventListener(ChatRoomEvent.SelectHead, self.container.HandleClickHead , self)
self.itemContent = WrapScrollViewHelper.new(ChatRoomCombineCell, ChatRoomPage.rid,
self.ContentScrollView.gameObject, self.ContentTable, 10, function ()
if self.itemContent:GetIsMoveToFirst() then
self:ResetNewMessage()
else
self.isLock = true
end
end)
self.itemContent:AddEventListener(ChatRoomEvent.SelectHead, self.container.HandleClickHead , self)
TableUtility.ArrayClear(config)
config.wrapObj = self.MemberContainer
config.cellName = "ChatNameCell"
config.control = ChatNameCell
config.dir = 1
self.itemWrapName = WrapCellHelper.new(config)
self.itemWrapName:AddEventListener(MouseEvent.MouseClick, self.HandleClickName, self)
self:ResetNewMessage()
self:UpdateChat()
end
function ChatZoneView:UpdateChat()
local zoneInfo = ChatZoomProxy.Instance:CachedZoomInfo()
if zoneInfo then
self.ChatZone:SetActive(true)
self:SetTitle(zoneInfo)
self.itemContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
-- self.itemTableContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
self.itemWrapName:UpdateInfo(ChatZoomProxy.Instance:GetMembers())
else
self.ChatZone:SetActive(false)
end
end
function ChatZoneView:OnReceiveEnter(data)
if self.container.CurrentState ~= ChatRoomEnum.CHATZONE then
self.container:SwitchValue(ChatRoomEnum.CHATZONE)
else
self:UpdateChat()
end
self.container:ShowFade(false)
end
function ChatZoneView:OnReceiveChatMessage(data)
if (data == nil) then
return
end
if (data.body:GetChannel() == self.curChannel) then
ChatZoomProxy.Instance:InQueueInputMessage(data.body)
if self.isLock then
if data.body:GetId() == Game.Myself.data.id then
self.isLock = false
self.unRead = 0
-- self.ContentScrollView:ResetPosition()
self.itemContent:ResetPosition(ChatZoomProxy.Instance:Message())
else
self.unRead = self.unRead + 1
self.itemContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
end
else
self.itemContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
end
-- self.itemTableContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
if self.unRead > 0 then
self:ShowNewMessage()
else
self.NewMessage:SetActive(false)
end
end
end
function ChatZoneView:OnReceiveExistChatZoom(data)
if (data == nil) then
return
end
self.ChatZone:SetActive(false)
self.container:SwitchLastState()
self.container:ShowFade(true)
end
function ChatZoneView:OnReceiveMembersUpdate(data)
if (data == nil) then
return
end
-- self.itemWrapName:UpdateInfo(ChatZoomProxy.Instance:CachedZoomInfo().data.members)
self.itemWrapName:UpdateInfo(ChatZoomProxy.Instance:GetMembers())
local zoomInfo = ChatZoomProxy.Instance:CachedZoomInfo()
self:SetTitle(zoomInfo)
-- update tip view
if (TipsView.Me().currentTip ~= nil) then
for i = 1, #data.body.updates do
local member = data.body.updates[i]
if (member.id == self.tipID) then
self:ShowTip(member)
end
end
for i = 1, #data.body.deletes do
local member = data.body.deletes[i]
if (member == self.tipID) then
self:HideTip()
end
end
end
end
function ChatZoneView:ShowTip(data)
local playerData = PlayerTipData.new()
playerData:SetByChatZoneMemberData(data)
TableUtility.ArrayClear(self.funkey)
if (ChatZoomProxy.Instance:SelfIsHost()) then
if (data.id ~= ChatZoomProxy.Instance:SelfID()) then
self.funkey = {
"InviteMember",
"KickChatMember",
"ExchangeRoomOwner",
}
end
else
if (data.id ~= ChatZoomProxy.Instance:SelfID()) then
self.funkey = {
"InviteMember",
}
end
end
FunctionPlayerTip.Me():CloseTip()
local playerTip = FunctionPlayerTip.Me():GetPlayerTip( self.Title , NGUIUtil.AnchorSide.Left, {-50, 0})
local tipData = {
playerData = playerData,
funckeys = self.funkey,
}
playerTip:SetData(tipData)
end
function ChatZoneView:HideTip()
FunctionPlayerTip.Me():CloseTip()
end
function ChatZoneView:OnReceiveBeKicked(data)
if (data == nil) then
return
end
self.ChatZone:SetActive(false)
self.container:SwitchLastState()
self.container:ShowFade(true)
end
function ChatZoneView:OnReceiveTip(data)
if (data == nil) then
return
end
local tipInfoFromData = data.body
ChatZoomProxy.Instance:InQueueTipMessage(ChatZoneData.new(tipInfoFromData))
-- self.itemTableContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
self.itemContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
end
function ChatZoneView:OnButtonCloseClick()
local data = ChatZoomProxy.Instance:CachedZoomInfo()
ServiceChatRoomProxy.Instance:CallExitChatRoom(data.roomid, Game.Myself.data.id)
end
function ChatZoneView:HandleNewMessage()
self:ResetNewMessage()
-- self.ContentScrollView:ResetPosition()
-- self.itemTableContent:UpdateInfo(ChatZoomProxy.Instance:Message(),self.isLock)
self.itemContent:ResetPosition(ChatZoomProxy.Instance:Message())
end
function ChatZoneView:ResetNewMessage()
self.isLock = false
self.unRead = 0
if self.NewMessage.activeSelf then
self.NewMessage:SetActive(false)
end
end
function ChatZoneView:ShowNewMessage()
if not self.NewMessage.activeSelf then
self.NewMessage:SetActive(true)
end
self.NewMessageLabel.text = tostring(self.unRead)..ZhString.Chat_newMessage
end
function ChatZoneView:SendMessage(content,voice,voicetime)
if ChatZoomProxy.Instance:IsInChatZone() then
ServiceChatCmdProxy.Instance:CallChatCmd(self.curChannel, content,nil,voice,voicetime)
-- ChatRoomNetProxy.Instance:CallChatUserCmd(self.curChannel, content,nil,voice,voicetime)
else
MsgManager.ShowMsgByIDTable(41)
end
end
function ChatZoneView:HandleClickName(ctrl)
if ctrl.data then
if ctrl.data.id == Game.Myself.data.id then
return
end
self:ShowTip(ctrl.data)
end
end
function ChatZoneView:SetTitle(zoneInfo)
self.TitleSL:Reset()
local iconName = 70
if zoneInfo.roomtype == SceneChatRoom_pb.ECHATROOMTYPE_PUBLIC then
iconName = 69
end
local iconInfo = string.format("{uiicon=%s}",tostring(iconName))
local title = iconInfo.." "..zoneInfo.name .. "(" .. #zoneInfo.members .. "/" .. zoneInfo.maxnum .. ")"
self.TitleSL:SetText(title,true)
end
function ChatZoneView:HandleKeywordEffect(note)
local datas = note.body
if self.container.CurrentState ~= ChatRoomEnum.CHATZONE then
return
end
if datas.message:GetChannel() ~= self.curChannel then
return
end
self.container:AddKeywordEffect(datas.data)
end
function ChatZoneView:ResetTalk()
self.container:SetVisible(true)
ChatRoomProxy.Instance:SetCurrentChatChannel()
end
function ChatZoneView:ShowView(isShow)
self.ChatZone:SetActive(isShow)
self.container.ContentScrollView.gameObject:SetActive(isShow)
end