c1_lua/lua/app/module/tips/tips_manager.lua
2025-09-04 18:20:02 +08:00

299 lines
11 KiB
Lua

local TipsManager = class("TipsManager", BaseModule)
TipsManager.ALIGN_TYPE = {
ADAPTIVE = 0,
CENTER = 1,
TOP_LEFT = 2,
TOP_CENTER = 3,
TOP_RIGHT = 4,
BOTTOM_LEFT = 5,
BOTTOM_CENTER = 6,
BOTTOM_RIGHT = 7,
LEFT_TOP = 8,
LEFT_CENTER =9,
LEFT_BOTTOM = 10,
RIGHT_TOP = 11,
RIGHT_CENTER = 12,
RIGHT_BOTTOM = 13,
CUSTOM = 14,
}
TipsManager.REWARDS_TIPS_TYPE = {
COMMON = "reward_node",
TASK = "reward2_node",
}
function TipsManager:showHelpTips(params)
params = params or {}
UIManager:showUI("app/ui/tips/help_tips", params)
end
function TipsManager:showRewardTips(rewardId, rewardType, tarPrefabObj, alignType)
if rewardType == GConst.REWARD_TYPE.ITEM then
local info = ConfigManager:getConfig("item")[rewardId]
if info then
if info.type == GConst.ItemConst.ITEM_TYPE.RANDOM_FRAGMENT
or info.type == GConst.ItemConst.ITEM_TYPE.WEIGHT_FRAGMENT
or info.type == GConst.ItemConst.ITEM_TYPE.EPIC_HERO_FRAMENT then
-- 随机碎片 or 权重随机碎片 or 史诗英雄碎片
self:showHeroFragmentTips(rewardId)
return
elseif info.type == GConst.ItemConst.ITEM_TYPE.BOX then
-- 宝箱
self:showBoxTips(rewardId)
return
elseif info.type == GConst.ItemConst.ITEM_TYPE.HERO_FRAGMENT then
-- 英雄碎片
ModuleManager.HeroManager:showHeroDetailUI(info.parameter, true)
return
elseif info.type == GConst.ItemConst.ITEM_TYPE.SKIN then
-- 英雄皮肤
ModuleManager.HeroManager:showHeroSkinUI(DataManager.SkinData:getHeroIdBySkinId(info.parameter), info.parameter)
return
elseif info.type == GConst.ItemConst.ITEM_TYPE.RANDOM_BOX_ITEM or info.type == GConst.ItemConst.ITEM_TYPE.FIXED_BOX_ITEM then
self:showBoxItemTips(rewardId)
return
end
end
end
local desc = self:getRewardDesc(rewardId, rewardType)
self:showDescTips(desc, tarPrefabObj, alignType)
end
function TipsManager:showRewardsBox(params)
UIManager:showUI(UIManager.UI_PATH.REWARD_BOX, params)
end
function TipsManager:showItemTips(id, tarPrefabObj, alignType)
local params = {
id = id,
aniType = UIManager.ANI_TYPE.NONE,
}
if tarPrefabObj then
alignType = alignType or TipsManager.ALIGN_TYPE.TOP_CENTER
local tarCornerScreenPos, location = self:getCornerScreenPosition(tarPrefabObj, alignType)
params.tarCornerScreenPos = tarCornerScreenPos
params.location = location
end
UIManager:showUI("app/ui/tips/item_tips", params)
end
function TipsManager:showRewardsTips(rewards, customTitleStr, tarPrefabObj, callback, alignType, showBlackBg, typeNode)
local params = {
rewards = rewards,
customTitleStr = customTitleStr,
callback = callback,
aniType = UIManager.ANI_TYPE.NONE,
}
if tarPrefabObj then
alignType = alignType or TipsManager.ALIGN_TYPE.TOP_CENTER
local tarCornerScreenPos, location = self:getCornerScreenPosition(tarPrefabObj, alignType)
params.tarCornerScreenPos = tarCornerScreenPos
params.location = location
params.showBlackBg = showBlackBg == nil or showBlackBg
params.typeNode = typeNode or TipsManager.REWARDS_TIPS_TYPE.COMMON
end
UIManager:showUI("app/ui/tips/rewards_tips", params)
end
function TipsManager:showDescTips(desc, tarPrefabObj, alignType)
local params = {
desc = desc,
aniType = UIManager.ANI_TYPE.NONE,
}
if tarPrefabObj then
alignType = alignType or TipsManager.ALIGN_TYPE.TOP_CENTER
local tarCornerScreenPos, location = self:getCornerScreenPosition(tarPrefabObj, alignType)
params.tarCornerScreenPos = tarCornerScreenPos
params.location = location
end
UIManager:showUI("app/ui/tips/desc_tips", params)
end
function TipsManager:showChooseRewardTips(title, desc, rewards, callback)
local params = {
title = title,
desc = desc,
rewards = rewards,
callback = callback,
}
UIManager:showUI("app/ui/tips/choose_reward_tips", params)
end
function TipsManager:showHeroFragmentTips(itemId)
local params = {
itemId = itemId
}
UIManager:showUI("app/ui/tips/hero_fragment_tips", params)
end
function TipsManager:showBoxItemTips(itemId)
local params = {
itemId = itemId
}
UIManager:showUI("app/ui/tips/box_item_tips", params)
end
-- formation = {heroEntity, ...}
function TipsManager:showHeroFormation(targetObj, formation)
local tarCornerScreenPos, location = self:getCornerScreenPosition(targetObj, TipsManager.ALIGN_TYPE.BOTTOM_CENTER)
location = TipsManager.ALIGN_TYPE.CUSTOM
local params = {
tarCornerScreenPos = tarCornerScreenPos,
location = location,
formation = formation,
}
UIManager:showUI("app/ui/tips/formation_tips", params)
end
function TipsManager:showBoxTips(itemId)
local params = {
itemId = itemId
}
UIManager:showUI("app/ui/tips/box_tips", params)
end
function TipsManager:getRewardDesc(rewardId, rewardType)
if rewardType == GConst.REWARD_TYPE.ITEM then
local item18NInfo = I18N:getConfig("item")[rewardId]
if item18NInfo then
return item18NInfo.desc
end
end
return GConst.EMPTY_STRING
end
function TipsManager:showSkillTips(targetObj, buffIds, skillId)
local tarCornerScreenPos, location = self:getCornerScreenPosition(targetObj, TipsManager.ALIGN_TYPE.TOP_CENTER)
local params = {
tarCornerScreenPos = tarCornerScreenPos,
buffNames = buffIds,
skillId = skillId,
}
UIManager:showUI("app/ui/tips/skill_tips", params)
end
function TipsManager:showBattleSkillTips(targetObj, buffIds, skillId)
local params = {}
local tarCornerScreenPos = self:getCornerScreenPosition(targetObj, TipsManager.ALIGN_TYPE.LEFT_CENTER)
params.tarCornerScreenPos = tarCornerScreenPos
params.buffNames = buffIds
params.skillId = skillId
UIManager:showUI("app/ui/tips/battle_skill_tips", params)
end
function TipsManager:showBattleBoardSkillTips(heroEntity, battleController, side, tarPrefabObj, alignType)
local params = {
heroEntity = heroEntity,
battleController = battleController,
side = side,
aniType = UIManager.ANI_TYPE.NONE,
}
if tarPrefabObj then
alignType = alignType or TipsManager.ALIGN_TYPE.TOP_CENTER
local tarCornerScreenPos, location = self:getCornerScreenPosition(tarPrefabObj, alignType)
params.tarCornerScreenPos = tarCornerScreenPos
params.location = location
end
UIManager:showUI("app/ui/tips/battle_board_skill_tips", params)
end
function TipsManager:getCornerScreenPosition(tarPrefabObj, alignType)
local uiCamera = UIManager:getUICameraComponent()
local rectTransform = tarPrefabObj:getComponent(GConst.TYPEOF_UNITY_CLASS.RECTTRANSFORM)
local pivot = rectTransform.pivot
local rect = rectTransform.rect
local isTop
local isRight
local isCenter = false
local screenPoint
local location
if alignType == TipsManager.ALIGN_TYPE.ADAPTIVE then
local screenWidth, screenHeight = GFunc.getScreenSize()
local tarMid = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), rect.height*(0.5 - pivot.y), 0))
local tarSp = uiCamera:WorldToScreenPoint(tarMid)
if tarSp.x < screenWidth*0.45 then
isRight = false
elseif tarSp.x > screenWidth*0.55 then
isRight = true
else
isCenter = true
end
if tarSp.y < screenHeight * 0.6 then
isTop = true
else
isTop = false
end
if isTop then
if isCenter then
location = TipsManager.ALIGN_TYPE.TOP_CENTER
else
if isRight then
location = TipsManager.ALIGN_TYPE.TOP_RIGHT
else
location = TipsManager.ALIGN_TYPE.TOP_LEFT
end
end
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), rect.height*(1 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
else
if isCenter then
location = TipsManager.ALIGN_TYPE.BOTTOM_CENTER
else
if isRight then
location = TipsManager.ALIGN_TYPE.BOTTOM_RIGHT
else
location = TipsManager.ALIGN_TYPE.BOTTOM_LEFT
end
end
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), -rect.height*pivot.y, 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
end
else
location = alignType
if alignType == TipsManager.ALIGN_TYPE.TOP_LEFT then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), rect.height*(1 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.TOP_CENTER then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), rect.height*(1 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.TOP_RIGHT then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), rect.height*(1 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.BOTTOM_LEFT then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), -rect.height*pivot.y, 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.BOTTOM_CENTER then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), -rect.height*pivot.y, 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.BOTTOM_RIGHT then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(0.5 - pivot.x), -rect.height*pivot.y, 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.LEFT_BOTTOM then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(-rect.width*pivot.x, rect.height*(0.5 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.LEFT_CENTER then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(-rect.width*pivot.x, rect.height*(0.5 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.LEFT_TOP then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(-rect.width*pivot.x, rect.height*(0.5 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.RIGHT_TOP then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(1 - pivot.x), rect.height*(0.5 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.RIGHT_CENTER then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(1 - pivot.x), rect.height*(0.5 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
elseif alignType == TipsManager.ALIGN_TYPE.RIGHT_BOTTOM then
local tarCorner = rectTransform:TransformPoint(BF.Vector3(rect.width*(1 - pivot.x), rect.height*(0.5 - pivot.y), 0))
screenPoint = uiCamera:WorldToScreenPoint(tarCorner)
end
end
if screenPoint then
return BF.Vector2(screenPoint.x, screenPoint.y), location
else
return BF.Vector2(0, 0), location
end
end
return TipsManager