SysInfoMiniView = SysInfoMiniView or BaseClass()
|
|
local SysInfoMiniView = SysInfoMiniView
|
|
SysInfoMiniView.MAX_MSG_COUNT = 5
|
|
|
|
function SysInfoMiniView:__init()
|
|
self.msg_list = Array.New()
|
|
|
|
self.total_time = 1
|
|
self.play_step = 0.5--这个数字较大时,TryPopMessage函数时冷却时间不足会中断提示,但没有清除信息表,会有问题,虽然每次切场景会有校正
|
|
self.last_time = 0
|
|
|
|
self.message_wnd_list = {}
|
|
self.index = 0
|
|
self.can_show = true
|
|
|
|
self.prefab_asset = nil
|
|
|
|
self:LoadAsset()
|
|
end
|
|
|
|
function SysInfoMiniView:LoadAsset()
|
|
local function call_back(objs)
|
|
self.prefab_asset = objs[0]
|
|
self:CreateMessageContainer()
|
|
if self.need_to_refresh then
|
|
self:TryPopMessage()
|
|
self.need_to_refresh = false
|
|
end
|
|
end
|
|
lua_resM:loadPrefab(self,"message","miniMessage", call_back)
|
|
|
|
|
|
local event = function ()
|
|
self.msg_list:Clear()
|
|
end
|
|
self.scene_id = GlobalEventSystem:Bind(SceneEventType.OPEN_SCENE_LOAD_VIEW,event)
|
|
|
|
local func = function ()
|
|
self.msg_list:Clear()
|
|
end
|
|
self.account_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,func)
|
|
self.role_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ROLE,func)
|
|
end
|
|
|
|
function SysInfoMiniView:__delete()
|
|
for k,v in pairs(self.message_wnd_list) do
|
|
v:DeleteMe()
|
|
end
|
|
self.message_wnd_list = {}
|
|
|
|
if self.account_change_id then
|
|
GlobalEventSystem:UnBind(self.account_change_id)
|
|
self.account_change_id = nil
|
|
end
|
|
|
|
if self.role_change_id then
|
|
GlobalEventSystem:UnBind(self.role_change_id)
|
|
self.role_change_id = nil
|
|
end
|
|
|
|
if self.scene_id then
|
|
GlobalEventSystem:UnBind(self.scene_id)
|
|
self.scene_id = nil
|
|
end
|
|
end
|
|
|
|
function SysInfoMiniView:CreateMessageContainer()
|
|
if self.prefab_asset then
|
|
local item = nil
|
|
for index = 0, SysInfoMiniView.MAX_MSG_COUNT do
|
|
item = MessageItem.New(panelMgr:GetParent("Top"),self.prefab_asset,nil,function()
|
|
self:TryPopMessage()
|
|
end)
|
|
self.message_wnd_list[index] = item
|
|
end
|
|
end
|
|
end
|
|
|
|
function SysInfoMiniView:TryPopMessage()
|
|
local size = Array.GetSize(self.msg_list)
|
|
if size <= 0 then
|
|
return
|
|
end
|
|
local content = Array.Get(self.msg_list,0)
|
|
if content then
|
|
|
|
for k,v in pairs(self.message_wnd_list) do
|
|
if v.state == 2 then
|
|
v:CreateFoutAnim()
|
|
break
|
|
end
|
|
end
|
|
|
|
local cur_time = TimeUtil:getClientTime()
|
|
|
|
if cur_time - self.last_time >= self.play_step then
|
|
self.last_time = cur_time
|
|
|
|
if self.index > SysInfoMiniView.MAX_MSG_COUNT then
|
|
self.index = 0
|
|
end
|
|
local item = self.message_wnd_list[self.index]
|
|
if item.state == 0 then
|
|
item:CreateFinAnim(content)
|
|
self.msg_list:PopFront()
|
|
self.index = self.index + 1
|
|
elseif item.state ~= 3 then
|
|
item:CreateFoutAnim()
|
|
end
|
|
end
|
|
|
|
end
|
|
end
|
|
|
|
function SysInfoMiniView:AppendMessage(content)
|
|
if not self.prefab_asset then
|
|
return
|
|
end
|
|
|
|
-- local item = self.message_wnd_list[self.index - 1 < 0 and 0 or self.index - 1]
|
|
-- if item.content == content then
|
|
-- item:CreateFinAnim(content)
|
|
-- self.msg_list:PopFront()
|
|
-- self.last_time = TimeUtil:getClientTime()
|
|
-- return
|
|
-- end
|
|
|
|
local count = self.msg_list:GetSize()
|
|
local cur_time = TimeUtil:getClientTime()
|
|
|
|
if count > 0 then
|
|
local msg = self.msg_list:Get(count - 1)
|
|
if msg ~= nil and msg == content then
|
|
local diff = cur_time - self.last_time
|
|
if diff < self.play_step then
|
|
return
|
|
end
|
|
end
|
|
end
|
|
|
|
if count > SysInfoMiniView.MAX_MSG_COUNT then
|
|
self.msg_list:PopFront()
|
|
end
|
|
self.msg_list:PushBack(content)
|
|
self:TryPopMessage()
|
|
end
|
|
|
|
function SysInfoMiniView:SetHide(bool)
|
|
self.can_show = false
|
|
if TableSize(self.message_wnd_list) > 0 then
|
|
for i = 0, SysInfoMiniView.MAX_MSG_COUNT do
|
|
self.message_wnd_list[i].gameObject:SetActive(not bool)
|
|
end
|
|
end
|
|
end
|