|
BaseView = BaseView or BaseClass(UIPartical)
|
|
|
|
local BaseView = BaseView
|
|
local LuaViewManager = LuaViewManager
|
|
local lua_viewM = lua_viewM
|
|
local GlobalTimerQuest = GlobalTimerQuest
|
|
local SetLocalScale = SetLocalScale
|
|
local destroy = destroy
|
|
local GameObject = GameObject
|
|
local UiFactory = UiFactory
|
|
local UIZDepth = UIZDepth
|
|
local GlobalEventSystem = GlobalEventSystem
|
|
local AddClickEvent = AddClickEvent
|
|
local EventSystem = EventSystem
|
|
local GetChildTransforms = GetChildTransforms
|
|
local GetChildGameObjects = GetChildGameObjects
|
|
local GetChildImages = GetChildImages
|
|
local GetChildTexts = GetChildTexts
|
|
|
|
BaseView.Class_Type = "BaseView"
|
|
BaseView.OpenEvent = "BaseView.OpenEvent"
|
|
BaseView.CloseEvent = "BaseView.CloseEvent"
|
|
BaseView.DestroyEvent = "BaseView.DestroyEvent"
|
|
BaseView.CreateView = "BaseView.CreateView"
|
|
BaseView.ChangeVisible = "BaseView.ChangeVisible"
|
|
|
|
--3D模型背景资源
|
|
BaseView.ModelBgRes = {
|
|
[1] = "effect_beibao_1_1", --蓝色网格
|
|
[2] = "effect_beibao_1_2", --青色网格
|
|
[3] = "effect_beibao_1_3", --紫色网格
|
|
[4] = "effect_beibao_2_1", --青色方块
|
|
[5] = "effect_beibao_3_1", --蓝色线条
|
|
[6] = "effect_beibao_3_2", --紫色线条
|
|
}
|
|
|
|
--界面打开/关闭界面缩放参数
|
|
BaseView.OpenCloseScaleCfg =
|
|
{
|
|
--打开界面缩放动画参数
|
|
[1] = {start_scale = 0.9, end_scale = 1, time = 0.3},
|
|
|
|
--关闭界面缩放动画参数
|
|
[2] = {start_scale = 1, end_scale = 0.9, time = 0.3},
|
|
}
|
|
|
|
OpenMode = {
|
|
OpenOnly = 1,
|
|
OpenToggle = 2,
|
|
|
|
OpenDefault = 1,
|
|
}
|
|
|
|
BaseView.LittleMoveDir =
|
|
{
|
|
Top = 1,
|
|
Bottom = 2,
|
|
Left = 3,
|
|
Right = 4,
|
|
}
|
|
|
|
CloseMode = {
|
|
CloseVisible = 1,
|
|
CloseDestroy = 2,
|
|
|
|
CloseDefault = 2,
|
|
}
|
|
BaseView.ShowAnimType = {
|
|
Fading = 1, -- 淡入淡出
|
|
-- BlackScreen = 2, -- 黑屏切换
|
|
}
|
|
function BaseView:__init()
|
|
GlobalEventSystem:FireNextFrame(BaseView.CreateView,self)
|
|
end
|
|
|
|
function BaseView:__defineVar()
|
|
return {
|
|
_class_type = self, -- 界面类型,通过判断_class_type.Class_Type识别baseview baseitem
|
|
_iid = _in_obj_ins_id, -- 界面对象标识id
|
|
_use_delete_method = false, -- 是否调用过delete函数
|
|
_need_wait_blur_bg_loaded = false, -- 是否需要等待模糊背景加载完毕
|
|
base_file = "" , -- 模块资源名称
|
|
layout_file = "", -- 界面预设名字
|
|
preLoad_list = false, -- 打开界面之前需要预加载的资源,除了本模块UI资源外的
|
|
hide_maincancas = false, -- 是否隐藏主界面
|
|
use_background = false, -- 窗口背景,用灰色半透明背景
|
|
background_alpha = 0.85, -- 窗口背景的透明度
|
|
click_bg_toClose = false, -- 点击背景是否关闭该窗口
|
|
background_wnd = false, -- 背景蒙版窗口
|
|
destroy_imm = true, -- 销毁窗口时采用立即销毁模式
|
|
delay_delete_time = 3, -- 非立即销毁的界面,关闭后延迟销毁的等待时间
|
|
change_scene_close = false, -- 切换场景是否关闭
|
|
reenter_scene_close = false, -- 重新进入场景是否关闭
|
|
change_scene_hide = false, -- 切换场景是否隐藏(不与change_scene_close、reenter_scene_close同时使用)
|
|
preparing_res = false, -- 异步加载进行中
|
|
is_delete = false , -- 是否已经删除
|
|
is_set_order_sorting = true, -- 是否需要设置深度,自动管理 canvas.sortingOrder
|
|
is_set_zdepth = false, -- 是否设置z深度,当需要盖住下层的UI界面上的模型时,要设true
|
|
open_mode = OpenMode.OpenDefault, -- 打开模式
|
|
close_mode = CloseMode.CloseDefault, -- 关闭模式
|
|
hide_item_use_view = false, -- 打开的时候是否关闭itemuseview
|
|
isPop = false, -- 是否可见
|
|
wait_for_hide = false, -- 等待加载完隐藏
|
|
layer_name = "UI", -- 窗口层次
|
|
append_to_ctl_queue = false, -- 添加进入控制队列,打开下层界面时自动关闭上层,关闭下层自动打开上层
|
|
is_delay_callback = true, -- 是否延迟调用load_callback和open_callback
|
|
load_callback = false, -- 加载的回调函数
|
|
open_callback = false, -- 窗口打开时回调
|
|
close_callback = false, -- 窗口关闭时回调
|
|
destroy_callback = false, -- 销毁的回调函数
|
|
show_loading = false, -- 是否显示加载界面
|
|
is_loaded = false, -- 是否已经加载完
|
|
cache_findChild = false, -- 缓存FindChild的接口
|
|
gameObject = false, -- ugui窗口对象
|
|
transform = false, -- 窗口transform
|
|
use_local_view = false, -- 使用本地界面模式,将预设挂接在编辑器对应的canva层次上才能开启
|
|
is_guide_module = false, --是否是新手引导模块
|
|
is_hide_skill_black_bg = false, --是否隐藏羁绊技能的黑色遮罩
|
|
ReOpen_callback = nil, --重新打开界面,刷新事件
|
|
close_fog = nil, --开启界面的时候是否关闭场景FOG效果(如果出现场景中模型or特效和UI上效果显示不一样,开启)使用时候需要 use_background == true
|
|
blur_activity_bg = false, -- UI背景遮罩的高斯模糊效果
|
|
blur_camera_type = false, -- 模糊背景的摄像机类型
|
|
blur_screenshot = nil, -- 模糊背景截图 nil:使用通用黑色蒙版 false:等待渲染返回 成功会返回Texture图片,而不是Sprite
|
|
blur_anim_time = 0.2, -- 模糊动画时间
|
|
full_screen = false, --全屏模式
|
|
-- 界面打开后的内部布局动画
|
|
ani_right = false, --右侧动画
|
|
ani_left = false, --左侧动画
|
|
adjust_mid = false, --中间布局调整
|
|
ani_list = false,
|
|
-- 打开/关闭界面时的展示动画
|
|
use_show_anim = false, --是否启用打开界面的切换动画
|
|
use_hide_anim = false, --是否启用关闭界面的切换动画
|
|
ignore_use_anim = false, --是否忽略动换动画
|
|
do_show_animation = false , --当前已经处理过了动画的状态,true表示处理过show动画, false表示处理过close动画
|
|
-------------------------
|
|
mask_open_sound = false,--是否屏蔽开界面声音
|
|
mask_close_sound = false,--是否屏蔽关界面声音
|
|
|
|
move_node_list = false, --移动到背景节点列表
|
|
show_back_camera = false, --打开后渲染摄像机
|
|
back_item_contaner_list = false, --处理view下面的item的back ui 显示和隐藏
|
|
fire_change_visible_event = false, --用于界面显示隐藏通知,常用于模型动作修正
|
|
need_movie_type = true, -- 是否需要播放开启关闭界面动画(针对非黑屏大界面的)
|
|
jump_close = false,--用于某些界面跳转了之后就需要关掉界面
|
|
|
|
model_activity_bg = false, -- 3d背景模式,带镜面反射,一级全屏界面才需要
|
|
model_activity_bg_pos = false, -- 3d背景的偏移坐标,默认是居中的,如果你的模型不是居中的话就要调整坐标
|
|
model_activity_bg_type = 2, -- 3d背景的默认样式类型
|
|
|
|
little_move_tween_list = false, --界面4方向缓动动画数组
|
|
little_move_event = false, --界面4方向缓事件监听
|
|
little_move_table = false, --界面4方向缓动动画数据
|
|
little_move_load_view_time_id = false, --界面打开时,缓动处理延时定时器
|
|
little_move_is_show_anim = false, --界面打开时,是否已经显示过进入动画
|
|
|
|
hide_clear_role_model = true, --隐藏时删除模型
|
|
|
|
need_culling_mask_ground = false, --打开界面是否需要摄像机剔除ground层(加载模型较多的界面可加上,取消渲染ground稍微增加性能)
|
|
force_no_ctl_queue = false,--强制不加入堆栈
|
|
|
|
open_guide_close = false, --打开引导界面时(功能开放界面),是否关闭界面(复用change_scene_close的设置)
|
|
}
|
|
end
|
|
|
|
--打开界面之前需要预加载的资源
|
|
function BaseView:AddPreLoadList(abName, assetNameList, type)
|
|
if not self.preLoad_list then
|
|
self.preLoad_list = {}
|
|
end
|
|
table.insert(self.preLoad_list,{type, abName, assetNameList})
|
|
end
|
|
|
|
--[[
|
|
获取子对象的transform
|
|
特别注意此方法是从根节点开始搜寻子对象 所以要写全路径 比如:"input/Text"
|
|
]]
|
|
function BaseView:GetChild(name)
|
|
if self.cache_findChild and self.transform then
|
|
return self.cache_findChild(self.transform,name)
|
|
end
|
|
end
|
|
|
|
function BaseView:GetChildComponent(name,com)
|
|
return self:GetChild(name):GetComponent(com)
|
|
end
|
|
|
|
--获取多个孩子transform
|
|
function BaseView:GetChildTransforms(names)
|
|
return GetChildTransforms(self.transform, names)
|
|
end
|
|
|
|
--获取多个孩子go
|
|
function BaseView:GetChildGameObjects(names)
|
|
return GetChildGameObjects(self.transform, names)
|
|
end
|
|
|
|
--获取多个孩子image
|
|
function BaseView:GetChildImages(names)
|
|
return GetChildImages(self.transform, names)
|
|
end
|
|
|
|
--获取多个孩子text
|
|
function BaseView:GetChildTexts(names)
|
|
return GetChildTexts(self.transform, names)
|
|
end
|
|
|
|
--是否真正打开 判断依据是调用了open以及资源加载已经完成
|
|
function BaseView:HasOpen()
|
|
return self.isPop and self.is_loaded and not self.wait_for_hide
|
|
end
|
|
|
|
function BaseView:Open()
|
|
print("[ BaseView Open ]: source = ",self._class_type._source, "layout_file = ",self.layout_file)
|
|
self.isPop = true
|
|
self.wait_for_hide = false
|
|
self.is_in_close_anim = false
|
|
self._use_delete_method = false
|
|
self:RemoveDestroyTimer()
|
|
-- -- 如果设备不支持高斯模糊后处理,则强制不渲染
|
|
-- if self.blur_activity_bg then
|
|
-- if MainCamera.Instance:GetRenderSupport() then
|
|
-- self.blur_screenshot = false
|
|
-- local function blur_screenshot_callback(screenshot)
|
|
-- self.blur_screenshot = screenshot
|
|
-- self:SetBackgroundWnd()
|
|
-- end
|
|
-- MainCamera.Instance:GetCameraBlurScreenShot(blur_screenshot_callback, self.blur_camera_type)
|
|
-- else
|
|
-- self.blur_screenshot = false
|
|
-- self.blur_activity_bg = false
|
|
-- end
|
|
-- end
|
|
if self.open_mode == OpenMode.OpenOnly then
|
|
BaseView.OpenOnly(self)
|
|
|
|
elseif self.open_mode == OpenMode.OpenToggle then
|
|
BaseView.OpenToggle(self)
|
|
end
|
|
local auto_close_view = function()
|
|
self:Close()
|
|
end
|
|
|
|
local auto_change_scene_close_view = function()
|
|
if SceneManager:getInstance():IsDailyCircleDungeon() then--如果现实进入镜像场景,则关掉该界面
|
|
self.is_in_daily_circle_dungeon = true
|
|
elseif self.is_in_daily_circle_dungeon then --如果当前场景不是镜像场景,并且又是镜像场景出来的。也不关掉界面
|
|
self.is_in_daily_circle_dungeon = false
|
|
else
|
|
self:Close()
|
|
end
|
|
end
|
|
if self.change_scene_close and not self.change_scene_close_event_id then
|
|
self.change_scene_close_event_id = EventSystem.Bind(GlobalEventSystem,SceneEventType.SCENE_CHANGED,auto_change_scene_close_view)
|
|
end
|
|
|
|
--复用切场景关闭的设置(或者是有背景的界面, 或者是全屏界面)
|
|
self.open_guide_close = ( self.use_background and self.open_guide_close ~= nil) or self.open_guide_close or (self.open_guide_close ~= nil and self.change_scene_close or false)
|
|
if self.open_guide_close and not self.open_guide_close_id then
|
|
self.open_guide_close_id = EventSystem.Bind(GlobalEventSystem,EventName.OPEN_GUIDE_CLOSE_VIEW,auto_close_view)
|
|
end
|
|
|
|
if self.reenter_scene_close and not self.reenter_close_event_id then
|
|
self.reenter_close_event_id = EventSystem.Bind(GlobalEventSystem,SceneEventType.SCENE_REENTER,auto_close_view)
|
|
end
|
|
|
|
if not self.change_scene_close and not self.change_scene_close and self.change_scene_hide and not self.change_scene_hide_event_id and not self.change_scene_complete_event_id then
|
|
local auto_hide_view = function()
|
|
self:Hide()
|
|
end
|
|
|
|
local auto_show_view = function()
|
|
self:CancelHide()
|
|
end
|
|
|
|
self.change_scene_hide_event_id = EventSystem.Bind(GlobalEventSystem,SceneEventType.OPEN_SCENE_LOAD_VIEW,auto_hide_view)
|
|
self.change_scene_complete_event_id = EventSystem.Bind(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE,auto_show_view)
|
|
end
|
|
|
|
if self.use_background and self.hide_maincancas and not self.all_close_event_id then
|
|
self.all_close_event_id = EventSystem.Bind(GlobalEventSystem,EventName.CLOSE_ALL_VIEW,auto_close_view)
|
|
end
|
|
local function on_jump_close()
|
|
if self._use_delete_method then return end
|
|
self:Close()
|
|
end
|
|
if self.jump_close and not self.jump_close_event_id then
|
|
self.jump_close_event_id = EventSystem.Bind(GlobalEventSystem,EventName.JUMP_CLOSE_EVENT,on_jump_close)
|
|
end
|
|
|
|
local function onOrientationChange( )
|
|
self:SetIpxMode()
|
|
end
|
|
if not self.orientation_change_id then
|
|
self.orientation_change_id = GlobalEventSystem:Bind(EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
|
|
end
|
|
|
|
if self.is_guide_module and not self.trigger_guide_id then
|
|
local function onTriggerGuideHandler()
|
|
if not self.is_loaded then
|
|
return
|
|
end
|
|
if self.AddToStageHandler then
|
|
self:AddToStageHandler()
|
|
end
|
|
end
|
|
self.trigger_guide_id = EventSystem.Bind(GlobalEventSystem,EventName.TRIGGER_GUIDE_TYPE,onTriggerGuideHandler)
|
|
end
|
|
|
|
EventSystem.Fire(GlobalEventSystem,BaseView.OpenEvent, self.layer_name, self)
|
|
|
|
-- if (self.key_back_to_close == true or (self.use_background and self.hide_maincancas)) and self.key_back_to_close_id == nil then
|
|
-- local function on_force_close( )
|
|
-- if BaseView.LastTabIndex and BaseView.LastTabIndex > 0 then
|
|
-- GlobalEventSystem:Fire(EventName.KEY_BACK_CHANGE)
|
|
-- else
|
|
-- self:Close()
|
|
-- end
|
|
-- end
|
|
-- BaseView.KeyBackWinCount = BaseView.KeyBackWinCount and BaseView.KeyBackWinCount + 1 or 1
|
|
-- self.key_back_to_close_id = GlobalEventSystem:Bind(EventName.KEY_BACK_CLOSE, on_force_close)
|
|
-- end
|
|
end
|
|
|
|
function BaseView:OpenOnly()
|
|
self.is_delete = false
|
|
if self.preparing_res then
|
|
return
|
|
end
|
|
|
|
-- 打开的时候界面还在缓存中
|
|
if self.gameObject then
|
|
BaseView.AfterOpen(self)
|
|
if not self.destroy_imm then --如果是非立即销毁的界面,要重新设置父节点
|
|
self.transform:SetParent(panelMgr:GetParent(self.layer_name))
|
|
end
|
|
return
|
|
end
|
|
self:AsnycLoadLayout()
|
|
|
|
if self.layer_name ~= "Main" and not self.mask_open_sound then
|
|
lua_soundM:PlayUIEffectSound(LuaSoundManager.SOUND_UI.OPEN)
|
|
end
|
|
end
|
|
|
|
function BaseView:AsnycLoadLayout()
|
|
local preLoad_index = 0
|
|
local preLoad_list_len = 0
|
|
|
|
if self.show_loading then
|
|
LuaViewManager.AddLoadingView(lua_viewM, self._iid)
|
|
end
|
|
|
|
local function preLoadCallback()
|
|
preLoad_index = preLoad_index + 1
|
|
if preLoad_list_len == 0 or preLoad_index == preLoad_list_len then
|
|
local res_load_finish = function(obj)
|
|
self:DoCreateWindowIndeed(obj)
|
|
end
|
|
|
|
if self.base_file == "" then
|
|
-- 没有预设体的界面,直接创建空对象
|
|
local go = UiFactory.createChild(panelMgr:GetParent(self.layer_name), UIType.EmptyObject, LuaMemManager.GetLastStr(self._class_type._source,"/"))
|
|
res_load_finish(go)
|
|
else
|
|
LuaViewManager.LoadView(lua_viewM, self,self.base_file, self.layout_file, self.layer_name, res_load_finish)
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 先加载额外的依赖资源包
|
|
self.preparing_res = true
|
|
self.is_loaded = false
|
|
if self.load_time_out_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.load_time_out_id)
|
|
self.load_time_out_id = nil
|
|
end
|
|
|
|
local function onCheckTimeOut()
|
|
if self.layer_name == "UI" then
|
|
self.preparing_res = false
|
|
self:Close()
|
|
end
|
|
end
|
|
-- 15秒都打不开界面则自动触发关闭流程,避免影响后续操作
|
|
self.load_time_out_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, onCheckTimeOut, 15)
|
|
|
|
if self.preLoad_list then
|
|
local vo = nil
|
|
preLoad_list_len = #self.preLoad_list
|
|
for i = 1, preLoad_list_len do
|
|
vo = self.preLoad_list[i]
|
|
lua_resM:LoadRes(self, vo[1], vo[2], vo[3], preLoadCallback)
|
|
end
|
|
self.preLoad_list = nil
|
|
else
|
|
preLoadCallback()
|
|
end
|
|
|
|
end
|
|
|
|
function BaseView:DoCreateWindowIndeed(obj)
|
|
|
|
--iphone低端机强制设立即销毁
|
|
if SystemMemoryLevel.Cur == SystemMemoryLevel.Low and SystemRuntimePlatform.IsIphone() then
|
|
self.destroy_imm = true
|
|
end
|
|
|
|
if self.load_time_out_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.load_time_out_id)
|
|
self.load_time_out_id = false
|
|
end
|
|
|
|
--资源下载或加载失败
|
|
if obj == nil then
|
|
self.preparing_res = false
|
|
self:Close()
|
|
return
|
|
end
|
|
|
|
self.gameObject = obj
|
|
if self.isPop == false then --如果加载回来时,外部已经调用了关闭流程,则直接销毁界面
|
|
self:Destroy()
|
|
return
|
|
end
|
|
|
|
-- 缓存频繁访问的对象
|
|
self.transform = obj.transform
|
|
self.cache_findChild = self.transform.Find
|
|
|
|
--统一处理是否显示界面打开/关闭动画
|
|
self.use_show_anim = not self.ignore_use_anim and (self.use_background and not self.model_activity_bg) or self.use_show_anim
|
|
self.use_hide_anim = not self.ignore_use_anim and (self.use_background and not self.model_activity_bg) or self.use_hide_anim
|
|
if not ClientConfig.view_scale_ani_mode then
|
|
self.use_show_anim = false
|
|
self.use_hide_anim = false
|
|
end
|
|
if self.use_show_anim then
|
|
local cfg = BaseView.OpenCloseScaleCfg[1]
|
|
SetLocalScale(self.transform, cfg.start_scale, cfg.start_scale, cfg.start_scale)
|
|
else
|
|
SetLocalScale(self.transform)
|
|
end
|
|
|
|
self:InitViewAnimation()
|
|
if self.show_loading then
|
|
LuaViewManager.RemoveLoadingView(lua_viewM, self._iid)
|
|
end
|
|
|
|
-- 设置背景的逻辑封装成一个函数
|
|
self:SetBackgroundWnd()
|
|
|
|
if self.show_back_camera then
|
|
self:ShowBackModeCamera()
|
|
end
|
|
|
|
self.base_view_closeBtn = self.transform:Find("Window/windowCloseBtn") or self.transform:Find("Window2/windowCloseBtn")
|
|
if self.base_view_closeBtn then
|
|
self.base_view_closeBtn:GetComponent("Image"):SetNativeSize()
|
|
local function onCloseHandler()
|
|
self:Close()
|
|
end
|
|
AddClickEvent(self.base_view_closeBtn.gameObject,onCloseHandler, nil, true )
|
|
|
|
self.base_view_titleText = self.transform:Find("Window/windowTitleCon/windowTitleText") or self.transform:Find("Window2/windowTitleCon/windowTitleText")
|
|
end
|
|
|
|
-- self.base_view_bg = self.transform:Find("Window") or self.transform:Find("Window2")
|
|
-- if self.base_view_bg then
|
|
-- local img = self.base_view_bg:GetComponent("Image")
|
|
-- if img then
|
|
-- img.raycastTarget = true
|
|
-- end
|
|
-- end
|
|
|
|
-- --main层的UI都挂在main_cancas_con,以实现显示隐藏修改的需要
|
|
-- if self.layer_name == "Main" and not self.hide_maincancas then
|
|
-- LuaViewManager.PuskMainCanvasCon(lua_viewM, self.transform)
|
|
-- end
|
|
if not self._need_wait_blur_bg_loaded then
|
|
BaseView.CreateMainWindow(self)
|
|
self.preparing_res = false
|
|
end
|
|
end
|
|
|
|
function BaseView:SetBackgroundWnd( )
|
|
-- 未加载完则不处理
|
|
if not self.gameObject then
|
|
return
|
|
end
|
|
|
|
self.blur_activity_bg = false
|
|
|
|
if self.use_background and self.model_activity_bg then
|
|
self.close_fog = true
|
|
end
|
|
|
|
local function create_background_wnd()
|
|
if self.blur_screen_time_out_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.blur_screen_time_out_id)
|
|
self.blur_screen_time_out_id = nil
|
|
end
|
|
if self.model_activity_bg then
|
|
local function on_delay( )
|
|
self:UpdateModelBg()
|
|
end
|
|
setTimeout(on_delay, 0.1)
|
|
else
|
|
self.background_wnd = self.background_wnd or UiFactory.createChild(self.transform, UIType.Background,"activity_bg")
|
|
self.background_wnd_raw = self.background_wnd:GetComponent("RawImageExtend")
|
|
if self.blur_screenshot == nil then -- 不使用模糊背景
|
|
self.background_wnd_raw.alpha = self.background_alpha
|
|
elseif self.blur_screenshot == false then -- 等待模糊背景返回
|
|
self.background_wnd_raw.alpha = 0
|
|
elseif self.blur_screenshot then
|
|
self.background_wnd_raw.color = ColorUtilValue.BLURGRAY
|
|
self.background_wnd_raw.texture = self.blur_screenshot
|
|
end
|
|
|
|
if self.use_show_anim then
|
|
local cfg = BaseView.OpenCloseScaleCfg[1]
|
|
if cfg and cfg.start_scale ~= 0 then
|
|
self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth / cfg.start_scale, ScreenHeight/cfg.start_scale)
|
|
else
|
|
self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
|
|
end
|
|
else
|
|
self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
|
|
end
|
|
|
|
self.background_wnd.transform:SetAsFirstSibling()
|
|
SetAnchoredPosition(self.background_wnd.transform, 0, 0)
|
|
|
|
if self.background_wnd and self.click_bg_toClose then
|
|
local function onClickHandler()
|
|
self:Close()
|
|
end
|
|
AddClickEvent(self.background_wnd,onClickHandler,nil,false)
|
|
end
|
|
end
|
|
-- 不管有没有模糊都要尝试执行这块逻辑,这种写法也包含了模糊逻辑超时之后打开界面的处理
|
|
if self._need_wait_blur_bg_loaded then
|
|
BaseView.CreateMainWindow(self)
|
|
self.preparing_res = false
|
|
end
|
|
end
|
|
|
|
if self.use_background then
|
|
if self.model_activity_bg then
|
|
self.blur_activity_bg = false
|
|
end
|
|
self.on_blur_screen_finish = false --记录高斯模糊完成标识,超时的话则创建普通背景,避免异常情况界面无法关闭
|
|
-- 如果设备不支持高斯模糊后处理,则强制不渲染
|
|
-- if self.blur_activity_bg then
|
|
-- if MainCamera.Instance:GetRenderSupport() then
|
|
-- self.blur_screenshot = false
|
|
-- -- 需要等待模糊图返回才打开界面
|
|
-- self._need_wait_blur_bg_loaded = true
|
|
-- -- 如果要使用打开或关闭动画,则需要动态添加CanvasGroup组件
|
|
-- if self.use_show_anim or self.use_hide_anim then
|
|
-- local canvas_group = self.gameObject:GetComponent(typeof(UnityEngine.CanvasGroup))
|
|
-- if not canvas_group then
|
|
-- canvas_group = self.gameObject:AddComponent(typeof(UnityEngine.CanvasGroup))
|
|
-- end
|
|
-- canvas_group.alpha = 0
|
|
-- end
|
|
-- -- 创建回调用来接收RenderTexture
|
|
-- local function blur_screenshot_callback(renderTexture)
|
|
-- self.on_blur_screen_finish = true
|
|
-- self.blur_screenshot = renderTexture
|
|
-- if self._use_delete_method then -- 如果已经在执行销毁了,则立即回收rt
|
|
-- MainCamera.Instance:ClearScreenShotCache(self.blur_screenshot)
|
|
-- return
|
|
-- end
|
|
-- create_background_wnd()
|
|
-- if self.bg_back_func then--背景放到后面回调 具体参考EquipGemstoneAutoUpView
|
|
-- self.bg_back_func()
|
|
-- end
|
|
-- end
|
|
-- MainCamera.Instance:GetCameraBlurScreenShot(blur_screenshot_callback, self.blur_camera_type)
|
|
|
|
-- if self.click_bg_toClose then
|
|
-- local function onBlurTimeout( )
|
|
-- if not self.on_blur_screen_finish then
|
|
-- self.blur_activity_bg = false
|
|
-- create_background_wnd()
|
|
-- end
|
|
-- end
|
|
-- if self.blur_screen_time_out_id then
|
|
-- TimerQuest.CancelQuest(GlobalTimerQuest, self.blur_screen_time_out_id)
|
|
-- self.blur_screen_time_out_id = nil
|
|
-- end
|
|
-- self.blur_screen_time_out_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, onBlurTimeout, 3)
|
|
-- end
|
|
-- else
|
|
-- self.blur_activity_bg = nil
|
|
-- create_background_wnd()
|
|
-- end
|
|
-- else
|
|
create_background_wnd()
|
|
-- end
|
|
end
|
|
end
|
|
|
|
-- 更新3D模型背景
|
|
function BaseView:UpdateModelBg( bg_type )
|
|
if IsNull(self.gameObject) then
|
|
return
|
|
end
|
|
|
|
self.model_activity_bg_type = bg_type or self.model_activity_bg_type
|
|
--过滤重复
|
|
if self.last_model_bg_type and self.last_model_bg_type == self.model_activity_bg_type then
|
|
return
|
|
end
|
|
self.last_model_bg_type = self.model_activity_bg_type
|
|
|
|
--先从缓存池取
|
|
self.model_activity_bg_objs = self.model_activity_bg_objs or {}
|
|
for k,v in pairs(self.model_activity_bg_objs) do
|
|
local obj = v.obj
|
|
if not IsNull(obj) then
|
|
obj:SetActive(false)
|
|
end
|
|
end
|
|
local cache_model_bg = self.model_activity_bg_objs[self.model_activity_bg_type]
|
|
if cache_model_bg and cache_model_bg.obj and not IsNull(cache_model_bg.obj) then
|
|
cache_model_bg.obj:SetActive(false)
|
|
cache_model_bg.obj:SetActive(true)
|
|
return
|
|
end
|
|
|
|
--再去加载
|
|
local cur_res_name = BaseView.ModelBgRes[self.model_activity_bg_type] or BaseView.ModelBgRes[1]
|
|
local function load_finish_func(objs, is_gameObject)
|
|
if self._use_delete_method then
|
|
return
|
|
end
|
|
if not objs or not objs[0] then
|
|
return
|
|
end
|
|
local go = is_gameObject and objs[0] or newObject(objs[0])
|
|
local go_name = go.name
|
|
local new_res_type, new_res_name = self:GetModelBgName(go_name)
|
|
if new_res_name ~= cur_res_name then --当前加载完成的不是最新的,则回收
|
|
self:DeleteModelBg(new_res_name, go)
|
|
return
|
|
end
|
|
self.model_activity_bg_objs = self.model_activity_bg_objs or {}
|
|
if self.model_activity_bg_objs[new_res_type] then
|
|
destroy(go)
|
|
return
|
|
end
|
|
self.model_activity_bg_objs[new_res_type] = {name = new_res_name, obj = go}
|
|
go.transform:SetParent(self.transform)
|
|
go:SetActive(false)
|
|
go:SetActive(true)
|
|
if self.model_activity_bg_pos then
|
|
SetLocalPosition(go.transform, self.model_activity_bg_pos.x, self.model_activity_bg_pos.y, -50000)
|
|
else
|
|
SetLocalPosition(go.transform, 0, 0, -50000)
|
|
end
|
|
SetLocalRotation(go.transform)
|
|
SetLocalScale(go.transform, 100)
|
|
end
|
|
local function bg_load_delay_func( ... )
|
|
lua_resM:loadPrefab(self, cur_res_name, cur_res_name, load_finish_func, false, ASSETS_LEVEL.HIGHT)
|
|
end
|
|
self.model_bg_time_id = setTimeout(bg_load_delay_func,0.01)
|
|
end
|
|
|
|
function BaseView:GetModelBgName( obj_name )
|
|
local res_type, res_name
|
|
for k,v in pairs(BaseView.ModelBgRes) do
|
|
if string.find(obj_name, v, 1, true) then
|
|
res_type = k
|
|
res_name = v
|
|
break
|
|
end
|
|
end
|
|
return res_type, res_name
|
|
end
|
|
|
|
function BaseView:DeleteModelBg( name, obj )
|
|
--指定回收
|
|
if name and not IsNull(obj) then
|
|
lua_resM:AddObjToPool(self, name, name, obj)
|
|
return
|
|
end
|
|
--全部回收
|
|
if self.model_activity_bg_objs then
|
|
for k,v in pairs(self.model_activity_bg_objs) do
|
|
local temp_name, temp_obj = v.name, v.obj
|
|
if not IsNull(temp_obj) then
|
|
lua_resM:AddObjToPool(self, temp_name, temp_name, temp_obj)
|
|
end
|
|
end
|
|
self.model_activity_bg_objs = false
|
|
end
|
|
end
|
|
|
|
function BaseView:CreateMainWindow()
|
|
|
|
if self.is_delay_callback and self.hide_maincancas then --大界面才需要延迟callback
|
|
local function onLoad()
|
|
self.is_loaded = true
|
|
self:BeforeLoad()
|
|
if self.load_callback and not self.is_delete and self.gameObject then
|
|
self.load_callback()
|
|
end
|
|
end
|
|
|
|
if self._base_delay_load_id then
|
|
LuaViewManager.RemoveDelayQueue(lua_viewM, self._base_delay_load_id)
|
|
self._base_delay_load_id = false
|
|
end
|
|
self._base_delay_load_id = LuaViewManager.AddDelayQueue(lua_viewM, onLoad)
|
|
else
|
|
self.is_loaded = true
|
|
self:BeforeLoad()
|
|
if self.load_callback then
|
|
self.load_callback()
|
|
end
|
|
end
|
|
-- 重置等待变量
|
|
self._need_wait_blur_bg_loaded = false
|
|
BaseView.AfterOpen(self)
|
|
end
|
|
|
|
function BaseView:AfterOpen()
|
|
if not self.gameObject then
|
|
return
|
|
end
|
|
|
|
if self.isPop then
|
|
BaseView.PlayOpenMovie(self)
|
|
local function onOpen()
|
|
if self.open_callback then
|
|
self.open_callback()
|
|
end
|
|
if self.use_background and self.close_fog == true then
|
|
Scene.Instance:ChangeFogEnable(false)
|
|
end
|
|
if self.is_guide_module then
|
|
if self.AddToStageHandler then
|
|
self:AddToStageHandler()
|
|
end
|
|
end
|
|
if self.hide_item_use_view then
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.HIDE_ITEM_USE_VIEW, true)
|
|
end
|
|
if self.is_hide_skill_black_bg then
|
|
SkillManager:getInstance():AddHideBlackViews(self.layout_file)
|
|
HideBlackGround()
|
|
end
|
|
if self.change_scene_hide and not Scene:getInstance():IsSceneProloadFinish() then
|
|
self:Hide()
|
|
end
|
|
|
|
self:DoOpenAni()
|
|
--self:DoShowViewAnimation(true)
|
|
self:DoShowViewScaleAnimation(true)
|
|
end
|
|
if self.wait_for_hide then
|
|
self.gameObject:SetActive(false)
|
|
if self.is_set_zdepth then
|
|
UIZDepth.ResetUIZDepth(self)
|
|
end
|
|
if self.hide_maincancas then
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true )
|
|
end
|
|
elseif self.wait_for_hide == false then
|
|
if self.hide_maincancas then
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, false)
|
|
end
|
|
if not self.gameObject.activeSelf then
|
|
self.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
self.wait_for_hide = false
|
|
if self.is_set_order_sorting then
|
|
self:SetUIDepth(self.gameObject)
|
|
end
|
|
local curr_zdepth_count = nil
|
|
if self.is_set_zdepth then
|
|
curr_zdepth_count = self:AddUIZDepth()
|
|
end
|
|
if self.layer_name == "Main" and not lua_viewM.main_cancas_last_visible then
|
|
LuaViewManager.PuskMainCanvasCon(lua_viewM, self.transform)
|
|
end
|
|
if self.is_delay_callback and self.hide_maincancas then --大界面才需要延迟callback
|
|
local function onDelayOpen()
|
|
if not self.is_delete and self.isPop and self.gameObject then
|
|
onOpen()
|
|
if curr_zdepth_count then
|
|
UIZDepth.SetUIZDepth(self, curr_zdepth_count)
|
|
end
|
|
end
|
|
end
|
|
|
|
if self.delay_open_id then
|
|
LuaViewManager.RemoveDelayQueue(lua_viewM, self.delay_open_id)
|
|
self.delay_open_id = false
|
|
end
|
|
self.delay_open_id = LuaViewManager.AddDelayQueue(lua_viewM, onDelayOpen)
|
|
else
|
|
onOpen()
|
|
end
|
|
|
|
LuaViewManager.OpenView(lua_viewM, self)
|
|
else
|
|
self:Close()
|
|
end
|
|
end
|
|
|
|
function BaseView:AfterClose()
|
|
if self.layout_file ~= "GuidePromptView" then
|
|
LuaViewManager.CloseView(lua_viewM, self)
|
|
end
|
|
--下面这句话要放在clse_callback前面 因为有些是在close_callback 关掉界面 会导致重新调用cancelhide 导致主界面被隐藏
|
|
-- LuaViewManager.CloseView(lua_viewM, self)
|
|
UIPartical.ClearAllEffect(self)
|
|
if self.close_callback and self.is_loaded then
|
|
self.close_callback()
|
|
end
|
|
-- if self.use_background and self.close_fog == true and not self.append_to_ctl_queue then --改到 luaViewManager 中开启
|
|
-- Scene.Instance:ChangeFogEnable(true)
|
|
-- end
|
|
end
|
|
|
|
function BaseView:OpenToggle()
|
|
if self.gameObject and self.isPop then
|
|
self:Close()
|
|
else
|
|
self:OpenOnly()
|
|
end
|
|
end
|
|
|
|
function BaseView:Close(called_by_mgr)
|
|
self.isPop = false
|
|
local function close_callback()
|
|
if self.close_mode == CloseMode.CloseVisible then
|
|
BaseView.CloseVisible(self)
|
|
elseif self.close_mode == CloseMode.CloseDestroy then
|
|
BaseView.CloseDestroy(self)
|
|
end
|
|
end
|
|
if self.use_hide_anim then
|
|
-- if not self.is_in_close_anim then
|
|
--self:DoShowViewAnimation(false)
|
|
self:DoShowViewScaleAnimation(false, close_callback)
|
|
-- self.is_in_close_anim = true
|
|
-- else
|
|
-- close_callback()
|
|
-- end
|
|
else
|
|
close_callback()
|
|
end
|
|
-------------------------
|
|
if self.layer_name ~= "Main" and not self.mask_close_sound then
|
|
lua_soundM:PlayUIEffectSound(LuaSoundManager.SOUND_UI.CLOSE)
|
|
end
|
|
-------------------------
|
|
end
|
|
|
|
--隐藏
|
|
function BaseView:Hide()
|
|
if self.gameObject then
|
|
if self.hide_maincancas then
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true)
|
|
end
|
|
self.gameObject:SetActive(false)
|
|
self.wait_for_hide = nil
|
|
self:SetBackUIVisible(false)
|
|
if self.fire_change_visible_event then
|
|
GlobalEventSystem:Fire(BaseView.ChangeVisible, false)
|
|
end
|
|
else
|
|
self.wait_for_hide = true
|
|
end
|
|
if self.HideChangeCall then
|
|
--有的界面需要在显隐的时候调用函数
|
|
self:HideChangeCall(false)
|
|
end
|
|
end
|
|
|
|
--取消隐藏
|
|
function BaseView:CancelHide()
|
|
self.isPop = true
|
|
self.wait_for_hide = false
|
|
BaseView.RemoveDestroyTimer(self)
|
|
if self.hide_maincancas then
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, false)
|
|
end
|
|
-- -- 重新添加背景模糊特效
|
|
-- if self.blur_activity_bg then
|
|
-- MainCamera.Instance:EnableBlurEffect(self.blur_camera_type, self.blur_anim_time)
|
|
-- end
|
|
--self:DoShowViewAnimation(true)
|
|
--self:DoShowViewScaleAnimation(true)
|
|
self:SetBackUIVisible(true)
|
|
|
|
|
|
if self.gameObject then
|
|
if IsNull(self.gameObject) then
|
|
local str = "base view CancelHide is nil " .. tostring(self.layout_file)
|
|
GameError.Instance:SendErrorMsg(str)
|
|
else
|
|
self.gameObject:SetActive(true)
|
|
if self.ReOpen_callback then
|
|
self:ReOpen_callback()
|
|
end
|
|
if self.fire_change_visible_event then
|
|
GlobalEventSystem:Fire(BaseView.ChangeVisible, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
local cache_model_bg = self.model_activity_bg_objs and self.model_activity_bg_objs[self.model_activity_bg_type]
|
|
if cache_model_bg and cache_model_bg.obj and not IsNull(cache_model_bg.obj) then
|
|
cache_model_bg.obj:SetActive(false)
|
|
cache_model_bg.obj:SetActive(true)
|
|
return
|
|
end
|
|
if self.HideChangeCall then
|
|
--有的界面需要在显隐的时候调用函数
|
|
self:HideChangeCall(true)
|
|
end
|
|
end
|
|
|
|
function BaseView:CloseVisible()
|
|
if self.gameObject then
|
|
if IsNull(self.gameObject) or IsNull(self.transform) then
|
|
if self.layout_file ~= "GuidePromptView" then
|
|
local str = "base view CloseVisible is nil " .. tostring(self.layout_file)
|
|
GameError.Instance:SendErrorMsg(str)
|
|
end
|
|
else
|
|
if self.close_mode == CloseMode.CloseDestroy and self.destroy_imm and not self.use_local_view then
|
|
self.transform:SetParent(UiFactory.GetSceneCanvas())
|
|
else
|
|
self.gameObject:SetActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
self:StopLittleMoveAnim()
|
|
|
|
if self.key_back_to_close_id then
|
|
if BaseView.KeyBackWinCount and BaseView.KeyBackWinCount > 0 then
|
|
BaseView.KeyBackWinCount = BaseView.KeyBackWinCount - 1
|
|
end
|
|
GlobalEventSystem:UnBind(self.key_back_to_close_id)
|
|
self.key_back_to_close_id=nil
|
|
end
|
|
|
|
if self.change_scene_close_event_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.change_scene_close_event_id)
|
|
self.change_scene_close_event_id=nil
|
|
end
|
|
|
|
if self.open_guide_close_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.open_guide_close_id)
|
|
self.open_guide_close_id=nil
|
|
end
|
|
|
|
if self.change_scene_hide_event_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.change_scene_hide_event_id)
|
|
self.change_scene_hide_event_id=nil
|
|
end
|
|
|
|
if self.change_scene_complete_event_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.change_scene_complete_event_id)
|
|
self.change_scene_complete_event_id=nil
|
|
end
|
|
|
|
if self.all_close_event_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.all_close_event_id)
|
|
self.all_close_event_id = nil
|
|
end
|
|
|
|
if self.jump_close_event_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.jump_close_event_id)
|
|
self.jump_close_event_id = nil
|
|
end
|
|
|
|
if self.orientation_change_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.orientation_change_id)
|
|
self.orientation_change_id = nil
|
|
end
|
|
|
|
if self.reenter_close_event_id then
|
|
EventSystem.UnBind(GlobalEventSystem,self.reenter_close_event_id)
|
|
self.reenter_close_event_id = nil
|
|
end
|
|
|
|
if self.delay_open_id then
|
|
LuaViewManager.RemoveDelayQueue(lua_viewM, self.delay_open_id)
|
|
self.delay_open_id = nil
|
|
end
|
|
|
|
if self.load_time_out_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.load_time_out_id)
|
|
self.load_time_out_id = nil
|
|
end
|
|
|
|
if self.is_hide_skill_black_bg then
|
|
SkillManager:getInstance():RemoveHideBlackViews(self.layout_file)
|
|
end
|
|
|
|
if self.hide_maincancas then
|
|
LuaViewManager.Fire(lua_viewM,LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true)
|
|
end
|
|
|
|
self:ClearOpenMovieId()
|
|
|
|
if self.hide_item_use_view then
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.HIDE_ITEM_USE_VIEW, false)
|
|
end
|
|
--隐藏时自动删掉挂接的模型,需要在对应界面的opencallback后重新创建
|
|
if self.hide_clear_role_model then
|
|
lua_resM:clearRoleMode(self)
|
|
end
|
|
if self.is_set_zdepth and not IsNull(self.transform) then
|
|
UIZDepth.ResetUIZDepth(self)
|
|
end
|
|
-- 如果存在模糊背景图,则需要传到C#中销毁
|
|
if self.blur_screenshot then
|
|
MainCamera.Instance:ClearScreenShotCache(self.blur_screenshot)
|
|
end
|
|
|
|
if self.blur_screen_time_out_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.blur_screen_time_out_id)
|
|
self.blur_screen_time_out_id = nil
|
|
end
|
|
BaseView.AfterClose(self)
|
|
end
|
|
|
|
function BaseView:CloseDestroy()
|
|
self:CloseVisible()
|
|
|
|
if self.destroy_imm then
|
|
BaseView.Destroy(self)
|
|
else
|
|
BaseView.AddDestroyTimer(self)
|
|
end
|
|
end
|
|
|
|
function BaseView:RemoveDestroyTimer()
|
|
if self.destroy_timer then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.destroy_timer)
|
|
self.destroy_timer = false
|
|
end
|
|
end
|
|
|
|
function BaseView:AddDestroyTimer()
|
|
BaseView.RemoveDestroyTimer(self)
|
|
|
|
local destroy_callback = function()
|
|
self.destroy_timer = false
|
|
self:Destroy()
|
|
end
|
|
self.destroy_timer = TimerQuest.AddDelayQuest(GlobalTimerQuest, destroy_callback, self.delay_delete_time)
|
|
end
|
|
|
|
function BaseView:Destroy()
|
|
if self.is_delete or not self.gameObject then return end
|
|
|
|
if self.model_bg_time_id then
|
|
GlobalTimerQuest:CancelQuest(self.model_bg_time_id)
|
|
self.model_bg_time_id = nil
|
|
end
|
|
|
|
if self._base_delay_load_id then
|
|
LuaViewManager.RemoveDelayQueue(lua_viewM, self._base_delay_load_id)
|
|
self._base_delay_load_id = false
|
|
end
|
|
|
|
if self.trigger_guide_id then
|
|
EventSystem.UnBind(GlobalEventSystem, self.trigger_guide_id)
|
|
self.trigger_guide_id = false
|
|
end
|
|
|
|
if self.orientation_id then
|
|
EventSystem.UnBind(GlobalEventSystem, self.orientation_id)
|
|
self.orientation_id = false
|
|
end
|
|
|
|
if self.ui_camera_flag_change_id then
|
|
EventSystem.UnBind(GlobalEventSystem, self.ui_camera_flag_change_id)
|
|
self.ui_camera_flag_change_id = false
|
|
end
|
|
-- -- 去除模糊效果
|
|
-- if self.blur_activity_bg then
|
|
-- MainCamera.Instance:DisableBlurEffect(self.blur_anim_time)
|
|
-- end
|
|
-- 确认清除掉了界面动画效果
|
|
if self.fading_anim_id then
|
|
TweenLite.Stop(self.fading_anim_id)
|
|
self.fading_anim_id = nil
|
|
end
|
|
|
|
if self.scale_anim_id then
|
|
TweenLite.Stop(self.scale_anim_id)
|
|
self.scale_anim_id = nil
|
|
end
|
|
if self.autoDeleteList then
|
|
for i,v in ipairs(self.autoDeleteList) do
|
|
if v ~= nil then
|
|
v:DeleteMe()
|
|
end
|
|
end
|
|
self.autoDeleteList = nil
|
|
end
|
|
self.is_delete = true
|
|
|
|
UI.BindEventComp.UnBindAll(self)
|
|
if self.action_nodes then
|
|
for k,v in pairs(self.action_nodes) do
|
|
cc.ActionManager:getInstance():removeAllActionsFromTarget(v)
|
|
end
|
|
self.action_nodes = nil
|
|
end
|
|
|
|
if self.effect_nodes then
|
|
for k,v in pairs(self.effect_nodes) do
|
|
self:ClearUIEffect(v)
|
|
end
|
|
end
|
|
|
|
self:AfterDestroy()
|
|
|
|
BaseView.RemoveDestroyTimer(self)
|
|
if self.destroy_callback and self.is_loaded then
|
|
self.destroy_callback()
|
|
end
|
|
|
|
if self.show_loading then
|
|
LuaViewManager.RemoveLoadingView(lua_viewM, self._iid)
|
|
end
|
|
self.preparing_res = false
|
|
self.is_loaded = false
|
|
self.popChild = nil
|
|
self.parent_wnd = nil
|
|
self.transform = nil
|
|
self.cache_findChild = nil
|
|
self.preLoad_list = nil
|
|
self.back_item_contaner_list = false
|
|
|
|
self:DeleteModelBg()
|
|
|
|
self:DeleteMe()
|
|
LuaViewManager.DestroyView(lua_viewM,self.gameObject)
|
|
self.gameObject = nil
|
|
EventSystem.Fire(GlobalEventSystem,BaseView.DestroyEvent,self)
|
|
end
|
|
|
|
function BaseView:__delete()
|
|
self:RemoveUIFromBack()
|
|
if not self.is_delete then
|
|
self:CloseDestroy()
|
|
end
|
|
end
|
|
|
|
-- 显示子窗口
|
|
function BaseView:PopUpChild(win)
|
|
if win then
|
|
if self.popChild ~= nil and self.popChild ~= win then
|
|
self.popChild:SetVisible(false, true)
|
|
end
|
|
self.popChild = win
|
|
self.popChild:SetVisible(true, true)
|
|
if self.fire_change_visible_event then
|
|
GlobalEventSystem:Fire(BaseView.ChangeVisible, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BaseView:GetBaseFile()
|
|
return self.base_file
|
|
end
|
|
|
|
function BaseView:GetChildren( names )
|
|
GetChildren(self, names)
|
|
end
|
|
|
|
--自销毁事件
|
|
function BaseView:BindEvent( bindDispather, eventName, handleFunc )
|
|
return UI.BindEventComp.BindEvent(self, bindDispather, eventName, handleFunc)
|
|
end
|
|
|
|
--关闭界面时销毁该节点
|
|
function BaseView:AutoDelete( deleteNode )
|
|
self.autoDeleteList = self.autoDeleteList or {}
|
|
table.insert(self.autoDeleteList, deleteNode)
|
|
end
|
|
|
|
--自销毁节点
|
|
function BaseView:CreateItem( class_name, parent, layer_name, ... )
|
|
if class_name and parent then
|
|
local item = class_name.New(parent, nil, layer_name, ... )
|
|
self:AutoDelete( item )
|
|
return item
|
|
end
|
|
end
|
|
|
|
--自销毁动作
|
|
function BaseView:AddAction( action, node )
|
|
self.action_nodes = self.action_nodes or {}
|
|
self.action_nodes[node] = node
|
|
--table.insert(self.action_nodes, node)
|
|
cc.ActionManager:getInstance():addAction(action, node)
|
|
end
|
|
|
|
--自销毁特效
|
|
function BaseView:CreateUIEffect( config )
|
|
if not config or not config.uiTranform then return end
|
|
self.effect_nodes = self.effect_nodes or {}
|
|
self:AddUIEffectConfig( config )
|
|
table.insert(self.effect_nodes, config.uiTranform)
|
|
end
|
|
|
|
|
|
--移出屏幕(隐藏,用于频繁调用显示隐藏的对象,减少setActive的调用次数)
|
|
function BaseView:MoveOutOfScreen( transform )
|
|
transform = transform or self.transform
|
|
if transform then
|
|
self.base_move_from_pos_y = self.base_move_from_pos_y or GetLocalPositionY(transform)
|
|
SetLocalPositionY(transform, -99999)
|
|
end
|
|
end
|
|
|
|
--移回屏幕(显示,用于频繁调用显示隐藏的对象,减少setActive的调用次数)
|
|
function BaseView:MoveInToScreen( transform )
|
|
transform = transform or self.transform
|
|
if transform and self.base_move_from_pos_y then
|
|
SetLocalPositionY(transform, self.base_move_from_pos_y)
|
|
self.base_move_from_pos_y = false
|
|
end
|
|
end
|
|
|
|
function BaseView:InitViewAnimation()
|
|
if self.full_screen or self.ani_left or self.ani_right then
|
|
|
|
--处理刘海屏的位移偏移
|
|
local width, offset = self:GetIpxOffset()
|
|
--右侧
|
|
self.ani_right_trans = self:GetChild("right")
|
|
if self.ani_right_trans then
|
|
self.ani_right_obj = self:GetChild("right").gameObject
|
|
self.old_ani_right_pos = self.ani_right_trans.anchoredPosition
|
|
if self.ani_right and ClientConfig.view_ani_mode == true then
|
|
SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + 600, self.old_ani_right_pos.y)
|
|
else
|
|
SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + offset, self.old_ani_right_pos.y)
|
|
end
|
|
end
|
|
--左侧
|
|
self.ani_left_trans = self:GetChild("left")
|
|
if self.ani_left_trans then
|
|
self.ani_left_obj = self:GetChild("left").gameObject
|
|
self.old_ani_left_pos = self.ani_left_trans.anchoredPosition
|
|
if self.ani_left and ClientConfig.view_ani_mode == true then
|
|
SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x - 600 , self.old_ani_left_pos.y)
|
|
else
|
|
SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x + offset , self.old_ani_left_pos.y)
|
|
end
|
|
end
|
|
--中间
|
|
self:ResetMidNode()
|
|
|
|
--设置界面大小
|
|
local MaxScreenWidth = math.min(SrcScreenWidth - width, 1560 - width)
|
|
local rt = self.gameObject:GetComponent("RectTransform")
|
|
rt.sizeDelta = Vector2(MaxScreenWidth, ScreenHeight)
|
|
|
|
end
|
|
end
|
|
|
|
--播放界面入场动画
|
|
function BaseView:DoOpenAni(tab_id)
|
|
tab_id = tab_id or 1
|
|
self.ani_list = self.ani_list or {}
|
|
if not self.is_loaded or self.ani_list[tab_id] then return end
|
|
self.ani_list[tab_id] = true
|
|
self:DoOpenViewAnimation()
|
|
end
|
|
|
|
--处理界面动画
|
|
function BaseView:DoOpenViewAnimation()
|
|
local width, offset = self:GetIpxOffset()
|
|
if self.ani_right and self.ani_right_trans and ClientConfig.view_ani_mode == true then
|
|
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_right_trans)
|
|
SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + self.ani_right - offset, self.old_ani_right_pos.y)
|
|
local moveActionRight = cc.MoveTo.createAnchoredType(1, self.old_ani_right_pos.x - offset, self.ani_right_trans.anchoredPosition.y)
|
|
moveActionRight = cc.EaseExponentialOut.New(moveActionRight)
|
|
self:AddAction(moveActionRight, self.ani_right_trans)
|
|
end
|
|
|
|
if self.ani_left and self.ani_left_trans and ClientConfig.view_ani_mode == true then
|
|
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_left_trans)
|
|
SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x + self.ani_left + offset, self.old_ani_left_pos.y)
|
|
local moveActionLeft = cc.MoveTo.createAnchoredType(1, self.old_ani_left_pos.x + offset, self.ani_left_trans.anchoredPosition.y)
|
|
moveActionLeft = cc.EaseExponentialOut.New(moveActionLeft)
|
|
self:AddAction(moveActionLeft, self.ani_left_trans)
|
|
end
|
|
end
|
|
|
|
--获取刘海屏位移
|
|
function BaseView:GetIpxOffset()
|
|
local width, offset = 0, 0
|
|
if ClientConfig.iphone_x_offset_left ~= 0 then
|
|
offset = ClientConfig.iphone_x_offset_left /2
|
|
width = ClientConfig.iphone_x_offset_left
|
|
elseif ClientConfig.iphone_x_offset_right then
|
|
offset = -ClientConfig.iphone_x_offset_right /2
|
|
width = ClientConfig.iphone_x_offset_right
|
|
end
|
|
return width, offset
|
|
end
|
|
|
|
--处理中间节点
|
|
function BaseView:ResetMidNode()
|
|
if self.adjust_mid then
|
|
local width, offset = self:GetIpxOffset()
|
|
local MaxScreenWidth = math.min(SrcScreenWidth - width, 1560 - width)
|
|
self.mid_trans = self:GetChild("mid")
|
|
if self.mid_trans then
|
|
self.adjust_mid.left = self.adjust_mid.left or 0
|
|
self.adjust_mid.right = self.adjust_mid.right or 0
|
|
local x = MaxScreenWidth - self.adjust_mid.left - self.adjust_mid.right
|
|
x = x / 2
|
|
SetAnchoredPosition(self.mid_trans, - (MaxScreenWidth / 2) + self.adjust_mid.left + x + offset, self.mid_trans.anchoredPosition.y)
|
|
end
|
|
end
|
|
end
|
|
|
|
--处理刘海屏,旋转屏幕
|
|
function BaseView:SetIpxMode()
|
|
self:ResetMidNode()
|
|
|
|
local width, offset = self:GetIpxOffset()
|
|
if self.ani_right_trans then
|
|
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_right_trans)
|
|
SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + offset, self.old_ani_right_pos.y)
|
|
end
|
|
|
|
if self.ani_left_trans then
|
|
cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_left_trans)
|
|
SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x + offset, self.old_ani_left_pos.y)
|
|
end
|
|
end
|
|
|
|
-- 进行打开界面的展示动画(淡入淡出)
|
|
-- close_callback:关闭界面的关闭回调
|
|
function BaseView:DoShowViewAnimation(show, close_callback, open_callback)
|
|
-- if not self.use_show_anim then return end
|
|
if not self.gameObject or not self.background_wnd_raw then return end
|
|
|
|
if (show and not self.use_show_anim) or (not show and not self.use_hide_anim) then
|
|
-- canvas_group.alpha = show and 1 or 0
|
|
return
|
|
end
|
|
|
|
local time = show and 0.1 or 0.1
|
|
self.background_wnd_raw.alpha = show and 0 or self.background_alpha
|
|
local target_alpha = show and self.background_alpha or 0
|
|
|
|
local function fading_anim_callback()
|
|
|
|
end
|
|
|
|
-- 关闭回调覆盖
|
|
if not show and close_callback then
|
|
fading_anim_callback = close_callback
|
|
end
|
|
self.fading_anim_id = TweenLite.to(self, self.background_wnd_raw, TweenLite.UiAnimationType.ALPHA, target_alpha, time, fading_anim_callback)
|
|
end
|
|
|
|
-- 进行打开界面的展示动画(缩放)
|
|
-- close_callback:关闭界面的关闭回调
|
|
function BaseView:DoShowViewScaleAnimation(show, close_callback, open_callback)
|
|
if self.do_show_animation == show then
|
|
if show then
|
|
if open_callback then
|
|
open_callback()
|
|
end
|
|
else
|
|
if close_callback then
|
|
close_callback()
|
|
end
|
|
end
|
|
return
|
|
end
|
|
self.do_show_animation = show
|
|
|
|
if not self.gameObject then return end
|
|
|
|
if (show and not self.use_show_anim) or (not show and not self.use_hide_anim) then
|
|
return
|
|
end
|
|
local function scale_anim_callback()
|
|
if show and self.background_wnd then
|
|
self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
|
|
end
|
|
|
|
end
|
|
local tween_type = show and TweenFunc.EASE_OUT_BACK or TweenFunc.EASE_IN_BACK
|
|
local cfg = show and BaseView.OpenCloseScaleCfg[1] or BaseView.OpenCloseScaleCfg[2]
|
|
local cur_scale = Vector3.New(cfg.start_scale, cfg.start_scale, cfg.start_scale)
|
|
local target_scale = Vector3.New(cfg.end_scale, cfg.end_scale, cfg.end_scale)
|
|
local time = cfg.time
|
|
if self.background_wnd then
|
|
local scale = show and cfg.start_scale or cfg.end_scale
|
|
if scale ~= 0 then
|
|
self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth / scale, ScreenHeight/scale)
|
|
end
|
|
end
|
|
SetLocalScale(self.gameObject.transform, cur_scale.x, cur_scale.y, cur_scale.z)
|
|
-- 关闭回调覆盖
|
|
if not show and close_callback then
|
|
scale_anim_callback = close_callback
|
|
end
|
|
if self.scale_anim_id then
|
|
TweenLite.Stop(self.scale_anim_id)
|
|
self.scale_anim_id = nil
|
|
end
|
|
self.scale_anim_id = TweenLite.to(self, self.gameObject.transform, TweenLite.UiAnimationType.SCALE, target_scale, time, scale_anim_callback, tween_type)
|
|
|
|
if not show then
|
|
GlobalEventSystem:Fire(EventName.BASEVIEW_DO_VIEW_ANIM, show, self)
|
|
end
|
|
end
|
|
|
|
--把界面的UI节点移动到背景层
|
|
function BaseView:MoveUIToBack(node, args, camera_args,activity_args)
|
|
self.move_node_list = self.move_node_list or {}
|
|
|
|
if self.background_wnd and not self.blur_activity_bg then--没有高斯模糊才这样设置
|
|
--self.background_wnd:GetComponent("RawImageExtend").alpha = 0
|
|
end
|
|
if node then
|
|
local t = {node = node, args = args, parent = node.transform.parent, sibling_idx = node.transform:GetSiblingIndex()}
|
|
table.insert(self.move_node_list, t)
|
|
LuaViewManager:getInstance():ShowBackData({
|
|
target = self,
|
|
node_list ={[1] = t},
|
|
camera_args = camera_args,
|
|
activity = activity_args,
|
|
})
|
|
if #self.move_node_list == 1 and self.use_show_anim then
|
|
GlobalEventSystem:Fire(EventName.BASEVIEW_DO_VIEW_ANIM, true, self)
|
|
end
|
|
end
|
|
end
|
|
|
|
--显示后模型摄像机
|
|
function BaseView:ShowBackModeCamera(camera_args)
|
|
if self.background_wnd and not self.blur_activity_bg then--没有高斯模糊才这样设置
|
|
self.background_wnd:GetComponent("RawImageExtend").alpha = 0
|
|
end
|
|
camera_args = camera_args or LuaViewManager.CameraArgs.DepthZero
|
|
self.show_back_camera = true
|
|
LuaViewManager:getInstance():ShowBackData({
|
|
target = self,
|
|
camera_args = camera_args,
|
|
})
|
|
end
|
|
|
|
--把界面的UI节点从背景层中移除
|
|
function BaseView:RemoveUIFromBack()
|
|
self.move_node_list = self.move_node_list or {}
|
|
if #self.move_node_list > 0 or self.show_back_camera then
|
|
LuaViewManager:getInstance():HideBackData(self)
|
|
end
|
|
end
|
|
|
|
--根据界面状态显示隐藏在背景层中的UI
|
|
function BaseView:SetBackUIVisible(state)
|
|
if self.move_node_list then
|
|
for k,v in pairs(self.move_node_list) do
|
|
if state == true then
|
|
if v.is_hide_form_view then
|
|
v.node.gameObject:SetActive(true)
|
|
v.is_hide_form_view = nil
|
|
end
|
|
else
|
|
if v.node.gameObject and v.node.gameObject.activeSelf == true then
|
|
v.node.gameObject:SetActive(false)
|
|
v.is_hide_form_view = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
if self.back_item_contaner_list then
|
|
for k,v in pairs(self.back_item_contaner_list) do
|
|
v:SetBackUIVisible(state, true)
|
|
end
|
|
end
|
|
end
|
|
|
|
--设置界面的子页签(针对挂模型的界面)
|
|
function BaseView:AppendToBackContainer(child_item)
|
|
if child_item then
|
|
self.back_item_contaner_list = self.back_item_contaner_list or {}
|
|
table.insert(self.back_item_contaner_list, child_item)
|
|
end
|
|
end
|
|
|
|
--做界面打开动画(缩放动画)
|
|
function BaseView:PlayOpenMovie()
|
|
do return false end
|
|
-- print("huangcong:BaseView当前帧率", SceneManager and SceneManager:getInstance().curr_frame_rate or 0)
|
|
-- print("huangcong:BaseView帧率上限 :", lua_settingM:GetFrameRate())
|
|
-- print("huangcong:BaseView是否开启开启界面动画 :", self.need_movie_type)
|
|
-- print("huangcong:BaseView是否销毁监听:",self.open_tween_id_2)
|
|
if (SceneManager and SceneManager:getInstance().curr_frame_rate > 52) --当前帧率
|
|
and lua_settingM:GetFrameRate() > 51 --帧率上限
|
|
and self.transform and self.use_background and self.hide_maincancas
|
|
and (self.need_movie_type or lua_viewM.main_cancas_last_visible)
|
|
and not self.open_tween_id_2 then
|
|
|
|
self.has_played_open_movie = true
|
|
SetLocalScale(self.transform, 0.90, 0.90, 0.90)
|
|
|
|
local function onComplete()
|
|
self.open_tween_id_2 = nil
|
|
end
|
|
self.open_tween_id_2 = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.SCALE, Vector3.one ,0.1, onComplete)
|
|
end
|
|
end
|
|
|
|
function BaseView:ClearOpenMovieId()
|
|
if self.open_tween_id_1 then
|
|
TweenLite.Stop(self.open_tween_id_1)
|
|
self.open_tween_id_1 = nil
|
|
end
|
|
if self.open_tween_id_2 then
|
|
TweenLite.Stop(self.open_tween_id_2)
|
|
self.open_tween_id_2 = nil
|
|
end
|
|
end
|
|
|
|
--做界面关闭动画(暂时不需要)
|
|
function BaseView:PlayCloseMovie()
|
|
do return false end
|
|
if self.transform and self.has_played_open_movie and not self.close_tween_id_1 then
|
|
|
|
self.has_played_open_movie = false
|
|
LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true)
|
|
local function onComplete()
|
|
self:ClearCloseMovieId()
|
|
self:CloseVisible()
|
|
if self.destroy_imm then
|
|
self:Destroy()
|
|
else
|
|
BaseView.AddDestroyTimer(self)
|
|
end
|
|
end
|
|
if lua_viewM:GetViewNum() >= 2 or (SceneManager and SceneManager:getInstance().curr_frame_rate < 50) then
|
|
onComplete()
|
|
return
|
|
end
|
|
if not self.close_tween_id_1 then
|
|
--先清理模型
|
|
if self.popChild then
|
|
lua_resM:clearRoleMode(self.popChild)
|
|
end
|
|
local canvas_group = self.transform:GetComponent("CanvasGroup")
|
|
if not canvas_group then
|
|
canvas_group = self.gameObject:AddComponent(typeof(UnityEngine.CanvasGroup))
|
|
end
|
|
|
|
self.close_tween_id_1 = TweenLite.to(self, canvas_group, TweenLite.UiAnimationType.ALPHA, 0.1, 0.13)
|
|
self.close_tween_id_2 = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.SCALE, Vector3.one * 0.88, 0.14, onComplete)
|
|
end
|
|
return true
|
|
else
|
|
return false
|
|
end
|
|
end
|
|
|
|
function BaseView:ClearCloseMovieId()
|
|
if self.close_tween_id_1 then
|
|
TweenLite.Stop(self.close_tween_id_1)
|
|
self.close_tween_id_1 = nil
|
|
end
|
|
if self.close_tween_id_2 then
|
|
TweenLite.Stop(self.close_tween_id_2)
|
|
self.close_tween_id_2 = nil
|
|
end
|
|
end
|
|
|
|
function BaseView:BindLittleMove(node_trans, dir, target_pos)
|
|
|
|
if not node_trans or not dir or not target_pos then return end
|
|
if not self.little_move_event then
|
|
self.little_move_event = true
|
|
local function onLittleMove(is_out)
|
|
if not self.little_move_is_show_anim and not is_out then
|
|
self.little_move_is_show_anim = true
|
|
end
|
|
self:BaseViewLittleMove(is_out)
|
|
self.is_out = is_out
|
|
end
|
|
self:BindEvent(GlobalEventSystem, EventName.PLAY_MAINUI_MOVIE_EVENT, onLittleMove)
|
|
end
|
|
|
|
self.little_move_table = self.little_move_table or {}
|
|
table.insert(self.little_move_table, {node_trans = node_trans, dir = dir, target_pos = target_pos})
|
|
|
|
|
|
--如果不做动画,则直接调整刘海适配
|
|
if not ClientConfig.can_little_move then
|
|
local function onOrientationChange()
|
|
if self.is_loaded and not self._use_delete_method then
|
|
self:BaseViewOrientationChange()
|
|
end
|
|
end
|
|
if not self.orientation_id then
|
|
self.orientation_id = self:BindEvent(GlobalEventSystem, EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
|
|
end
|
|
local x, y = GetAnchoredPosition( node_trans)
|
|
if dir == BaseView.LittleMoveDir.Left then
|
|
node_trans.anchoredPosition = Vector2( target_pos + ClientConfig.iphone_x_offset_left , y)
|
|
elseif dir == BaseView.LittleMoveDir.Right then
|
|
node_trans.anchoredPosition = Vector2( target_pos - ClientConfig.iphone_x_offset_right, y)
|
|
elseif dir == BaseView.LittleMoveDir.Top then
|
|
node_trans.anchoredPosition = Vector2( x, target_pos)
|
|
else
|
|
node_trans.anchoredPosition = Vector2( x, target_pos)
|
|
end
|
|
return
|
|
end
|
|
|
|
--初始化节点的位置
|
|
local x, y = GetAnchoredPosition(node_trans)
|
|
if dir == BaseView.LittleMoveDir.Left then
|
|
node_trans.anchoredPosition = Vector2(target_pos + ClientConfig.iphone_x_offset_left-MainUIModel.LITTLE_MOVE_DIST, y)
|
|
elseif dir == BaseView.LittleMoveDir.Right then
|
|
node_trans.anchoredPosition = Vector2(target_pos - ClientConfig.iphone_x_offset_right+MainUIModel.LITTLE_MOVE_DIST , y)
|
|
elseif dir == BaseView.LittleMoveDir.Top then
|
|
node_trans.anchoredPosition = Vector2( x,target_pos+MainUIModel.LITTLE_MOVE_DIST)
|
|
else
|
|
node_trans.anchoredPosition = Vector2( x,target_pos-MainUIModel.LITTLE_MOVE_DIST)
|
|
end
|
|
|
|
if self.little_move_load_view_time_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.little_move_load_view_time_id)
|
|
self.little_move_load_view_time_id = false
|
|
end
|
|
local function open_view_little_move_func()
|
|
if not self.little_move_is_show_anim then
|
|
self:BaseViewLittleMove()
|
|
end
|
|
end
|
|
self.little_move_is_show_anim = false
|
|
self.little_move_load_view_time_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, open_view_little_move_func, 0.1)
|
|
|
|
|
|
local function onOrientationChange()
|
|
if self.is_loaded and not self._use_delete_method and self.littleMove_is_anim then
|
|
self:BaseViewLittleMoveOrientationChange()
|
|
end
|
|
end
|
|
if not self.orientation_id then
|
|
self.orientation_id = self:BindEvent(GlobalEventSystem, EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
|
|
end
|
|
end
|
|
|
|
function BaseView:StopLittleMoveAnim()
|
|
if self.little_move_tween_list and #self.little_move_tween_list > 0 then
|
|
for i,v in ipairs(self.little_move_tween_list) do
|
|
TweenLite.Stop(v)
|
|
end
|
|
self.little_move_tween_list = false
|
|
end
|
|
if self.little_move_load_view_time_id then
|
|
TimerQuest.CancelQuest(GlobalTimerQuest, self.little_move_load_view_time_id)
|
|
self.little_move_load_view_time_id = false
|
|
end
|
|
end
|
|
|
|
--屏幕翻转
|
|
function BaseView:BaseViewLittleMoveOrientationChange( )
|
|
|
|
if self.is_out then
|
|
for i,v in ipairs(self.little_move_table) do
|
|
local x, y = GetAnchoredPosition( v.node_trans)
|
|
if v.dir == BaseView.LittleMoveDir.Left then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left - MainUIModel.LITTLE_MOVE_OUT_DIST, y)
|
|
elseif v.dir == BaseView.LittleMoveDir.Right then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right + MainUIModel.LITTLE_MOVE_OUT_DIST, y)
|
|
elseif v.dir == BaseView.LittleMoveDir.Top then
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos + MainUIModel.LITTLE_MOVE_OUT_DIST)
|
|
else
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos - MainUIModel.LITTLE_MOVE_OUT_DIST)
|
|
end
|
|
end
|
|
else
|
|
self:BaseViewOrientationChange()
|
|
end
|
|
end
|
|
|
|
--屏幕翻转时,位置纠正
|
|
function BaseView:BaseViewOrientationChange( )
|
|
for i,v in ipairs(self.little_move_table) do
|
|
local x, y = GetAnchoredPosition( v.node_trans)
|
|
if v.dir == BaseView.LittleMoveDir.Left then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left , y)
|
|
elseif v.dir == BaseView.LittleMoveDir.Right then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right, y)
|
|
elseif v.dir == BaseView.LittleMoveDir.Top then
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
|
|
else
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
|
|
end
|
|
end
|
|
end
|
|
|
|
function BaseView:BaseViewLittleMove( is_out )
|
|
if not self.little_move_table or #self.little_move_table <= 0 then return end
|
|
self:StopLittleMoveAnim()
|
|
self.little_move_tween_list = {}
|
|
self.littleMove_is_anim = true
|
|
local function end_func( ... )
|
|
self.littleMove_is_anim = false
|
|
end
|
|
if is_out then
|
|
for i,v in ipairs(self.little_move_table) do
|
|
local x, y = GetAnchoredPosition( v.node_trans)
|
|
if v.dir == BaseView.LittleMoveDir.Left then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left, y)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSX, v.target_pos + ClientConfig.iphone_x_offset_left - MainUIModel.LITTLE_MOVE_OUT_DIST, MainUIModel.LITTLE_MOVE_OUT_TIME, end_func)
|
|
elseif v.dir == BaseView.LittleMoveDir.Right then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right, y)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSX, v.target_pos - ClientConfig.iphone_x_offset_right + MainUIModel.LITTLE_MOVE_OUT_DIST, MainUIModel.LITTLE_MOVE_OUT_TIME,end_func)
|
|
elseif v.dir == BaseView.LittleMoveDir.Top then
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSY, v.target_pos + MainUIModel.LITTLE_MOVE_OUT_DIST, MainUIModel.LITTLE_MOVE_OUT_TIME,end_func)
|
|
else
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSY, v.target_pos - MainUIModel.LITTLE_MOVE_OUT_DIST, MainUIModel.LITTLE_MOVE_OUT_TIME,end_func)
|
|
end
|
|
end
|
|
|
|
else
|
|
for i,v in ipairs(self.little_move_table) do
|
|
local x, y = GetAnchoredPosition( v.node_trans)
|
|
if v.dir == BaseView.LittleMoveDir.Left then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left-MainUIModel.LITTLE_MOVE_DIST, y)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSX, v.target_pos + ClientConfig.iphone_x_offset_left , MainUIModel.LITTLE_MOVE_TIME,end_func)
|
|
elseif v.dir == BaseView.LittleMoveDir.Right then
|
|
v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right+MainUIModel.LITTLE_MOVE_DIST , y)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSX, v.target_pos - ClientConfig.iphone_x_offset_right, MainUIModel.LITTLE_MOVE_TIME,end_func)
|
|
elseif v.dir == BaseView.LittleMoveDir.Top then
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos+MainUIModel.LITTLE_MOVE_DIST)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSY, v.target_pos , MainUIModel.LITTLE_MOVE_TIME,end_func)
|
|
else
|
|
v.node_trans.anchoredPosition = Vector2( x, v.target_pos-MainUIModel.LITTLE_MOVE_DIST)
|
|
self.little_move_tween_list[i] = TweenLite.to(self, v.node_trans, TweenLite.UiAnimationType.ANCHORED_POSY, v.target_pos , MainUIModel.LITTLE_MOVE_TIME,end_func)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
-- 绑定主界面聊天UI的展开(展开时被遮挡的UI绑定这个事件后会隐藏掉UI)
|
|
function BaseView:BindMainUIExpandEvent( con_tran )
|
|
if not con_tran or (not con_tran.gameObject) then return end
|
|
self.main_ui_func_btn_con_list = self.main_ui_func_btn_con_list or {}
|
|
if TableSize(self.main_ui_func_btn_con_list) <= 0 then
|
|
local function set_func_btn_show()
|
|
self:SetFuncBtnShow()
|
|
end
|
|
self:BindEvent(GlobalEventSystem, EventName.MAIN_UI_CON_EXPAND, set_func_btn_show)
|
|
end
|
|
|
|
table.insert(self.main_ui_func_btn_con_list, con_tran)
|
|
-- 初始化一次
|
|
self:SetFuncBtnShow()
|
|
end
|
|
|
|
-- 设置fun_btn的显示状态
|
|
function BaseView:SetFuncBtnShow( )
|
|
local main_ui_is_expand = MainUIModel:getInstance():MainChatUIIsExpand()
|
|
for k,v in pairs(self.main_ui_func_btn_con_list) do
|
|
v.gameObject:SetActive(not main_ui_is_expand)
|
|
end
|
|
end
|