local XUiGridCostItem = require("XUi/XUiEquipBreakThrough/XUiGridCostItem") local MAX_BREAKTHROUGH_POINT_NUM = 4 --最大突破点个数 local TIP_COLOR = XUiHelper.Hexcolor2Color("EE2323FF") --文本警示色 local ToInt = XMath.ToInt --一键培养UI local XUiEquipCulture = XLuaUiManager.Register(XLuaUi, "UiEquipCulture") function XUiEquipCulture:OnAwake() self:AutoAddListener() self.AssetPanel = XUiPanelAsset.New( self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin ) --记录文本初始颜色 self.ColorTxtCost = self.TxtCost.color self.ColorTxtExp = self.TxtExp.color self.ColorTxtLv = self.TxtLv.color self.GridCostItem.gameObject:SetActiveEx(false) self.SafeAreaContentPane = self.PanelAsset.transform.parent:GetComponent("XUiSafeAreaAdapter") end function XUiEquipCulture:OnStart(equipId) self.EquipId = equipId self.TargetLevelUnit = 1 self.GridCostItems = {} self.IsDestroy = false self:InitView() end function XUiEquipCulture:OnEnable() self:UpdateView() end function XUiEquipCulture:OnDestroy() self.IsDestroy = true end function XUiEquipCulture:OnGetEvents() return { XEventId.EVENT_EQUIP_QUICK_STRENGTHEN_NOTYFY, XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XDataCenter.ItemManager.ItemId.Coin } end function XUiEquipCulture:OnNotify(evt, ...) local args = {...} if evt == XEventId.EVENT_EQUIP_QUICK_STRENGTHEN_NOTYFY then self:UpdateView() --强化后更新可消耗道具 self:UpdateRecommendConsumeItems() elseif evt == XEventId.EVENT_ITEM_COUNT_UPDATE_PREFIX .. XDataCenter.ItemManager.ItemId.Coin then self:UpdateConsume() end end --异形屏适配 function XUiEquipCulture:SetScreenAdaptorCache() if not XTool.UObjIsNil(self.SafeAreaContentPane) then self.SafeAreaContentPane:UpdateSpecialScreenOff() end end function XUiEquipCulture:InitView() self.Initing = true self:SetScreenAdaptorCache() local equipId = self.EquipId local templateId = XDataCenter.EquipManager.GetEquipTemplateId(equipId) self.EquipId = equipId self.TemplateId = templateId self.MaxLevelUnit = XDataCenter.EquipManager.GetEquipMaxLevelUnit(templateId) self.MaxBreakthrough = XDataCenter.EquipManager.GetEquipMaxBreakthrough(templateId) self.ConsumeTypeDic = {} --消耗种类(0代表道具类型,1-5代表装备星级) --图文教程 local helpKey = XDataCenter.EquipManager.IsWeapon(equipId) and "UiEquipCultureWeapon" or "UiEquipCultureAwareness" self:BindHelpBtn(self.BtnHelp, helpKey) --名称 self.TxtName.text = XDataCenter.EquipManager.GetEquipName(templateId) --图标 self.RImgIcon:SetRawImage(XDataCenter.EquipManager.GetEquipIconPath(templateId)) --星星 local star = XDataCenter.EquipManager.GetEquipStar(templateId) for i = 1, XEquipConfig.MAX_STAR_COUNT do if self["ImgStar" .. i] then self["ImgStar" .. i].gameObject:SetActiveEx(i <= star) end end --滑动条底下突破点的位置 local maxLevelUnit = self.MaxLevelUnit local width = self.PanelBreach.rect.width local tf, posX, levelUnit for i = 1, MAX_BREAKTHROUGH_POINT_NUM do tf = self["PanelBreakPoint" .. i] if i <= self.MaxBreakthrough then levelUnit = XDataCenter.EquipManager.ConvertToLevelUnit(templateId, i) posX = width * (levelUnit - 1) / (maxLevelUnit - 1) tf.anchoredPosition = Vector2(posX, tf.anchoredPosition.y) tf.gameObject:SetActiveEx(true) else tf.gameObject:SetActiveEx(false) end end --强化消耗范围复选框(勾选除了【5星】外的所有素材种类) self.TgDaoJu.isOn = true self.Tg3Xing.isOn = true self.Tg4Xing.isOn = true self.Initing = nil end function XUiEquipCulture:UpdateView() local equipId = self.EquipId local isMaxLevel = XDataCenter.EquipManager.IsMaxLevelAndBreakthrough(equipId) if isMaxLevel then self:Close() return end self.MinLevelUnit = XDataCenter.EquipManager.GetEquipLevelUnit(equipId) --更新滑动条 local minLevelUnit = self.MinLevelUnit local maxLevelUnit = self.MaxLevelUnit self.Slider:SetBorderValue(minLevelUnit, maxLevelUnit) --可滑动区域等级单位范围 -- local targetLevelUnit = XMath.Clamp(self.TargetLevelUnit, minLevelUnit, maxLevelUnit) --重新进入界面,滑动条都到装备当前等级处 local targetLevelUnit = self.MinLevelUnit self.Slider.minValue = 1 --最小值代表等级单位 self.Slider.maxValue = maxLevelUnit --最大值代表等级单位 self.Slider.value = targetLevelUnit self.TargetLevelUnit = targetLevelUnit end function XUiEquipCulture:AutoAddListener() self.BtnMainUi.CallBack = function() XLuaUiManager.RunMain() end self.BtnBack.CallBack = handler(self, self.Close) self.BtnPreview.CallBack = handler(self, self.OnClickBtnPreview) self.BtnEvoConfirm.CallBack = handler(self, self.OnClickBtnEvoConfirm) self.BtnAdd.CallBack = function() self:SetSliderValue(self.TargetLevelUnit + 1) end self.BtnSub.CallBack = function() self:SetSliderValue(self.TargetLevelUnit - 1) end self.BtnMax.CallBack = function() -- local maxTargetLevelUnit = XDataCenter.EquipManager.GetMultiStrengthenMaxTarget(self.EquipId, self.Consumes) local maxTargetLevelUnit = XDataCenter.EquipManager.GetStrengthenMaxTarget(self.EquipId, self.Consumes) self:SetSliderValue(maxTargetLevelUnit) end self.Slider.onValueChanged:AddListener(handler(self, self.OnSliderValueChanged)) self.TgDaoJu.onValueChanged:AddListener( function() self:OnSelectConsumeType({0}, self.TgDaoJu.isOn) end ) self.Tg3Xing.onValueChanged:AddListener( function() self:OnSelectConsumeType({1, 2, 3}, self.Tg3Xing.isOn) end ) self.Tg4Xing.onValueChanged:AddListener( function() self:OnSelectConsumeType({4}, self.Tg4Xing.isOn) end ) self.Tg5Xing.onValueChanged:AddListener( function() self:OnSelectConsumeType({5}, self.Tg5Xing.isOn) end ) end --选择目标升级单位 function XUiEquipCulture:OnSliderValueChanged() self.TargetLevelUnit = ToInt(self.Slider.value) local targetLevelUnit = self.TargetLevelUnit local templateId = self.TemplateId local isReach --突破点状态(滑动覆盖后显示蓝色) for i = 1, self.MaxBreakthrough do isReach = targetLevelUnit >= XDataCenter.EquipManager.ConvertToLevelUnit(templateId, i) self["LockedImgBreach" .. i].gameObject:SetActiveEx(not isReach) self["UnlockedImgBreach" .. i].gameObject:SetActiveEx(isReach) end --等级,突破显示 local breakthrough, level = XDataCenter.EquipManager.ConvertToBreakThroughAndLevel(templateId, targetLevelUnit) local levelLimit = XDataCenter.EquipManager.GetBreakthroughLevelLimitByTemplateId(templateId, breakthrough) self.ImgBreak:SetSprite(XEquipConfig.GetEquipBreakThroughIcon(breakthrough)) self.TxtLv.text = level self.TxtLvMax.text = "/" .. levelLimit --调整按钮状态 local minLevelUnit = self.MinLevelUnit local maxLevelUnit = self.MaxLevelUnit isReach = targetLevelUnit <= minLevelUnit self.BtnSub:SetDisable(isReach, not isReach) isReach = targetLevelUnit >= maxLevelUnit self.BtnAdd:SetDisable(isReach, not isReach) --更新消耗 self:UpdateConsume() end --更新消耗 function XUiEquipCulture:UpdateConsume() if self.Initing then return end local equipId = self.EquipId local templateId = self.TemplateId local targetLevelUnit = self.TargetLevelUnit local targetBreakthrough, targetLevel = XDataCenter.EquipManager.ConvertToBreakThroughAndLevel(templateId, targetLevelUnit) local costMoney = 0 --总消耗货币 --突破条件 local tmpBreakthrough = targetBreakthrough if tmpBreakthrough == self.MaxBreakthrough then --突破次数达到上限后已经没有条件限制,但策划要求以第一次突破的条件作为默认显示 tmpBreakthrough = 0 end local passCondition, conditionDesc = XDataCenter.EquipManager.CheckBreakthroughCondition(templateId, tmpBreakthrough) local isEmpty = string.IsNilOrEmpty(conditionDesc) if not isEmpty then self.ImgPass.gameObject:SetActiveEx(passCondition) self.ImgNotPass.gameObject:SetActiveEx(not passCondition) self.TxtPass.text = conditionDesc self.TxtNotPass.text = conditionDesc end self.PanelBreachNeed.gameObject:SetActiveEx(not isEmpty) self.PanelBreachNeedEmpty.gameObject:SetActiveEx(isEmpty) --突破消耗 local breakthroughCostMoney = XDataCenter.EquipManager.GetMutiBreakthroughUseMoney(equipId, targetBreakthrough) costMoney = costMoney + breakthroughCostMoney local consumeItems, canBreakThrough = XDataCenter.EquipManager.GetMutiBreakthroughConsumeItems(equipId, targetBreakthrough) local isEmpty = XTool.IsTableEmpty(consumeItems) 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) self.GridCostItems[index] = 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 self.PanelBreachConsume.gameObject:SetActiveEx(not isEmpty) self.PanelBreachConsumeEmpty.gameObject:SetActiveEx(isEmpty) --升级消耗 local curLevelUnit = self.MinLevelUnit local canLevelUp, totalExp, levelUpCostMoney, realTargetLevel, operations = XDataCenter.EquipManager.TryMultiLevelUp(equipId, targetBreakthrough, targetLevel, self.Consumes) costMoney = costMoney + levelUpCostMoney self.TxtExp.text = totalExp --总消耗货币文本 self.TxtCost.text = costMoney --警示文本颜色 --货币不足 local moneyEnough = XDataCenter.ItemManager.GetCoinsNum() >= costMoney if not moneyEnough then self.TxtCost.color = TIP_COLOR else self.TxtCost.color = self.ColorTxtCost end --不可培养 local canDo = passCondition and canBreakThrough and moneyEnough and canLevelUp if not canDo then self.TxtLv.color = TIP_COLOR else self.TxtLv.color = self.ColorTxtLv end --强化素材不足 if not canLevelUp then self.TxtExp.color = TIP_COLOR else self.TxtExp.color = self.ColorTxtExp end --UI缓存 self.CostMoney = costMoney --总消耗货币 self.RealTargetLevel = realTargetLevel --溢出经验达到真实等级 self.CanBreakThrough = canBreakThrough --突破素材是否足够 self.CanLevelUp = canLevelUp --升级素材是否足够 self.PassCondition = passCondition --突破条件是否通过 self.ConditionDesc = conditionDesc --突破条件描述 self.Operations = operations --单次突破下升级消耗操作列表(服务端要求) end --更新可消耗列表 function XUiEquipCulture:UpdateRecommendConsumeItems() if self.IsDestroy then return end self.Consumes = XDataCenter.EquipManager.GetMutiLevelUpRecommendItems(self.EquipId, self.ConsumeTypeDic) --更新消耗 self:UpdateConsume() end function XUiEquipCulture:SetSliderValue(value) if value < self.MinLevelUnit or value > self.MaxLevelUnit then return end self.Slider.value = value end --选择消耗类型 function XUiEquipCulture:OnSelectConsumeType(consumeTypes, value) for _, consumeType in pairs(consumeTypes) do if not value then self.ConsumeTypeDic[consumeType] = nil else self.ConsumeTypeDic[consumeType] = true end end --更新可消耗列表 self:UpdateRecommendConsumeItems() end function XUiEquipCulture:OnClickBtnPreview() --未选择目标等级 if self.TargetLevelUnit == self.MinLevelUnit then XUiManager.TipText("EquipMultiStrengthenNotSelectLevel") return end --升级素材不足 if not self.CanLevelUp then local skipIds = XDataCenter.EquipManager.GetEquipSkipIds(XEquipConfig.EatType.Item, self.EquipId) XLuaUiManager.Open("UiEquipStrengthenSkip", skipIds) return end local sortedConsumes = XDataCenter.EquipManager.GetSortedConsumes(self.Consumes) XLuaUiManager.Open("UiEquipStrengthenConsumption", sortedConsumes) end function XUiEquipCulture:OnClickBtnEvoConfirm() --未选择目标等级 if self.TargetLevelUnit == self.MinLevelUnit then XUiManager.TipText("EquipMultiStrengthenNotSelectLevel") return end --未达到突破条件 if not self.PassCondition 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:OnClickBtnEvoConfirm() end, "EquipMultiStrengthenCoinNotEnough" ) then return end --打开确认培养弹窗 local confirmCb = function() local targetBreakthrough, targetLevel = XDataCenter.EquipManager.ConvertToBreakThroughAndLevel(self.TemplateId, self.TargetLevelUnit) XDataCenter.EquipManager.EquipOneKeyFeedRequest(self.EquipId, targetBreakthrough, targetLevel, self.Operations) end XLuaUiManager.Open( "UiEquipCultureConfirm", self.TemplateId, self.MinLevelUnit, self.TargetLevelUnit, self.RealTargetLevel, confirmCb ) end