c1_lua/lua/app/ui/tips/help_tips.lua
2023-04-03 10:59:13 +08:00

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