| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- local UIForceGuideView = require("UIGuide/UIForceGuideView_Generate")
- local boliPos = Vector2.zero
- local expandSize = Vector2.zero
- local offset = Vector2.zero
- local lateUpdateBeat
- function UIForceGuideView:OnAwake(data)
- self.controller = require("UIGuide/UIForceGuideCtr"):new()
- self.controller:Init(self)
- self.controller:SetData(data)
- end
- function UIForceGuideView:AddEventListener()
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.UI_PAGE_IN_END_NTF, self, self.UIPageInEnd)
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name, UIEventNames.UI_FORCE_GUIDE_DISPLAY, self, self.NextForceGuide)
- end
- function UIForceGuideView:FillContent(data, uiBase)
- self.uiBase = uiBase
- local gameObject = self.uiBase:GetRoot()
- if gameObject ~= nil then
- self.gameObject = gameObject
- self.transform = gameObject.transform
- end
- self:InitGenerate(self.transform, data)
- self:Init()
- end
- function UIForceGuideView:Init()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PRIVATER_CHAT_BTN_DISPLAY, false)
- if not lateUpdateBeat then
- lateUpdateBeat = LateUpdateBeat:CreateListener(self.LateUpdate, self)
- end
- LateUpdateBeat:AddListener(lateUpdateBeat)
- self.maskCloseDelayTime = 0
- self.delayFunc = nil
- self.target = nil
- self.mask.guideMask:Init(self, self.MaskAnimCompeleted, self.maskPoint.rectTransform)
- self:Refresh()
- end
- function UIForceGuideView:NextForceGuide(data)
- self.controller:SetData(data)
- self:Refresh()
- end
- function UIForceGuideView:Refresh()
- if self.errorOverTimer then
- --ManagerContainer.LuaTimerMgr:RemoveTimer(self.errorOverTimer)
- self.errorOverTimer:Stop()
- self.errorOverTimer = nil
- end
- self.mask.guideMask:SetDefaultState(true)
- local curGuideId = ManagerContainer.ForceGuideMgr:GetCurGuideId()
- local cfgData = ManagerContainer.CfgMgr:GetForceGuideDataById(curGuideId)
- if cfgData == nil then
- LogHRWarning(curGuideId.." isnt in ForceGuideCfg")
- ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
- return
- end
- self.guideCfgData = cfgData
- expandSize.x = self.guideCfgData.ExpandSize[1]
- expandSize.y = self.guideCfgData.ExpandSize[2]
- offset.x = self.guideCfgData.CenterOffset[1]
- offset.y = self.guideCfgData.CenterOffset[2]
- if self.guideCfgData.LogicLua ~= "" then
- local logicLua = require("ForceGuide/"..self.guideCfgData.LogicLua)
- logicLua:Enter(self, self.guideCfgData.UIId, self.guideCfgData.LuaParam, self.DelayMaskClose)
- else
- self:DelayMaskClose()
- end
- end
- function UIForceGuideView:DelayMaskClose(isError, target)
- if isError then
- ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
- return
- end
- if self.guideCfgData == nil then return end
- if self.guideCfgData.MaskCloseDelayTime > 0 then
- self.maskCloseDelayTime = self.guideCfgData.MaskCloseDelayTime * 0.001
- self.delayFunc = self.StartCloseMask
- self.target = target
- else
- self:StartCloseMask(target)
- end
- end
- function UIForceGuideView:LateUpdate()
- if self.maskCloseDelayTime > 0 then
- self.maskCloseDelayTime = self.maskCloseDelayTime - Time.unscaledDeltaTime
- if self.maskCloseDelayTime <= 0 then
- self.delayFunc(self, self.target)
- self.delayFunc = nil
- self.target = nil
- self.maskCloseDelayTime = 0
- end
- end
- end
- function UIForceGuideView:StartCloseMask(target)
- self.maskPoint.image.raycastTarget = false
- local guidePage = ManagerContainer.LuaUIMgr:GetPage(self.guideCfgData.UIId)
- if guidePage then
- local pageView = guidePage.MLuaTable
- if target == nil then
- target = CommonUtil.ParseUITargetPath(pageView, self.guideCfgData.Path)
- if target == nil then
- ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
- return
- end
- end
- local rectTrans = target:GetComponent(Enum.TypeInfo.RectTransform)
- if rectTrans == nil then
- ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
- return
- end
- self.maskPoint:SetActive(true)
- local position = CameraMgr.Instance.UICamera:WorldToScreenPoint(target.transform.position)
- position = CameraMgr.Instance.UICamera:ScreenToViewportPoint(position)
- position.x = (position.x - 0.5) * UIMgr.SCREEN_WIDTH
- position.y = (position.y - 0.5) * UIMgr.SCREEN_HEIGHT
- self.maskPoint.rectTransform.anchoredPosition = position
- local rectTransform = target:GetComponent(Enum.TypeInfo.RectTransform)
- local pivot = rectTransform.pivot;
- pivot.x = 0.5 - pivot.x
- pivot.y = 0.5 - pivot.y
- self.maskPoint.rectTransform.anchoredPosition = self.maskPoint.rectTransform.anchoredPosition + Vector2.Scale(rectTransform.sizeDelta, pivot) + offset
- self.realSize = rectTransform.rect.size + expandSize
- self.targetPoint.transform.position = self.maskPoint.transform.position
- self.targetPoint:SetActive(true)
- boliPos.x = self.guideCfgData.BoLiPos[1]
- boliPos.y = self.guideCfgData.BoLiPos[2]
- self.boliPoint.rectTransform.anchoredPosition = boliPos + self.maskPoint.rectTransform.anchoredPosition
- self.boliPoint.text.text.text = I18N.T(self.guideCfgData.BoLiNote)
- self.boliPoint:SetActive(true)
- self.mask:SetActive(self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil)
- self.maskPoint.rectTransform.sizeDelta = self.realSize
- if self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil then
- self.maskPoint.image.raycastTarget = false
- self.uiBase:AddButtonUniqueEventListener(self.maskPoint.button, self, function ()
- if target == nil then
- self:ErrorOver()
- return
- end
- local nextId = self.guideCfgData.Id + 1
- local nextCfgData = ManagerContainer.CfgMgr:GetForceGuideDataById(nextId)
- if nextCfgData and self.guideCfgData.UIId ~= nextCfgData.UIId and self.guideCfgData.Group == nextCfgData.Group then
- local nextUIData = ManagerContainer.CfgMgr:GetUIData(nextCfgData.UIId)
- if nextUIData and nextUIData.page_anim_in_type == 0 then
- ManagerContainer.ForceGuideMgr:MaskOpenAnimCompeleted()
- ManagerContainer.ForceGuideMgr:SetHasMaskOpenCompeleted(true)
- end
- end
- --self.errorOverTimer = ManagerContainer.LuaTimerMgr:AddTimer(5000, 1, self, self.ErrorOver, nil)
- if self.errorOverTimer then
- self.errorOverTimer:Stop()
- self.errorOverTimer = nil
- end
- self.errorOverTimer = Timer.New(function ()
- self:ErrorOver()
- end, 5)
- self.errorOverTimer:Start()
- local button1 = target:GetComponent(Enum.TypeInfo.RepeatButton)
- if button1 then
- button1:ImmediatelyEffect()
- else
- button1 = target:GetComponent(Enum.TypeInfo.Button)
- if button1 then
- button1.onClick:Invoke()
- else
- local toggle = target:GetComponent(Enum.TypeInfo.Toggle)
- if toggle then
- toggle.onValueChanged:Invoke(true)
- end
- end
- end
- self:OnTargetClick()
- end)
- self.mask.guideMask:SetTargetInfoClose(self.maskPoint.transform.position, self.realSize, self.guideCfgData.MaskCloseTime * 0.001)
- elseif self.guideCfgData.Type == 1 then
- self.maskPoint.image.raycastTarget = true
- self.uiBase:AddButtonUniqueEventListener(self.maskPoint.button, self, function ()
- if target == nil then
- self:ErrorOver()
- return
- end
- local button1 = target:GetComponent(Enum.TypeInfo.Button)
- if button1 then
- button1.onClick:Invoke()
- end
- self:OnTargetClick()
- end)
- end
- else
- ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
- return
- end
- end
- function UIForceGuideView:MaskAnimCompeleted(isClose)
- if isClose then
- self.maskPoint.image.raycastTarget = true
- else
- --self.maskPoint:SetActive(false)
- self.maskPoint.image.raycastTarget = false
- self.mask.guideMask:SetDefaultState(true)
- ManagerContainer.ForceGuideMgr:MaskOpenAnimCompeleted()
- end
- end
- function UIForceGuideView:OnTargetClick()
- self.boliPoint:SetActive(false)
- self.targetPoint:SetActive(false)
- if self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil then
- self.mask.guideMask:SetTargetInfoOpen(self.maskPoint.transform.position, self.realSize, self.guideCfgData.MaskOpenTime * 0.001)
- elseif self.guideCfgData.Type == 1 then
- ManagerContainer.ForceGuideMgr:MaskOpenAnimCompeleted()
- end
- end
- function UIForceGuideView:ErrorOver()
- ManagerContainer.ForceGuideMgr:ForceGuideOver(true)
- end
- function UIForceGuideView:UIPageInEnd(id)
- end
- function UIForceGuideView:RemoveEventListener()
- ManagerContainer.LuaEventMgr:Unregister(self.uiData.name)
- end
- function UIForceGuideView:AddUIEventListener()
- ManagerContainer.LuaEventMgr:RegisterUIEvent(self.uiData.name)
- --self.mask.uIEventTriggerListener.onClick = function()
- -- self:GetCurClickPos()
- --end
- self.uiBase:AddUIEventHandlerClickListener(self.uIEventHandler, function (go)
- if self.guideCfgData.Type == 0 or self.guideCfgData.Type == nil then return end
- self:OnTargetClick()
- end)
- end
- function UIForceGuideView:GetCurClickPos()
- local position = self.mask.uIEventTriggerListener.currentEventData.position
- position = CameraMgr.Instance.UICamera:ScreenToViewportPoint(position)
- position.x = (position.x - 0.5) * UIMgr.SCREEN_WIDTH
- position.y = (position.y - 0.5) * UIMgr.SCREEN_HEIGHT
- local delta = Vector2(position.x, position.y) - self.maskPoint.rectTransform.anchoredPosition
- LogHRWarning("forceGuide click delta position x:"..delta.x.." y:"..delta.y)
- self.boliPoint.rectTransform.anchoredPosition = position
- end
- function UIForceGuideView:OnHide()
- end
- function UIForceGuideView:OnShow(data)
- self.controller:SetData(data)
- self:Refresh()
- end
- function UIForceGuideView:OnClose()
- if self.errorOverTimer then
- --ManagerContainer.LuaTimerMgr:RemoveTimer(self.errorOverTimer)
- self.errorOverTimer:Stop()
- self.errorOverTimer = nil
- end
- if lateUpdateBeat ~= nil then
- LateUpdateBeat:RemoveListener(lateUpdateBeat)
- lateUpdateBeat = nil
- end
- self.delayFunc = nil
- self.target = nil
- self.uIEventHandler:RemoveListener()
- DG.Tweening.DOTween.Kill(self.transform)
- ManagerContainer.ForceGuideMgr:ForceOver()
- end
- function UIForceGuideView:OnDispose()
- ManagerContainer.LuaEventMgr:Dispatch(UIEventNames.PRIVATER_CHAT_BTN_DISPLAY, true)
- self.mask.uIEventTriggerListener.onClick = nil
- self.mask.guideMask:Dispose()
- self.realSize = nil
- self.guideCfgData = nil
- self.controller:OnDispose()
- end
- return UIForceGuideView
|