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

416 lines
13 KiB
Plaintext

autoImport("MainViewChatGroup")
autoImport("ChatSimplifyView")
MainViewChatMsgPage = class("MainViewChatMsgPage",SubView)
function MainViewChatMsgPage:Init()
self:InitPage();
ServiceChatCmdProxy.Instance:CallGetVoiceIDChatCmd()
ChatRoomProxy.Instance:CheckRedTip()
end
function MainViewChatMsgPage:OnEnter()
MainViewChatMsgPage.super.OnEnter(self)
end
function MainViewChatMsgPage:OnExit()
self.speechRecognizer.handler = nil
end
function MainViewChatMsgPage:OnShow()
MainViewChatMsgPage.super.OnEnter(self)
if self.chatSimplifyView.chatCtl then
local cells = self.chatSimplifyView.chatCtl:GetCells()
for i=1,#cells do
cells[i]:Refresh()
end
end
end
function MainViewChatMsgPage:InitPage()
self:FindObjs()
self:AddEvts()
self:MapListenEvt()
self:InitShow()
end
function MainViewChatMsgPage:FindObjs()
local Anchor_DownLeft = self:FindGO("Anchor_DownLeft")
self.mainViewChat = self:LoadCellPfb("MainViewChat","MainViewChat",Anchor_DownLeft)
self.fadeBtnSp = self:FindGO("FadeBtn"):GetComponent(UISprite)
self.worldMsgTween = self:FindGO("WorldMsg"):GetComponent(TweenHeight)
self.fadeBtnTween = self.fadeBtnSp.gameObject:GetComponent(TweenPosition)
self.chatGridTween = self:FindGO("ChatGrid"):GetComponent(TweenPosition)
self.buttonGridTween = self:FindGO("ButtonGrid"):GetComponent(TweenPosition)
self.ButtonGrid_UIGrid = self:FindGO("ButtonGrid"):GetComponent(UIGrid);
self.worldMsgCollider = self.worldMsgTween.gameObject:GetComponent(BoxCollider)
self.teamSpeech = self:FindGO("TeamSpeech"):GetComponent(UISprite)
self.guildSpeech = self:FindGO("GuildSpeech"):GetComponent(UISprite)
self.speechRecognizer = UIManagerProxy.Instance.speechRecognizer
end
function MainViewChatMsgPage:AddEvts()
self:AddClickEvent(self.worldMsgTween.gameObject,function (go)
self:sendNotification(UIEvent.JumpPanel,{view = PanelConfig.ChatRoomPage,force = force})
end)
self:AddClickEvent(self.fadeBtnTween.gameObject,function (go)
self:FadeTween()
end)
self.worldMsgTween:SetOnFinished(function ()
if self.worldMsgTween.value == self.worldMsgTween.to then
self.worldMsgCollider.size = self.worldMsgCollider.size * self.scale
end
end)
self:AddClickEvent(self.teamSpeech.gameObject, function ()
FunctionSecurity.Me():TryDoRealNameCentify();
end);
local teamSpeechLongPress = self.teamSpeech.gameObject:GetComponent(UILongPress)
if teamSpeechLongPress then
teamSpeechLongPress.pressEvent = function (obj,state)
self:TryTeamVoiceRecognizer(state);
end
end
self:AddClickEvent(self.guildSpeech.gameObject, function ()
FunctionSecurity.Me():TryDoRealNameCentify();
end);
local guildSpeechLongPress = self.guildSpeech.gameObject:GetComponent(UILongPress)
if guildSpeechLongPress then
guildSpeechLongPress.pressEvent = function ( obj,state )
self:TryGuildVoiceRecognizer(state);
end
end
self.speechRecognizer.handler = function (bytes,time,result)
self:sendNotification(ChatRoomEvent.StopRecognizer)
local voice = Slua.ToString(bytes)
if result and #result>0 then
--在占卜状态下
if AuguryProxy.Instance:GetInAugury() then
ServiceSceneAuguryProxy.Instance:CallAuguryChat( result , Game.Myself.data.name)
--点击主界面公会/组队语音按钮
elseif self.curChannel then
ServiceChatCmdProxy.Instance:CallChatCmd(self.curChannel,result,nil,bytes,time)
-- ChatRoomNetProxy.Instance:CallChatUserCmd(self.curChannel,result,nil,bytes,time)
self.curChannel = nil
--普通聊天栏
else
local isInRange = Game.UILongPressManager:GetState()
if isInRange then
self:sendNotification(ChatRoomEvent.SendSpeech , { content = result , voice = bytes , voicetime = time } )
end
end
end
end
self.speechRecognizer:SetName(FunctionChatSpeech.Me().speechFileName)
end
function MainViewChatMsgPage:TryTeamVoiceRecognizer(state)
if(FunctionSecurity.Me():NeedDoRealNameCentify())then
return;
end
if state then
if TeamProxy.Instance:IHaveTeam() then
local allow = ChatRoomProxy.Instance:TryRecognizer()
if allow then
self.isTeamSpeech = true
self.curChannel = ChatChannelEnum.Team
end
else
MsgManager.ShowMsgByIDTable(332)
end
else
if self.isTeamSpeech then
local isInRange = Game.UILongPressManager:GetState()
if not isInRange then
self.curChannel = nil
end
self.isTeamSpeech = false
self:sendNotification(ChatRoomEvent.StopRecognizer)
end
end
end
function MainViewChatMsgPage:TryGuildVoiceRecognizer(state)
if(FunctionSecurity.Me():NeedDoRealNameCentify())then
return;
end
if state then
if GuildProxy.Instance:IHaveGuild() then
local allow = ChatRoomProxy.Instance:TryRecognizer()
if allow then
self.isGuildSpeech = true
self.curChannel = ChatChannelEnum.Guild
end
else
MsgManager.ShowMsgByIDTable(2620)
end
else
if self.isGuildSpeech then
local isInRange = Game.UILongPressManager:GetState()
if not isInRange then
self.curChannel = nil
end
self.isGuildSpeech = false
self:sendNotification(ChatRoomEvent.StopRecognizer)
end
end
end
function MainViewChatMsgPage:MapListenEvt()
self:AddListenEvt(ServiceEvent.ChatCmdChatRetCmd,self.UpdateChatRoom)
self:AddListenEvt(ChatRoomEvent.SystemMessage,self.UpdateChatRoom)
self:AddListenEvt(ServiceEvent.ConnNetDelay, self.HandleConnNetDelay)
self:AddListenEvt(ServiceUserProxy.RecvLogin , self.HandleRedTip)
self:AddListenEvt(ServiceEvent.ChatCmdQueryVoiceUserCmd , self.RecvQueryVoice)
self:AddListenEvt(ServiceEvent.SessionTeamEnterTeam , self.EnterTeam)
self:AddListenEvt(ServiceEvent.SessionTeamExitTeam , self.ExitTeam)
self:AddListenEvt(ServiceEvent.GuildCmdEnterGuildGuildCmd , self.EnterGuild)
self:AddListenEvt(ServiceEvent.GuildCmdExitGuildGuildCmd , self.ExitGuild)
self:AddListenEvt(PVPEvent.PVP_PoringFightLaunch, self.HandlePoringFightBegin);
self:AddListenEvt(PVPEvent.PVP_PoringFightShutdown, self.HandlePoringFightEnd);
end
function MainViewChatMsgPage:HandlePoringFightBegin(note)
self.mainViewChat:SetActive(false);
self.buttonGridTween.gameObject:SetActive(false);
end
function MainViewChatMsgPage:HandlePoringFightEnd(note)
self.mainViewChat:SetActive(true);
self.buttonGridTween.gameObject:SetActive(true);
end
function MainViewChatMsgPage:InitShow()
self.scale = 0.5
-- self.worldMsgTweenValue = {76,120,406}
self.worldMsgTweenValue = {130,240,456}
self.fadeBtnTweenValue = { Vector3(self.fadeBtnTween.from.x - 85, 110.5 , self.fadeBtnTween.from.z) ,
Vector3(self.fadeBtnTween.from.x - 85, 222.5 , self.fadeBtnTween.from.z) ,
Vector3(self.fadeBtnTween.from.x - 85, 432.5 , self.fadeBtnTween.from.z)}
--Vector3(self.fadeBtnTween.from.x , 70.5 , self.fadeBtnTween.from.z) ,
--Vector3(self.fadeBtnTween.from.x , 216.5 , self.fadeBtnTween.from.z) ,
--Vector3(self.fadeBtnTween.from.x , 392.5 , self.fadeBtnTween.from.z)
self.chatGridTweenValue = { Vector3(self.chatGridTween.from.x , 88.5, self.chatGridTween.from.z) ,
Vector3(self.chatGridTween.from.x , 180.5, self.chatGridTween.from.z) ,
Vector3(self.chatGridTween.from.x , 398.5, self.chatGridTween.from.z)}
self.buttonGridTweenValue = { Vector3(self.buttonGridTween.from.x , 160, self.buttonGridTween.from.z) ,
Vector3(self.buttonGridTween.from.x , 270 , self.buttonGridTween.from.z) ,
Vector3(self.buttonGridTween.from.x , 486 , self.buttonGridTween.from.z)}
self.tweenLevel = LocalSaveProxy.Instance:GetMainViewChatTweenLevel()
self.isTeamSpeech = false
self.isGuildSpeech = false
local initParama = ReusableTable.CreateTable()
initParama.gameObject = self.mainViewChat
initParama.chatCellCtrl = MainViewChatGroup
initParama.chatCellPfb = "MainViewChatGroup"
self.chatSimplifyView = self:AddSubView("ChatSimplifyView", ChatSimplifyView, initParama)
ReusableTable.DestroyAndClearTable(initParama)
FunctionChatSpeech.Me():Reset(self.speechRecognizer.gameObject,function ()
self:sendNotification(ChatRoomEvent.StopVoice)
FunctionChatSpeech.Me():SetCurrentVoiceId(nil)
ChatRoomProxy.Instance:AutoSpeechFinish()
FunctionBGMCmd.Me():EndSpeakVoice()
end)
if TeamProxy.Instance:IHaveTeam() then
self:EnterTeam()
else
self:ExitTeam()
end
if GuildProxy.Instance:IHaveGuild() then
self:EnterGuild()
else
self:ExitGuild()
end
local cells = self.chatSimplifyView.chatCtl:GetCells()
for i=1,#cells do
local cell = cells[i]
local channel = GameConfig.ChatRoom.MainView[i]
if channel then
cell:SetTweenLevel(self.tweenLevel)
end
end
self:RegisterRedTipCheck(SceneTip_pb.EREDSYS_PRIVATE_CHAT, self.fadeBtnSp, 42, {0,10})
self:InitTween()
end
--chat room region
function MainViewChatMsgPage:UpdateChatRoom(note)
if note then
local data = note.body
if data and data:GetCellType() ~= ChatTypeEnum.SystemMessage then
if ChatRoomProxy.Instance:IsPlayerSpeak(data:GetChannel()) then
local playerid, str = data:GetId(), data:GetStr(true)
if(playerid and str)then
SceneUIManager.Instance:PlayerSpeak(playerid, str)
end
end
end
end
end
function MainViewChatMsgPage:LoadCellPfb(cellPfb,cName,parent)
local cellpfb = Game.AssetManager_UI:CreateAsset(ResourcePathHelper.UICell(cellPfb))
cellpfb.transform:SetParent(parent.transform,false)
cellpfb.name = cName
return cellpfb
end
local tempVector3 = LuaVector3.zero
function MainViewChatMsgPage:InitTween()
local worldMsgSp = self.worldMsgTween.gameObject:GetComponent(UISprite)
worldMsgSp.height = self.worldMsgTweenValue[self.tweenLevel]
tempVector3:Set(self.worldMsgCollider.size.x * self.scale, self.worldMsgTweenValue[self.tweenLevel] * self.scale, self.worldMsgCollider.size.z * self.scale)
self.worldMsgCollider.size = tempVector3
tempVector3:Set(self.worldMsgCollider.center.x , self.worldMsgTweenValue[self.tweenLevel] / 2 , self.worldMsgCollider.center.z)
self.worldMsgCollider.center = tempVector3
self.fadeBtnSp.transform.localPosition = self.fadeBtnTweenValue[self.tweenLevel]
if self.tweenLevel == #self.worldMsgTweenValue then
self.fadeBtnSp.flip = 1
else
self.fadeBtnSp.flip = 0
end
self.chatGridTween.transform.localPosition = self.chatGridTweenValue[self.tweenLevel]
self.buttonGridTween.transform.localPosition = self.buttonGridTweenValue[self.tweenLevel]
end
function MainViewChatMsgPage:FadeTween()
self:SetTweenValue()
self.worldMsgTween:ResetToBeginning()
self.fadeBtnTween:ResetToBeginning()
self.chatGridTween:ResetToBeginning()
self.buttonGridTween:ResetToBeginning()
self.worldMsgTween:PlayForward()
self.fadeBtnTween:PlayForward()
self.chatGridTween:PlayForward()
self.buttonGridTween:PlayForward()
local cells = self.chatSimplifyView.chatCtl:GetCells()
for i=1,#cells do
cells[i]:SetTweenLevel(self.tweenLevel)
end
if self.tweenLevel == #self.worldMsgTweenValue then
self.fadeBtnSp.flip = 1
else
self.fadeBtnSp.flip = 0
end
end
function MainViewChatMsgPage:SetTweenValue()
if self.worldMsgTweenValue[self.tweenLevel] then
local nextLevel = self.tweenLevel + 1
if self.worldMsgTweenValue[nextLevel] == nil then
nextLevel = 1
end
self.worldMsgTween.from = self.worldMsgTweenValue[self.tweenLevel]
self.worldMsgTween.to = self.worldMsgTweenValue[nextLevel]
self.fadeBtnTween.from = self.fadeBtnTweenValue[self.tweenLevel]
self.fadeBtnTween.to = self.fadeBtnTweenValue[nextLevel]
self.chatGridTween.from = self.chatGridTweenValue[self.tweenLevel]
self.chatGridTween.to = self.chatGridTweenValue[nextLevel]
self.buttonGridTween.from = self.buttonGridTweenValue[self.tweenLevel]
self.buttonGridTween.to = self.buttonGridTweenValue[nextLevel]
self.tweenLevel = nextLevel
LocalSaveProxy.Instance:SetMainViewChatTweenLevel(self.tweenLevel)
end
end
function MainViewChatMsgPage:HandleConnNetDelay()
if ChatZoomProxy.Instance:IsInChatZone() then
ServiceChatRoomProxy.Instance:RecvExitChatRoom()
end
end
function MainViewChatMsgPage:HandleRedTip()
ChatRoomProxy.Instance:CheckRedTip()
end
--语音
function MainViewChatMsgPage:RecvQueryVoice(note)
local data = note.body
printOrange("RecvQueryVoice")
if data and data.path then
FunctionChatSpeech.Me():PlayAudioByPath(data.path,data.voiceid)
end
end
--显示与否语音图标
function MainViewChatMsgPage:EnterTeam()
if TeamProxy.Instance:IHaveTeam() then
self.teamSpeech.gameObject:SetActive(true)
end
if self.ButtonGrid_UIGrid then
self.ButtonGrid_UIGrid.repositionNow = true
end
end
function MainViewChatMsgPage:ExitTeam()
if not TeamProxy.Instance:IHaveTeam() then
self.teamSpeech.gameObject:SetActive(false)
end
if self.ButtonGrid_UIGrid then
self.ButtonGrid_UIGrid.repositionNow = true
end
end
function MainViewChatMsgPage:EnterGuild()
self.guildSpeech.gameObject:SetActive(true)
if self.ButtonGrid_UIGrid then
self.ButtonGrid_UIGrid.repositionNow = true
end
end
function MainViewChatMsgPage:ExitGuild()
self.guildSpeech.gameObject:SetActive(false)
if self.ButtonGrid_UIGrid then
self.ButtonGrid_UIGrid.repositionNow = true
end
end