|
|
- SysInfoExpView = SysInfoExpView or BaseClass()
- local SysInfoExpView = SysInfoExpView
- local math_min = math.min
- local math_abs = math.abs
-
-
- function SysInfoExpView:__init()
- self.msg_cache_list = Array.New() --消息列表缓存池
- self.msg_list = {} --当前消息列表
- self.msg_id = 0
- self.wnd_cache_list = Array.New() --消息对象缓存池
- self.message_wnd_list = {} --当前消息对象
-
- self.last_update_time = 0 --更新频率限制
- self.move_dist = 100 --移动距离
- self.speed = 180 --移动速度
-
- self.max_msg_count = 5 --最大数量
-
- self.prefab_asset = nil
- self:LoadAsset()
-
- Runner:getInstance():AddRunObj(self)
- end
-
- function SysInfoExpView:LoadAsset()
- local function call_back(objs)
- self.prefab_asset = objs[0]
- self:CreateMessageContainer()
- end
- lua_resM:loadPrefab(self,"message","ExpMessageItem", call_back)
- end
-
- function SysInfoExpView:__delete()
- local size = self.wnd_cache_list:GetSize()
- for i=0,size-1 do
- local item = self.wnd_cache_list:PopFront()
- item:DeleteMe()
- item = nil
- end
- self.wnd_cache_list = nil
-
- for k,v in pairs(self.message_wnd_list) do
- v:DeleteMe()
- end
- self.message_wnd_list = {}
- end
-
- --预先创建消息对象
- function SysInfoExpView:CreateMessageContainer()
- if self.prefab_asset then
- local item = nil
- for index = 1, self.max_msg_count do
- item = ExpMessageItem.New(panelMgr:GetParent("Top"),self.prefab_asset)
- self.wnd_cache_list:PushBack(item)
- end
- end
- end
-
- --实时获取消息对象
- function SysInfoExpView:CreateMessageItem( id, info )
- local item = self.message_wnd_list[id]
- if item then
- if not item.has_data then
- item:SetData(info)
- end
- else
- local item = self.wnd_cache_list:PopFront()
- if item then
- self.message_wnd_list[id] = item
- if not item.has_data then
- item:SetData(info)
- end
- end
- end
- return item
- end
-
- function SysInfoExpView:Update(now_time, elapse_time)
- if now_time - self.last_update_time < 0.03 then
- return
- end
- self.last_update_time = now_time
-
- for id, info in pairs(self.msg_list) do
- if info and info.start_time < now_time then
- local p = 0
- if info.dist >= self.move_dist then
- info.dead = true
- else
- local dist = elapse_time * self.speed
- info.dist = info.dist + dist
- p = info.dist / self.move_dist
- if p > 1 then
- p = 1
- end
- info.pos_y = info.pos_y + dist
- end
-
- if info.dead then
- local item = self.message_wnd_list[id]
- if item then
- self:CacheItem(item)
- self.message_wnd_list[id] = nil
- end
- self:CacheInfo(info)
- self.msg_list[id] = nil
- else
- -- local item = self:CreateMessageItem(id, info)
- local item = self.message_wnd_list[id]
- if item then
- if not item.has_data then
- item:SetData(info)
- end
- else
- local item = self.wnd_cache_list:PopFront()
- if item then
- self.message_wnd_list[id] = item
- if not item.has_data then
- item:SetData(info)
- end
- end
- end
- if item then
- -- item.canvasGroup.alpha = 1 - (p * p * 1)
- if SceneManager.Instance:IsBeachScene() or SceneManager.Instance:IsGuildScene() then
- SetLocalPosition(item.transform, 0, info.pos_y+ScreenHeight * 0.39, ExpMessageItem.PosZ)
- else
- SetLocalPosition(item.transform, ExpMessageItem.PosX, info.pos_y, ExpMessageItem.PosZ)
- end
- end
- end
- end
- end
-
- end
-
- --is_normal标识不需要经验字体,用普通字体样式
- function SysInfoExpView:AppendMessage(content, percent, is_normal, is_score)
- if not self.prefab_asset then
- return
- end
-
- --最多缓存消息
- if TableSize(self.msg_list) > 6 then
- return
- end
-
- local info = self.msg_cache_list:PopFront()
- if info then
- info.content = content
- info.percent = percent
- info.start_time = Time.time
- info.pos_y = ExpMessageItem.PosY
- info.dead = false
- info.dist = 0
- else
- info = {
- content = content or 0,
- percent = percent or 0,
- start_time = Time.time,
- pos_y = 0,
- dead = false,
- dist = 0,
- }
- end
- info.is_normal = is_normal or false
- info.is_score = is_score or false
- self.msg_id = self.msg_id + 1
- local diff_time = 0
- local last_info = self.msg_list[self.msg_id-1]
- if last_info then
- diff_time = math_abs(0.35 - (info.start_time - last_info.start_time))
- end
- info.start_time = info.start_time + diff_time
- info.pos_y = ExpMessageItem.PosY
- self.msg_list[self.msg_id] = info
- end
-
-
- function SysInfoExpView:CacheItem( item )
- item:Reset()
- local size = self.wnd_cache_list:GetSize()
- if size < self.max_msg_count then
- self.wnd_cache_list:PushBack(item)
- end
- end
-
- function SysInfoExpView:CacheInfo( info )
- local size = self.msg_cache_list:GetSize()
- if size < self.max_msg_count then
- self.msg_cache_list:PushBack(info)
- end
- end
-
|