PGRData/Script/matrix/xui/xuiequip/XUiEquipStrengthenV2P6.lua

784 lines
29 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
local XUiEquipStrengthenV2P6 = XLuaUiManager.Register(XLuaUi, "UiEquipStrengthenV2P6")
local XEquipLevelUpConsume = require("XEntity/XEquip/XEquipLevelUpConsume")
local XUiGridCostItem = require("XUi/XUiEquipBreakThrough/XUiGridCostItem")
local XUiGridEquipReplaceAttr = require("XUi/XUiEquipReplaceNew/XUiGridEquipReplaceAttr")
local TIP_COLOR = XUiHelper.Hexcolor2Color("EE2323FF") --文本警示色
local ToInt = XMath.ToInt
local SELECT = CS.UiButtonState.Select
local NORMAL = CS.UiButtonState.Normal
function XUiEquipStrengthenV2P6:OnAwake()
-- 强化消耗范围复选框勾选除了【5星】外的所有素材种类
self.BtnSelectDic = {
TgDaoJu = true,
Tg3Xing = true,
Tg4Xing = true,
Tg5Xing = false,
}
for btnName, isSelect in pairs(self.BtnSelectDic) do
local state = isSelect and SELECT or NORMAL
local btn = self[btnName]
btn:SetButtonState(state)
end
self.GridCostItem.gameObject:SetActiveEx(false)
self.Slider.value = 0
self.GridCostItems = {}
self:SetButtonCallBack()
end
function XUiEquipStrengthenV2P6:OnStart(parent)
self.Parent = parent
end
function XUiEquipStrengthenV2P6:OnEnable()
self.EquipId = self.Parent.EquipId
self.TemplateId = XMVCA:GetAgency(ModuleId.XEquip):GetEquipTemplateId(self.EquipId)
self.MaxLevelUnit = XDataCenter.EquipManager.GetEquipMaxLevelUnit(self.TemplateId)
self.MaxBreakthrough = self._Control:GetEquipMaxBreakthrough(self.TemplateId)
self:InitSliderBg()
self:UpdateView()
end
function XUiEquipStrengthenV2P6:OnGetEvents()
return {
XEventId.EVENT_EQUIP_QUICK_STRENGTHEN_NOTYFY,
XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XDataCenter.ItemManager.ItemId.Coin
}
end
function XUiEquipStrengthenV2P6:OnNotify(evt, ...)
local args = {...}
if evt == XEventId.EVENT_EQUIP_QUICK_STRENGTHEN_NOTYFY then
self:UpdateView()
elseif evt == XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XDataCenter.ItemManager.ItemId.Coin then
self:UpdateCostMoney()
self:UpdateLevel()
end
end
function XUiEquipStrengthenV2P6:SetButtonCallBack()
self:RegisterClickEvent(self.BtnPreview, self.OnClickBtnPreview)
self:RegisterClickEvent(self.BtnGetMaterial, self.OnClickBtnGetMaterial)
self:RegisterClickEvent(self.BtnStrengthen, self.OnClickBtnStrengthen)
self:RegisterClickEvent(self.BtnAdd, self.OnClickBtnAdd)
self:RegisterClickEvent(self.BtnSub, self.OnClickBtnSub)
self:RegisterClickEvent(self.BtnMax, self.OnClickBtnMax)
self.Slider.onValueChanged:AddListener(handler(self, self.OnSliderValueChanged))
self:RegisterClickEvent(self.TgDaoJu, function() self:OnClickTag("TgDaoJu") end)
self:RegisterClickEvent(self.Tg3Xing, function() self:OnClickTag("Tg3Xing") end)
self:RegisterClickEvent(self.Tg4Xing, function() self:OnClickTag("Tg4Xing") end)
self:RegisterClickEvent(self.Tg5Xing, function() self:OnClickTag("Tg5Xing") end)
end
-- 设置滑动条
function XUiEquipStrengthenV2P6:SetSliderValue(value)
if value < self.MinLevelUnit or value > self.MaxLevelUnit then
return
end
local isSame = self.TargetLevelUnit == value
self.Slider.value = value
if isSame then
self:OnSliderValueChanged()
end
end
-- 预览
function XUiEquipStrengthenV2P6:OnClickBtnPreview()
if #self.AllConsumeItems == 0 then
XUiManager.TipText("EquipStrengthenNoItemTips")
return
end
local cloneCosumes = XTool.Clone(self.AllConsumeItems)
XLuaUiManager.Open("UiEquipStrengthenConsumptionV2P6", self.EquipId, cloneCosumes, function(consumes, breakthrough, level, addExp, costMoney, operations, showExpOverflowConfirm)
self:OnCosumesChange(consumes, breakthrough, level, addExp, costMoney, operations, showExpOverflowConfirm)
end)
end
function XUiEquipStrengthenV2P6:OnClickBtnGetMaterial()
local skipIds = XDataCenter.EquipManager.GetEquipEatSkipIds(XEnumConst.EQUIP.EAT_TYPE.EQUIP, self.EquipId)
XLuaUiManager.Open("UiEquipStrengthenSkip", skipIds)
end
function XUiEquipStrengthenV2P6:OnClickBtnStrengthen()
--未选择目标等级
if not self.Operations or #self.Operations == 0 then
XUiManager.TipText("EquipMultiStrengthenNotSelectLevel")
return
end
--未达到突破条件
if self.TargetBreakthrough ~= 0 and not self.ReachBreakCondition then
XUiManager.TipMsg(self.ConditionDesc)
return
end
--强化/突破素材不足
if not self.CanBreakThrough or not self.CanLevelUp then
XUiManager.TipText("EquipMultiStrengthenItemNotEnough")
return
end
--货币不足
if
not XDataCenter.ItemManager.DoNotEnoughBuyAsset(
XDataCenter.ItemManager.ItemId.Coin,
self.CostMoney,
1,
function()
self:OnClickBtnStrengthen()
end,
"EquipMultiStrengthenCoinNotEnough"
)
then
return
end
if XLuaUiManager.IsUiShow("UiEquipCultureConfirm") then
return
end
self:OpenConsumeStarConfirm()
end
-- 二次确认 消耗装备星级太高
function XUiEquipStrengthenV2P6:OpenConsumeStarConfirm()
local needComfirm = false
for _, operation in ipairs(self.Operations) do
for equipId in pairs(operation.UseEquipIdDic) do
local equipTemplateId = XMVCA:GetAgency(ModuleId.XEquip):GetEquipTemplateId(equipId)
local star = XMVCA:GetAgency(ModuleId.XEquip):GetEquipStar(equipTemplateId)
if star >= XEnumConst.EQUIP.CAN_NOT_AUTO_EAT_STAR then
needComfirm = true
break
end
end
end
if needComfirm then
local title = XUiHelper.GetText("EquipStrengthenPreciousTipTitle")
local content = XUiHelper.GetText("EquipStrengthenPreciousTipContent")
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, nil, function()
self:OpenkExpOverflowConfirm()
end)
else
self:OpenkExpOverflowConfirm()
end
end
-- 二次确认 经验溢出
function XUiEquipStrengthenV2P6:OpenkExpOverflowConfirm()
if self.ShowExpOverflowConfirm then
local title = XUiHelper.GetText("EquipStrengthenPreciousTipTitle")
local content = XUiHelper.GetText("EquipStrengthenExpOverflowTips")
XUiManager.DialogTip(title, content, XUiManager.DialogType.Normal, nil, function()
self:OpenUiEquipCultureConfirm()
end)
else
self:OpenUiEquipCultureConfirm()
end
end
function XUiEquipStrengthenV2P6:OpenUiEquipCultureConfirm()
XLuaUiManager.Open("UiEquipCultureConfirm", self.EquipId, self.MinLevelUnit, self.TargetLevelUnit, self.RealLevel, self.Operations)
end
function XUiEquipStrengthenV2P6:OnClickBtnAdd()
self:SetSliderValue(self.TargetLevelUnit + 1)
end
function XUiEquipStrengthenV2P6:OnClickBtnSub()
self:SetSliderValue(self.TargetLevelUnit - 1)
end
function XUiEquipStrengthenV2P6:OnClickBtnMax()
local maxTargetLevelUnit = self:GetStrengthenMaxTarget(self.EquipId, self.AllConsumeItems)
self:SetSliderValue(maxTargetLevelUnit)
end
function XUiEquipStrengthenV2P6:OnClickTag(btnName)
self.BtnSelectDic[btnName] = not self.BtnSelectDic[btnName]
local state = self.BtnSelectDic[btnName] and SELECT or NORMAL
self[btnName]:SetButtonState(state)
self[btnName].TempState = state
self:UpdateSelectConsumeType()
end
function XUiEquipStrengthenV2P6:InitSliderBg()
local star = XMVCA:GetAgency(ModuleId.XEquip):GetEquipQuality(self.TemplateId)
local sliderPath = CS.XGame.ClientConfig:GetString("EquipStrengthenProgressStar" .. star)
self.SliderBackground:SetSprite(sliderPath)
self.ImgSliderFil:SetSprite(sliderPath)
end
-- 刷新界面
function XUiEquipStrengthenV2P6:UpdateView()
local equipId = self.EquipId
local isMaxLevel = XDataCenter.EquipManager.IsMaxLevelAndBreakthrough(equipId)
if isMaxLevel then
self.Parent:Close()
return
end
local equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
local curLevelUnit = XDataCenter.EquipManager.GetEquipLevelUnit(equipId)
self.MinLevelUnit = curLevelUnit
self.TargetLevelUnit = curLevelUnit
self:UpdateSelectConsumeType()
--更新滑动条可滑动区域等级单位范围
self.Slider:SetBorderValue(self.MinLevelUnit, self.MaxLevelUnit)
--重新进入界面,滑动条都到装备当前等级处
self.Slider.minValue = 1 --最小值代表等级单位
self.Slider.maxValue = self.MaxLevelUnit --最大值代表等级单位
self.Slider.value = curLevelUnit
end
--#region 根据等级刷新预览
--滑动条变化回调
function XUiEquipStrengthenV2P6:OnSliderValueChanged()
--手动修改消耗道具,只刷新进度条,不触发事件
if self.IgnoreSliderEvent then
return
end
self.TargetLevelUnit = ToInt(self.Slider.value)
--更新消耗
self:UpdateByLevel()
end
-- 刷新选中的消耗类型
function XUiEquipStrengthenV2P6:UpdateSelectConsumeType()
local isConsumeItem = self.BtnSelectDic["TgDaoJu"] --是否消耗道具
local consumeStarDic = {} --消耗星级1-5代表装备星级
if self.BtnSelectDic["Tg3Xing"] then
consumeStarDic[1] = true
consumeStarDic[2] = true
consumeStarDic[3] = true
end
if self.BtnSelectDic["Tg4Xing"] then
consumeStarDic[4] = true
end
if self.BtnSelectDic["Tg5Xing"] then
consumeStarDic[5] = true
end
--更新可消耗列表
self.AllConsumeItems = self:GetAllConsumeItems(isConsumeItem, consumeStarDic)
table.sort(self.AllConsumeItems, self.EatOrderSort)
--通过等级刷新界面
self:UpdateByLevel()
end
--通过目标等级刷新消耗界面
function XUiEquipStrengthenV2P6:UpdateByLevel()
local equipId = self.EquipId
local targetBreakthrough, targetLevel = XDataCenter.EquipManager.ConvertToBreakThroughAndLevel(self.TemplateId, self.TargetLevelUnit)
-- 突破消耗
local breakthroughCostMoney, canBreakThrough = self:UpdateBreakthrough(targetBreakthrough)
--升级消耗
local canLevelUp, totalExp, levelUpCostMoney, realLevel, operations, showExpOverflowConfirm = self:TryMultiLevelUp(equipId, targetBreakthrough, targetLevel, self.AllConsumeItems)
-- 缓存变量
self.TargetBreakthrough = targetBreakthrough --对应突破阶段
self.TargetLevel = targetLevel
self.RealLevel = realLevel --对应突破阶段的真实等级
self.CanBreakThrough = canBreakThrough --突破素材是否足够
self.CanLevelUp = canLevelUp --升级素材是否足够
self.CostMoney = breakthroughCostMoney + levelUpCostMoney --总消耗货币
self.Operations = operations --升级/突破 消耗操作列表
self.ShowExpOverflowConfirm = showExpOverflowConfirm -- 经验溢出二次确认
self:UpdateCostMoney()
self:UpdateLevel()
self:UpdateEquipAttr()
self:UpdateCostExp(totalExp)
end
--根据传入的已排序消耗物品列表,计算出满足目标等级的最终经验及升级消耗(只计算升级消耗,不计算突破)
function XUiEquipStrengthenV2P6:TryMultiLevelUp(equipId, targetBreakthrough, targetLevel, consumes)
--是否满足消耗条件, 总经验(包含溢出), 升级总消耗货币, 实际到达等级, 记录每单次突破下升级消耗操作列表(服务端要求)
local canLevelUp, totalExp, levelUpCostMoney, realTargetLevel, operations, showExpOverflowConfirm = true, 0, 0, targetLevel, {}, false
--重置选择消耗列表
for _, consume in pairs(consumes) do
consume:Reset()
end
local templateId = XMVCA:GetAgency(ModuleId.XEquip):GetEquipTemplateId(equipId)
local equip = XDataCenter.EquipManager.GetEquip(equipId)
local curLevel = equip.Level
local curExp = equip.Exp
local tmpTargeLv, tmpMaxLv
local curBreakthrough = equip.Breakthrough
for breakthrough = curBreakthrough, targetBreakthrough do
tmpMaxLv = XDataCenter.EquipManager.GetBreakthroughLevelLimitByTemplateId(templateId, breakthrough)
if breakthrough ~= targetBreakthrough then
tmpTargeLv = tmpMaxLv
else
tmpTargeLv = targetLevel
end
--遍历时,阶段与装备当前阶段不同,装备的当前经验不参与计算
if curBreakthrough ~= breakthrough then
curExp = 0
end
local tmpTotalExp, tmpCostMoney, needExp
canLevelUp, tmpTotalExp, tmpCostMoney, needExp = self:DoSingleLevelUp(templateId, breakthrough, curLevel, curExp, tmpTargeLv, consumes, operations)
local needComfirm = self:CheckExpOverflowConfirm(breakthrough, tmpMaxLv, tmpTotalExp)
if needComfirm then
showExpOverflowConfirm = true
end
--若不是最终突破次数, 修正总经验至当前突破次数满等级所需经验, 否则检查溢出经验是否足够再次升级
if tmpTotalExp > needExp then
if breakthrough == targetBreakthrough then
--尝试用溢出经验再次升级
local level = tmpTargeLv
local overExp = tmpTotalExp - needExp
while true do
if level == tmpMaxLv then
break
end
local levelUpCfg = self._Control:GetLevelUpCfg(templateId, breakthrough, level)
overExp = overExp - levelUpCfg.Exp
if overExp < 0 then
break
end
realTargetLevel = realTargetLevel + 1
level = level + 1
end
end
end
--将本次突破操作插入操作列表
if breakthrough ~= targetBreakthrough then
table.insert(
operations,
{
OperationType = 2,
UseEquipIdDic = {},
UseItems = {}
}
)
end
totalExp = totalExp + tmpTotalExp
levelUpCostMoney = levelUpCostMoney + tmpCostMoney
curLevel = 1
curExp = 0
end
totalExp = XMath.ToInt(totalExp)
--是否满足消耗条件, 总经验(包含溢出), 升级总消耗货币, 实际到达等级, 记录每单次突破下升级消耗操作列表(服务端要求)
return canLevelUp, totalExp, levelUpCostMoney, realTargetLevel, operations, showExpOverflowConfirm
end
--单突破次数下强化到指定等级
function XUiEquipStrengthenV2P6:DoSingleLevelUp(templateId, breakthrough, curLevel, curExp, targetLevel, consumes, operations)
--是否满足升级条件(经验达到目标等级),消耗总提供经验(考虑溢出),总消耗货币, 升到指定等级总所需经验,实际可到达等级(考虑所有消耗)
local tmpCanLevelUp, tmpTotalExp, tmpCostMoney, needExp, canReachLevel = false, 0, 0, 0, 0
--升级操作记录
local operation = {
OperationType = 1,
UseEquipIdDic = {},
UseItems = {},
ConsumeInfoDic = {} --消耗信息字典
}
--先计算需要总经验
for level = curLevel, targetLevel - 1 do
local levelUpCfg = self._Control:GetLevelUpCfg(templateId, breakthrough, level)
needExp = needExp + levelUpCfg.Exp
end
needExp = needExp - curExp
--从消耗队列中顺序消耗,直至累积经验达到/超过所需总经验
for index, consume in ipairs(consumes) do
local id = consume.Id
local canEatItemCount = consume:GetLeftCount()
-- 不可被自动选取消耗
if not consume.CanAutoSelect then
goto CONTINUE_ONE
end
--检查是否已被操作过
for _, inOperation in pairs(operations) do
--上一轮操作已经吃过这个装备
if inOperation.UseEquipIdDic[id] then
goto CONTINUE_ONE
end
end
--依次消耗
for i = 1, canEatItemCount do
if tmpTotalExp >= needExp then
goto CONTINUE_ONE
end
consume:Eat()
tmpTotalExp = tmpTotalExp + consume:GetAddExp()
tmpCostMoney = tmpCostMoney + consume:GetCostMoney()
--记录消耗
local count = 0
if consume:IsEquip() then
count = 1
operation.UseEquipIdDic[id] = true
else
count = operation.UseItems[id] or 0
count = count + 1
operation.UseItems[id] = count
end
operation.ConsumeInfoDic[index] = count
end
::CONTINUE_ONE::
end
--尝试从消耗队列中顺序去除多余的消耗,直至累积经验刚好满足所需总经验
for index, consume in ipairs(consumes) do
local id = consume.Id
local hasEatItemCount --本轮强化吃掉的数量
if consume:IsEquip() then
--检查本轮是否有吃掉这个装备
if not operation.UseEquipIdDic[id] then
goto CONTINUE_TWO
end
hasEatItemCount = 1
else
--检查本轮是否有吃掉这个道具
hasEatItemCount = operation.UseItems[id]
if not hasEatItemCount then
goto CONTINUE_TWO
end
end
--依次去除消耗
while true do
if hasEatItemCount < 1 then
goto CONTINUE_TWO
end
--经验已经满足
local exp = consume:GetAddExp()
if tmpTotalExp - exp < needExp then
goto CONTINUE_TWO
end
consume:Vomit()
tmpTotalExp = tmpTotalExp - exp
tmpCostMoney = tmpCostMoney - consume:GetCostMoney()
--记录去除消耗
if consume:IsEquip() then
hasEatItemCount = 0
operation.UseEquipIdDic[consume.Id] = nil
operation.ConsumeInfoDic[index] = nil
else
hasEatItemCount = hasEatItemCount - 1
operation.UseItems[consume.Id] = hasEatItemCount
operation.ConsumeInfoDic[index] = hasEatItemCount
if hasEatItemCount < 1 then
operation.UseItems[consume.Id] = nil
operation.ConsumeInfoDic[index] = nil
end
end
end
::CONTINUE_TWO::
end
--是否满足升级条件(经验达到目标等级)
tmpCanLevelUp = tmpTotalExp >= needExp
--将本次升级操作插入操作列表
if needExp > 0 then
table.insert(operations, operation)
end
return tmpCanLevelUp, tmpTotalExp, tmpCostMoney, needExp
end
function XUiEquipStrengthenV2P6:CheckExpOverflowConfirm(breakthrough, levelLimit, allExp)
local levelCfg = self._Control:GetLevelUpCfg(self.TemplateId, breakthrough, levelLimit)
local needComfirm = (allExp - levelCfg.AllExp) > XEnumConst.EQUIP.STRENGTHEN_EXP_OVERFLOW_CONFIRM
return needComfirm
end
-- 获取强化的最高目标等级
function XUiEquipStrengthenV2P6:GetStrengthenMaxTarget(equipId, consumes)
local templateId = self.TemplateId
--装备信息
local equip = XDataCenter.EquipManager.GetEquip(equipId)
--当前等级单元
local curLevelUnit = XDataCenter.EquipManager.ConvertToLevelUnit(templateId, equip.Breakthrough, equip.Level)
--最大突破阶段
local maxBreakthrough = XDataCenter.EquipManager.GetEquipMaxBreakthrough(templateId)
--最大突破阶段的最大等级
local maxLevel = XDataCenter.EquipManager.GetBreakthroughLevelLimitByTemplateId(templateId, maxBreakthrough)
--最大等级单元
local maxLevelUnit = XDataCenter.EquipManager.ConvertToLevelUnit(templateId, maxBreakthrough, maxLevel)
--当前剩余的螺母
local leftMoney = XDataCenter.ItemManager.GetCoinsNum()
-- 检查是否能够升到对应等级
local CheckEnoughLevelUp = function(levelUnit)
local targetBreakthrough, targetLevel = XDataCenter.EquipManager.ConvertToBreakThroughAndLevel(templateId, levelUnit)
local canLevelUp, totalExp, levelUpCostMoney, realTargetLevel, operations = self:TryMultiLevelUp(equipId, targetBreakthrough, targetLevel, consumes)
-- 强化素材不足
if not canLevelUp then
return false
end
-- 消耗的总金币不足
local breakthroughCostMoney = XDataCenter.EquipManager.GetMutiBreakthroughUseMoney(equipId, targetBreakthrough)
local costMoney = breakthroughCostMoney + levelUpCostMoney
if leftMoney < costMoney then
return false
end
--突破条件
local passCondition, _ = self._Control:CheckBreakthroughCondition(templateId, targetBreakthrough)
local _, canBreakThrough = XDataCenter.EquipManager.GetMutiBreakthroughConsumeItems(equipId, targetBreakthrough)
if not (passCondition and canBreakThrough) then -- 不满足培养条件
return false
end
return true
end
-- 二分查找最高等级
local low = curLevelUnit
local high = maxLevelUnit
while(low < high)
do
local levelUnit = math.ceil((low + high) / 2)
local isEnough = CheckEnoughLevelUp(levelUnit)
if isEnough then
low = levelUnit
else
high = levelUnit - 1
end
end
return low
end
-- 根据消耗优先级排序
function XUiEquipStrengthenV2P6.EatOrderSort(consumeA, consumeB)
--提供经验从小到大
if consumeA.AddExp ~= consumeB.AddExp then
return consumeA.AddExp < consumeB.AddExp
end
--货币消耗从小到大
if consumeA.CostMoney ~= consumeB.CostMoney then
return consumeA.CostMoney < consumeB.CostMoney
end
--消耗类型(装备优先于道具)
if consumeA.Type ~= consumeB.Type then
return consumeA:IsEquip()
end
--Id从小到大
return consumeA.Id < consumeB.Id
end
--#endregion 根据等级刷新预览
--#region 根据消耗列表刷新预览
-- 手动改变消耗列表
function XUiEquipStrengthenV2P6:OnCosumesChange(consumes, breakthrough, level, addExp, levelUpCostMoney, operations, showExpOverflowConfirm)
self.AllConsumeItems = consumes
local breakthroughCostMoney, canBreakThrough = self:UpdateBreakthrough(breakthrough)
-- 缓存变量
self.TargetLevelUnit = XDataCenter.EquipManager.ConvertToLevelUnit(self.TemplateId, breakthrough, level) --目标总等级
self.TargetBreakthrough = breakthrough --对应突破阶段
self.TargetLevel = level -- 对应等级
self.RealLevel = level -- 对应突破阶段的真实等级
self.CanLevelUp = true --升级素材是否足够
self.CanBreakThrough = canBreakThrough --突破素材是否足够
self.CostMoney = levelUpCostMoney + breakthroughCostMoney
self.Operations = operations --升级/突破 消耗操作列表
self.ShowExpOverflowConfirm = showExpOverflowConfirm -- 经验溢出二次确认
self:UpdateCostMoney()
self:UpdateLevel()
self:UpdateEquipAttr()
self.IgnoreSliderEvent = true
self:SetSliderValue(self.TargetLevelUnit)
self.IgnoreSliderEvent = false
self:UpdateCostExp(addExp)
end
--#endregion 根据消耗列表刷新预览
--根据传入的消耗类型字典 返回可消耗物品/装备排序列表
function XUiEquipStrengthenV2P6:GetAllConsumeItems(isConsumeItem, consumeStarDic)
local result = {}
if isConsumeItem then
local itemIdList = XDataCenter.EquipManager.GetCanEatItemIds(self.EquipId)
for _, itemId in pairs(itemIdList) do
local obj = XEquipLevelUpConsume.New()
obj:InitItem(itemId)
table.insert(result, obj)
end
end
local CheckStar = function(equipId)
local templateId = XMVCA:GetAgency(ModuleId.XEquip):GetEquipTemplateId(equipId)
local star = XDataCenter.EquipManager.GetEquipStar(templateId)
return consumeStarDic[star] == true
end
local equipIds = XDataCenter.EquipManager.GetCanEatEquipIds(self.EquipId)
for _, equipId in pairs(equipIds) do
if CheckStar(equipId) then
-- 是否可被自动选取
local canAutoSelect = XDataCenter.EquipManager.IsEquipRecomendedToBeEat(self.EquipId, equipId, true)
local obj = XEquipLevelUpConsume.New()
obj:InitEquip(equipId, canAutoSelect)
table.insert(result, obj)
end
end
return result
end
-- 刷新等级
function XUiEquipStrengthenV2P6:UpdateLevel()
if self.ColorTxtLv == nil then
self.ColorTxtLv = self.TxtLv.color
end
--等级,突破显示
local breakThroughIcon = self._Control:GetEquipBreakThroughIcon(self.TargetBreakthrough)
self.ImgBreak:SetSprite(breakThroughIcon)
local levelLimit = XDataCenter.EquipManager.GetBreakthroughLevelLimitByTemplateId(self.TemplateId, self.TargetBreakthrough)
self.TxtLv.text = self.TargetLevel
self.TxtLvMax.text = "/" .. levelLimit
local notStrengthen = not self.IsMoneyEnough or
(self.TargetLevelUnit ~= self.MinLevelUnit and not self.CanLevelUp) or
(self.TargetBreakthrough ~= 0 and not self.CanBreakThrough)
self.TxtLv.color = notStrengthen and TIP_COLOR or self.ColorTxtLv
-- 刷新加减按钮状态
local isReach = self.TargetLevelUnit <= self.MinLevelUnit
self.BtnSub:SetDisable(isReach, not isReach)
isReach = self.TargetLevelUnit >= self.MaxLevelUnit
self.BtnAdd:SetDisable(isReach, not isReach)
end
-- 刷新属性
function XUiEquipStrengthenV2P6:UpdateEquipAttr()
local curAttrMap = XMVCA:GetAgency(ModuleId.XEquip):GetEquipAttrMap(self.EquipId)
local targetBreakthrough, targetLevel = XDataCenter.EquipManager.ConvertToBreakThroughAndLevel(self.TemplateId, self.TargetLevelUnit)
local preAttrMap = XMVCA:GetAgency(ModuleId.XEquip):GetEquipAttrMap(self.EquipId, targetBreakthrough, targetLevel)
for attrIndex, attrInfo in pairs(curAttrMap) do
local uiObj = self["PanelAttr" .. attrIndex]
uiObj:GetObject("TxtName").text = attrInfo.Name
uiObj:GetObject("TxtCurAttr").text = attrInfo.Value
local preAttrInfo = preAttrMap[attrIndex]
local isShowArrow = attrInfo.Value ~= preAttrInfo.Value
uiObj:GetObject("ImgArrow").gameObject:SetActiveEx(isShowArrow)
local txtNextAttr = uiObj:GetObject("TxtNextAttr")
txtNextAttr.gameObject:SetActiveEx(isShowArrow)
if isShowArrow then
txtNextAttr.text = preAttrInfo.Value
end
end
end
-- 刷新强化消耗的经验
function XUiEquipStrengthenV2P6:UpdateCostExp(totalExp)
if self.ColorTxtExp == nil then
self.ColorTxtExp = self.TxtExp.color
end
self.TxtExp.text = tostring(math.floor(totalExp))
self.TxtExp.color = self.CanLevelUp and self.ColorTxtExp or TIP_COLOR
end
-- 刷新突破
function XUiEquipStrengthenV2P6:UpdateBreakthrough(targetBreakthrough)
--突破需要的螺母
local breakthroughCostMoney = XDataCenter.EquipManager.GetMutiBreakthroughUseMoney(self.EquipId, targetBreakthrough)
-- 下一突破条件
local equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
local nextReach, nextDesc = self._Control:CheckBreakthroughCondition(self.TemplateId, equip.Breakthrough + 1)
-- 目标突破条件
self.ReachBreakCondition, self.ConditionDesc = self._Control:CheckBreakthroughCondition(self.TemplateId, targetBreakthrough)
-- 刷新突破条件/突破消耗
self.PanelBreachNeed.gameObject:SetActiveEx(not nextReach)
self.PanelBreachConsume.gameObject:SetActiveEx(nextReach)
if not nextReach then
self.TxtNotPass.text = nextDesc
local canBreakThrough = targetBreakthrough == equip.Breakthrough -- 当前等级不用突破
return breakthroughCostMoney, canBreakThrough
else
-- 目标突破的消耗
local consumeItems, canBreakThrough = XDataCenter.EquipManager.GetMutiBreakthroughConsumeItems(self.EquipId, targetBreakthrough)
local isEmpty = XTool.IsTableEmpty(consumeItems)
self.PanelBreakthroughConsume.gameObject:SetActiveEx(not isEmpty)
if not isEmpty then
for index, item in ipairs(consumeItems) do
local grid = self.GridCostItems[index]
if not grid then
local ui = CSObjectInstantiate(self.GridCostItem, self.PanelCostItem)
grid = XUiGridCostItem.New(self, ui)
table.insert(self.GridCostItems, grid)
end
grid:Refresh(item.Id, item.Count)
grid.GameObject:SetActiveEx(true)
end
for i = #consumeItems + 1, #self.GridCostItems do
self.GridCostItems[i].GameObject:SetActiveEx(false)
end
end
return breakthroughCostMoney, canBreakThrough
end
end
-- 刷新需要的螺母
function XUiEquipStrengthenV2P6:UpdateCostMoney()
if self.ColorTxtCost == nil then
self.ColorTxtCost = self.TxtCost.color
end
self.IsMoneyEnough = XDataCenter.ItemManager.GetCoinsNum() >= self.CostMoney
self.TxtCost.text = self.CostMoney
self.TxtCost.color = self.IsMoneyEnough and self.ColorTxtCost or TIP_COLOR
end
return XUiEquipStrengthenV2P6