源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

246 lines
6.4 KiB

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,"<a.->","")
--content = string.gsub(content,"</a>","")
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