源战役客户端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

207 行
5.7 KiB

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