|
|
- MiniMessageView = MiniMessageView or BaseClass(BaseView)
- local MiniMessageView = MiniMessageView
- MiniMessageView.CACHE_MSG_COUNT = 15
-
- function MiniMessageView:__init()
- self.base_file = "message"
- self.layout_file = "MiniMessageView"
- self.layer_name = "Top"
- self.destroy_imm = true
- self.use_background = false --全屏界面默认使用这个参数
- self.mask_open_sound = true
- self.mask_close_sound = true
- --self.hide_maincancas = true --全屏界面需要放开隐藏主UI
- self.change_scene_close = false
- self.append_to_ctl_queue = false --是否要添加进界面堆栈
- self.need_show_money = false --是否要显示顶部的金钱栏
- self.all_msg_list = {}
- self.cache_item_list = Array.New()
- self.cur_item_list = {}
- self.real_index = 0 --所有创建过的item的数量
- self.can_show = true
- self.screen_height = 2 * ScreenHeight / 5 - 20
- self.load_callback = function ()
- self:LoadSuccess()
- self:AddEvent()
- end
- self.open_callback = function ( )
- self:OpenSuccess()
- end
- self.switch_callback = function(index)
- self:SwitchTab(index)
- end
- self.destroy_callback = function ( )
- self:DestroySuccess()
- end
- end
-
- function MiniMessageView:Open( )
- --self.data = data
- BaseView.Open(self)
- end
-
- function MiniMessageView:LoadSuccess()
- local nodes = {
- "item_con:obj",
- }
- self:GetChildren(nodes)
- end
-
- function MiniMessageView:AddEvent()
- local function call_back(objs)
- self.prefab_asset = objs[0]
- self:CreateCacheItem()
- end
- lua_resM:loadPrefab(self,"message","miniMessage", call_back)
- local event = function ()
- self.all_msg_list = {}
- end
- self.scene_id = GlobalEventSystem:Bind(SceneEventType.OPEN_SCENE_LOAD_VIEW,event)
-
- local func = function ()
- self.all_msg_list = {}
- end
- self.account_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT,func)
- self.role_change_id = GlobalEventSystem:Bind(EventName.CHANGE_ROLE,func)
- end
-
- function MiniMessageView:OpenSuccess()
- self:UpdateView()
- self:StartResetTime()
- end
-
- function MiniMessageView:CreateCacheItem( )
- for index = 0, MiniMessageView.CACHE_MSG_COUNT do
- local item = MessageItemNew.New(self.item_con,self.prefab_asset,nil,function(item)
- item:SetVisible(false)
- end)
- self.cache_item_list:PushBack(item)
- end
- end
-
- function MiniMessageView:UpdateView()
- local size = TableSize(self.all_msg_list)
- if size <= 0 then
- return
- else
- self:SetTop()
- end
- local real_index = self.real_index
- local function callback( item,index, real_index)
- self.all_msg_list[real_index] = nil
- item:SetVisible(false)
- item:Reset()
- self.cache_item_list:PushBack(item)
- self.cur_item_list[real_index] = nil
- end
- for index=1, real_index do
- local data = self.all_msg_list[index]
- if data then
- local item = self.cur_item_list[data.real_index]
- if not item then
- item = self.cache_item_list:PopFront()
- -- if not item then
- -- item = MessageItemNew.New(self.item_con,self.prefab_asset,nil)
- -- end
- if item then
- item:Reset()--不管是创建的还是拿缓存池的 都先重置
- end
- end
- if item then
- item:SetData(data, self.real_index, data.real_index, callback)
- self.cur_item_list[data.real_index] = item
- else
- self.real_index = index
- break
- end
- end
- end
- self:MoveItemCon()
- end
- --移动整个con
- function MiniMessageView:MoveItemCon( )
- local pos_y = (MessageItemNew.Height) * (self.real_index-1) - self.screen_height
- cc.ActionManager:getInstance():removeAllActionsFromTarget(self.item_con)
- SetAnchoredPositionY(self.item_con, pos_y)
- local moveup_action_time1 = 0.5
- local function action_end_func()
- -- self.callback(self, self.index)
- end
- local callfun1 = cc.CallFunc.New(action_end_func)
- local pre_pos_x, pre_pos_y = GetAnchoredPosition(self.item_con)
- local moveAction1 = cc.MoveTo.createAnchoredType(moveup_action_time1, 0, pos_y + (MessageItemNew.Height), pre_pos_x, pre_pos_y)
- moveAction1 = cc.EaseCircleActionOut.New( moveAction1)
- local action = cc.Sequence.New(moveAction1,delayTime3, callfun1)
- cc.ActionManager:getInstance():addAction(action, self.item_con)
- end
-
- function MiniMessageView:StartResetTime( )
- local function time_callback()
- if TableSize(self.cur_item_list) == 0 then
- self.real_index = 0
- SetAnchoredPositionY(self.item_con, - self.screen_height)
- self:StopResetTime()
- end
- end
- SysInfoCtrl.Instance:SetFuncCallBack(time_callback, "MiniMessageView:StartResetTime")
- end
-
- function MiniMessageView:StopResetTime( )
- SysInfoCtrl.Instance:DeleteFuncCallBack("MiniMessageView:StartResetTime")
- end
-
- --这里要置顶,避免有orderinlayer的界面挡住
- function MiniMessageView:SetTop( )
- UIDepth.SetUIDepth(self.gameObject,true,900)
- self:ResetUIZDepth()
- self:AddUIZDepth()
- --特殊处理,z轴和orderInLayer 乱了
- SetLocalPositionZ(self.transform, GetLocalPositionZ(self.transform)-1000)
- end
-
- --新消息实时来添加
- function MiniMessageView:AppendMessage(content)
- if not self.prefab_asset then
- return
- end
- self.real_index = self.real_index + 1
- local data = {
- content = content,
- real_index = self.real_index
- }
- self.all_msg_list[self.real_index] = data
- self:StartResetTime()
- self:UpdateView()
- end
-
- function MiniMessageView:SetHide(bool)
- self.item_con_obj:SetActive(bool)
- end
-
- function MiniMessageView:DestroySuccess( )
- 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
-
- for k,v in pairs(self.cur_item_list) do
- v:DeleteMe()
- v = nil
- end
- self.cur_item_list = {}
- local function callback( item )
- item:DeleteMe()
- end
- self.cache_item_list:ForEach(callback)
- self.cache_item_list:Clear()
- end
|