144 lines
4.2 KiB
Lua
144 lines
4.2 KiB
Lua
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 |