源战役客户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1789 lines
61 KiB

  1. BaseView = BaseView or BaseClass(UIPartical)
  2. local BaseView = BaseView
  3. local LuaViewManager = LuaViewManager
  4. local lua_viewM = lua_viewM
  5. local GlobalTimerQuest = GlobalTimerQuest
  6. local SetLocalScale = SetLocalScale
  7. local destroy = destroy
  8. local GameObject = GameObject
  9. local UiFactory = UiFactory
  10. local UIZDepth = UIZDepth
  11. local GlobalEventSystem = GlobalEventSystem
  12. local AddClickEvent = AddClickEvent
  13. local EventSystem = EventSystem
  14. local GetChildTransforms = GetChildTransforms
  15. local GetChildGameObjects = GetChildGameObjects
  16. local GetChildImages = GetChildImages
  17. local GetChildTexts = GetChildTexts
  18. BaseView.Class_Type = "BaseView"
  19. BaseView.OpenEvent = "BaseView.OpenEvent"
  20. BaseView.CloseEvent = "BaseView.CloseEvent"
  21. BaseView.DestroyEvent = "BaseView.DestroyEvent"
  22. BaseView.CreateView = "BaseView.CreateView"
  23. BaseView.ChangeVisible = "BaseView.ChangeVisible"
  24. --3D模型背景资源
  25. BaseView.ModelBgRes = {
  26. [1] = "effect_beibao_1_1", --蓝色网格
  27. [2] = "effect_beibao_1_2", --青色网格
  28. [3] = "effect_beibao_1_3", --紫色网格
  29. [4] = "effect_beibao_2_1", --青色方块
  30. [5] = "effect_beibao_3_1", --蓝色线条
  31. [6] = "effect_beibao_3_2", --紫色线条
  32. }
  33. --界面打开/关闭界面缩放参数
  34. BaseView.OpenCloseScaleCfg =
  35. {
  36. --打开界面缩放动画参数
  37. [1] = {start_scale = 0.9, end_scale = 1, time = 0.3},
  38. --关闭界面缩放动画参数
  39. [2] = {start_scale = 1, end_scale = 0.9, time = 0.3},
  40. }
  41. OpenMode = {
  42. OpenOnly = 1,
  43. OpenToggle = 2,
  44. OpenDefault = 1,
  45. }
  46. BaseView.LittleMoveDir =
  47. {
  48. Top = 1,
  49. Bottom = 2,
  50. Left = 3,
  51. Right = 4,
  52. }
  53. CloseMode = {
  54. CloseVisible = 1,
  55. CloseDestroy = 2,
  56. CloseDefault = 2,
  57. }
  58. BaseView.ShowAnimType = {
  59. Fading = 1, -- 淡入淡出
  60. -- BlackScreen = 2, -- 黑屏切换
  61. }
  62. function BaseView:__init()
  63. GlobalEventSystem:FireNextFrame(BaseView.CreateView,self)
  64. end
  65. function BaseView:__defineVar()
  66. return {
  67. _class_type = self, -- 界面类型,通过判断_class_type.Class_Type识别baseview baseitem
  68. _iid = _in_obj_ins_id, -- 界面对象标识id
  69. _use_delete_method = false, -- 是否调用过delete函数
  70. _need_wait_blur_bg_loaded = false, -- 是否需要等待模糊背景加载完毕
  71. base_file = "" , -- 模块资源名称
  72. layout_file = "", -- 界面预设名字
  73. preLoad_list = false, -- 打开界面之前需要预加载的资源,除了本模块UI资源外的
  74. hide_maincancas = false, -- 是否隐藏主界面
  75. use_background = false, -- 窗口背景,用灰色半透明背景
  76. background_alpha = 0.85, -- 窗口背景的透明度
  77. click_bg_toClose = false, -- 点击背景是否关闭该窗口
  78. background_wnd = false, -- 背景蒙版窗口
  79. destroy_imm = true, -- 销毁窗口时采用立即销毁模式
  80. delay_delete_time = 3, -- 非立即销毁的界面,关闭后延迟销毁的等待时间
  81. change_scene_close = false, -- 切换场景是否关闭
  82. reenter_scene_close = false, -- 重新进入场景是否关闭
  83. change_scene_hide = false, -- 切换场景是否隐藏(不与change_scene_close、reenter_scene_close同时使用)
  84. preparing_res = false, -- 异步加载进行中
  85. is_delete = false , -- 是否已经删除
  86. is_set_order_sorting = true, -- 是否需要设置深度,自动管理 canvas.sortingOrder
  87. is_set_zdepth = false, -- 是否设置z深度,当需要盖住下层的UI界面上的模型时,要设true
  88. open_mode = OpenMode.OpenDefault, -- 打开模式
  89. close_mode = CloseMode.CloseDefault, -- 关闭模式
  90. hide_item_use_view = false, -- 打开的时候是否关闭itemuseview
  91. isPop = false, -- 是否可见
  92. wait_for_hide = false, -- 等待加载完隐藏
  93. layer_name = "UI", -- 窗口层次
  94. append_to_ctl_queue = false, -- 添加进入控制队列,打开下层界面时自动关闭上层,关闭下层自动打开上层
  95. is_delay_callback = true, -- 是否延迟调用load_callback和open_callback
  96. load_callback = false, -- 加载的回调函数
  97. open_callback = false, -- 窗口打开时回调
  98. close_callback = false, -- 窗口关闭时回调
  99. destroy_callback = false, -- 销毁的回调函数
  100. show_loading = false, -- 是否显示加载界面
  101. is_loaded = false, -- 是否已经加载完
  102. cache_findChild = false, -- 缓存FindChild的接口
  103. gameObject = false, -- ugui窗口对象
  104. transform = false, -- 窗口transform
  105. use_local_view = false, -- 使用本地界面模式,将预设挂接在编辑器对应的canva层次上才能开启
  106. is_guide_module = false, --是否是新手引导模块
  107. is_hide_skill_black_bg = false, --是否隐藏羁绊技能的黑色遮罩
  108. ReOpen_callback = nil, --重新打开界面,刷新事件
  109. close_fog = nil, --开启界面的时候是否关闭场景FOG效果(如果出现场景中模型or特效和UI上效果显示不一样,开启)使用时候需要 use_background == true
  110. blur_activity_bg = false, -- UI背景遮罩的高斯模糊效果
  111. blur_camera_type = false, -- 模糊背景的摄像机类型
  112. blur_screenshot = nil, -- 模糊背景截图 nil:使用通用黑色蒙版 false:等待渲染返回 成功会返回Texture图片,而不是Sprite
  113. blur_anim_time = 0.2, -- 模糊动画时间
  114. full_screen = false, --全屏模式
  115. -- 界面打开后的内部布局动画
  116. ani_right = false, --右侧动画
  117. ani_left = false, --左侧动画
  118. adjust_mid = false, --中间布局调整
  119. ani_list = false,
  120. -- 打开/关闭界面时的展示动画
  121. use_show_anim = false, --是否启用打开界面的切换动画
  122. use_hide_anim = false, --是否启用关闭界面的切换动画
  123. ignore_use_anim = false, --是否忽略动换动画
  124. do_show_animation = false , --当前已经处理过了动画的状态,true表示处理过show动画, false表示处理过close动画
  125. -------------------------
  126. mask_open_sound = false,--是否屏蔽开界面声音
  127. mask_close_sound = false,--是否屏蔽关界面声音
  128. move_node_list = false, --移动到背景节点列表
  129. show_back_camera = false, --打开后渲染摄像机
  130. back_item_contaner_list = false, --处理view下面的item的back ui 显示和隐藏
  131. fire_change_visible_event = false, --用于界面显示隐藏通知,常用于模型动作修正
  132. need_movie_type = true, -- 是否需要播放开启关闭界面动画(针对非黑屏大界面的)
  133. jump_close = false,--用于某些界面跳转了之后就需要关掉界面
  134. model_activity_bg = false, -- 3d背景模式,带镜面反射,一级全屏界面才需要
  135. model_activity_bg_pos = false, -- 3d背景的偏移坐标,默认是居中的,如果你的模型不是居中的话就要调整坐标
  136. model_activity_bg_type = 2, -- 3d背景的默认样式类型
  137. little_move_tween_list = false, --界面4方向缓动动画数组
  138. little_move_event = false, --界面4方向缓事件监听
  139. little_move_table = false, --界面4方向缓动动画数据
  140. little_move_load_view_time_id = false, --界面打开时,缓动处理延时定时器
  141. little_move_is_show_anim = false, --界面打开时,是否已经显示过进入动画
  142. hide_clear_role_model = true, --隐藏时删除模型
  143. need_culling_mask_ground = false, --打开界面是否需要摄像机剔除ground层(加载模型较多的界面可加上,取消渲染ground稍微增加性能)
  144. force_no_ctl_queue = false,--强制不加入堆栈
  145. open_guide_close = false, --打开引导界面时(功能开放界面),是否关闭界面(复用change_scene_close的设置)
  146. }
  147. end
  148. --打开界面之前需要预加载的资源
  149. function BaseView:AddPreLoadList(abName, assetNameList, type)
  150. if not self.preLoad_list then
  151. self.preLoad_list = {}
  152. end
  153. table.insert(self.preLoad_list,{type, abName, assetNameList})
  154. end
  155. --[[
  156. transform
  157. "input/Text"
  158. ]]
  159. function BaseView:GetChild(name)
  160. if self.cache_findChild and self.transform then
  161. return self.cache_findChild(self.transform,name)
  162. end
  163. end
  164. function BaseView:GetChildComponent(name,com)
  165. return self:GetChild(name):GetComponent(com)
  166. end
  167. --获取多个孩子transform
  168. function BaseView:GetChildTransforms(names)
  169. return GetChildTransforms(self.transform, names)
  170. end
  171. --获取多个孩子go
  172. function BaseView:GetChildGameObjects(names)
  173. return GetChildGameObjects(self.transform, names)
  174. end
  175. --获取多个孩子image
  176. function BaseView:GetChildImages(names)
  177. return GetChildImages(self.transform, names)
  178. end
  179. --获取多个孩子text
  180. function BaseView:GetChildTexts(names)
  181. return GetChildTexts(self.transform, names)
  182. end
  183. --是否真正打开 判断依据是调用了open以及资源加载已经完成
  184. function BaseView:HasOpen()
  185. return self.isPop and self.is_loaded and not self.wait_for_hide
  186. end
  187. function BaseView:Open()
  188. print("[ BaseView Open ]: source = ",self._class_type._source, "layout_file = ",self.layout_file)
  189. self.isPop = true
  190. self.wait_for_hide = false
  191. self.is_in_close_anim = false
  192. self._use_delete_method = false
  193. self:RemoveDestroyTimer()
  194. -- -- 如果设备不支持高斯模糊后处理,则强制不渲染
  195. -- if self.blur_activity_bg then
  196. -- if MainCamera.Instance:GetRenderSupport() then
  197. -- self.blur_screenshot = false
  198. -- local function blur_screenshot_callback(screenshot)
  199. -- self.blur_screenshot = screenshot
  200. -- self:SetBackgroundWnd()
  201. -- end
  202. -- MainCamera.Instance:GetCameraBlurScreenShot(blur_screenshot_callback, self.blur_camera_type)
  203. -- else
  204. -- self.blur_screenshot = false
  205. -- self.blur_activity_bg = false
  206. -- end
  207. -- end
  208. if self.open_mode == OpenMode.OpenOnly then
  209. BaseView.OpenOnly(self)
  210. elseif self.open_mode == OpenMode.OpenToggle then
  211. BaseView.OpenToggle(self)
  212. end
  213. local auto_close_view = function()
  214. self:Close()
  215. end
  216. local auto_change_scene_close_view = function()
  217. if SceneManager:getInstance():IsDailyCircleDungeon() then--如果现实进入镜像场景,则关掉该界面
  218. self.is_in_daily_circle_dungeon = true
  219. elseif self.is_in_daily_circle_dungeon then --如果当前场景不是镜像场景,并且又是镜像场景出来的。也不关掉界面
  220. self.is_in_daily_circle_dungeon = false
  221. else
  222. self:Close()
  223. end
  224. end
  225. if self.change_scene_close and not self.change_scene_close_event_id then
  226. self.change_scene_close_event_id = EventSystem.Bind(GlobalEventSystem,SceneEventType.SCENE_CHANGED,auto_change_scene_close_view)
  227. end
  228. --复用切场景关闭的设置(或者是有背景的界面, 或者是全屏界面)
  229. 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)
  230. if self.open_guide_close and not self.open_guide_close_id then
  231. self.open_guide_close_id = EventSystem.Bind(GlobalEventSystem,EventName.OPEN_GUIDE_CLOSE_VIEW,auto_close_view)
  232. end
  233. if self.reenter_scene_close and not self.reenter_close_event_id then
  234. self.reenter_close_event_id = EventSystem.Bind(GlobalEventSystem,SceneEventType.SCENE_REENTER,auto_close_view)
  235. end
  236. 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
  237. local auto_hide_view = function()
  238. self:Hide()
  239. end
  240. local auto_show_view = function()
  241. self:CancelHide()
  242. end
  243. self.change_scene_hide_event_id = EventSystem.Bind(GlobalEventSystem,SceneEventType.OPEN_SCENE_LOAD_VIEW,auto_hide_view)
  244. self.change_scene_complete_event_id = EventSystem.Bind(GlobalEventSystem,EventName.SCENE_LOAD_VIEW_COMPLETE,auto_show_view)
  245. end
  246. if self.use_background and self.hide_maincancas and not self.all_close_event_id then
  247. self.all_close_event_id = EventSystem.Bind(GlobalEventSystem,EventName.CLOSE_ALL_VIEW,auto_close_view)
  248. end
  249. local function on_jump_close()
  250. if self._use_delete_method then return end
  251. self:Close()
  252. end
  253. if self.jump_close and not self.jump_close_event_id then
  254. self.jump_close_event_id = EventSystem.Bind(GlobalEventSystem,EventName.JUMP_CLOSE_EVENT,on_jump_close)
  255. end
  256. local function onOrientationChange( )
  257. self:SetIpxMode()
  258. end
  259. if not self.orientation_change_id then
  260. self.orientation_change_id = GlobalEventSystem:Bind(EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
  261. end
  262. if self.is_guide_module and not self.trigger_guide_id then
  263. local function onTriggerGuideHandler()
  264. if not self.is_loaded then
  265. return
  266. end
  267. if self.AddToStageHandler then
  268. self:AddToStageHandler()
  269. end
  270. end
  271. self.trigger_guide_id = EventSystem.Bind(GlobalEventSystem,EventName.TRIGGER_GUIDE_TYPE,onTriggerGuideHandler)
  272. end
  273. EventSystem.Fire(GlobalEventSystem,BaseView.OpenEvent, self.layer_name, self)
  274. -- if (self.key_back_to_close == true or (self.use_background and self.hide_maincancas)) and self.key_back_to_close_id == nil then
  275. -- local function on_force_close( )
  276. -- if BaseView.LastTabIndex and BaseView.LastTabIndex > 0 then
  277. -- GlobalEventSystem:Fire(EventName.KEY_BACK_CHANGE)
  278. -- else
  279. -- self:Close()
  280. -- end
  281. -- end
  282. -- BaseView.KeyBackWinCount = BaseView.KeyBackWinCount and BaseView.KeyBackWinCount + 1 or 1
  283. -- self.key_back_to_close_id = GlobalEventSystem:Bind(EventName.KEY_BACK_CLOSE, on_force_close)
  284. -- end
  285. end
  286. function BaseView:OpenOnly()
  287. self.is_delete = false
  288. if self.preparing_res then
  289. return
  290. end
  291. -- 打开的时候界面还在缓存中
  292. if self.gameObject then
  293. BaseView.AfterOpen(self)
  294. if not self.destroy_imm then --如果是非立即销毁的界面,要重新设置父节点
  295. self.transform:SetParent(panelMgr:GetParent(self.layer_name))
  296. end
  297. return
  298. end
  299. self:AsnycLoadLayout()
  300. if self.layer_name ~= "Main" and not self.mask_open_sound then
  301. lua_soundM:PlayUIEffectSound(LuaSoundManager.SOUND_UI.OPEN)
  302. end
  303. end
  304. function BaseView:AsnycLoadLayout()
  305. local preLoad_index = 0
  306. local preLoad_list_len = 0
  307. if self.show_loading then
  308. LuaViewManager.AddLoadingView(lua_viewM, self._iid)
  309. end
  310. local function preLoadCallback()
  311. preLoad_index = preLoad_index + 1
  312. if preLoad_list_len == 0 or preLoad_index == preLoad_list_len then
  313. local res_load_finish = function(obj)
  314. self:DoCreateWindowIndeed(obj)
  315. end
  316. if self.base_file == "" then
  317. -- 没有预设体的界面,直接创建空对象
  318. local go = UiFactory.createChild(panelMgr:GetParent(self.layer_name), UIType.EmptyObject, LuaMemManager.GetLastStr(self._class_type._source,"/"))
  319. res_load_finish(go)
  320. else
  321. LuaViewManager.LoadView(lua_viewM, self,self.base_file, self.layout_file, self.layer_name, res_load_finish)
  322. end
  323. end
  324. end
  325. -- 先加载额外的依赖资源包
  326. self.preparing_res = true
  327. self.is_loaded = false
  328. if self.load_time_out_id then
  329. TimerQuest.CancelQuest(GlobalTimerQuest, self.load_time_out_id)
  330. self.load_time_out_id = nil
  331. end
  332. local function onCheckTimeOut()
  333. if self.layer_name == "UI" then
  334. self.preparing_res = false
  335. self:Close()
  336. end
  337. end
  338. -- 15秒都打不开界面则自动触发关闭流程,避免影响后续操作
  339. self.load_time_out_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, onCheckTimeOut, 15)
  340. if self.preLoad_list then
  341. local vo = nil
  342. preLoad_list_len = #self.preLoad_list
  343. for i = 1, preLoad_list_len do
  344. vo = self.preLoad_list[i]
  345. lua_resM:LoadRes(self, vo[1], vo[2], vo[3], preLoadCallback)
  346. end
  347. self.preLoad_list = nil
  348. else
  349. preLoadCallback()
  350. end
  351. end
  352. function BaseView:DoCreateWindowIndeed(obj)
  353. --iphone低端机强制设立即销毁
  354. if SystemMemoryLevel.Cur == SystemMemoryLevel.Low and SystemRuntimePlatform.IsIphone() then
  355. self.destroy_imm = true
  356. end
  357. if self.load_time_out_id then
  358. TimerQuest.CancelQuest(GlobalTimerQuest, self.load_time_out_id)
  359. self.load_time_out_id = false
  360. end
  361. --资源下载或加载失败
  362. if obj == nil then
  363. self.preparing_res = false
  364. self:Close()
  365. return
  366. end
  367. self.gameObject = obj
  368. if self.isPop == false then --如果加载回来时,外部已经调用了关闭流程,则直接销毁界面
  369. self:Destroy()
  370. return
  371. end
  372. -- 缓存频繁访问的对象
  373. self.transform = obj.transform
  374. self.cache_findChild = self.transform.Find
  375. --统一处理是否显示界面打开/关闭动画
  376. self.use_show_anim = not self.ignore_use_anim and (self.use_background and not self.model_activity_bg) or self.use_show_anim
  377. self.use_hide_anim = not self.ignore_use_anim and (self.use_background and not self.model_activity_bg) or self.use_hide_anim
  378. if not ClientConfig.view_scale_ani_mode then
  379. self.use_show_anim = false
  380. self.use_hide_anim = false
  381. end
  382. if self.use_show_anim then
  383. local cfg = BaseView.OpenCloseScaleCfg[1]
  384. SetLocalScale(self.transform, cfg.start_scale, cfg.start_scale, cfg.start_scale)
  385. else
  386. SetLocalScale(self.transform)
  387. end
  388. self:InitViewAnimation()
  389. if self.show_loading then
  390. LuaViewManager.RemoveLoadingView(lua_viewM, self._iid)
  391. end
  392. -- 设置背景的逻辑封装成一个函数
  393. self:SetBackgroundWnd()
  394. if self.show_back_camera then
  395. self:ShowBackModeCamera()
  396. end
  397. self.base_view_closeBtn = self.transform:Find("Window/windowCloseBtn") or self.transform:Find("Window2/windowCloseBtn")
  398. if self.base_view_closeBtn then
  399. self.base_view_closeBtn:GetComponent("Image"):SetNativeSize()
  400. local function onCloseHandler()
  401. self:Close()
  402. end
  403. AddClickEvent(self.base_view_closeBtn.gameObject,onCloseHandler, nil, true )
  404. self.base_view_titleText = self.transform:Find("Window/windowTitleCon/windowTitleText") or self.transform:Find("Window2/windowTitleCon/windowTitleText")
  405. end
  406. -- self.base_view_bg = self.transform:Find("Window") or self.transform:Find("Window2")
  407. -- if self.base_view_bg then
  408. -- local img = self.base_view_bg:GetComponent("Image")
  409. -- if img then
  410. -- img.raycastTarget = true
  411. -- end
  412. -- end
  413. -- --main层的UI都挂在main_cancas_con,以实现显示隐藏修改的需要
  414. -- if self.layer_name == "Main" and not self.hide_maincancas then
  415. -- LuaViewManager.PuskMainCanvasCon(lua_viewM, self.transform)
  416. -- end
  417. if not self._need_wait_blur_bg_loaded then
  418. BaseView.CreateMainWindow(self)
  419. self.preparing_res = false
  420. end
  421. end
  422. function BaseView:SetBackgroundWnd( )
  423. -- 未加载完则不处理
  424. if not self.gameObject then
  425. return
  426. end
  427. self.blur_activity_bg = false
  428. if self.use_background and self.model_activity_bg then
  429. self.close_fog = true
  430. end
  431. local function create_background_wnd()
  432. if self.blur_screen_time_out_id then
  433. TimerQuest.CancelQuest(GlobalTimerQuest, self.blur_screen_time_out_id)
  434. self.blur_screen_time_out_id = nil
  435. end
  436. if self.model_activity_bg then
  437. local function on_delay( )
  438. self:UpdateModelBg()
  439. end
  440. setTimeout(on_delay, 0.1)
  441. else
  442. self.background_wnd = self.background_wnd or UiFactory.createChild(self.transform, UIType.Background,"activity_bg")
  443. self.background_wnd_raw = self.background_wnd:GetComponent("RawImageExtend")
  444. if self.blur_screenshot == nil then -- 不使用模糊背景
  445. self.background_wnd_raw.alpha = self.background_alpha
  446. elseif self.blur_screenshot == false then -- 等待模糊背景返回
  447. self.background_wnd_raw.alpha = 0
  448. elseif self.blur_screenshot then
  449. self.background_wnd_raw.color = ColorUtilValue.BLURGRAY
  450. self.background_wnd_raw.texture = self.blur_screenshot
  451. end
  452. if self.use_show_anim then
  453. local cfg = BaseView.OpenCloseScaleCfg[1]
  454. if cfg and cfg.start_scale ~= 0 then
  455. self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth / cfg.start_scale, ScreenHeight/cfg.start_scale)
  456. else
  457. self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
  458. end
  459. else
  460. self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
  461. end
  462. self.background_wnd.transform:SetAsFirstSibling()
  463. SetAnchoredPosition(self.background_wnd.transform, 0, 0)
  464. if self.background_wnd and self.click_bg_toClose then
  465. local function onClickHandler()
  466. self:Close()
  467. end
  468. AddClickEvent(self.background_wnd,onClickHandler,nil,false)
  469. end
  470. end
  471. -- 不管有没有模糊都要尝试执行这块逻辑,这种写法也包含了模糊逻辑超时之后打开界面的处理
  472. if self._need_wait_blur_bg_loaded then
  473. BaseView.CreateMainWindow(self)
  474. self.preparing_res = false
  475. end
  476. end
  477. if self.use_background then
  478. if self.model_activity_bg then
  479. self.blur_activity_bg = false
  480. end
  481. self.on_blur_screen_finish = false --记录高斯模糊完成标识,超时的话则创建普通背景,避免异常情况界面无法关闭
  482. -- 如果设备不支持高斯模糊后处理,则强制不渲染
  483. -- if self.blur_activity_bg then
  484. -- if MainCamera.Instance:GetRenderSupport() then
  485. -- self.blur_screenshot = false
  486. -- -- 需要等待模糊图返回才打开界面
  487. -- self._need_wait_blur_bg_loaded = true
  488. -- -- 如果要使用打开或关闭动画,则需要动态添加CanvasGroup组件
  489. -- if self.use_show_anim or self.use_hide_anim then
  490. -- local canvas_group = self.gameObject:GetComponent(typeof(UnityEngine.CanvasGroup))
  491. -- if not canvas_group then
  492. -- canvas_group = self.gameObject:AddComponent(typeof(UnityEngine.CanvasGroup))
  493. -- end
  494. -- canvas_group.alpha = 0
  495. -- end
  496. -- -- 创建回调用来接收RenderTexture
  497. -- local function blur_screenshot_callback(renderTexture)
  498. -- self.on_blur_screen_finish = true
  499. -- self.blur_screenshot = renderTexture
  500. -- if self._use_delete_method then -- 如果已经在执行销毁了,则立即回收rt
  501. -- MainCamera.Instance:ClearScreenShotCache(self.blur_screenshot)
  502. -- return
  503. -- end
  504. -- create_background_wnd()
  505. -- if self.bg_back_func then--背景放到后面回调 具体参考EquipGemstoneAutoUpView
  506. -- self.bg_back_func()
  507. -- end
  508. -- end
  509. -- MainCamera.Instance:GetCameraBlurScreenShot(blur_screenshot_callback, self.blur_camera_type)
  510. -- if self.click_bg_toClose then
  511. -- local function onBlurTimeout( )
  512. -- if not self.on_blur_screen_finish then
  513. -- self.blur_activity_bg = false
  514. -- create_background_wnd()
  515. -- end
  516. -- end
  517. -- if self.blur_screen_time_out_id then
  518. -- TimerQuest.CancelQuest(GlobalTimerQuest, self.blur_screen_time_out_id)
  519. -- self.blur_screen_time_out_id = nil
  520. -- end
  521. -- self.blur_screen_time_out_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, onBlurTimeout, 3)
  522. -- end
  523. -- else
  524. -- self.blur_activity_bg = nil
  525. -- create_background_wnd()
  526. -- end
  527. -- else
  528. create_background_wnd()
  529. -- end
  530. end
  531. end
  532. -- 更新3D模型背景
  533. function BaseView:UpdateModelBg( bg_type )
  534. if IsNull(self.gameObject) then
  535. return
  536. end
  537. self.model_activity_bg_type = bg_type or self.model_activity_bg_type
  538. --过滤重复
  539. if self.last_model_bg_type and self.last_model_bg_type == self.model_activity_bg_type then
  540. return
  541. end
  542. self.last_model_bg_type = self.model_activity_bg_type
  543. --先从缓存池取
  544. self.model_activity_bg_objs = self.model_activity_bg_objs or {}
  545. for k,v in pairs(self.model_activity_bg_objs) do
  546. local obj = v.obj
  547. if not IsNull(obj) then
  548. obj:SetActive(false)
  549. end
  550. end
  551. local cache_model_bg = self.model_activity_bg_objs[self.model_activity_bg_type]
  552. if cache_model_bg and cache_model_bg.obj and not IsNull(cache_model_bg.obj) then
  553. cache_model_bg.obj:SetActive(false)
  554. cache_model_bg.obj:SetActive(true)
  555. return
  556. end
  557. --再去加载
  558. local cur_res_name = BaseView.ModelBgRes[self.model_activity_bg_type] or BaseView.ModelBgRes[1]
  559. local function load_finish_func(objs, is_gameObject)
  560. if self._use_delete_method then
  561. return
  562. end
  563. if not objs or not objs[0] then
  564. return
  565. end
  566. local go = is_gameObject and objs[0] or newObject(objs[0])
  567. local go_name = go.name
  568. local new_res_type, new_res_name = self:GetModelBgName(go_name)
  569. if new_res_name ~= cur_res_name then --当前加载完成的不是最新的,则回收
  570. self:DeleteModelBg(new_res_name, go)
  571. return
  572. end
  573. self.model_activity_bg_objs = self.model_activity_bg_objs or {}
  574. if self.model_activity_bg_objs[new_res_type] then
  575. destroy(go)
  576. return
  577. end
  578. self.model_activity_bg_objs[new_res_type] = {name = new_res_name, obj = go}
  579. go.transform:SetParent(self.transform)
  580. go:SetActive(false)
  581. go:SetActive(true)
  582. if self.model_activity_bg_pos then
  583. SetLocalPosition(go.transform, self.model_activity_bg_pos.x, self.model_activity_bg_pos.y, -50000)
  584. else
  585. SetLocalPosition(go.transform, 0, 0, -50000)
  586. end
  587. SetLocalRotation(go.transform)
  588. SetLocalScale(go.transform, 100)
  589. end
  590. local function bg_load_delay_func( ... )
  591. lua_resM:loadPrefab(self, cur_res_name, cur_res_name, load_finish_func, false, ASSETS_LEVEL.HIGHT)
  592. end
  593. self.model_bg_time_id = setTimeout(bg_load_delay_func,0.01)
  594. end
  595. function BaseView:GetModelBgName( obj_name )
  596. local res_type, res_name
  597. for k,v in pairs(BaseView.ModelBgRes) do
  598. if string.find(obj_name, v, 1, true) then
  599. res_type = k
  600. res_name = v
  601. break
  602. end
  603. end
  604. return res_type, res_name
  605. end
  606. function BaseView:DeleteModelBg( name, obj )
  607. --指定回收
  608. if name and not IsNull(obj) then
  609. lua_resM:AddObjToPool(self, name, name, obj)
  610. return
  611. end
  612. --全部回收
  613. if self.model_activity_bg_objs then
  614. for k,v in pairs(self.model_activity_bg_objs) do
  615. local temp_name, temp_obj = v.name, v.obj
  616. if not IsNull(temp_obj) then
  617. lua_resM:AddObjToPool(self, temp_name, temp_name, temp_obj)
  618. end
  619. end
  620. self.model_activity_bg_objs = false
  621. end
  622. end
  623. function BaseView:CreateMainWindow()
  624. if self.is_delay_callback and self.hide_maincancas then --大界面才需要延迟callback
  625. local function onLoad()
  626. self.is_loaded = true
  627. self:BeforeLoad()
  628. if self.load_callback and not self.is_delete and self.gameObject then
  629. self.load_callback()
  630. end
  631. end
  632. if self._base_delay_load_id then
  633. LuaViewManager.RemoveDelayQueue(lua_viewM, self._base_delay_load_id)
  634. self._base_delay_load_id = false
  635. end
  636. self._base_delay_load_id = LuaViewManager.AddDelayQueue(lua_viewM, onLoad)
  637. else
  638. self.is_loaded = true
  639. self:BeforeLoad()
  640. if self.load_callback then
  641. self.load_callback()
  642. end
  643. end
  644. -- 重置等待变量
  645. self._need_wait_blur_bg_loaded = false
  646. BaseView.AfterOpen(self)
  647. end
  648. function BaseView:AfterOpen()
  649. if not self.gameObject then
  650. return
  651. end
  652. if self.isPop then
  653. BaseView.PlayOpenMovie(self)
  654. local function onOpen()
  655. if self.open_callback then
  656. self.open_callback()
  657. end
  658. if self.use_background and self.close_fog == true then
  659. Scene.Instance:ChangeFogEnable(false)
  660. end
  661. if self.is_guide_module then
  662. if self.AddToStageHandler then
  663. self:AddToStageHandler()
  664. end
  665. end
  666. if self.hide_item_use_view then
  667. LuaViewManager.Fire(lua_viewM, LuaViewManager.HIDE_ITEM_USE_VIEW, true)
  668. end
  669. if self.is_hide_skill_black_bg then
  670. SkillManager:getInstance():AddHideBlackViews(self.layout_file)
  671. HideBlackGround()
  672. end
  673. if self.change_scene_hide and not Scene:getInstance():IsSceneProloadFinish() then
  674. self:Hide()
  675. end
  676. self:DoOpenAni()
  677. --self:DoShowViewAnimation(true)
  678. self:DoShowViewScaleAnimation(true)
  679. end
  680. if self.wait_for_hide then
  681. self.gameObject:SetActive(false)
  682. if self.is_set_zdepth then
  683. UIZDepth.ResetUIZDepth(self)
  684. end
  685. if self.hide_maincancas then
  686. LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true )
  687. end
  688. elseif self.wait_for_hide == false then
  689. if self.hide_maincancas then
  690. LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, false)
  691. end
  692. if not self.gameObject.activeSelf then
  693. self.gameObject:SetActive(true)
  694. end
  695. end
  696. self.wait_for_hide = false
  697. if self.is_set_order_sorting then
  698. self:SetUIDepth(self.gameObject)
  699. end
  700. local curr_zdepth_count = nil
  701. if self.is_set_zdepth then
  702. curr_zdepth_count = self:AddUIZDepth()
  703. end
  704. if self.layer_name == "Main" and not lua_viewM.main_cancas_last_visible then
  705. LuaViewManager.PuskMainCanvasCon(lua_viewM, self.transform)
  706. end
  707. if self.is_delay_callback and self.hide_maincancas then --大界面才需要延迟callback
  708. local function onDelayOpen()
  709. if not self.is_delete and self.isPop and self.gameObject then
  710. onOpen()
  711. if curr_zdepth_count then
  712. UIZDepth.SetUIZDepth(self, curr_zdepth_count)
  713. end
  714. end
  715. end
  716. if self.delay_open_id then
  717. LuaViewManager.RemoveDelayQueue(lua_viewM, self.delay_open_id)
  718. self.delay_open_id = false
  719. end
  720. self.delay_open_id = LuaViewManager.AddDelayQueue(lua_viewM, onDelayOpen)
  721. else
  722. onOpen()
  723. end
  724. LuaViewManager.OpenView(lua_viewM, self)
  725. else
  726. self:Close()
  727. end
  728. end
  729. function BaseView:AfterClose()
  730. if self.layout_file ~= "GuidePromptView" then
  731. LuaViewManager.CloseView(lua_viewM, self)
  732. end
  733. --下面这句话要放在clse_callback前面 因为有些是在close_callback 关掉界面 会导致重新调用cancelhide 导致主界面被隐藏
  734. -- LuaViewManager.CloseView(lua_viewM, self)
  735. UIPartical.ClearAllEffect(self)
  736. if self.close_callback and self.is_loaded then
  737. self.close_callback()
  738. end
  739. -- if self.use_background and self.close_fog == true and not self.append_to_ctl_queue then --改到 luaViewManager 中开启
  740. -- Scene.Instance:ChangeFogEnable(true)
  741. -- end
  742. end
  743. function BaseView:OpenToggle()
  744. if self.gameObject and self.isPop then
  745. self:Close()
  746. else
  747. self:OpenOnly()
  748. end
  749. end
  750. function BaseView:Close(called_by_mgr)
  751. self.isPop = false
  752. local function close_callback()
  753. if self.close_mode == CloseMode.CloseVisible then
  754. BaseView.CloseVisible(self)
  755. elseif self.close_mode == CloseMode.CloseDestroy then
  756. BaseView.CloseDestroy(self)
  757. end
  758. end
  759. if self.use_hide_anim then
  760. -- if not self.is_in_close_anim then
  761. --self:DoShowViewAnimation(false)
  762. self:DoShowViewScaleAnimation(false, close_callback)
  763. -- self.is_in_close_anim = true
  764. -- else
  765. -- close_callback()
  766. -- end
  767. else
  768. close_callback()
  769. end
  770. -------------------------
  771. if self.layer_name ~= "Main" and not self.mask_close_sound then
  772. lua_soundM:PlayUIEffectSound(LuaSoundManager.SOUND_UI.CLOSE)
  773. end
  774. -------------------------
  775. end
  776. --隐藏
  777. function BaseView:Hide()
  778. if self.gameObject then
  779. if self.hide_maincancas then
  780. LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true)
  781. end
  782. self.gameObject:SetActive(false)
  783. self.wait_for_hide = nil
  784. self:SetBackUIVisible(false)
  785. if self.fire_change_visible_event then
  786. GlobalEventSystem:Fire(BaseView.ChangeVisible, false)
  787. end
  788. else
  789. self.wait_for_hide = true
  790. end
  791. if self.HideChangeCall then
  792. --有的界面需要在显隐的时候调用函数
  793. self:HideChangeCall(false)
  794. end
  795. end
  796. --取消隐藏
  797. function BaseView:CancelHide()
  798. self.isPop = true
  799. self.wait_for_hide = false
  800. BaseView.RemoveDestroyTimer(self)
  801. if self.hide_maincancas then
  802. LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, false)
  803. end
  804. -- -- 重新添加背景模糊特效
  805. -- if self.blur_activity_bg then
  806. -- MainCamera.Instance:EnableBlurEffect(self.blur_camera_type, self.blur_anim_time)
  807. -- end
  808. --self:DoShowViewAnimation(true)
  809. --self:DoShowViewScaleAnimation(true)
  810. self:SetBackUIVisible(true)
  811. if self.gameObject then
  812. if IsNull(self.gameObject) then
  813. local str = "base view CancelHide is nil " .. tostring(self.layout_file)
  814. GameError.Instance:SendErrorMsg(str)
  815. else
  816. self.gameObject:SetActive(true)
  817. if self.ReOpen_callback then
  818. self:ReOpen_callback()
  819. end
  820. if self.fire_change_visible_event then
  821. GlobalEventSystem:Fire(BaseView.ChangeVisible, true)
  822. end
  823. end
  824. end
  825. local cache_model_bg = self.model_activity_bg_objs and self.model_activity_bg_objs[self.model_activity_bg_type]
  826. if cache_model_bg and cache_model_bg.obj and not IsNull(cache_model_bg.obj) then
  827. cache_model_bg.obj:SetActive(false)
  828. cache_model_bg.obj:SetActive(true)
  829. return
  830. end
  831. if self.HideChangeCall then
  832. --有的界面需要在显隐的时候调用函数
  833. self:HideChangeCall(true)
  834. end
  835. end
  836. function BaseView:CloseVisible()
  837. if self.gameObject then
  838. if IsNull(self.gameObject) or IsNull(self.transform) then
  839. if self.layout_file ~= "GuidePromptView" then
  840. local str = "base view CloseVisible is nil " .. tostring(self.layout_file)
  841. GameError.Instance:SendErrorMsg(str)
  842. end
  843. else
  844. if self.close_mode == CloseMode.CloseDestroy and self.destroy_imm and not self.use_local_view then
  845. self.transform:SetParent(UiFactory.GetSceneCanvas())
  846. else
  847. self.gameObject:SetActive(false)
  848. end
  849. end
  850. end
  851. self:StopLittleMoveAnim()
  852. if self.key_back_to_close_id then
  853. if BaseView.KeyBackWinCount and BaseView.KeyBackWinCount > 0 then
  854. BaseView.KeyBackWinCount = BaseView.KeyBackWinCount - 1
  855. end
  856. GlobalEventSystem:UnBind(self.key_back_to_close_id)
  857. self.key_back_to_close_id=nil
  858. end
  859. if self.change_scene_close_event_id then
  860. EventSystem.UnBind(GlobalEventSystem,self.change_scene_close_event_id)
  861. self.change_scene_close_event_id=nil
  862. end
  863. if self.open_guide_close_id then
  864. EventSystem.UnBind(GlobalEventSystem,self.open_guide_close_id)
  865. self.open_guide_close_id=nil
  866. end
  867. if self.change_scene_hide_event_id then
  868. EventSystem.UnBind(GlobalEventSystem,self.change_scene_hide_event_id)
  869. self.change_scene_hide_event_id=nil
  870. end
  871. if self.change_scene_complete_event_id then
  872. EventSystem.UnBind(GlobalEventSystem,self.change_scene_complete_event_id)
  873. self.change_scene_complete_event_id=nil
  874. end
  875. if self.all_close_event_id then
  876. EventSystem.UnBind(GlobalEventSystem,self.all_close_event_id)
  877. self.all_close_event_id = nil
  878. end
  879. if self.jump_close_event_id then
  880. EventSystem.UnBind(GlobalEventSystem,self.jump_close_event_id)
  881. self.jump_close_event_id = nil
  882. end
  883. if self.orientation_change_id then
  884. EventSystem.UnBind(GlobalEventSystem,self.orientation_change_id)
  885. self.orientation_change_id = nil
  886. end
  887. if self.reenter_close_event_id then
  888. EventSystem.UnBind(GlobalEventSystem,self.reenter_close_event_id)
  889. self.reenter_close_event_id = nil
  890. end
  891. if self.delay_open_id then
  892. LuaViewManager.RemoveDelayQueue(lua_viewM, self.delay_open_id)
  893. self.delay_open_id = nil
  894. end
  895. if self.load_time_out_id then
  896. TimerQuest.CancelQuest(GlobalTimerQuest, self.load_time_out_id)
  897. self.load_time_out_id = nil
  898. end
  899. if self.is_hide_skill_black_bg then
  900. SkillManager:getInstance():RemoveHideBlackViews(self.layout_file)
  901. end
  902. if self.hide_maincancas then
  903. LuaViewManager.Fire(lua_viewM,LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true)
  904. end
  905. self:ClearOpenMovieId()
  906. if self.hide_item_use_view then
  907. LuaViewManager.Fire(lua_viewM, LuaViewManager.HIDE_ITEM_USE_VIEW, false)
  908. end
  909. --隐藏时自动删掉挂接的模型,需要在对应界面的opencallback后重新创建
  910. if self.hide_clear_role_model then
  911. lua_resM:clearRoleMode(self)
  912. end
  913. if self.is_set_zdepth and not IsNull(self.transform) then
  914. UIZDepth.ResetUIZDepth(self)
  915. end
  916. -- 如果存在模糊背景图,则需要传到C#中销毁
  917. if self.blur_screenshot then
  918. MainCamera.Instance:ClearScreenShotCache(self.blur_screenshot)
  919. end
  920. if self.blur_screen_time_out_id then
  921. TimerQuest.CancelQuest(GlobalTimerQuest, self.blur_screen_time_out_id)
  922. self.blur_screen_time_out_id = nil
  923. end
  924. BaseView.AfterClose(self)
  925. end
  926. function BaseView:CloseDestroy()
  927. self:CloseVisible()
  928. if self.destroy_imm then
  929. BaseView.Destroy(self)
  930. else
  931. BaseView.AddDestroyTimer(self)
  932. end
  933. end
  934. function BaseView:RemoveDestroyTimer()
  935. if self.destroy_timer then
  936. TimerQuest.CancelQuest(GlobalTimerQuest, self.destroy_timer)
  937. self.destroy_timer = false
  938. end
  939. end
  940. function BaseView:AddDestroyTimer()
  941. BaseView.RemoveDestroyTimer(self)
  942. local destroy_callback = function()
  943. self.destroy_timer = false
  944. self:Destroy()
  945. end
  946. self.destroy_timer = TimerQuest.AddDelayQuest(GlobalTimerQuest, destroy_callback, self.delay_delete_time)
  947. end
  948. function BaseView:Destroy()
  949. if self.is_delete or not self.gameObject then return end
  950. if self.model_bg_time_id then
  951. GlobalTimerQuest:CancelQuest(self.model_bg_time_id)
  952. self.model_bg_time_id = nil
  953. end
  954. if self._base_delay_load_id then
  955. LuaViewManager.RemoveDelayQueue(lua_viewM, self._base_delay_load_id)
  956. self._base_delay_load_id = false
  957. end
  958. if self.trigger_guide_id then
  959. EventSystem.UnBind(GlobalEventSystem, self.trigger_guide_id)
  960. self.trigger_guide_id = false
  961. end
  962. if self.orientation_id then
  963. EventSystem.UnBind(GlobalEventSystem, self.orientation_id)
  964. self.orientation_id = false
  965. end
  966. if self.ui_camera_flag_change_id then
  967. EventSystem.UnBind(GlobalEventSystem, self.ui_camera_flag_change_id)
  968. self.ui_camera_flag_change_id = false
  969. end
  970. -- -- 去除模糊效果
  971. -- if self.blur_activity_bg then
  972. -- MainCamera.Instance:DisableBlurEffect(self.blur_anim_time)
  973. -- end
  974. -- 确认清除掉了界面动画效果
  975. if self.fading_anim_id then
  976. TweenLite.Stop(self.fading_anim_id)
  977. self.fading_anim_id = nil
  978. end
  979. if self.scale_anim_id then
  980. TweenLite.Stop(self.scale_anim_id)
  981. self.scale_anim_id = nil
  982. end
  983. if self.autoDeleteList then
  984. for i,v in ipairs(self.autoDeleteList) do
  985. if v ~= nil then
  986. v:DeleteMe()
  987. end
  988. end
  989. self.autoDeleteList = nil
  990. end
  991. self.is_delete = true
  992. UI.BindEventComp.UnBindAll(self)
  993. if self.action_nodes then
  994. for k,v in pairs(self.action_nodes) do
  995. cc.ActionManager:getInstance():removeAllActionsFromTarget(v)
  996. end
  997. self.action_nodes = nil
  998. end
  999. if self.effect_nodes then
  1000. for k,v in pairs(self.effect_nodes) do
  1001. self:ClearUIEffect(v)
  1002. end
  1003. end
  1004. self:AfterDestroy()
  1005. BaseView.RemoveDestroyTimer(self)
  1006. if self.destroy_callback and self.is_loaded then
  1007. self.destroy_callback()
  1008. end
  1009. if self.show_loading then
  1010. LuaViewManager.RemoveLoadingView(lua_viewM, self._iid)
  1011. end
  1012. self.preparing_res = false
  1013. self.is_loaded = false
  1014. self.popChild = nil
  1015. self.parent_wnd = nil
  1016. self.transform = nil
  1017. self.cache_findChild = nil
  1018. self.preLoad_list = nil
  1019. self.back_item_contaner_list = false
  1020. self:DeleteModelBg()
  1021. self:DeleteMe()
  1022. LuaViewManager.DestroyView(lua_viewM,self.gameObject)
  1023. self.gameObject = nil
  1024. EventSystem.Fire(GlobalEventSystem,BaseView.DestroyEvent,self)
  1025. end
  1026. function BaseView:__delete()
  1027. self:RemoveUIFromBack()
  1028. if not self.is_delete then
  1029. self:CloseDestroy()
  1030. end
  1031. end
  1032. -- 显示子窗口
  1033. function BaseView:PopUpChild(win)
  1034. if win then
  1035. if self.popChild ~= nil and self.popChild ~= win then
  1036. self.popChild:SetVisible(false, true)
  1037. end
  1038. self.popChild = win
  1039. self.popChild:SetVisible(true, true)
  1040. if self.fire_change_visible_event then
  1041. GlobalEventSystem:Fire(BaseView.ChangeVisible, true)
  1042. end
  1043. end
  1044. end
  1045. function BaseView:GetBaseFile()
  1046. return self.base_file
  1047. end
  1048. function BaseView:GetChildren( names )
  1049. GetChildren(self, names)
  1050. end
  1051. --自销毁事件
  1052. function BaseView:BindEvent( bindDispather, eventName, handleFunc )
  1053. return UI.BindEventComp.BindEvent(self, bindDispather, eventName, handleFunc)
  1054. end
  1055. --关闭界面时销毁该节点
  1056. function BaseView:AutoDelete( deleteNode )
  1057. self.autoDeleteList = self.autoDeleteList or {}
  1058. table.insert(self.autoDeleteList, deleteNode)
  1059. end
  1060. --自销毁节点
  1061. function BaseView:CreateItem( class_name, parent, layer_name, ... )
  1062. if class_name and parent then
  1063. local item = class_name.New(parent, nil, layer_name, ... )
  1064. self:AutoDelete( item )
  1065. return item
  1066. end
  1067. end
  1068. --自销毁动作
  1069. function BaseView:AddAction( action, node )
  1070. self.action_nodes = self.action_nodes or {}
  1071. self.action_nodes[node] = node
  1072. --table.insert(self.action_nodes, node)
  1073. cc.ActionManager:getInstance():addAction(action, node)
  1074. end
  1075. --自销毁特效
  1076. function BaseView:CreateUIEffect( config )
  1077. if not config or not config.uiTranform then return end
  1078. self.effect_nodes = self.effect_nodes or {}
  1079. self:AddUIEffectConfig( config )
  1080. table.insert(self.effect_nodes, config.uiTranform)
  1081. end
  1082. --移出屏幕(隐藏,用于频繁调用显示隐藏的对象,减少setActive的调用次数)
  1083. function BaseView:MoveOutOfScreen( transform )
  1084. transform = transform or self.transform
  1085. if transform then
  1086. self.base_move_from_pos_y = self.base_move_from_pos_y or GetLocalPositionY(transform)
  1087. SetLocalPositionY(transform, -99999)
  1088. end
  1089. end
  1090. --移回屏幕(显示,用于频繁调用显示隐藏的对象,减少setActive的调用次数)
  1091. function BaseView:MoveInToScreen( transform )
  1092. transform = transform or self.transform
  1093. if transform and self.base_move_from_pos_y then
  1094. SetLocalPositionY(transform, self.base_move_from_pos_y)
  1095. self.base_move_from_pos_y = false
  1096. end
  1097. end
  1098. function BaseView:InitViewAnimation()
  1099. if self.full_screen or self.ani_left or self.ani_right then
  1100. --处理刘海屏的位移偏移
  1101. local width, offset = self:GetIpxOffset()
  1102. --右侧
  1103. self.ani_right_trans = self:GetChild("right")
  1104. if self.ani_right_trans then
  1105. self.ani_right_obj = self:GetChild("right").gameObject
  1106. self.old_ani_right_pos = self.ani_right_trans.anchoredPosition
  1107. if self.ani_right and ClientConfig.view_ani_mode == true then
  1108. SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + 600, self.old_ani_right_pos.y)
  1109. else
  1110. SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + offset, self.old_ani_right_pos.y)
  1111. end
  1112. end
  1113. --左侧
  1114. self.ani_left_trans = self:GetChild("left")
  1115. if self.ani_left_trans then
  1116. self.ani_left_obj = self:GetChild("left").gameObject
  1117. self.old_ani_left_pos = self.ani_left_trans.anchoredPosition
  1118. if self.ani_left and ClientConfig.view_ani_mode == true then
  1119. SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x - 600 , self.old_ani_left_pos.y)
  1120. else
  1121. SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x + offset , self.old_ani_left_pos.y)
  1122. end
  1123. end
  1124. --中间
  1125. self:ResetMidNode()
  1126. --设置界面大小
  1127. local MaxScreenWidth = math.min(SrcScreenWidth - width, 1560 - width)
  1128. local rt = self.gameObject:GetComponent("RectTransform")
  1129. rt.sizeDelta = Vector2(MaxScreenWidth, ScreenHeight)
  1130. end
  1131. end
  1132. --播放界面入场动画
  1133. function BaseView:DoOpenAni(tab_id)
  1134. tab_id = tab_id or 1
  1135. self.ani_list = self.ani_list or {}
  1136. if not self.is_loaded or self.ani_list[tab_id] then return end
  1137. self.ani_list[tab_id] = true
  1138. self:DoOpenViewAnimation()
  1139. end
  1140. --处理界面动画
  1141. function BaseView:DoOpenViewAnimation()
  1142. local width, offset = self:GetIpxOffset()
  1143. if self.ani_right and self.ani_right_trans and ClientConfig.view_ani_mode == true then
  1144. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_right_trans)
  1145. SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + self.ani_right - offset, self.old_ani_right_pos.y)
  1146. local moveActionRight = cc.MoveTo.createAnchoredType(1, self.old_ani_right_pos.x - offset, self.ani_right_trans.anchoredPosition.y)
  1147. moveActionRight = cc.EaseExponentialOut.New(moveActionRight)
  1148. self:AddAction(moveActionRight, self.ani_right_trans)
  1149. end
  1150. if self.ani_left and self.ani_left_trans and ClientConfig.view_ani_mode == true then
  1151. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_left_trans)
  1152. SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x + self.ani_left + offset, self.old_ani_left_pos.y)
  1153. local moveActionLeft = cc.MoveTo.createAnchoredType(1, self.old_ani_left_pos.x + offset, self.ani_left_trans.anchoredPosition.y)
  1154. moveActionLeft = cc.EaseExponentialOut.New(moveActionLeft)
  1155. self:AddAction(moveActionLeft, self.ani_left_trans)
  1156. end
  1157. end
  1158. --获取刘海屏位移
  1159. function BaseView:GetIpxOffset()
  1160. local width, offset = 0, 0
  1161. if ClientConfig.iphone_x_offset_left ~= 0 then
  1162. offset = ClientConfig.iphone_x_offset_left /2
  1163. width = ClientConfig.iphone_x_offset_left
  1164. elseif ClientConfig.iphone_x_offset_right then
  1165. offset = -ClientConfig.iphone_x_offset_right /2
  1166. width = ClientConfig.iphone_x_offset_right
  1167. end
  1168. return width, offset
  1169. end
  1170. --处理中间节点
  1171. function BaseView:ResetMidNode()
  1172. if self.adjust_mid then
  1173. local width, offset = self:GetIpxOffset()
  1174. local MaxScreenWidth = math.min(SrcScreenWidth - width, 1560 - width)
  1175. self.mid_trans = self:GetChild("mid")
  1176. if self.mid_trans then
  1177. self.adjust_mid.left = self.adjust_mid.left or 0
  1178. self.adjust_mid.right = self.adjust_mid.right or 0
  1179. local x = MaxScreenWidth - self.adjust_mid.left - self.adjust_mid.right
  1180. x = x / 2
  1181. SetAnchoredPosition(self.mid_trans, - (MaxScreenWidth / 2) + self.adjust_mid.left + x + offset, self.mid_trans.anchoredPosition.y)
  1182. end
  1183. end
  1184. end
  1185. --处理刘海屏,旋转屏幕
  1186. function BaseView:SetIpxMode()
  1187. self:ResetMidNode()
  1188. local width, offset = self:GetIpxOffset()
  1189. if self.ani_right_trans then
  1190. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_right_trans)
  1191. SetAnchoredPosition(self.ani_right_trans, self.old_ani_right_pos.x + offset, self.old_ani_right_pos.y)
  1192. end
  1193. if self.ani_left_trans then
  1194. cc.ActionManager:getInstance():removeAllActionsFromTarget(self.ani_left_trans)
  1195. SetAnchoredPosition(self.ani_left_trans, self.old_ani_left_pos.x + offset, self.old_ani_left_pos.y)
  1196. end
  1197. end
  1198. -- 进行打开界面的展示动画(淡入淡出)
  1199. -- close_callback:关闭界面的关闭回调
  1200. function BaseView:DoShowViewAnimation(show, close_callback, open_callback)
  1201. -- if not self.use_show_anim then return end
  1202. if not self.gameObject or not self.background_wnd_raw then return end
  1203. if (show and not self.use_show_anim) or (not show and not self.use_hide_anim) then
  1204. -- canvas_group.alpha = show and 1 or 0
  1205. return
  1206. end
  1207. local time = show and 0.1 or 0.1
  1208. self.background_wnd_raw.alpha = show and 0 or self.background_alpha
  1209. local target_alpha = show and self.background_alpha or 0
  1210. local function fading_anim_callback()
  1211. end
  1212. -- 关闭回调覆盖
  1213. if not show and close_callback then
  1214. fading_anim_callback = close_callback
  1215. end
  1216. self.fading_anim_id = TweenLite.to(self, self.background_wnd_raw, TweenLite.UiAnimationType.ALPHA, target_alpha, time, fading_anim_callback)
  1217. end
  1218. -- 进行打开界面的展示动画(缩放)
  1219. -- close_callback:关闭界面的关闭回调
  1220. function BaseView:DoShowViewScaleAnimation(show, close_callback, open_callback)
  1221. if self.do_show_animation == show then
  1222. if show then
  1223. if open_callback then
  1224. open_callback()
  1225. end
  1226. else
  1227. if close_callback then
  1228. close_callback()
  1229. end
  1230. end
  1231. return
  1232. end
  1233. self.do_show_animation = show
  1234. if not self.gameObject then return end
  1235. if (show and not self.use_show_anim) or (not show and not self.use_hide_anim) then
  1236. return
  1237. end
  1238. local function scale_anim_callback()
  1239. if show and self.background_wnd then
  1240. self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth, ScreenHeight)
  1241. end
  1242. end
  1243. local tween_type = show and TweenFunc.EASE_OUT_BACK or TweenFunc.EASE_IN_BACK
  1244. local cfg = show and BaseView.OpenCloseScaleCfg[1] or BaseView.OpenCloseScaleCfg[2]
  1245. local cur_scale = Vector3.New(cfg.start_scale, cfg.start_scale, cfg.start_scale)
  1246. local target_scale = Vector3.New(cfg.end_scale, cfg.end_scale, cfg.end_scale)
  1247. local time = cfg.time
  1248. if self.background_wnd then
  1249. local scale = show and cfg.start_scale or cfg.end_scale
  1250. if scale ~= 0 then
  1251. self.background_wnd.transform.sizeDelta = Vector2(SrcScreenWidth / scale, ScreenHeight/scale)
  1252. end
  1253. end
  1254. SetLocalScale(self.gameObject.transform, cur_scale.x, cur_scale.y, cur_scale.z)
  1255. -- 关闭回调覆盖
  1256. if not show and close_callback then
  1257. scale_anim_callback = close_callback
  1258. end
  1259. if self.scale_anim_id then
  1260. TweenLite.Stop(self.scale_anim_id)
  1261. self.scale_anim_id = nil
  1262. end
  1263. self.scale_anim_id = TweenLite.to(self, self.gameObject.transform, TweenLite.UiAnimationType.SCALE, target_scale, time, scale_anim_callback, tween_type)
  1264. if not show then
  1265. GlobalEventSystem:Fire(EventName.BASEVIEW_DO_VIEW_ANIM, show, self)
  1266. end
  1267. end
  1268. --把界面的UI节点移动到背景层
  1269. function BaseView:MoveUIToBack(node, args, camera_args,activity_args)
  1270. self.move_node_list = self.move_node_list or {}
  1271. if self.background_wnd and not self.blur_activity_bg then--没有高斯模糊才这样设置
  1272. --self.background_wnd:GetComponent("RawImageExtend").alpha = 0
  1273. end
  1274. if node then
  1275. local t = {node = node, args = args, parent = node.transform.parent, sibling_idx = node.transform:GetSiblingIndex()}
  1276. table.insert(self.move_node_list, t)
  1277. LuaViewManager:getInstance():ShowBackData({
  1278. target = self,
  1279. node_list ={[1] = t},
  1280. camera_args = camera_args,
  1281. activity = activity_args,
  1282. })
  1283. if #self.move_node_list == 1 and self.use_show_anim then
  1284. GlobalEventSystem:Fire(EventName.BASEVIEW_DO_VIEW_ANIM, true, self)
  1285. end
  1286. end
  1287. end
  1288. --显示后模型摄像机
  1289. function BaseView:ShowBackModeCamera(camera_args)
  1290. if self.background_wnd and not self.blur_activity_bg then--没有高斯模糊才这样设置
  1291. self.background_wnd:GetComponent("RawImageExtend").alpha = 0
  1292. end
  1293. camera_args = camera_args or LuaViewManager.CameraArgs.DepthZero
  1294. self.show_back_camera = true
  1295. LuaViewManager:getInstance():ShowBackData({
  1296. target = self,
  1297. camera_args = camera_args,
  1298. })
  1299. end
  1300. --把界面的UI节点从背景层中移除
  1301. function BaseView:RemoveUIFromBack()
  1302. self.move_node_list = self.move_node_list or {}
  1303. if #self.move_node_list > 0 or self.show_back_camera then
  1304. LuaViewManager:getInstance():HideBackData(self)
  1305. end
  1306. end
  1307. --根据界面状态显示隐藏在背景层中的UI
  1308. function BaseView:SetBackUIVisible(state)
  1309. if self.move_node_list then
  1310. for k,v in pairs(self.move_node_list) do
  1311. if state == true then
  1312. if v.is_hide_form_view then
  1313. v.node.gameObject:SetActive(true)
  1314. v.is_hide_form_view = nil
  1315. end
  1316. else
  1317. if v.node.gameObject and v.node.gameObject.activeSelf == true then
  1318. v.node.gameObject:SetActive(false)
  1319. v.is_hide_form_view = true
  1320. end
  1321. end
  1322. end
  1323. end
  1324. if self.back_item_contaner_list then
  1325. for k,v in pairs(self.back_item_contaner_list) do
  1326. v:SetBackUIVisible(state, true)
  1327. end
  1328. end
  1329. end
  1330. --设置界面的子页签(针对挂模型的界面)
  1331. function BaseView:AppendToBackContainer(child_item)
  1332. if child_item then
  1333. self.back_item_contaner_list = self.back_item_contaner_list or {}
  1334. table.insert(self.back_item_contaner_list, child_item)
  1335. end
  1336. end
  1337. --做界面打开动画(缩放动画)
  1338. function BaseView:PlayOpenMovie()
  1339. do return false end
  1340. -- print("huangcong:BaseView当前帧率", SceneManager and SceneManager:getInstance().curr_frame_rate or 0)
  1341. -- print("huangcong:BaseView帧率上限 :", lua_settingM:GetFrameRate())
  1342. -- print("huangcong:BaseView是否开启开启界面动画 :", self.need_movie_type)
  1343. -- print("huangcong:BaseView是否销毁监听:",self.open_tween_id_2)
  1344. if (SceneManager and SceneManager:getInstance().curr_frame_rate > 52) --当前帧率
  1345. and lua_settingM:GetFrameRate() > 51 --帧率上限
  1346. and self.transform and self.use_background and self.hide_maincancas
  1347. and (self.need_movie_type or lua_viewM.main_cancas_last_visible)
  1348. and not self.open_tween_id_2 then
  1349. self.has_played_open_movie = true
  1350. SetLocalScale(self.transform, 0.90, 0.90, 0.90)
  1351. local function onComplete()
  1352. self.open_tween_id_2 = nil
  1353. end
  1354. self.open_tween_id_2 = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.SCALE, Vector3.one ,0.1, onComplete)
  1355. end
  1356. end
  1357. function BaseView:ClearOpenMovieId()
  1358. if self.open_tween_id_1 then
  1359. TweenLite.Stop(self.open_tween_id_1)
  1360. self.open_tween_id_1 = nil
  1361. end
  1362. if self.open_tween_id_2 then
  1363. TweenLite.Stop(self.open_tween_id_2)
  1364. self.open_tween_id_2 = nil
  1365. end
  1366. end
  1367. --做界面关闭动画(暂时不需要)
  1368. function BaseView:PlayCloseMovie()
  1369. do return false end
  1370. if self.transform and self.has_played_open_movie and not self.close_tween_id_1 then
  1371. self.has_played_open_movie = false
  1372. LuaViewManager.Fire(lua_viewM, LuaViewManager.CHANGE_MAIN_CANVAS_VISIBLE, self, true)
  1373. local function onComplete()
  1374. self:ClearCloseMovieId()
  1375. self:CloseVisible()
  1376. if self.destroy_imm then
  1377. self:Destroy()
  1378. else
  1379. BaseView.AddDestroyTimer(self)
  1380. end
  1381. end
  1382. if lua_viewM:GetViewNum() >= 2 or (SceneManager and SceneManager:getInstance().curr_frame_rate < 50) then
  1383. onComplete()
  1384. return
  1385. end
  1386. if not self.close_tween_id_1 then
  1387. --先清理模型
  1388. if self.popChild then
  1389. lua_resM:clearRoleMode(self.popChild)
  1390. end
  1391. local canvas_group = self.transform:GetComponent("CanvasGroup")
  1392. if not canvas_group then
  1393. canvas_group = self.gameObject:AddComponent(typeof(UnityEngine.CanvasGroup))
  1394. end
  1395. self.close_tween_id_1 = TweenLite.to(self, canvas_group, TweenLite.UiAnimationType.ALPHA, 0.1, 0.13)
  1396. self.close_tween_id_2 = TweenLite.to(self, self.transform, TweenLite.UiAnimationType.SCALE, Vector3.one * 0.88, 0.14, onComplete)
  1397. end
  1398. return true
  1399. else
  1400. return false
  1401. end
  1402. end
  1403. function BaseView:ClearCloseMovieId()
  1404. if self.close_tween_id_1 then
  1405. TweenLite.Stop(self.close_tween_id_1)
  1406. self.close_tween_id_1 = nil
  1407. end
  1408. if self.close_tween_id_2 then
  1409. TweenLite.Stop(self.close_tween_id_2)
  1410. self.close_tween_id_2 = nil
  1411. end
  1412. end
  1413. function BaseView:BindLittleMove(node_trans, dir, target_pos)
  1414. if not node_trans or not dir or not target_pos then return end
  1415. if not self.little_move_event then
  1416. self.little_move_event = true
  1417. local function onLittleMove(is_out)
  1418. if not self.little_move_is_show_anim and not is_out then
  1419. self.little_move_is_show_anim = true
  1420. end
  1421. self:BaseViewLittleMove(is_out)
  1422. self.is_out = is_out
  1423. end
  1424. self:BindEvent(GlobalEventSystem, EventName.PLAY_MAINUI_MOVIE_EVENT, onLittleMove)
  1425. end
  1426. self.little_move_table = self.little_move_table or {}
  1427. table.insert(self.little_move_table, {node_trans = node_trans, dir = dir, target_pos = target_pos})
  1428. --如果不做动画,则直接调整刘海适配
  1429. if not ClientConfig.can_little_move then
  1430. local function onOrientationChange()
  1431. if self.is_loaded and not self._use_delete_method then
  1432. self:BaseViewOrientationChange()
  1433. end
  1434. end
  1435. if not self.orientation_id then
  1436. self.orientation_id = self:BindEvent(GlobalEventSystem, EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
  1437. end
  1438. local x, y = GetAnchoredPosition( node_trans)
  1439. if dir == BaseView.LittleMoveDir.Left then
  1440. node_trans.anchoredPosition = Vector2( target_pos + ClientConfig.iphone_x_offset_left , y)
  1441. elseif dir == BaseView.LittleMoveDir.Right then
  1442. node_trans.anchoredPosition = Vector2( target_pos - ClientConfig.iphone_x_offset_right, y)
  1443. elseif dir == BaseView.LittleMoveDir.Top then
  1444. node_trans.anchoredPosition = Vector2( x, target_pos)
  1445. else
  1446. node_trans.anchoredPosition = Vector2( x, target_pos)
  1447. end
  1448. return
  1449. end
  1450. --初始化节点的位置
  1451. local x, y = GetAnchoredPosition(node_trans)
  1452. if dir == BaseView.LittleMoveDir.Left then
  1453. node_trans.anchoredPosition = Vector2(target_pos + ClientConfig.iphone_x_offset_left-MainUIModel.LITTLE_MOVE_DIST, y)
  1454. elseif dir == BaseView.LittleMoveDir.Right then
  1455. node_trans.anchoredPosition = Vector2(target_pos - ClientConfig.iphone_x_offset_right+MainUIModel.LITTLE_MOVE_DIST , y)
  1456. elseif dir == BaseView.LittleMoveDir.Top then
  1457. node_trans.anchoredPosition = Vector2( x,target_pos+MainUIModel.LITTLE_MOVE_DIST)
  1458. else
  1459. node_trans.anchoredPosition = Vector2( x,target_pos-MainUIModel.LITTLE_MOVE_DIST)
  1460. end
  1461. if self.little_move_load_view_time_id then
  1462. TimerQuest.CancelQuest(GlobalTimerQuest, self.little_move_load_view_time_id)
  1463. self.little_move_load_view_time_id = false
  1464. end
  1465. local function open_view_little_move_func()
  1466. if not self.little_move_is_show_anim then
  1467. self:BaseViewLittleMove()
  1468. end
  1469. end
  1470. self.little_move_is_show_anim = false
  1471. self.little_move_load_view_time_id = TimerQuest.AddDelayQuest(GlobalTimerQuest, open_view_little_move_func, 0.1)
  1472. local function onOrientationChange()
  1473. if self.is_loaded and not self._use_delete_method and self.littleMove_is_anim then
  1474. self:BaseViewLittleMoveOrientationChange()
  1475. end
  1476. end
  1477. if not self.orientation_id then
  1478. self.orientation_id = self:BindEvent(GlobalEventSystem, EventName.ORIENTATION_DID_CHANGE, onOrientationChange)
  1479. end
  1480. end
  1481. function BaseView:StopLittleMoveAnim()
  1482. if self.little_move_tween_list and #self.little_move_tween_list > 0 then
  1483. for i,v in ipairs(self.little_move_tween_list) do
  1484. TweenLite.Stop(v)
  1485. end
  1486. self.little_move_tween_list = false
  1487. end
  1488. if self.little_move_load_view_time_id then
  1489. TimerQuest.CancelQuest(GlobalTimerQuest, self.little_move_load_view_time_id)
  1490. self.little_move_load_view_time_id = false
  1491. end
  1492. end
  1493. --屏幕翻转
  1494. function BaseView:BaseViewLittleMoveOrientationChange( )
  1495. if self.is_out then
  1496. for i,v in ipairs(self.little_move_table) do
  1497. local x, y = GetAnchoredPosition( v.node_trans)
  1498. if v.dir == BaseView.LittleMoveDir.Left then
  1499. v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left - MainUIModel.LITTLE_MOVE_OUT_DIST, y)
  1500. elseif v.dir == BaseView.LittleMoveDir.Right then
  1501. v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right + MainUIModel.LITTLE_MOVE_OUT_DIST, y)
  1502. elseif v.dir == BaseView.LittleMoveDir.Top then
  1503. v.node_trans.anchoredPosition = Vector2( x, v.target_pos + MainUIModel.LITTLE_MOVE_OUT_DIST)
  1504. else
  1505. v.node_trans.anchoredPosition = Vector2( x, v.target_pos - MainUIModel.LITTLE_MOVE_OUT_DIST)
  1506. end
  1507. end
  1508. else
  1509. self:BaseViewOrientationChange()
  1510. end
  1511. end
  1512. --屏幕翻转时,位置纠正
  1513. function BaseView:BaseViewOrientationChange( )
  1514. for i,v in ipairs(self.little_move_table) do
  1515. local x, y = GetAnchoredPosition( v.node_trans)
  1516. if v.dir == BaseView.LittleMoveDir.Left then
  1517. v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left , y)
  1518. elseif v.dir == BaseView.LittleMoveDir.Right then
  1519. v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right, y)
  1520. elseif v.dir == BaseView.LittleMoveDir.Top then
  1521. v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
  1522. else
  1523. v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
  1524. end
  1525. end
  1526. end
  1527. function BaseView:BaseViewLittleMove( is_out )
  1528. if not self.little_move_table or #self.little_move_table <= 0 then return end
  1529. self:StopLittleMoveAnim()
  1530. self.little_move_tween_list = {}
  1531. self.littleMove_is_anim = true
  1532. local function end_func( ... )
  1533. self.littleMove_is_anim = false
  1534. end
  1535. if is_out then
  1536. for i,v in ipairs(self.little_move_table) do
  1537. local x, y = GetAnchoredPosition( v.node_trans)
  1538. if v.dir == BaseView.LittleMoveDir.Left then
  1539. v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left, y)
  1540. 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)
  1541. elseif v.dir == BaseView.LittleMoveDir.Right then
  1542. v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right, y)
  1543. 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)
  1544. elseif v.dir == BaseView.LittleMoveDir.Top then
  1545. v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
  1546. 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)
  1547. else
  1548. v.node_trans.anchoredPosition = Vector2( x, v.target_pos)
  1549. 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)
  1550. end
  1551. end
  1552. else
  1553. for i,v in ipairs(self.little_move_table) do
  1554. local x, y = GetAnchoredPosition( v.node_trans)
  1555. if v.dir == BaseView.LittleMoveDir.Left then
  1556. v.node_trans.anchoredPosition = Vector2( v.target_pos + ClientConfig.iphone_x_offset_left-MainUIModel.LITTLE_MOVE_DIST, y)
  1557. 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)
  1558. elseif v.dir == BaseView.LittleMoveDir.Right then
  1559. v.node_trans.anchoredPosition = Vector2( v.target_pos - ClientConfig.iphone_x_offset_right+MainUIModel.LITTLE_MOVE_DIST , y)
  1560. 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)
  1561. elseif v.dir == BaseView.LittleMoveDir.Top then
  1562. v.node_trans.anchoredPosition = Vector2( x, v.target_pos+MainUIModel.LITTLE_MOVE_DIST)
  1563. 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)
  1564. else
  1565. v.node_trans.anchoredPosition = Vector2( x, v.target_pos-MainUIModel.LITTLE_MOVE_DIST)
  1566. 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)
  1567. end
  1568. end
  1569. end
  1570. end
  1571. -- 绑定主界面聊天UI的展开(展开时被遮挡的UI绑定这个事件后会隐藏掉UI)
  1572. function BaseView:BindMainUIExpandEvent( con_tran )
  1573. if not con_tran or (not con_tran.gameObject) then return end
  1574. self.main_ui_func_btn_con_list = self.main_ui_func_btn_con_list or {}
  1575. if TableSize(self.main_ui_func_btn_con_list) <= 0 then
  1576. local function set_func_btn_show()
  1577. self:SetFuncBtnShow()
  1578. end
  1579. self:BindEvent(GlobalEventSystem, EventName.MAIN_UI_CON_EXPAND, set_func_btn_show)
  1580. end
  1581. table.insert(self.main_ui_func_btn_con_list, con_tran)
  1582. -- 初始化一次
  1583. self:SetFuncBtnShow()
  1584. end
  1585. -- 设置fun_btn的显示状态
  1586. function BaseView:SetFuncBtnShow( )
  1587. local main_ui_is_expand = MainUIModel:getInstance():MainChatUIIsExpand()
  1588. for k,v in pairs(self.main_ui_func_btn_con_list) do
  1589. v.gameObject:SetActive(not main_ui_is_expand)
  1590. end
  1591. end