SysInfoNoticeView = SysInfoNoticeView or BaseClass() SysInfoNoticeView.MAX_MSG_COUNT = 10 function SysInfoNoticeView:__init() self.has_text = false self.time = 0.0 self.item = nil self.speed = 800 / 6 self.move_left_speed = 800 / 8 self.text_len = 490 self.start_pos_x = -243 self.cur_item = false self.msg_list = Array.New() self.text_list = Array.New() self.idle_text_list = Array.New() self.icon = nil local function call_back(objs) self.prefab_asset = objs[0] self:CreateMessageContainer() for i=1,3 do self.text_list:PushBack(self.item:GetChild("mask/Text"..i)) end self.icon = self.item:GetChild("bg/icon") self.mask = self.item:GetChild("bg/mask") end lua_resM:loadPrefab(self,"common","chuanwen", call_back) local event = function () self.msg_list:Clear() end GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,event) GlobalEventSystem:Bind(EventName.CHANGE_ROLE,event) end function SysInfoNoticeView:__delete() lua_resM:clearReference(self) self:CancelDelayTimer() end function SysInfoNoticeView:CancelDelayTimer( ) if self.time_id then GlobalTimerQuest:CancelQuest(self.time_id) self.time_id = nil end if self.delay_move_left_time_id then GlobalTimerQuest:CancelQuest(self.delay_move_left_time_id) self.delay_move_left_time_id = nil end if self.delay_id then GlobalTimerQuest:CancelQuest(self.delay_id) self.delay_id = nil end end function SysInfoNoticeView:CreateMessageContainer() if self.prefab_asset then self.item = ChuanwenItem.New(panelMgr:GetParent("Top"),self.prefab_asset) self.canvasGrop = self.item.transform:GetComponent("CanvasGroup") end end function SysInfoNoticeView:AppendMessage(content) if self.msg_list:GetSize() >= SysInfoNoticeView.MAX_MSG_COUNT then self.msg_list:PopFront() end self.msg_list:PushBack(content) if not self.has_text then self:RunMessage() end end function SysInfoNoticeView:RunMessage() if not self.item then return end content = self.msg_list:PopFront() if not content then return end if SceneManager:getInstance():IsNoHornAndNoticeScene() then return end local text = self.text_list:PopFront() --1.所有text正在使用 2.TweenLite回调没有执行 -->把第一个text取出使用 if not text then text = self.idle_text_list:PopFront() return end self.idle_text_list:PushBack(text) ---- 添加超链接 text:GetComponent("Text").text = content SetInlineText(text:GetComponent("Text"), content) local call_fun = function (param_list) local chatModel = ChatModel:getInstance() chatModel.clicked_item = self chatModel.chick_hyperlink_mark = true chatModel:FireSpecialTab(param_list) end AddUnderLineAndClick(self, text, call_fun) --去掉超链接,去掉换行符 --content = PackageSpecialTab(content) --content = string.gsub(content, "\n", "") --content = string.gsub(content,"","") --content = string.gsub(content,"","") text.sizeDelta = Vector2(text:GetComponent("Text").preferredWidth,35) self.has_text = true self.item.gameObject:SetActive(true) text.gameObject:SetActive(true) --SetLocalPositionX(self.icon, -23-( text:GetComponent("Text").preferredWidth/2)) --滚屏 local pos = text.localPosition local tSize = self.item.transform.sizeDelta self.time = text.sizeDelta.x / self.speed self.time = math.max(self.time, 2) local left_time = 0 local left_delay_time = 0 if text.sizeDelta.x > self.text_len then left_time = (text.sizeDelta.x - self.text_len) / self.move_left_speed left_delay_time = 0.2 end local item = text if self.tween_out_id and not self.cur_item then SetAnchoredPosition(item.transform, self.start_pos_x, -35 - 17.5) self:MoveIn(item) self.cur_item = item left_delay_time = left_time > 0 and left_delay_time + 0.5 or 0 else self.cur_item = item SetAnchoredPosition(item.transform, self.start_pos_x, 0, - 17.5) end local onDelay = function ( ) self.text_list:PushBack(self.idle_text_list:PopFront()) if self.msg_list:GetSize() <= 0 then self.item.gameObject:SetActive(false) self.cur_item.gameObject:SetActive(false) self.has_text = false else self:MoveOut(self.cur_item) self.cur_item = false self:RunMessage() end end self:CancelDelayTimer() self:StopMoveLeft() if left_time > 0 then self:MoveLeft(self.cur_item, - 10 - (text.sizeDelta.x - self.text_len), left_time, left_delay_time) end self.time_id = setTimeout(onDelay, self.time + left_delay_time ) end function SysInfoNoticeView:SetHide(bool) self.item.gameObject:SetActive(not bool) end function SysInfoNoticeView:MoveIn(item) self:StopMoveIn() if item then local function callback() self:StopMoveIn() end self.move_in_item = item self.tween_in_id = TweenLite.to(self, self.move_in_item.transform, TweenLite.UiAnimationType.POSY, -17.5, 0.5, callback, TweenFunc.EASE_OUT) end end function SysInfoNoticeView:StopMoveIn() if self.tween_int_id then TweenLite.Stop(self.tween_int_id) self.tween_int_id = nil end if self.move_in_item then self.move_in_item = false end end function SysInfoNoticeView:MoveOut(item) self:StopMoveOut() if item then local function callback() item.gameObject:SetActive(false) self:StopMoveOut() end self.move_out_item = item self.tween_out_id = TweenLite.to(self, self.move_out_item.transform, TweenLite.UiAnimationType.POSY, 35 - 17.5, 0.5, callback, TweenFunc.EASE_OUT) end end function SysInfoNoticeView:StopMoveOut() if self.tween_out_id then TweenLite.Stop(self.tween_out_id) self.tween_out_id = nil end if self.move_out_item then self.move_out_item = false end end function SysInfoNoticeView:MoveLeft(item, pos, time, left_delay_time) self:StopMoveLeft() local onDelay = function ( ... ) if item then local function callback() self:StopMoveLeft() end self.move_left_item = item self.tween_left_id = TweenLite.to(self, self.move_left_item.transform, TweenLite.UiAnimationType.POSX, pos, time, callback) end end if left_delay_time and left_delay_time > 0 then self.delay_move_left_time_id = setTimeout(onDelay, left_delay_time) else onDelay() end end function SysInfoNoticeView:StopMoveLeft() if self.tween_left_id then TweenLite.Stop(self.tween_left_id) self.tween_left_id = nil end if self.move_left_item then self.move_left_item = false end end function SysInfoNoticeView:StopAll() self:StopMoveIn() self:StopMoveOut() self:StopMoveLeft() end function SysInfoNoticeView:HaveCurrentItem() return self.cur_item end