UIForceGuideView.lua 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. local UIForceGuideView = require("UIGuide/UIForceGuideView_Generate")
  2. local boliPos = Vector2.zero
  3. local expandSize = Vector2.zero
  4. local offset = Vector2.zero
  5. local lateUpdateBeat
  6. function UIForceGuideView:OnAwake(data)
  7. self.controller = require("UIGuide/UIForceGuideCtr"):new()
  8. self.controller:Init(self)
  9. self.controller:SetData(data)
  10. end
  11. function UIForceGuideView:AddEventListener()
  12. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.UI_PAGE_IN_END_NTF, self, self.UIPageInEnd)
  13. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.UI_FORCE_GUIDE_DISPLAY, self, self.NextForceGuide)
  14. end
  15. function UIForceGuideView:FillContent(data, uiBase)
  16. self.uiBase = uiBase
  17. local gameObject = self.uiBase:GetRoot()
  18. if gameObject ~= nil then
  19. self.gameObject = gameObject
  20. self.transform = gameObject.transform
  21. end
  22. self:InitGenerate(self.transform, data)
  23. self:Init()
  24. end
  25. function UIForceGuideView:Init()
  26. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PRIVATER_CHAT_BTN_DISPLAY, false)
  27. if not lateUpdateBeat then
  28. lateUpdateBeat = LateUpdateBeat:CreateListener(self.LateUpdate, self)
  29. end
  30. LateUpdateBeat:AddListener(lateUpdateBeat)
  31. self.maskCloseDelayTime = 0
  32. self.delayFunc = nil
  33. self.target = nil
  34. self.mask.guideMask:Init(self, self.MaskAnimCompeleted, self.maskPoint.rectTransform)
  35. self:Refresh()
  36. end
  37. function UIForceGuideView:NextForceGuide(data)
  38. self.controller:SetData(data)
  39. self:Refresh()
  40. end
  41. function UIForceGuideView:Refresh()
  42. if self.errorOverTimer then
  43. --ManagerContainer.LuaTimerMgr:RemoveTimer(self.errorOverTimer)
  44. self.errorOverTimer:Stop()
  45. self.errorOverTimer = nil
  46. end
  47. self.mask.guideMask:SetDefaultState(true)
  48. local curGuideId = ManagerContainer.ForceGuideMgr:GetCurGuideId()
  49. local cfgData = ManagerContainer.CfgMgr:GetForceGuideDataById(curGuideId)
  50. if cfgData == nil then
  51. LogHRWarning(curGuideId.." isnt in ForceGuideCfg")
  52. ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
  53. return
  54. end
  55. self.guideCfgData = cfgData
  56. expandSize.x = self.guideCfgData.ExpandSize[1]
  57. expandSize.y = self.guideCfgData.ExpandSize[2]
  58. offset.x = self.guideCfgData.CenterOffset[1]
  59. offset.y = self.guideCfgData.CenterOffset[2]
  60. if self.guideCfgData.LogicLua ~= "" then
  61. local logicLua = require("ForceGuide/"..self.guideCfgData.LogicLua)
  62. logicLua:Enter(self, self.guideCfgData.UIId, self.guideCfgData.LuaParam, self.DelayMaskClose)
  63. else
  64. self:DelayMaskClose()
  65. end
  66. end
  67. function UIForceGuideView:DelayMaskClose(isError, target)
  68. if isError then
  69. ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
  70. return
  71. end
  72. if self.guideCfgData == nil then return end
  73. if self.guideCfgData.MaskCloseDelayTime > 0 then
  74. self.maskCloseDelayTime = self.guideCfgData.MaskCloseDelayTime * 0.001
  75. self.delayFunc = self.StartCloseMask
  76. self.target = target
  77. else
  78. self:StartCloseMask(target)
  79. end
  80. end
  81. function UIForceGuideView:LateUpdate()
  82. if self.maskCloseDelayTime > 0 then
  83. self.maskCloseDelayTime = self.maskCloseDelayTime - Time.unscaledDeltaTime
  84. if self.maskCloseDelayTime <= 0 then
  85. self.delayFunc(self, self.target)
  86. self.delayFunc = nil
  87. self.target = nil
  88. self.maskCloseDelayTime = 0
  89. end
  90. end
  91. end
  92. function UIForceGuideView:StartCloseMask(target)
  93. self.maskPoint.image.raycastTarget = false
  94. local guidePage = ManagerContainer.LuaUIMgr:GetPage(self.guideCfgData.UIId)
  95. if guidePage then
  96. local pageView = guidePage.MLuaTable
  97. if target == nil then
  98. target = CommonUtil.ParseUITargetPath(pageView, self.guideCfgData.Path)
  99. if target == nil then
  100. ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
  101. return
  102. end
  103. end
  104. local rectTrans = target:GetComponent(Enum.TypeInfo.RectTransform)
  105. if rectTrans == nil then
  106. ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
  107. return
  108. end
  109. self.maskPoint:SetActive(true)
  110. local position = CameraMgr.Instance.UICamera:WorldToScreenPoint(target.transform.position)
  111. position = CameraMgr.Instance.UICamera:ScreenToViewportPoint(position)
  112. position.x = (position.x - 0.5) * UIMgr.SCREEN_WIDTH
  113. position.y = (position.y - 0.5) * UIMgr.SCREEN_HEIGHT
  114. self.maskPoint.rectTransform.anchoredPosition = position
  115. local rectTransform = target:GetComponent(Enum.TypeInfo.RectTransform)
  116. local pivot = rectTransform.pivot;
  117. pivot.x = 0.5 - pivot.x
  118. pivot.y = 0.5 - pivot.y
  119. self.maskPoint.rectTransform.anchoredPosition = self.maskPoint.rectTransform.anchoredPosition + Vector2.Scale(rectTransform.sizeDelta, pivot) + offset
  120. self.realSize = rectTransform.rect.size + expandSize
  121. self.targetPoint.transform.position = self.maskPoint.transform.position
  122. self.targetPoint:SetActive(true)
  123. boliPos.x = self.guideCfgData.BoLiPos[1]
  124. boliPos.y = self.guideCfgData.BoLiPos[2]
  125. self.boliPoint.rectTransform.anchoredPosition = boliPos + self.maskPoint.rectTransform.anchoredPosition
  126. self.boliPoint.text.text.text = I18N.T(self.guideCfgData.BoLiNote)
  127. self.boliPoint:SetActive(true)
  128. self.mask:SetActive(self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil)
  129. self.maskPoint.rectTransform.sizeDelta = self.realSize
  130. if self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil then
  131. self.maskPoint.image.raycastTarget = false
  132. self.uiBase:AddButtonUniqueEventListener(self.maskPoint.button, self, function ()
  133. if target == nil then
  134. self:ErrorOver()
  135. return
  136. end
  137. local nextId = self.guideCfgData.Id + 1
  138. local nextCfgData = ManagerContainer.CfgMgr:GetForceGuideDataById(nextId)
  139. if nextCfgData and self.guideCfgData.UIId ~= nextCfgData.UIId and self.guideCfgData.Group == nextCfgData.Group then
  140. local nextUIData = ManagerContainer.CfgMgr:GetUIData(nextCfgData.UIId)
  141. if nextUIData and nextUIData.page_anim_in_type == 0 then
  142. ManagerContainer.ForceGuideMgr:MaskOpenAnimCompeleted()
  143. ManagerContainer.ForceGuideMgr:SetHasMaskOpenCompeleted(true)
  144. end
  145. end
  146. --self.errorOverTimer = ManagerContainer.LuaTimerMgr:AddTimer(5000, 1, self, self.ErrorOver, nil)
  147. if self.errorOverTimer then
  148. self.errorOverTimer:Stop()
  149. self.errorOverTimer = nil
  150. end
  151. self.errorOverTimer = Timer.New(function ()
  152. self:ErrorOver()
  153. end, 5)
  154. self.errorOverTimer:Start()
  155. local button1 = target:GetComponent(Enum.TypeInfo.RepeatButton)
  156. if button1 then
  157. button1:ImmediatelyEffect()
  158. else
  159. button1 = target:GetComponent(Enum.TypeInfo.Button)
  160. if button1 then
  161. button1.onClick:Invoke()
  162. else
  163. local toggle = target:GetComponent(Enum.TypeInfo.Toggle)
  164. if toggle then
  165. toggle.onValueChanged:Invoke(true)
  166. end
  167. end
  168. end
  169. self:OnTargetClick()
  170. end)
  171. self.mask.guideMask:SetTargetInfoClose(self.maskPoint.transform.position, self.realSize, self.guideCfgData.MaskCloseTime * 0.001)
  172. elseif self.guideCfgData.Type == 1 then
  173. self.maskPoint.image.raycastTarget = true
  174. self.uiBase:AddButtonUniqueEventListener(self.maskPoint.button, self, function ()
  175. if target == nil then
  176. self:ErrorOver()
  177. return
  178. end
  179. local button1 = target:GetComponent(Enum.TypeInfo.Button)
  180. if button1 then
  181. button1.onClick:Invoke()
  182. end
  183. self:OnTargetClick()
  184. end)
  185. end
  186. else
  187. ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
  188. return
  189. end
  190. end
  191. function UIForceGuideView:MaskAnimCompeleted(isClose)
  192. if isClose then
  193. self.maskPoint.image.raycastTarget = true
  194. else
  195. --self.maskPoint:SetActive(false)
  196. self.maskPoint.image.raycastTarget = false
  197. self.mask.guideMask:SetDefaultState(true)
  198. ManagerContainer.ForceGuideMgr:MaskOpenAnimCompeleted()
  199. end
  200. end
  201. function UIForceGuideView:OnTargetClick()
  202. self.boliPoint:SetActive(false)
  203. self.targetPoint:SetActive(false)
  204. if self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil then
  205. self.mask.guideMask:SetTargetInfoOpen(self.maskPoint.transform.position, self.realSize, self.guideCfgData.MaskOpenTime * 0.001)
  206. elseif self.guideCfgData.Type == 1 then
  207. ManagerContainer.ForceGuideMgr:MaskOpenAnimCompeleted()
  208. end
  209. end
  210. function UIForceGuideView:ErrorOver()
  211. ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
  212. end
  213. function UIForceGuideView:UIPageInEnd(id)
  214. end
  215. function UIForceGuideView:RemoveEventListener()
  216. ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
  217. end
  218. function UIForceGuideView:AddUIEventListener()
  219. ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
  220. --self.mask.uIEventTriggerListener.onClick = function()
  221. -- self:GetCurClickPos()
  222. --end
  223. self.uiBase:AddUIEventHandlerClickListener(self.uIEventHandler, function (go)
  224. if self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil then return end
  225. self:OnTargetClick()
  226. end)
  227. end
  228. function UIForceGuideView:GetCurClickPos()
  229. local position = self.mask.uIEventTriggerListener.currentEventData.position
  230. position = CameraMgr.Instance.UICamera:ScreenToViewportPoint(position)
  231. position.x = (position.x - 0.5) * UIMgr.SCREEN_WIDTH
  232. position.y = (position.y - 0.5) * UIMgr.SCREEN_HEIGHT
  233. local delta = Vector2(position.x, position.y) - self.maskPoint.rectTransform.anchoredPosition
  234. LogHRWarning("forceGuide click delta position x:"..delta.x.." y:"..delta.y)
  235. self.boliPoint.rectTransform.anchoredPosition = position
  236. end
  237. function UIForceGuideView:OnHide()
  238. end
  239. function UIForceGuideView:OnShow(data)
  240. self.controller:SetData(data)
  241. self:Refresh()
  242. end
  243. function UIForceGuideView:OnClose()
  244. if self.errorOverTimer then
  245. --ManagerContainer.LuaTimerMgr:RemoveTimer(self.errorOverTimer)
  246. self.errorOverTimer:Stop()
  247. self.errorOverTimer = nil
  248. end
  249. if lateUpdateBeat ~= nil then
  250. LateUpdateBeat:RemoveListener(lateUpdateBeat)
  251. lateUpdateBeat = nil
  252. end
  253. self.delayFunc = nil
  254. self.target = nil
  255. self.uIEventHandler:RemoveListener()
  256. DG.Tweening.DOTween.Kill(self.transform)
  257. ManagerContainer.ForceGuideMgr:ForceOver()
  258. end
  259. function UIForceGuideView:OnDispose()
  260. ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PRIVATER_CHAT_BTN_DISPLAY, true)
  261. self.mask.uIEventTriggerListener.onClick = nil
  262. self.mask.guideMask:Dispose()
  263. self.realSize = nil
  264. self.guideCfgData = nil
  265. self.controller:OnDispose()
  266. end
  267. return UIForceGuideView