PGRData/Script/matrix/xui/xuiequip/XUiEquipDetailChildV2P6.lua
2024-09-01 22:49:41 +02:00

830 lines
No EOL
32 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local CSXUiPlayTimelineAnimation = CS.XUiPlayTimelineAnimation
local XUiGridResonanceSkill = require("XUi/XUiEquipResonanceSkill/XUiGridResonanceSkill")
local XUiEquipDetailChildV2P6 = XLuaUiManager.Register(XLuaUi, "UiEquipDetailChildV2P6")
function XUiEquipDetailChildV2P6:OnAwake()
-- UI初始化
self.PanelTab.gameObject:SetActiveEx(false)
self.PanelPainter.gameObject:SetActiveEx(false)
self.PaneOverrun.gameObject:SetActiveEx(false)
self.PaneEquipResonance.gameObject:SetActiveEx(false)
self.PanelAwarenessResonance.gameObject:SetActiveEx(false)
self.PanelExtend.gameObject:SetActiveEx(false)
self.PanelAddEffect = self.PanelAdd.transform:Find("Effect")
self.PanelAdd2Effect = self.PanelAdd2.transform:Find("Effect")
self.GridEquipResonanceEffect1 = self.GridEquipResonance1.transform:Find("Effect")
self.GridEquipResonanceEffect2 = self.GridEquipResonance2.transform:Find("Effect")
self.GridEquipResonanceEffect3 = self.GridEquipResonance3.transform:Find("Effect")
self.GridEquipResonanceEffect1.gameObject:SetActiveEx(false)
self.GridEquipResonanceEffect2.gameObject:SetActiveEx(false)
self.GridEquipResonanceEffect3.gameObject:SetActiveEx(false)
self.OverrunBlindEffect = self.BtnOverrunBlind.transform:Find("Normal/Effect")
-- 场景初始化
local sceneRoot = self.UiSceneInfo.Transform
local root = self.UiModelGo.transform
self.PanelWeapon = root:FindTransform("PanelWeapon")
self.PanelWeaponPlane = sceneRoot:FindTransform("Plane")
self.ImgEffectOverrun = root:FindTransform("ImgEffectOverrun")
self:SetButtonCallBack()
self:InitPanelAsset()
end
--参数isPreview为true时是装备详情预览传templateId进来
--characterId只有需要判断武器共鸣特效时才传
function XUiEquipDetailChildV2P6:OnStart(equipId, isPreview, characterId, forceShowBindCharacter, childUiIndex, openUiType, isShowExtendPanel)
self.IsPreview = isPreview
self.EquipId = equipId
self.CharacterId = characterId
self.ForceShowBindCharacter = forceShowBindCharacter
self.TemplateId = isPreview and self.EquipId or XDataCenter.EquipManager.GetEquipTemplateId(equipId)
self.OpenUiType = openUiType
self.IsWeapon = XDataCenter.EquipManager.IsWeaponByTemplateId(self.TemplateId)
self.IsAwareness = XDataCenter.EquipManager.IsAwarenessByTemplateId(self.TemplateId)
if self.IsAwareness then
self.SelectAwarenessIndex = XDataCenter.EquipManager.GetEquipSite(equipId)
end
self:RegisterHelpBtn()
-- 播放扩展面板动画,动画切到最后一帧
self.IsShowExtend = isShowExtendPanel == true
local anim = self.IsShowExtend and self.AnimFold or self.AnimUnFold
anim:Play()
anim.time = anim.duration
anim:Evaluate()
anim:Stop()
if not XDataCenter.VoteManager.IsInit() then
XDataCenter.VoteManager.GetVoteGroupListRequest()
end
end
function XUiEquipDetailChildV2P6:OnEnable()
self.PanelAddEffect.gameObject:SetActiveEx(false)
self.PanelAdd2Effect.gameObject:SetActiveEx(false)
self:UpdateView()
end
function XUiEquipDetailChildV2P6:OnDestroy()
self.PanelWeaponPlane.gameObject:SetActiveEx(true)
self:ReleaseModel()
self:ReleaseLihuiTimer()
end
function XUiEquipDetailChildV2P6:OnGetEvents()
return {
XEventId.EVENT_EQUIP_LOCK_STATUS_CHANGE_NOTYFY,
XEventId.EVENT_EQUIP_RECYCLE_STATUS_CHANGE_NOTYFY,
XEventId.EVENT_EQUIP_RESONANCE_NOTYFY,
}
end
function XUiEquipDetailChildV2P6:OnNotify(evt, ...)
local args = { ... }
local equipId = args[1]
if self.IsPreview or equipId ~= self.EquipId then
return
end
if evt == XEventId.EVENT_EQUIP_LOCK_STATUS_CHANGE_NOTYFY then
self:UpdateEquipLock()
self:UpdateEquipRecycle()
elseif evt == XEventId.EVENT_EQUIP_RECYCLE_STATUS_CHANGE_NOTYFY then
self:UpdateEquipRecycle()
elseif evt == XEventId.EVENT_EQUIP_RESONANCE_NOTYFY then
XMVCA:GetAgency(ModuleId.XEquip):TipEquipOperation(nil, XUiHelper.GetText("DormTemplateSelectSuccess"))
self:UpdateEquipResonance()
local slots = args[2]
for _, pos in ipairs(slots) do
self["GridEquipResonanceEffect"..pos].gameObject:SetActiveEx(true)
end
end
end
function XUiEquipDetailChildV2P6:SetButtonCallBack()
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainClick)
self:RegisterClickEvent(self.BtnLock, self.OnBtnLockClick)
self:RegisterClickEvent(self.BtnUnlock, self.OnBtnUnlockClick)
self:RegisterClickEvent(self.BtnLaJi, self.OnBtnLaJiClick)
self:RegisterClickEvent(self.BtnUnLaJi, self.OnBtnUnLaJiClick)
self:RegisterClickEvent(self.PanelAdd, self.ShowPanelSkill)
self:RegisterClickEvent(self.PanelAdd2, self.ShowPanelExtend)
-- 强化
self:RegisterClickEvent(self.BtnStrengthen, self.OnBtnStrengthen)
-- 武器共鸣
self:RegisterClickEvent(self.GridEquipResonance1, function() self:OnBtnResonanceSkill(1) end)
self:RegisterClickEvent(self.GridEquipResonance2, function() self:OnBtnResonanceSkill(2) end)
self:RegisterClickEvent(self.GridEquipResonance3, function() self:OnBtnResonanceSkill(3) end)
self:RegisterClickEvent(self.BtnResonance, function() self:OnBtnResonanceSkill() end)
-- 武器超限
self:RegisterClickEvent(self.BtnOverrun, self.OnBtnOverrun)
self:RegisterClickEvent(self.BtnOverrunBlind, self.OnBtnOverrunClick)
self:RegisterClickEvent(self.BtnOverrunEmpty, self.OnBtnOverrunClick)
-- 意识切换
self:RegisterAwarenessSwitch()
-- 意识共鸣
self:RegisterClickEvent(self.GridAwarenessResonance1:GetObject("PanelEmptySkill"):GetObject("BtnClick"), function() self:OnBtnResonanceSkill(1) end)
self:RegisterClickEvent(self.GridAwarenessResonance2:GetObject("PanelEmptySkill"):GetObject("BtnClick"), function() self:OnBtnResonanceSkill(2) end)
self:RegisterClickEvent(self.BtnResonanceEquip1, function() self:OnBtnOverClocking(1) end)
self:RegisterClickEvent(self.BtnResonanceEquip2, function() self:OnBtnOverClocking(2) end)
end
function XUiEquipDetailChildV2P6:RegisterHelpBtn()
local keyStr = self.IsWeapon and "EquipWeapon" or "EquipAwareness"
self:BindHelpBtn(self.BtnHelp, keyStr)
end
function XUiEquipDetailChildV2P6:OnBtnBackClick()
self:Close()
end
function XUiEquipDetailChildV2P6:OnBtnMainClick()
XLuaUiManager.RunMain()
end
function XUiEquipDetailChildV2P6:OnBtnLockClick()
XDataCenter.EquipManager.SetLock(self.EquipId, false)
end
function XUiEquipDetailChildV2P6:OnBtnUnlockClick()
XDataCenter.EquipManager.SetLock(self.EquipId, true)
end
function XUiEquipDetailChildV2P6:OnBtnLaJiClick()
XDataCenter.EquipManager.EquipUpdateRecycleRequest(self.EquipId, false)
end
function XUiEquipDetailChildV2P6:OnBtnUnLaJiClick()
XDataCenter.EquipManager.EquipUpdateRecycleRequest(self.EquipId, true)
end
function XUiEquipDetailChildV2P6:OnBtnStrengthen()
if self.IsPreview then
return
end
XLuaUiManager.Open("UiEquipDetailV2P6", self.EquipId, nil, self.CharacterId, self.ForceShowBindCharacter, XEnumConst.EQUIP.UI_EQUIP_DETAIL_BTN_INDEX.STRENGTHEN)
end
function XUiEquipDetailChildV2P6:OnBtnResonanceSkill(pos)
if self.IsPreview then
return
end
local equip = XMVCA:GetAgency(ModuleId.XEquip):GetEquip(self.EquipId)
local star = XMVCA:GetAgency(ModuleId.XEquip):GetEquipQuality(equip.TemplateId)
local characterId = self.CharacterId or equip.CharacterId
-- 共鸣技能替换界面,武器且选中位置与当前角色是共鸣
if equip:IsWeapon() and pos and equip:GetResonanceBindCharacterId(pos) == characterId and characterId and characterId ~= 0 then
XLuaUiManager.Open("UiEquipResonanceSkillChangeV2P6", characterId, self.EquipId)
-- 5星武器只能共鸣一次
elseif equip:IsWeapon() and equip:GetResonanceInfo(pos) and star == XEnumConst.EQUIP.FIVE_STAR then
XLuaUiManager.Open("UiEquipDetailV2P6", self.EquipId, nil, self.CharacterId, self.ForceShowBindCharacter, XEnumConst.EQUIP.UI_EQUIP_DETAIL_BTN_INDEX.RESONANCE)
else
XLuaUiManager.Open("UiEquipDetailV2P6", self.EquipId, nil, self.CharacterId, self.ForceShowBindCharacter, XEnumConst.EQUIP.UI_EQUIP_DETAIL_BTN_INDEX.RESONANCE, nil, pos)
end
end
function XUiEquipDetailChildV2P6:OnBtnOverrun()
if self.IsPreview then
return
end
if not XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.EquipOverrun) then
local tips = XFunctionManager.GetFunctionOpenCondition(XFunctionManager.FunctionName.EquipOverrun)
XUiManager.TipError(tips)
return
end
XLuaUiManager.Open("UiEquipDetailV2P6", self.EquipId, nil, self.CharacterId, self.ForceShowBindCharacter, XEnumConst.EQUIP.UI_EQUIP_DETAIL_BTN_INDEX.OVERRUN)
end
function XUiEquipDetailChildV2P6:OnBtnOverClocking(pos)
if self.IsPreview then
return
end
local canAwake = false
for pos = 1, XEnumConst.EQUIP.AWARENESS_RESONANCE_COUNT do
if XDataCenter.EquipManager.CheckEquipCanAwake(self.EquipId, pos) then
canAwake = true
break
end
end
if not canAwake then
XUiManager.TipText("SuperAwareness")
return
end
-- 默认跳转到对应位置超频界面
local canAwake = XDataCenter.EquipManager.CheckEquipCanAwake(self.EquipId, pos)
local isAwake = XDataCenter.EquipManager.IsEquipPosAwaken(self.EquipId, pos)
if isAwake or not canAwake then
pos = nil
end
XLuaUiManager.Open("UiEquipDetailV2P6", self.EquipId, nil, self.CharacterId, self.ForceShowBindCharacter, XEnumConst.EQUIP.UI_EQUIP_DETAIL_BTN_INDEX.OVERCLOCKING, nil, pos)
end
-- 显示技能面板
function XUiEquipDetailChildV2P6:ShowPanelSkill()
self.IsShowExtend = false
self:PlayAnimation("AnimUnFold")
self.PanelAddEffect.gameObject:SetActiveEx(false)
self.PanelAdd2Effect.gameObject:SetActiveEx(true)
self.GridEquipResonanceEffect1.gameObject:SetActiveEx(false)
self.GridEquipResonanceEffect2.gameObject:SetActiveEx(false)
self.GridEquipResonanceEffect3.gameObject:SetActiveEx(false)
self.OverrunBlindEffect.gameObject:SetActiveEx(false)
end
-- 显示扩展面板
function XUiEquipDetailChildV2P6:ShowPanelExtend()
self.IsShowExtend = true
self:PlayAnimation("AnimFold")
self.PanelAddEffect.gameObject:SetActiveEx(true)
self.PanelAdd2Effect.gameObject:SetActiveEx(false)
end
function XUiEquipDetailChildV2P6:OnBtnOverrunClick()
if self.OverrunIconTips then
XUiManager.TipError(self.OverrunIconTips)
return
end
XLuaUiManager.Open("UiEquipOverrunSelect", self.EquipId, function()
self:UpdateOverrun()
self.OverrunBlindEffect.gameObject:SetActiveEx(true)
end)
end
function XUiEquipDetailChildV2P6:InitPanelAsset()
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset,
XDataCenter.ItemManager.ItemId.FreeGem,
XDataCenter.ItemManager.ItemId.ActionPoint,
XDataCenter.ItemManager.ItemId.Coin
)
end
-- 初始化武器模型/意识立绘
function XUiEquipDetailChildV2P6:InitModel()
self.PanelWeapon.gameObject:SetActiveEx(false)
self.PanelWeaponPlane.gameObject:SetActiveEx(false)
self.FxUiLihuiChuxian01.gameObject:SetActiveEx(false)
if self.IsWeapon then
self.PanelWeapon.gameObject:SetActiveEx(true)
local breakthroughTimes = not self.IsPreview and XDataCenter.EquipManager.GetBreakthroughTimes(self.EquipId) or 0
local resonanceCount = not self.IsPreview and XDataCenter.EquipManager.GetResonanceCount(self.EquipId) or 0
local modelTransformName = "UiEquipDetail"
local modelConfig = XDataCenter.EquipManager.GetWeaponModelCfg(self.TemplateId, modelTransformName, breakthroughTimes, resonanceCount)
if modelConfig then
XModelManager.LoadWeaponModel(
modelConfig.ModelId,
self.PanelWeapon,
modelConfig.TransformConfig,
modelTransformName,
nil,
{gameObject = self.GameObject, usage = XEnumConst.EQUIP.WEAPON_USAGE.SHOW, IsDragRotation = true, AntiClockwise = true},
self.PanelDrag
)
end
elseif self.IsAwareness then
self:ReleaseModel()
local breakthroughTimes = not self.IsPreview and XDataCenter.EquipManager.GetBreakthroughTimes(self.EquipId) or 0
self.Resource = CS.XResourceManager.Load(XDataCenter.EquipManager.GetEquipLiHuiPath(self.TemplateId, breakthroughTimes))
local texture = self.Resource.Asset
self.MeshLihui.sharedMaterial:SetTexture("_MainTex", texture)
self:ReleaseLihuiTimer()
self.LihuiTimer = XScheduleManager.ScheduleOnce(function()
self.FxUiLihuiChuxian01.gameObject:SetActiveEx(true)
self.LihuiTimer = nil
end,500)
end
end
-- 释放模型
function XUiEquipDetailChildV2P6:ReleaseModel()
if self.Resource then
CS.XResourceManager.Unload(self.Resource)
self.Resource = nil
end
end
-- 释放定时器
function XUiEquipDetailChildV2P6:ReleaseLihuiTimer()
if self.LihuiTimer then
XScheduleManager.UnSchedule(self.LihuiTimer)
self.LihuiTimer = nil
end
end
-- 刷新界面
function XUiEquipDetailChildV2P6:UpdateView()
self:InitModel()
self:UpdateEquipLock()
self:UpdateEquipRecycle()
self:UpdateCharacterInfo()
self:UpdateEquipInfo()
self:UpdateEquipLevel()
self:UpdateEquipBreakThrough()
self:UpdateEquipAttr()
if self.IsWeapon then
self:UpdateEquipSkillDesc()
self:UpdateEquipResonance()
self:UpdateOverrun()
self:UpdateOverrunSceneEffect()
end
if self.IsAwareness then
self:UpdateAwarenessSwitchBtn()
self:UpdatePainter()
self:UpdateSuitSkillDesc()
self:UpdateAwarenessResonance()
end
-- 刷新技能和能力扩展栏状态
local isShow = self.PaneEquipResonance.gameObject.activeSelf or self.PaneOverrun.gameObject.activeSelf or self.PanelAwarenessResonance.gameObject.activeSelf
self.PanelExtendTitle.gameObject:SetActiveEx(isShow)
if isShow then
self:UpdateExtendName()
end
if not isShow and self.IsShowExtend then
self:ShowPanelSkill()
end
end
-- 刷新锁按钮
function XUiEquipDetailChildV2P6:UpdateEquipLock()
if self.IsPreview then
self.BtnUnlock.gameObject:SetActive(false)
self.BtnLock.gameObject:SetActive(false)
return
end
local isLock = XDataCenter.EquipManager.IsLock(self.EquipId)
self.BtnUnlock.gameObject:SetActive(not isLock)
self.BtnLock.gameObject:SetActive(isLock)
end
-- 刷新回收按钮
function XUiEquipDetailChildV2P6:UpdateEquipRecycle()
if self.IsPreview then
self.BtnLaJi.gameObject:SetActive(false)
self.BtnUnLaJi.gameObject:SetActive(false)
return
end
local isCanRecycle = XDataCenter.EquipManager.IsEquipCanRecycle(self.EquipId)
local isRecycle = XDataCenter.EquipManager.IsRecycle(self.EquipId)
self.BtnLaJi.gameObject:SetActiveEx(isCanRecycle and isRecycle)
self.BtnUnLaJi.gameObject:SetActiveEx(isCanRecycle and not isRecycle)
end
-- 刷新穿戴武器信息
function XUiEquipDetailChildV2P6:UpdateCharacterInfo()
if self.IsPreview then
self.PanelCharacterInfo.gameObject:SetActiveEx(false)
return
end
local equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
local isWearing = equip:IsWearing()
self.PanelCharacterInfo.gameObject:SetActiveEx(isWearing)
if isWearing then
local icon = XDataCenter.CharacterManager.GetCharBigRoundnessNotItemHeadIcon(equip.CharacterId)
self.RImgCharHead:SetRawImage(icon)
end
end
-- 刷新武器信息
function XUiEquipDetailChildV2P6:UpdateEquipInfo()
local star = XDataCenter.EquipManager.GetEquipStar(self.TemplateId)
for i = 1, XEnumConst.EQUIP.MAX_STAR_COUNT do
self["ImgStar" .. i].gameObject:SetActiveEx(i <= star)
end
self.TxtEquipName.text = XDataCenter.EquipManager.GetEquipName(self.TemplateId)
self.TxtWeaponType.gameObject:SetActiveEx(self.IsWeapon)
if self.IsWeapon then
local equipType = XMVCA:GetAgency(ModuleId.XEquip):GetEquipType(self.TemplateId)
local weaponGroupCfg = XArchiveConfigs.GetWeaponGroupByType(equipType)
self.TxtWeaponType.text = weaponGroupCfg and weaponGroupCfg.GroupName or ""
end
end
-- 刷新武器等级
function XUiEquipDetailChildV2P6:UpdateEquipLevel()
local level, levelLimit
local equipId = self.EquipId
if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then
local character = XDataCenter.NieRManager.GetSelNieRCharacter()
level = character:GetNieRWeaponLevel()
local equipSite = XDataCenter.EquipManager.GetEquipSiteByTemplateId(self.TemplateId)
local breakTimes = character:GetNieRWeaponBreakThrough()
if equipSite and equipSite ~= XEnumConst.EQUIP.EQUIP_SITE.WEAPON then
level = character:GetNieRWaferLevel(equipId)
breakTimes = character:GetNieRWaferBreakThroughById(equipId)
end
levelLimit = XDataCenter.EquipManager.GetBreakthroughLevelLimitByTemplateId(self.TemplateId, breakTimes)
local isMaxLevel = XDataCenter.EquipManager.IsMaxLevelByTemplateId(self.TemplateId, breakTimes, level) and not XDataCenter.EquipManager.CanBreakThroughByTemplateId(equipId, breakTimes, level)
self.PanelMaxLevel.gameObject:SetActiveEx(isMaxLevel)
self.PanelMaxStrengthen.gameObject:SetActiveEx(isMaxLevel)
self.BtnStrengthen.gameObject:SetActive(not isMaxLevel)
elseif self.IsPreview then
level = 1
levelLimit = XDataCenter.EquipManager.GetBreakthroughLevelLimitByTemplateId(self.TemplateId)
self.PanelMaxLevel.gameObject:SetActive(false)
self.PanelMaxStrengthen.gameObject:SetActiveEx(false)
self.BtnStrengthen.gameObject:SetActive(false)
else
local equip = XDataCenter.EquipManager.GetEquip(equipId)
level = equip.Level
levelLimit = XDataCenter.EquipManager.GetBreakthroughLevelLimit(equipId)
local isMaxLevel = XDataCenter.EquipManager.IsMaxLevelAndBreakthrough(equipId)
self.PanelMaxLevel.gameObject:SetActive(isMaxLevel)
self.PanelMaxStrengthen.gameObject:SetActiveEx(isMaxLevel)
self.BtnStrengthen.gameObject:SetActive(not isMaxLevel)
end
self.TxtLevel.text = level
self.TxtLevel2.text = levelLimit
end
-- 刷新武器突破
function XUiEquipDetailChildV2P6:UpdateEquipBreakThrough()
if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then
local character = XDataCenter.NieRManager.GetSelNieRCharacter()
local equipSite = XDataCenter.EquipManager.GetEquipSiteByTemplateId(self.TemplateId)
local breakTimes = character:GetNieRWeaponBreakThrough()
if equipSite and equipSite ~= XEnumConst.EQUIP.EQUIP_SITE.WEAPON then
breakTimes = character:GetNieRWaferBreakThroughById(self.EquipId)
end
self:SetUiSprite(self.ImgBreak, self._Control:GetEquipBreakThroughIcon(breakTimes))
return
elseif self.IsPreview then
self:SetUiSprite(self.ImgBreak, self._Control:GetEquipBreakThroughIcon(0))
return
end
local equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
self:SetUiSprite(self.ImgBreak, self._Control:GetEquipBreakThroughIcon(equip.Breakthrough))
end
-- 刷新装备属性
function XUiEquipDetailChildV2P6:UpdateEquipAttr()
local attrMap
if self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI then
local equipLevel = XDataCenter.NieRManager.GetSelNieRCharacter():GetNieRWeaponLevel()
local equipSite = XDataCenter.EquipManager.GetEquipSiteByTemplateId(self.TemplateId)
if equipSite and equipSite ~= XEnumConst.EQUIP.EQUIP_SITE.WEAPON then
equipLevel = XDataCenter.NieRManager.GetSelNieRCharacter():GetNieRWaferLevel(self.EquipId)
end
attrMap = XDataCenter.EquipManager.GetTemplateEquipAttrMap(self.EquipId, equipLevel)
elseif self.IsPreview then
attrMap = XDataCenter.EquipManager.GetTemplateEquipAttrMap(self.EquipId)
else
attrMap = XMVCA:GetAgency(ModuleId.XEquip):GetEquipAttrMap(self.EquipId)
end
for i = 1, XEnumConst.EQUIP.MAX_ATTR_COUNT do
local attrInfo = attrMap[i]
local isShow = attrInfo ~= nil
self["PanelAttr" .. i].gameObject:SetActiveEx(isShow)
if isShow then
self["TxtName" .. i].text = attrInfo.Name
self["TxtAttr" .. i].text = attrInfo.Value
end
end
end
-- 刷新扩展按钮名称
function XUiEquipDetailChildV2P6:UpdateExtendName()
local nameKey = "EquipResonanceName"
if self.IsWeapon and self.CanOverrun then
nameKey = "EquipWeaponBtnName"
elseif self.IsAwareness and self.CanAwake then
nameKey = "EquipAwarenessBtnName"
end
local btnName = XUiHelper.GetText(nameKey)
self.PanelAdd2:SetName(btnName)
self.TxtExtendTitleNormal.text = btnName
end
--------------------#region 武器 --------------------
-- 刷新技能详情
function XUiEquipDetailChildV2P6:UpdateEquipSkillDesc()
local weaponSkillInfo = XDataCenter.EquipManager.GetOriginWeaponSkillInfo(self.TemplateId)
self.TxtSkillName.text = weaponSkillInfo.Name
self.TxtSkillDes.text = weaponSkillInfo.Description
local noWeaponSkill = not weaponSkillInfo.Name and not weaponSkillInfo.Description
self.PanelAwarenessSkillDes.gameObject:SetActiveEx(false)
self.PanelNoAwarenessSkill.gameObject:SetActiveEx(false)
self.PanelWeaponSkillDes.gameObject:SetActiveEx(not noWeaponSkill)
self.PanelNoWeaponSkill.gameObject:SetActiveEx(noWeaponSkill)
end
-- 刷新装备共鸣
function XUiEquipDetailChildV2P6:UpdateEquipResonance()
local canResonance = XDataCenter.EquipManager.CanResonanceByTemplateId(self.TemplateId) or (self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI)
self.PaneEquipResonance.gameObject:SetActive(canResonance)
if not canResonance then
return
end
for pos = 1, XEnumConst.EQUIP.WEAPON_RESONANCE_COUNT do
self:UpdateEquipResonanceSkill(pos)
end
end
-- 刷新单个装备共鸣
function XUiEquipDetailChildV2P6:UpdateEquipResonanceSkill(pos)
local isEquip = not self.IsPreview and XDataCenter.EquipManager.CheckEquipPosResonanced(self.EquipId, pos) ~= nil
local uiObj = self["GridEquipResonance" .. pos]
uiObj:GetComponent("XUiButton"):SetDisable(not isEquip)
self["GridEquipResonanceEffect"..pos].gameObject:SetActiveEx(false)
if isEquip then
if not self.ResonanceSkillDic then
self.ResonanceSkillDic = {}
end
-- 按钮每个状态对应创建一个XUiGridResonanceSkill
local stateNameList = {"Normal", "Press"}
if not self.ResonanceSkillDic[pos] then
self.ResonanceSkillDic[pos] = {}
for _, stateName in ipairs(stateNameList) do
local stateGo = uiObj:GetObject(stateName)
self.ResonanceSkillDic[pos][stateName] = XUiGridResonanceSkill.New(stateGo, self.EquipId, pos, self.CharacterId, function()
self:OnBtnResonanceSkill(pos)
end, nil, self.ForceShowBindCharacter, true)
end
end
-- 刷新所有状态的XUiGridResonanceSkill
for _, stateName in ipairs(stateNameList) do
local grid = self.ResonanceSkillDic[pos][stateName]
grid:SetEquipIdAndPos(self.EquipId, pos)
grid:Refresh()
end
end
end
-- 刷新武器超限
function XUiEquipDetailChildV2P6:UpdateOverrun()
self.OverrunIconTips = nil
local templateId = XDataCenter.EquipManager.GetEquipTemplateId(self.EquipId)
self.CanOverrun = self._Control:CanOverrunByTemplateId(templateId)
self.PaneOverrun.gameObject:SetActiveEx(self.CanOverrun)
if not self.CanOverrun then
return
end
XDataCenter.EquipManager.CheckOverrunGuide(self.EquipId)
local equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
local lv = equip:GetOverrunLevel()
local btnName = XUiHelper.GetText("EquipOverrun")
if lv > 0 then
btnName = self._Control:GetWeaponDeregulateUIName(lv)
elseif not XFunctionManager.JudgeCanOpen(XFunctionManager.FunctionName.EquipOverrun) then
btnName = XUiHelper.GetText("EquipOverrunUnlockTips")
end
self.BtnOverrun:SetName(btnName)
self.BtnOverrunBlind.gameObject:SetActiveEx(false)
self.BtnOverrunEmpty.gameObject:SetActiveEx(false)
-- 未解锁
local canBind = equip:IsOverrunCanBlindSuit()
if not canBind then
self.BtnOverrunBlind.gameObject:SetActiveEx(true)
self.BtnOverrunBlind:SetDisable(true)
self.OverrunIconTips = XUiHelper.GetText("EquipOverrunClickTips")
return
end
-- 解锁未绑定
local choseSuitId = equip:GetOverrunChoseSuit()
local isChoose = choseSuitId ~= 0
if not isChoose then
self.BtnOverrunEmpty.gameObject:SetActiveEx(true)
return
end
-- 解锁并且有绑定
self.BtnOverrunBlind.gameObject:SetActiveEx(true)
self.BtnOverrunBlind:SetDisable(false)
local stateList = { "Normal", "Press"}
local iconPath = XMVCA:GetAgency(ModuleId.XEquip):GetEquipSuitIconPath(choseSuitId)
local isMatch = equip:IsOverrunBlindMatch()
local uiObj = self.BtnOverrunBlind:GetComponent("UiObject")
for _, stateName in ipairs(stateList) do
local stateObj = uiObj:GetObject(stateName)
stateObj:GetObject("RImgSuit"):SetRawImage(iconPath)
stateObj:GetObject("ImgNotMatching").gameObject:SetActiveEx(not isMatch)
end
self.OverrunBlindEffect.gameObject:SetActiveEx(false)
end
-- 刷新超限场景特效
function XUiEquipDetailChildV2P6:UpdateOverrunSceneEffect()
self.ImgEffectOverrun.gameObject:SetActiveEx(false)
if self.IsPreview then
return
end
local equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
local level = equip:GetOverrunLevel()
if level < 1 then
return
end
self.ImgEffectOverrun.gameObject:SetActiveEx(true)
local sceneLoopEffectPath = self._Control:GetWeaponDeregulateUISceneLoopEffectPath(level)
if sceneLoopEffectPath then
self.ImgEffectOverrun:LoadPrefab(sceneLoopEffectPath)
end
end
--------------------#endregion 装备 --------------------
--------------------#region 意识 --------------------
-- 注册切换意识事件
function XUiEquipDetailChildV2P6:RegisterAwarenessSwitch()
self:RegisterClickEvent(self.BtnLeft, self.OnBtnLeft)
self:RegisterClickEvent(self.BtnRight, self.OnBtnRight)
local btns = {}
for index = 1, XEnumConst.EQUIP.WEAR_AWARENESS_COUNT do
table.insert(btns, self["BtnNumber" .. index])
end
self.BtnGridGroup:Init(btns, function(index)
self:OnClickSwitchAwareness(index)
end)
end
function XUiEquipDetailChildV2P6:OnBtnLeft()
local index = self.SelectAwarenessIndex
while(index > 1) do
index = index - 1
local canSwitch = self:CheckCanSwitchAwareness(index)
if canSwitch then
self:OnClickSwitchAwareness(index)
return
end
end
end
function XUiEquipDetailChildV2P6:OnBtnRight()
local index = self.SelectAwarenessIndex
while(index < XEnumConst.EQUIP.WEAR_AWARENESS_COUNT) do
index = index + 1
local canSwitch = self:CheckCanSwitchAwareness(index)
if canSwitch then
self:OnClickSwitchAwareness(index)
return
end
end
end
-- 点击切换意识
function XUiEquipDetailChildV2P6:OnClickSwitchAwareness(index)
if self.SelectAwarenessIndex == index then
return
end
local canSwitch = self:CheckCanSwitchAwareness(index)
if not canSwitch then
return
end
self.SelectAwarenessIndex = index
self.EquipId = XDataCenter.EquipManager.GetWearingEquipIdBySite(self.CharacterId, index)
self.TemplateId = XDataCenter.EquipManager.GetEquipTemplateId(self.EquipId)
self:UpdateView()
self:PlayAnimation("QieHuan")
end
-- 检查是否可以切换到对应位置的意识
function XUiEquipDetailChildV2P6:CheckCanSwitchAwareness(index)
local equipId = XDataCenter.EquipManager.GetWearingEquipIdBySite(self.CharacterId, index)
local canSwitch = equipId ~= nil
return canSwitch
end
-- 刷新意识切换按钮
function XUiEquipDetailChildV2P6:UpdateAwarenessSwitchBtn()
local isShow = self.CharacterId and (XDataCenter.EquipManager.GetCharacterWearingAwarenessIdCount(self.CharacterId) > 1)
and XDataCenter.EquipManager.IsEquipWearingByCharacterId(self.EquipId, self.CharacterId)
self.PanelTab.gameObject:SetActiveEx(isShow)
if not isShow then return end
local canLast = false
local canNext = false
for index = 1, XEnumConst.EQUIP.WEAR_AWARENESS_COUNT do
local canSwitch = self:CheckCanSwitchAwareness(index)
if canSwitch then
if index < self.SelectAwarenessIndex then
canLast = true
end
if index > self.SelectAwarenessIndex then
canNext = true
end
local state = index == self.SelectAwarenessIndex and CS.UiButtonState.Select or CS.UiButtonState.Normal
self["BtnNumber" .. index]:SetButtonState(state)
else
self["BtnNumber" .. index]:SetButtonState(CS.UiButtonState.Disable)
end
end
self.BtnLeft.gameObject:SetActiveEx(canLast)
self.BtnRight.gameObject:SetActiveEx(canNext)
end
-- 更新画师
function XUiEquipDetailChildV2P6:UpdatePainter()
local breakthroughTimes = self.IsPreview and 0 or XDataCenter.EquipManager.GetBreakthroughTimes(self.EquipId)
self.TxtPainter.text = XDataCenter.EquipManager.GetEquipPainterName(self.TemplateId, breakthroughTimes)
self.PanelPainter.gameObject:SetActive(true)
end
-- 刷新意识套装技能详情
function XUiEquipDetailChildV2P6:UpdateSuitSkillDesc()
local suitId = XDataCenter.EquipManager.GetSuitIdByTemplateId(self.TemplateId)
local skillDesList = XDataCenter.EquipManager.GetSuitSkillDesList(suitId)
local noSuitSkill = true
for i = 1, XEnumConst.EQUIP.SUIT_MAX_SKILL_COUNT do
if skillDesList[i * 2] then
self["TxtSkillDes" .. i].text = skillDesList[i * 2]
self["TxtPos" .. i].text = XUiHelper.GetText("EquipSuitSkillPrefix" .. i * 2)
self["TxtSkillDes" .. i].gameObject:SetActiveEx(true)
noSuitSkill = false
else
self["TxtSkillDes" .. i].gameObject:SetActiveEx(false)
end
end
self.PanelWeaponSkillDes.gameObject:SetActiveEx(false)
self.PanelNoWeaponSkill.gameObject:SetActiveEx(false)
self.PanelAwarenessSkillDes.gameObject:SetActiveEx(not noSuitSkill)
self.PanelNoAwarenessSkill.gameObject:SetActiveEx(noSuitSkill)
CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self.PanelAwarenessSkillDes:FindTransform("PaneContent"))
end
-- 刷新意识共鸣
function XUiEquipDetailChildV2P6:UpdateAwarenessResonance()
local canResonance = XDataCenter.EquipManager.CanResonanceByTemplateId(self.TemplateId) or (self.OpenUiType and self.OpenUiType == XUiConfigs.OpenUiType.NieRCharacterUI)
self.PanelAwarenessResonance.gameObject:SetActive(canResonance)
if not canResonance then
return
end
for pos = 1, XEnumConst.EQUIP.AWARENESS_RESONANCE_COUNT do
self:UpdateAwarenessResonanceSkill(pos)
end
self.CanAwake = XDataCenter.EquipManager.CheckEquipStarCanAwake(self.EquipId)
self.BtnResonanceEquip1.gameObject:SetActiveEx(self.CanAwake)
self.BtnResonanceEquip2.gameObject:SetActiveEx(self.CanAwake)
end
-- 刷新单个意识共鸣
function XUiEquipDetailChildV2P6:UpdateAwarenessResonanceSkill(pos)
local isEquip = not self.IsPreview and XDataCenter.EquipManager.CheckEquipPosResonanced(self.EquipId, pos) ~= nil
local uiObj = self["GridAwarenessResonance" .. pos]
local skillGo = uiObj:GetObject("GridResonanceSkill")
skillGo.gameObject:SetActive(isEquip)
uiObj:GetObject("PanelEmptySkill").gameObject:SetActive(not isEquip)
if isEquip then
self.ResonanceSkillDic = self.ResonanceSkillDic or {}
local grid = self.ResonanceSkillDic[pos]
if not grid then
grid = XUiGridResonanceSkill.New(skillGo, self.EquipId, pos, self.CharacterId, function()
self:OnBtnResonanceSkill(pos)
end, nil, self.ForceShowBindCharacter, true)
self.ResonanceSkillDic[pos] = grid
end
grid:SetEquipIdAndPos(self.EquipId, pos)
grid:Refresh()
end
end
--------------------#endregion 意识 --------------------
return XUiEquipDetailChildV2P6