local UIChannelChatMarquee = UIViewClass() local EventSystem = require('Event/EventSystem') local EFFECT_WAR_ZONE = ConstAssetPathConfig.EFFECT_WAR_ZONE local EFFECT_CROSS_SERVER = ConstAssetPathConfig.EFFECT_CROSS_SERVER --切换场景时关闭,切换完场景之后打开看是否还有 function UIChannelChatMarquee:OnOpened(context) -- 设置表情大小 UIUtils.SetEmojiTextEmojiRatio(self.MarqueeMassage, 1) --单个喇叭展示时间,【可配置】 self.DisplaySecond = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatDisplaySecond").FloatValue) --展示框宽度,如果大于该展示框则停留几秒再运动,如果小于则一直停留,【可配置】 self.DisplayWidth = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatDisplayWidth").FloatValue) --运行速度,【可配置】 self.Speed = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatSpeed").FloatValue) --每次轮播间隔时间,【可配置】 self.WaitForSceondsLoop = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatWaitForSecondsLoop").FloatValue) --两条喇叭之间的等待间隔,【可配置】 self.WaitForSceondsChange = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatWaitForSecondsChange").FloatValue) --长度大于显示时先等待的秒数,【可配置】 self.StartWaitForSceonds = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatStartWaitForSeconds").FloatValue) --移动开始位置,【可配置】 self.StartPosX = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("ChatStartPosX").FloatValue) --移动开始位置 self.DisplayStartPosX = 0 --单个喇叭移动一次的时间 self.MoveSecond = 12 --移动结束位置 self.EndPosX = -600 --定时器计时 self.Count = 0 self.Y = self.MarqueeMassage.transform.anchoredPosition.y self:Play() end function UIChannelChatMarquee:OnUIAnimationStoped(playingId) self:ReleaseAnim() self.MarqueeMassage.transform:SetAnchoredPosition(self.StartPosX, self.Y) self:StartRepeatFunc(self.SetDelayTimePos, self.WaitForSceondsLoop, 1) end function UIChannelChatMarquee:SetDelayTimePos() self.MoveSecond = self:GetSumTime(self.StartPosX, self.EndPosX) self.moveAnim = self:MoveToPos(self.MarqueeMassage.transform, self.EndPosX, self.Y, self.MoveSecond, true) end function UIChannelChatMarquee:OnUpdateFun(deltaTime, timeSineUpdate) self.Count = self.Count + 1 if self.Count > self.DisplaySecond then self:StopRepeatFunc(self.OnUpdateFun) local datas = MDL.ChannelChat.GetTrumpetDatas() if datas == nil or #datas <= 0 then self:CloseView() return end self.txtName.text = nil self.MarqueeMassage.text = nil self:StartRepeatFunc(self.Play, self.WaitForSceondsChange, 1) end end function UIChannelChatMarquee:Play() self:StopRepeatFunc(self.OnUpdateFun) self.Count = 0 self:ReleaseAnim() local nextMsg = self:GetData() if nextMsg == nil then self:CloseView() return end local feilds = string.split(nextMsg, ":") self.txtName.text = feilds[1] .. ":" self.MarqueeMassage.text = feilds[2] self.effect:StopUIEffect() local channelType = tonumber(feilds[3]) if channelType == MDL.ChannelChat.ChannelCfgId.Cross then self.obj_state:SetState(2) self.effect:PlayUIEffect(EFFECT_CROSS_SERVER, 0) elseif channelType == MDL.ChannelChat.ChannelCfgId.WarZone then self.obj_state:SetState(1) self.effect:PlayUIEffect(EFFECT_WAR_ZONE, 0) else self.obj_state:SetState(0) end if self.MarqueeMassage.preferredWidth > self.DisplayWidth then self.EndPosX = -self.MarqueeMassage.preferredWidth self.MarqueeMassage.transform:SetAnchoredPosition(self.DisplayStartPosX, self.Y) self:StartRepeatFunc(self.DelayPlay, self.StartWaitForSceonds, 1) else self:StartRepeatFunc(self.OnUpdateFun, 1) self.MarqueeMassage.transform:SetAnchoredPosition(self.DisplayStartPosX, self.Y) end end function UIChannelChatMarquee:DelayPlay() self:StartRepeatFunc(self.OnUpdateFun, 1) self.MoveSecond = self:GetSumTime(self.DisplayStartPosX, self.EndPosX) self.moveAnim = self:MoveToPos(self.MarqueeMassage.transform, self.EndPosX, self.Y, self.MoveSecond, true) end function UIChannelChatMarquee:ReleaseAnim() if self.moveAnim ~= nil then self:StopUIAnimation(self.moveAnim, true) self.moveAnim = nil end end function UIChannelChatMarquee:GetData() local datas = MDL.ChannelChat.GetTrumpetDatas() if datas ~= nil and #datas > 0 then local tmpData = datas[#datas] table.remove(datas) return tmpData end return nil end --根据距离和速度得出时间 function UIChannelChatMarquee:GetSumTime(startPos, endPos) local sum = math.abs(endPos) + math.abs(startPos) local time = sum / self.Speed return time end function UIChannelChatMarquee:OnClosed() self:StopRepeatFunc(self.OnUpdateFun) end return UIChannelChatMarquee