miduo_client/Assets/ManagedResources/~Lua/Modules/SoulPrint/SoulPrintPanel.lua

604 lines
23 KiB
Lua
Raw Normal View History

2025-03-14 11:58:20 +08:00
----- 魂印主面板 -----
2020-05-09 13:31:21 +08:00
require("Base/BasePanel")
SoulPrintPanel = Inherit(BasePanel)
local this = SoulPrintPanel
2024-09-06 10:38:56 +08:00
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
local equipConfig = ConfigManager.GetConfig(ConfigName.EquipConfig)
2020-05-09 13:31:21 +08:00
local propertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
2024-09-06 10:38:56 +08:00
local heroConfig = ConfigManager.GetConfig(ConfigName.HeroConfig)
2020-05-09 13:31:21 +08:00
local equipSignSetting = ConfigManager.GetConfig(ConfigName.EquipSignSetting)
--循环布局容器
2024-09-06 10:38:56 +08:00
local loopList = {}
2020-05-25 19:16:23 +08:00
--最大槽位数量
2024-09-06 10:38:56 +08:00
local loopCount = 0
2020-05-25 19:16:23 +08:00
--可装备槽位数量
2024-09-06 10:38:56 +08:00
local didLen = 0
2020-05-25 19:16:23 +08:00
--动态最大等级
2024-09-06 10:38:56 +08:00
local didLv = 0
2020-05-25 19:16:23 +08:00
--配置最大等级
2024-09-06 10:38:56 +08:00
local maxLv = 0
2020-05-09 13:31:21 +08:00
--间隔角度
2024-09-06 10:38:56 +08:00
local angle = 0
2020-05-09 13:31:21 +08:00
--半径
2024-09-06 10:38:56 +08:00
local radius = 285
2020-05-09 13:31:21 +08:00
2024-09-06 10:38:56 +08:00
local curHeroData --当前英雄信息
local heroDatas --全部英雄数据
local index = 0 --当前索引
2020-05-09 13:31:21 +08:00
2024-09-06 10:38:56 +08:00
local isShow = true --默认显示装备中的魂印
local _specialData = {}
2020-08-31 11:03:16 +08:00
local isUpZhen = false
2024-09-06 10:38:56 +08:00
local list = {}
2020-08-31 11:03:16 +08:00
local teamHero = {}
2021-01-15 22:11:38 +08:00
local isPlayAnim = true
local isFristOpenTime
2020-05-09 13:31:21 +08:00
function SoulPrintPanel:InitComponent()
2021-04-21 13:12:04 +08:00
this.spLoader = SpriteLoader.New()
2024-09-06 10:38:56 +08:00
this.upView = SubUIManager.Open(SubUIConfig.UpView, this.gameObject.transform, { showType = UpViewOpenType.ShowLeft })
this.helpBtn = Util.GetGameObject(this.gameObject, "HelpBtn")
this.helpPosition = this.helpBtn:GetComponent("RectTransform").localPosition
2020-05-09 13:31:21 +08:00
this.leftBtn = Util.GetGameObject(this.gameObject, "LeftBtn")
this.rightBtn = Util.GetGameObject(this.gameObject, "RightBtn")
2024-09-06 10:38:56 +08:00
this.handBookBtn = Util.GetGameObject(this.gameObject, "HandBookBtn") --图鉴按钮
this.detailsBtn = Util.GetGameObject(this.gameObject, "DetailsBtn") --细节按钮
this.showBtn = Util.GetGameObject(this.gameObject, "ShowBtn") --显示装备中的魂印按钮
this.showBtnOn = Util.GetGameObject(this.showBtn, "Bg/On"):GetComponent("Image")
2020-05-09 13:31:21 +08:00
this.backBtn = Util.GetGameObject(this.gameObject, "BackBtn/btnBack")
2024-09-06 10:38:56 +08:00
this.empty = Util.GetGameObject(this.gameObject, "Empty")
2020-05-09 13:31:21 +08:00
--循环布局根节点
2024-09-06 10:38:56 +08:00
this.loopRoot = Util.GetGameObject(this.gameObject, "LoopRoot")
this.loopPre = Util.GetGameObject(this.loopRoot, "Pre")
2020-05-09 13:31:21 +08:00
--英雄头像
2024-09-06 10:38:56 +08:00
this.heroFrame = Util.GetGameObject(this.gameObject, "Hero/Frame"):GetComponent("Image")
this.heroIcon = Util.GetGameObject(this.gameObject, "Hero/Icon"):GetComponent("Image")
2020-05-09 13:31:21 +08:00
--战力
2024-09-06 10:38:56 +08:00
this.power = Util.GetGameObject(this.gameObject, "Power/Value"):GetComponent("Text")
2020-05-09 13:31:21 +08:00
2024-09-06 10:38:56 +08:00
this.scrollBar = Util.GetGameObject(this.gameObject, "Scrollbar"):GetComponent("Scrollbar")
2020-05-09 13:31:21 +08:00
--魂印列表
2024-09-06 10:38:56 +08:00
this.scrollRoot = Util.GetGameObject(this.gameObject, "ScrollRoot")
this.scrollPre = Util.GetGameObject(this.gameObject, "ScrollRoot/Pre")
this.scrollView = SubUIManager.Open(SubUIConfig.ScrollCycleView, this.scrollRoot.transform, this.scrollPre,
this.scrollBar, --
Vector2.New(this.scrollRoot.transform.rect.width, this.scrollRoot.transform.rect.height), 1, 5,
Vector2.New(45, 40))
this.scrollView.gameObject:GetComponent("RectTransform").anchoredPosition = Vector2.New(0, 0)
2020-05-09 13:31:21 +08:00
this.scrollView.gameObject:GetComponent("RectTransform").anchorMin = Vector2.New(0.5, 0.5)
this.scrollView.gameObject:GetComponent("RectTransform").anchorMax = Vector2.New(0.5, 0.5)
this.scrollView.gameObject:GetComponent("RectTransform").pivot = Vector2.New(0.5, 0.5)
this.scrollView.moveTween.MomentumAmount = 1
this.scrollView.moveTween.Strength = 2
2020-06-30 18:59:44 +08:00
this.SetIsShow()
2021-01-15 22:11:38 +08:00
-- this.BgMask = Util.GetGameObject(this.gameObject,"bgMask")
2020-05-09 13:31:21 +08:00
end
function SoulPrintPanel:BindEvent()
--帮助按钮
Util.AddClick(this.helpBtn, function()
2024-09-06 10:38:56 +08:00
UIManager.OpenPanel(UIName.HelpPopup, HELP_TYPE.SoulPrint, this.helpPosition.x, this.helpPosition.y)
2020-05-09 13:31:21 +08:00
end)
--向左切换英雄数据
Util.AddClick(this.leftBtn, function()
2021-01-15 22:11:38 +08:00
isPlayAnim = true
2020-05-09 13:31:21 +08:00
this.OnLeftBtnClick()
end)
--向右切换英雄数据
Util.AddClick(this.rightBtn, function()
2021-01-15 22:11:38 +08:00
isPlayAnim = true
2020-05-09 13:31:21 +08:00
this.OnRightBtnClick()
end)
--点击图鉴按钮
Util.AddClick(this.handBookBtn, function()
UIManager.OpenPanel(UIName.SoulPrintHandBook)
end)
--点击细节按钮
Util.AddClick(this.detailsBtn, function()
2024-09-06 10:38:56 +08:00
UIManager.OpenPanel(UIName.SoulPrintPopUpV2, 1, curHeroData)
2020-05-09 13:31:21 +08:00
end)
--点击显示装备中魂印按钮
Util.AddClick(this.showBtn, function()
2024-09-06 10:38:56 +08:00
isShow = (not isShow and true or false)
this.showBtnOn.enabled = isShow
2020-05-09 13:31:21 +08:00
this.SetScrollData()
end)
--关闭页面
Util.AddClick(this.backBtn, function()
PlaySoundWithoutClick(SoundConfig.Sound_UICancel)
self:ClosePanel()
end)
end
function SoulPrintPanel:AddListener()
end
function SoulPrintPanel:RemoveListener()
end
2024-09-06 10:38:56 +08:00
2020-05-09 13:31:21 +08:00
function SoulPrintPanel:OnSortingOrderChange()
2020-07-01 10:54:39 +08:00
--特效层级重设
for _, v in pairs(list) do
Util.SetParticleSortLayer(v, self.sortingOrder)
2024-09-06 10:38:56 +08:00
end
2020-05-09 13:31:21 +08:00
end
2024-09-06 10:38:56 +08:00
function SoulPrintPanel:OnOpen(_curHeroData, _heroDatas)
curHeroData = _curHeroData
2020-05-09 13:31:21 +08:00
heroDatas = {}
if _heroDatas then
for i = 1, #_heroDatas do
if SoulPrintManager.GetSoulPrintIsOpen(_heroDatas[i]) then
2024-09-06 10:38:56 +08:00
table.insert(heroDatas, _heroDatas[i])
2020-05-09 13:31:21 +08:00
end
end
else
2024-09-06 10:38:56 +08:00
local curheroListData = HeroManager.GetAllHeroDatas()
2020-05-09 13:31:21 +08:00
for i = 1, #curheroListData do
if SoulPrintManager.GetSoulPrintIsOpen(curheroListData[i]) then
2024-09-06 10:38:56 +08:00
table.insert(heroDatas, curheroListData[i])
2020-05-09 13:31:21 +08:00
end
end
end
2020-06-30 18:59:44 +08:00
for i = 1, #heroDatas do
if curHeroData.dynamicId == heroDatas[i].dynamicId then
index = i
break
end
end
2020-05-09 13:31:21 +08:00
end
function SoulPrintPanel:OnShow()
2021-01-15 22:11:38 +08:00
isPlayAnim = true
2020-05-09 13:31:21 +08:00
this.upView:OnOpen({ showType = UpViewOpenType.ShowLeft, panelType = PanelType.Main })
--已激活魂印的Hero为1时 隐藏左右按钮
2024-09-06 10:38:56 +08:00
this.leftBtn.gameObject:SetActive(#heroDatas > 1)
this.rightBtn.gameObject:SetActive(#heroDatas > 1)
2020-05-09 13:31:21 +08:00
this.RefreshShow()
end
function SoulPrintPanel:OnClose()
2024-09-06 10:38:56 +08:00
angle = 0
loopCount = 0
local var = isShow and 1 or 0
PlayerPrefs.SetInt(PlayerManager.uid .. "_SoulPrint_IsShow", var)
2021-01-15 22:11:38 +08:00
if isFristOpenTime then
isFristOpenTime:Stop()
isFristOpenTime = nil
end
2020-05-09 13:31:21 +08:00
end
function SoulPrintPanel:OnDestroy()
2021-04-21 13:12:04 +08:00
this.spLoader:Destroy()
2020-05-09 13:31:21 +08:00
SubUIManager.Close(this.upView)
2024-09-06 10:38:56 +08:00
this.scrollView = nil
loopList = {}
list = {}
2020-05-09 13:31:21 +08:00
end
--点击左
function this.OnLeftBtnClick()
index = (index - 1 > 0 and index - 1 or #heroDatas)
curHeroData = heroDatas[index]
this.RefreshShow()
end
2024-09-06 10:38:56 +08:00
2020-05-09 13:31:21 +08:00
--点击右
function this.OnRightBtnClick()
index = (index + 1 <= #heroDatas and index + 1 or 1)
curHeroData = heroDatas[index]
this.RefreshShow()
end
--刷新显示
function this.RefreshShow()
--LogGreen("刷新魂印面板")
2020-09-03 16:03:14 +08:00
teamHero = FormationManager.GetAllMainFormationHeroId()
2020-08-31 11:03:16 +08:00
isUpZhen = teamHero[curHeroData.dynamicId] and true or false
2020-05-09 13:31:21 +08:00
this.SetLoopUI()
this.SetHero()
this.SetScrollData()
2020-06-28 17:52:29 +08:00
--对比战力并更新战力值 播放战力变更动画
2020-08-31 11:03:16 +08:00
local allAddProVal
--计算面板属性
local WarPower
2020-08-31 11:03:16 +08:00
if isUpZhen then
allAddProVal = HeroPropManager.GetHeroProp(curHeroData.dynamicId, FormationTypeDef.FORMATION_NORMAL)
2024-09-06 10:38:56 +08:00
WarPower = HeroPowerManager.GetHeroPower(curHeroData.dynamicId, FormationTypeDef.FORMATION_NORMAL)
else
allAddProVal = HeroPropManager.GetHeroProp(curHeroData.dynamicId)
2024-09-06 10:38:56 +08:00
WarPower = HeroPowerManager.GetHeroPower(curHeroData.dynamicId)
end
this.power.text = WarPower
2020-05-09 13:31:21 +08:00
end
--设置环形布局
function this.SetLoopUI()
2020-06-30 18:59:44 +08:00
-- local specialData = string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig,37).Value, "#")
-- --获取格子数量的动态上限
-- _specialData={}
-- for n = 1, #specialData do
-- local v=specialData[n]
-- if PlayerManager.level>=tonumber(v) then
-- table.insert(_specialData,v)
-- end
-- end
2020-05-09 13:31:21 +08:00
--动态当前最大等级
2024-09-06 10:38:56 +08:00
local didLv = 0
2020-06-30 18:59:44 +08:00
-- --你猜啥意思
-- if #_specialData<#specialData then--未达到最大等级 +1显示锁定
-- loopCount= #_specialData+1
-- didLv=tonumber(specialData[#_specialData+1])--最大英雄等级(需要从表获取)
-- else
-- loopCount=#_specialData
-- didLv=tonumber(specialData[loopCount])
-- end
2020-05-09 13:31:21 +08:00
--最终最大等级
2024-09-06 10:38:56 +08:00
local maxLv = 0
--LogBlue("动态最大等级 "..didLv)
2020-05-25 19:16:23 +08:00
2024-09-06 10:38:56 +08:00
loopCount, didLen, didLv, maxLv = HeroManager.GetSoulPrintLoopUIMaxData(curHeroData)
LogError("最大槽位数量" .. loopCount .. " 可装备槽位数量" .. didLen .. " 最大动态等级" .. didLv .. " 配置最大等级" .. maxLv)
2020-05-25 19:16:23 +08:00
2020-05-09 13:31:21 +08:00
--初始化
2024-09-06 10:38:56 +08:00
for i = 1, #loopList do
2023-12-05 14:33:22 +08:00
loopList[i]:SetActive(false)
end
2024-09-06 10:38:56 +08:00
for i = 1, loopCount do
2020-05-09 13:31:21 +08:00
if not loopList[i] then
2024-09-06 10:38:56 +08:00
loopList[i] = newObjToParent(this.loopPre, this.loopRoot)
2020-05-09 13:31:21 +08:00
end
2024-09-06 10:38:56 +08:00
loopList[i].name = "Pre" .. i
2023-12-05 14:33:22 +08:00
loopList[i]:SetActive(true)
2020-05-09 13:31:21 +08:00
end
--设置不包含最后一位 为默认
2024-09-06 10:38:56 +08:00
for j = 1, loopCount do
2020-05-09 13:31:21 +08:00
loopList[j]:GetComponent("RectTransform").anchoredPosition = this.GetCurPosByIndex(j)
2024-09-06 10:38:56 +08:00
local i = j - 1
if i == 0 then
i = 1
this.SetLoopPre(loopList[i], 1, nil, nil, j)
2020-05-09 13:31:21 +08:00
else
2024-09-06 10:38:56 +08:00
this.SetLoopPre(loopList[j], 1, nil, nil, j)
2020-05-09 13:31:21 +08:00
end
end
--最后一位锁定
2023-12-05 14:33:22 +08:00
for k, v in ConfigPairs(equipSignSetting) do
2024-09-06 10:38:56 +08:00
local rules = v.OpenRules
if rules[1] == 1 then
if PlayerManager.level < rules[2] then
this.SetLoopPre(loopList[loopCount], 2, v.SlotPosition, didLv)
2023-12-05 14:33:22 +08:00
break
else
2024-09-06 10:38:56 +08:00
this.SetLoopPre(loopList[loopCount], 1)
2023-12-05 14:33:22 +08:00
end
2024-09-06 10:38:56 +08:00
elseif rules[1] == 2 then
if curHeroData.star < rules[2] then
this.SetLoopPre(loopList[loopCount], 2, v.SlotPosition, didLv)
2023-12-05 14:33:22 +08:00
break
else
2024-09-06 10:38:56 +08:00
this.SetLoopPre(loopList[loopCount], 1)
2023-12-05 14:33:22 +08:00
end
2023-11-30 15:11:06 +08:00
end
2024-09-06 10:38:56 +08:00
end
2023-12-05 14:33:22 +08:00
2020-05-09 13:31:21 +08:00
--数据赋值
2024-09-06 10:38:56 +08:00
for k = 1, #curHeroData.soulPrintList do
local index = k --curHeroData.soulPrintList[k].position
this.SetLoopPre(loopList[index], 3, k, curHeroData.soulPrintList[k])
2020-05-09 13:31:21 +08:00
end
end
2024-09-06 10:38:56 +08:00
2023-11-30 15:11:06 +08:00
function this.GetSoulLockTip()
for k, v in ConfigPairs(equipSignSetting) do
if v.OpenRules then
2024-09-06 10:38:56 +08:00
if v.OpenRules[1] == 1 then
2023-11-30 15:11:06 +08:00
if PlayerManager.level < v.OpenRules[2] then
2024-09-06 10:38:56 +08:00
return string.format(Language[12864], v.OpenRules[2])
2023-11-30 15:11:06 +08:00
end
2024-09-06 10:38:56 +08:00
elseif v.OpenRules[1] == 2 then
2023-11-30 15:11:06 +08:00
if curHeroData.star < v.OpenRules[2] then
2024-09-06 10:38:56 +08:00
local str = ""
if v.OpenRules[2] == 14 then
str = Language[12724]
elseif v.OpenRules[2] == 15 then
str = Language[12725]
2023-11-30 15:11:06 +08:00
end
2024-09-06 10:38:56 +08:00
return string.format(Language[12453], str)
2023-11-30 15:11:06 +08:00
end
end
end
end
end
2024-09-06 10:38:56 +08:00
2020-05-09 13:31:21 +08:00
--获取当前子布局坐标
function this.GetCurPosByIndex(index)
2024-09-06 10:38:56 +08:00
local hudu = (angle / 180) * Mathf.PI
angle = angle + (360 / loopCount)
return Vector2.New(radius * Mathf.Cos(hudu), radius * Mathf.Sin(hudu))
2020-05-09 13:31:21 +08:00
end
2024-09-06 10:38:56 +08:00
2020-05-09 13:31:21 +08:00
--设置环形布局预设 root:预设根节点 type:开启类型 index 位置 data:数据
2024-09-06 10:38:56 +08:00
function this.SetLoopPre(root, type, index, data, curIndex)
local normal = Util.GetGameObject(root, "Normal")
local lock = Util.GetGameObject(root, "Lock")
local unlock = Util.GetGameObject(root, "UnLock")
local bg = Util.GetGameObject(root, "Bg")
Util.GetGameObject(bg, "Frame"):GetComponent("Image").enabled = false
2020-05-09 13:31:21 +08:00
if curIndex then
2024-09-06 10:38:56 +08:00
bg.transform:DORotate(Vector3.New(0, 0, (360 / loopCount) * (curIndex - 1) + root.transform.localRotation.z), 0)
2020-05-09 13:31:21 +08:00
end
2024-09-06 10:38:56 +08:00
normal:SetActive(type == 1) --解锁 未装备
lock:SetActive(type == 2) --锁定
unlock:SetActive(type == 3) --解锁装备魂印
root:GetComponent("Button").interactable = type == 3 --只有被赋值的按钮才能点击
if type == 1 then
Util.GetGameObject(bg, "bg"):GetComponent("Image").sprite = this.spLoader:LoadSprite(SoulPrintSpriteByQuantity
[0].circleBg1)
elseif type == 2 then
Util.GetGameObject(bg, "bg"):GetComponent("Image").sprite = this.spLoader:LoadSprite(SoulPrintSpriteByQuantity
[0].circleBg1)
Util.GetGameObject(lock, "Text"):GetComponent("Text").text = this.GetSoulLockTip() --string.format( Language[11630],data)
elseif type == 3 then
2020-07-01 10:54:39 +08:00
--Util.GetGameObject(bg,"Frame"):GetComponent("Image").enabled=true
2024-09-06 10:38:56 +08:00
Util.GetGameObject(bg, "bg"):GetComponent("Image").sprite = this.spLoader:LoadSprite(SoulPrintSpriteByQuantity
[equipConfig[data.equipId].Quality].circleBg1)
2021-04-21 13:12:04 +08:00
--Util.GetGameObject(bg,"Frame"):GetComponent("Image").sprite=this.spLoader:LoadSprite(GetQuantityImageByqualityPoint(equipConfig[data.equipId].Quality))
2024-09-06 10:38:56 +08:00
Util.GetGameObject(unlock, "circleFrame"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
SoulPrintSpriteByQuantity[equipConfig[data.equipId].Quality].circleBg2)
Util.GetGameObject(unlock, "Icon"):GetComponent("Image").sprite = this.spLoader:LoadSprite(GetResourcePath(
itemConfig[data.equipId].ResourceID))
Util.GetGameObject(unlock, "circle"):GetComponent("Image").sprite = this.spLoader:LoadSprite(
SoulPrintSpriteByQuantity[equipConfig[data.equipId].Quality].circle)
Util.GetGameObject(unlock, "Name"):GetComponent("Text").text = GetLanguageStrById(itemConfig[data.equipId].Name)
Util.AddOnceClick(root, function()
local pos = data.position
LogBlue("卸下时 " .. data.equipId)
UIManager.OpenPanel(UIName.SoulPrintPopUp, 2, curHeroData.dynamicId, data.equipId, pos, function()
2024-08-29 21:36:51 +08:00
PopupTipPanel.ShowTip(Language[11171])
2020-05-09 13:31:21 +08:00
this.RefreshShow()
2021-01-15 22:11:38 +08:00
--对比战力并更新战力值 播放战力变更动画
HeroManager.CompareWarPower(curHeroData.dynamicId)
2020-05-09 13:31:21 +08:00
end)
end)
end
end
--设置英雄
function this.SetHero()
2024-09-06 10:38:56 +08:00
this.heroIcon.sprite = this.spLoader:LoadSprite(curHeroData.icon)
this.heroFrame.sprite = this.spLoader:LoadSprite(GetHeroQuantityImageByquality(curHeroData.heroConfig.Quality,
curHeroData.star))
2020-08-31 11:03:16 +08:00
-- local allPro = HeroManager.CalculateHeroAllProValList(1, curHeroData.dynamicId, false)
local WarPower
2020-08-31 11:03:16 +08:00
--计算面板属性
if isUpZhen then
2024-09-06 10:38:56 +08:00
WarPower = HeroPowerManager.GetHeroPower(curHeroData.dynamicId, FormationTypeDef.FORMATION_NORMAL)
else
WarPower = HeroPowerManager.GetHeroPower(curHeroData.dynamicId)
end
this.power.text = WarPower
2020-05-09 13:31:21 +08:00
end
--设置装备中的魂印
function this.SetIsShow()
if PlayerPrefs.GetInt(PlayerManager.uid .. "_SoulPrint_IsShow") then
2024-09-06 10:38:56 +08:00
isShow = PlayerPrefs.GetInt(PlayerManager.uid .. "_SoulPrint_IsShow") == 1
2020-05-09 13:31:21 +08:00
else
2024-09-06 10:38:56 +08:00
isShow = true
2020-05-09 13:31:21 +08:00
end
2024-09-06 10:38:56 +08:00
this.showBtnOn.enabled = isShow
2020-05-09 13:31:21 +08:00
end
--设置魂印列表滚动条
2024-09-06 10:38:56 +08:00
function this.SetScrollData()
local data = SoulPrintManager.GetAllSoulPrint(isShow, curHeroData.id, curHeroData.dynamicId)
this.empty:SetActive(#data == 0)
2020-06-03 19:09:01 +08:00
this.ShowRedPotDataAndSort(data)
2020-07-01 10:54:39 +08:00
2024-09-06 10:38:56 +08:00
this.scrollView:SetData(data, function(index, root)
this.SetScrollPre(root, data[index])
list[root] = root
2024-09-06 10:38:56 +08:00
end, true, true)
2021-01-15 22:11:38 +08:00
if isPlayAnim then
if isFristOpenTime then
isFristOpenTime:Stop()
isFristOpenTime = nil
end
-- isFristOpenTime = Timer.New(function()
-- this.BgMask:SetActive(false)
2024-09-06 10:38:56 +08:00
-- end, 1):Start()
-- this.BgMask:SetActive(true)
2021-01-15 22:11:38 +08:00
SecTorPlayAnimByScroll(this.scrollView)
isPlayAnim = false
end
2020-05-09 13:31:21 +08:00
this.scrollView:SetIndex(1)
end
2024-09-06 10:38:56 +08:00
2020-05-09 13:31:21 +08:00
--设置魂印列表预设
2024-09-06 10:38:56 +08:00
function this.SetScrollPre(root, data)
2021-01-15 22:11:38 +08:00
-- if isPlayAnim then
-- root.gameObject:SetActive(false)
-- else
-- root.gameObject:SetActive(true)
-- end
Util.SetParticleSortLayer(root, this.sortingOrder + 1)
SetSoulEffect(itemConfig[data.id].Quantity1, root)
2020-07-01 10:54:39 +08:00
2024-09-06 10:38:56 +08:00
local frame = Util.GetGameObject(root, "Frame"):GetComponent("Image")
local icon = Util.GetGameObject(root, "Icon"):GetComponent("Image")
local name = Util.GetGameObject(root, "Name"):GetComponent("Text")
local hero = Util.GetGameObject(root, "Hero")
local heroIcon = Util.GetGameObject(hero, "Icon"):GetComponent("Image")
local circle = Util.GetGameObject(root, "circle"):GetComponent("Image")
local equipped = Util.GetGameObject(root, "Equipped") --是否已装备
Util.GetGameObject(root, "limit"):SetActive(equipConfig[data.id].limit == 1 and
not SoulPrintManager.GetCurSoulPrintIsCanUp(data.id) and data.upHero == "")
frame.sprite = this.spLoader:LoadSprite(GetQuantityImageByquality(equipConfig[data.id].Quality))
circle.sprite = this.spLoader:LoadSprite(SoulPrintSpriteByQuantity[equipConfig[data.id].Quality].circle)
icon.sprite = this.spLoader:LoadSprite(GetResourcePath(itemConfig[data.id].ResourceID))
name.text = SubString2(GetLanguageStrById(equipConfig[data.id].Name), 8)
hero.gameObject:SetActive(data.upHero ~= "")
Util.GetGameObject(root, "redPoint"):SetActive(data.isShowRedPot == 1)
2020-06-13 11:47:13 +08:00
equipped.gameObject:SetActive(this.GetCurHeroSoulPrintState(data.id))
2024-09-06 10:38:56 +08:00
if data.upHero ~= "" then
2020-11-06 09:37:27 +08:00
local heroData = HeroManager.GetSingleHeroData(data.upHero)
2024-09-06 10:38:56 +08:00
local heroId = heroData.id
--LogGreen(heroId)
2024-09-06 10:38:56 +08:00
heroIcon.sprite = this.spLoader:LoadSprite(heroData.icon)
2020-05-09 13:31:21 +08:00
end
--点击事件(穿戴或替换魂印)
2024-09-06 10:38:56 +08:00
Util.AddOnceClick(root, function()
if not SoulPrintManager.GetCurSoulPrintIsCanUp(data.id) and data.upHero == "" then
2024-08-29 21:36:51 +08:00
PopupTipPanel.ShowTip(Language[11166])
2020-05-09 13:31:21 +08:00
return
end
2024-09-06 10:38:56 +08:00
if this.GetCurHeroSoulPrintState(data.id) then
2024-08-29 21:36:51 +08:00
PopupTipPanel.ShowTip(Language[11166])
2020-07-01 10:54:39 +08:00
return
2024-09-06 10:38:56 +08:00
end
local pos = this.GetPos() --位置
local oldPower = HeroManager.GetSingleHeroData(curHeroData.dynamicId).warPower
2024-09-06 10:38:56 +08:00
UIManager.OpenPanel(UIName.SoulPrintPopUp, 1, curHeroData.dynamicId, data.id, pos, function()
2024-08-29 21:36:51 +08:00
PopupTipPanel.ShowTip(Language[11170])
2020-05-09 13:31:21 +08:00
this.RefreshShow()
2021-01-15 22:11:38 +08:00
--对比战力并更新战力值 播放战力变更动画
2024-09-06 10:38:56 +08:00
HeroManager.CompareWarPower1(curHeroData.dynamicId, oldPower)
end, data)
2020-05-09 13:31:21 +08:00
-- end
end)
end
--自动获取魂印的位置 如果有位置返回位置 如果没位置返回0
function this.GetPos()
2024-09-06 10:38:56 +08:00
local _data = {}
-- for k=1,loopCount do
-- if Util.GetGameObject(loopList[k].gameObject,"UnLock").activeSelf then
-- table.insert(_data,k,k)
-- end
-- end
-- for i = 1, loopCount do
-- if _data[i]==nil then
-- return i
-- end
-- if didLen == LengthOfTable(_data) then
-- return 0
-- end
-- end
local _d = {}
for k, v in ConfigPairs(equipSignSetting) do
if v.OpenRules then
2024-09-06 10:38:56 +08:00
if v.OpenRules[1] == 1 then
if PlayerManager.level >= v.OpenRules[2] then
table.insert(_d, v.SlotPosition)
end
2024-09-06 10:38:56 +08:00
elseif v.OpenRules[1] == 2 then
if curHeroData.star >= v.OpenRules[2] then
table.insert(_d, v.SlotPosition)
end
end
2020-05-09 13:31:21 +08:00
end
end
2024-09-06 10:38:56 +08:00
local wearList = {}
if curHeroData.soulPrintList and #curHeroData.soulPrintList > 0 then
for k, v in pairs(curHeroData.soulPrintList) do
2024-09-06 10:38:56 +08:00
table.insert(wearList, v.position)
2020-05-09 13:31:21 +08:00
end
end
2024-09-06 10:38:56 +08:00
for i = 1, #_d do
if CheckListIsContainValue1(wearList, _d[i]) == false then
return _d[i]
2020-05-09 13:31:21 +08:00
end
end
return 0
2020-05-09 13:31:21 +08:00
end
2024-09-06 10:38:56 +08:00
2020-06-03 19:09:01 +08:00
function this.ShowRedPotDataAndSort(allData)
2024-09-06 10:38:56 +08:00
local didMaxLen, didLen, didLv, maxLv = HeroManager.GetSoulPrintLoopUIMaxData(curHeroData)
if curHeroData.soulPrintList and #curHeroData.soulPrintList >= didLen then
table.sort(allData, function(a, b)
if equipConfig[a.id].Quality == equipConfig[b.id].Quality then
2020-06-30 18:59:44 +08:00
return a.id > b.id
else
2024-09-06 10:38:56 +08:00
return equipConfig[a.id].Quality > equipConfig[b.id].Quality
2020-06-30 18:59:44 +08:00
end
end)
2024-09-06 10:38:56 +08:00
return
2020-06-03 19:09:01 +08:00
end
2020-07-01 10:54:39 +08:00
2024-09-06 10:38:56 +08:00
local allUpSoulPrint = {} --所有已上魂印
2020-06-03 19:09:01 +08:00
if curHeroData.soulPrintList then
for i = 1, #curHeroData.soulPrintList do
allUpSoulPrint[curHeroData.soulPrintList[i].equipId] = curHeroData.soulPrintList[i]
end
end
--LogError("allUpSoulPrint "..LengthOfTable(allUpSoulPrint).." "..#allData)
2024-09-06 10:38:56 +08:00
local haveRedPointSid = {} --所有已标记红点魂印
2020-07-01 10:54:39 +08:00
2024-09-06 10:38:56 +08:00
local temp = SoulPrintManager.GetAllSoulPrint(true, curHeroData.id, curHeroData.dynamicId)
local limitSoulPrint = {}
2020-07-01 10:54:39 +08:00
for i = 1, #temp do
if not limitSoulPrint[temp[i].id] and equipConfig[temp[i].id].limit == 1 and temp[i].upHero ~= "" then
limitSoulPrint[temp[i].id] = temp[i].id
end
end
2020-06-03 19:09:01 +08:00
for i = 1, #allData do
2020-07-01 10:54:39 +08:00
--这个英雄没有装备这个魂印,并且可以装备,并且不在haveRedPointSid列表里
2024-09-06 10:38:56 +08:00
if not allUpSoulPrint[allData[i].id] and equipConfig[allData[i].id].Range and equipConfig[allData[i].id].Range[1] == 0 and allData[i].upHero == "" and not haveRedPointSid[allData[i].id] then
allData[i].isShowRedPot = 1 --有空位可以穿戴
2020-06-03 19:09:01 +08:00
haveRedPointSid[allData[i].id] = allData[i].id
else
allData[i].isShowRedPot = 0
end
2020-06-30 18:59:44 +08:00
2020-06-03 19:09:01 +08:00
local isHaveCurHeroid = false
if equipConfig[allData[i].id].Range then
for j = 1, #equipConfig[allData[i].id].Range do
local heroId = equipConfig[allData[i].id].Range[j]
if curHeroData.id == heroId then
isHaveCurHeroid = true
end
end
end
2024-09-06 10:38:56 +08:00
if not allUpSoulPrint[allData[i].id] and isHaveCurHeroid and allData[i].upHero == "" and not haveRedPointSid[allData[i].id] then
allData[i].isShowRedPot = 1 --有空位可以穿戴
2020-06-03 19:09:01 +08:00
haveRedPointSid[allData[i].id] = allData[i].id
end
2020-07-01 10:54:39 +08:00
if limitSoulPrint[allData[i].id] then
allData[i].isShowRedPot = 0
2024-09-06 10:38:56 +08:00
end
2020-06-03 19:09:01 +08:00
end
2024-09-06 10:38:56 +08:00
table.sort(allData, function(a, b)
2020-06-30 18:59:44 +08:00
if a.isShowRedPot > b.isShowRedPot then
2024-09-06 10:38:56 +08:00
return true
elseif a.isShowRedPot == b.isShowRedPot then
2020-06-03 19:09:01 +08:00
if equipConfig[a.id].Quality == equipConfig[b.id].Quality then
return a.id > b.id
2024-09-06 10:38:56 +08:00
else
return equipConfig[a.id].Quality > equipConfig[b.id].Quality
end
2020-06-03 19:09:01 +08:00
else
2020-06-30 18:59:44 +08:00
return false
2020-06-03 19:09:01 +08:00
end
end)
end
2020-06-13 11:47:13 +08:00
--获取当前英雄是否已装备该魂印
function this.GetCurHeroSoulPrintState(id)
2024-09-06 10:38:56 +08:00
for k = 1, #curHeroData.soulPrintList do
local _id = curHeroData.soulPrintList[k].equipId
if _id == id then
2020-06-30 18:59:44 +08:00
return true
end
2020-06-13 11:47:13 +08:00
end
return false
end
2020-06-30 18:59:44 +08:00
2024-09-06 10:38:56 +08:00
return SoulPrintPanel