local BaseTips = require "app/ui/tips/base_tips" local HelpTips = class("HelpTips", BaseTips) local BG_COLOR = BF.Color(0, 0, 0, 0.94) local BG_COLOR_A = BF.Color(0, 0, 0, 0) function HelpTips:showCommonBG() return true end function HelpTips:ctor(params) self.params = params self.params.type = self.params.type or GConst.TipsConst.HELP_TIPS_TYPE.NORMAL self.targetObj = params.targetObj end function HelpTips:getPrefabPath() return "assets/prefabs/ui/tips/help_tips.prefab" end function HelpTips:init() local uiMap = self.root:genAllChildren() self.desc = uiMap['help_tips.bg.ScrollView.Viewport.Content.desc'] self.scrollView = uiMap['help_tips.bg.ScrollView'] self.content = uiMap['help_tips.bg.ScrollView.Viewport.Content'] self.bg = uiMap['help_tips.bg'] uiMap['help_tips.bg.title_tx']:setText(self.params.title or I18N:getGlobalText(I18N.GlobalConst.HELP_DESC)) uiMap['help_tips.bg.close_btn']:addClickListener(function () self:playCloseAni(function() self:closeUI() end) end) end function HelpTips:onClose() self:clearAni() end function HelpTips:onLoadRootComplete() self:init() self:playOpenAni() end function HelpTips:onRefresh() self.root:addClickListener(function () self:playCloseAni(function() self:closeUI() end) end) self.desc:setText(self.params.desc) local meshProComp = self.desc:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_TEXT_MESH_PRO) local height = meshProComp.preferredHeight self.content:setSizeDeltaY(height + 32) self.content:setAnchoredPosition(0, 0) end function HelpTips:playOpenAni() self:clearAni() self.bg:setLocalScale(1, 1, 1) local bgImage = self.root:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE) bgImage.color = BG_COLOR if self.targetObj then local uiCamera = UIManager:getUICameraComponent() local rectTransform = self.targetObj:getComponent(GConst.TYPEOF_UNITY_CLASS.RECTTRANSFORM) local pivot = rectTransform.pivot local rect = rectTransform.rect local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), rect.height*(0.5 - pivot.y), 0)) local screenPoint = uiCamera:WorldToScreenPoint(tarCorner) self.tarCornerLp = CS.BF.Utils.RectTransformScreenPointToLocalPointInRectangle(UIManager:getMainCanvasTransform(), screenPoint.x, screenPoint.y, uiCamera) local sizeDelta = self.bg:getSizeDelta() local targetX, targetY = sizeDelta.x / 2, sizeDelta.y / 2 local pivotX, pivotY if self.tarCornerLp.x > targetX then pivotX = 1 elseif self.tarCornerLp.x < - targetX then pivotX = 0 else pivotX = 0.5 * (1 + self.tarCornerLp.x / targetX) end if self.tarCornerLp.y > targetY then pivotY = 1 elseif self.tarCornerLp.y < - targetY then pivotY = 0 else pivotY = 0.5 * (1 + self.tarCornerLp.y / targetY) end self.bg:getTransform().pivot = BF.Vector2(pivotX, pivotY) self.bg:setAnchoredPosition(self.tarCornerLp.x, self.tarCornerLp.y) self.bg:setLocalScale(0, 0, 0) bgImage.color = BG_COLOR_A self.scaleAniSe = self.bg:createBindTweenSequence() targetX = (pivotX - 0.5) * sizeDelta.x targetY = (pivotY - 0.5) * sizeDelta.y self.scaleAniSe:Append(self.bg:getTransform():DOLocalMove(BF.Vector2(targetX, targetY), 0.1)) self.scaleAniSe:Join(self.bg:getTransform():DOScale(1, 0.1)) self.scaleAniSe:Join(bgImage:DOFade(BG_COLOR.a, 0.1)) else self.tarCornerLp = BF.Vector2(0, 0) self.bg:getTransform().pivot = BF.Vector2(0.5, 0.5) self.bg:setAnchoredPosition(self.tarCornerLp.x, self.tarCornerLp.y) end end function HelpTips:playCloseAni(callback) self:clearAni() if self.targetObj then local bgImage = self.root:getComponent(GConst.TYPEOF_UNITY_CLASS.UI_IMAGE) self.scaleAniSe = self.bg:createBindTweenSequence() self.scaleAniSe:Append(self.bg:getTransform():DOLocalMove(BF.Vector2(self.tarCornerLp.x, self.tarCornerLp.y), 0.1)) self.scaleAniSe:Join(self.bg:getTransform():DOScale(0, 0.1)) self.scaleAniSe:Join(bgImage:DOFade(0, 0.1)) self.scaleAniSe:OnComplete(function() if callback then callback() end end) else self.bg:setLocalScale(1, 1, 1) self.bg:setAnchoredPosition(self.tarCornerLp.x, self.tarCornerLp.y) if callback then callback() end end end function HelpTips:clearAni() if self.scaleAniSe then self.scaleAniSe:Kill() self.scaleAniSe = nil end end return HelpTips