local XUiGridEquip = require("XUi/XUiEquipAwarenessReplace/XUiGridEquip") local CSXTextManagerGetText = CS.XTextManager.GetText local MAX_AWARENESS_ATTR_COUNT = 2 local SKILL_DES_COLOR = { [true] = XUiHelper.Hexcolor2Color("188649ff"), [false] = XUiHelper.Hexcolor2Color("00000099") } local ATTR_COLOR = { BELOW = XUiHelper.Hexcolor2Color("d11e38ff"), EQUAL = XUiHelper.Hexcolor2Color("000000ff"), OVER = XUiHelper.Hexcolor2Color("188649ff") } local CUR_EQUIP_CLICK_POPUP_POS = { [XEquipConfig.EquipSite.Awareness.One] = CS.UnityEngine.Vector2(-230, 14), [XEquipConfig.EquipSite.Awareness.Two] = CS.UnityEngine.Vector2(-681, 14), [XEquipConfig.EquipSite.Awareness.Three] = CS.UnityEngine.Vector2(-681, 14), [XEquipConfig.EquipSite.Awareness.Four] = CS.UnityEngine.Vector2(-230, 14), [XEquipConfig.EquipSite.Awareness.Five] = CS.UnityEngine.Vector2(-681, 14), [XEquipConfig.EquipSite.Awareness.Six] = CS.UnityEngine.Vector2(-681, 14) } local XUiEquipAwarenessPopup = XLuaUiManager.Register(XLuaUi, "UiEquipAwarenessPopup") function XUiEquipAwarenessPopup:OnAwake() self:AutoAddListener() end function XUiEquipAwarenessPopup:OnStart(rootUi, HideStrengthenBtn, equipId, charaterId, hideAllBtns) self.RootUi = rootUi --子窗口在隐藏/显示时无法再次调到onstart self.InitEquipId = equipId self.InitCharacterId = charaterId self.HideStrengthenBtn = HideStrengthenBtn self.HideAllBtns = hideAllBtns self.PanelSelectRectTransform = self.PanelSelect:GetComponent("RectTransform") end function XUiEquipAwarenessPopup:OnEnable() self.EquipId = self.InitEquipId or self.RootUi.SelectEquipId self.CharacterId = self.InitCharacterId or self.RootUi.CharacterId self:Refresh() if self.RootUi.BtnClosePopup then self.RootUi.BtnClosePopup.gameObject:SetActiveEx(true) end end function XUiEquipAwarenessPopup:OnDisable() if self.RootUi.BtnClosePopup then self.RootUi.BtnClosePopup.gameObject:SetActiveEx(false) end end function XUiEquipAwarenessPopup:Refresh() local equipSite = XDataCenter.EquipManager.GetEquipSite(self.EquipId) self.UsingEquipId = XDataCenter.EquipManager.GetWearingEquipIdBySite(self.CharacterId, equipSite) self.UsingAttrMap = XDataCenter.EquipManager.GetEquipAttrMap(self.UsingEquipId) self:UpdateSelectPanel() self:UpdateUsingPanel() self:UpdateUsingPanelBtn() self:UpdateLockStatues(self.EquipId) self:UpdateLockStatues(self.UsingEquipId) self:UpdateRecycleStatues(self.EquipId) self:UpdateRecycleStatues(self.UsingEquipId) end function XUiEquipAwarenessPopup:OnGetEvents() return { XEventId.EVENT_EQUIP_PUTON_NOTYFY, XEventId.EVENT_EQUIPLIST_TAKEOFF_NOTYFY, XEventId.EVENT_EQUIP_LOCK_STATUS_CHANGE_NOTYFY, XEventId.EVENT_EQUIP_RECYCLE_STATUS_CHANGE_NOTYFY, XEventId.EVENT_EQUIP_RECYCLE_NOTIFY } end function XUiEquipAwarenessPopup:OnNotify(evt, ...) local args = {...} if evt == XEventId.EVENT_EQUIP_PUTON_NOTYFY then local equipId = args[1] if equipId == self.EquipId then self:Close() end elseif evt == XEventId.EVENT_EQUIPLIST_TAKEOFF_NOTYFY or evt == XEventId.EVENT_EQUIP_RECYCLE_NOTIFY then local equipIds = args[1] for _, equipId in pairs(equipIds) do if equipId == self.EquipId then self:Close() return end end elseif evt == XEventId.EVENT_EQUIP_LOCK_STATUS_CHANGE_NOTYFY then local equipId = args[1] if equipId ~= self.EquipId then return end self:UpdateLockStatues(equipId) self:UpdateRecycleStatues(equipId) elseif evt == XEventId.EVENT_EQUIP_RECYCLE_STATUS_CHANGE_NOTYFY then local equipId = args[1] if equipId ~= self.EquipId then return end self:UpdateRecycleStatues(equipId) end end function XUiEquipAwarenessPopup:UpdateLockStatues(equipId) if self.HideAllBtns then self.BtnLockSelect.gameObject:SetActiveEx(false) self.BtnUnlockSelect.gameObject:SetActiveEx(false) self.BtnLockUsing.gameObject:SetActiveEx(false) self.BtnUnlockUsing.gameObject:SetActiveEx(false) return end if not equipId then return end if equipId == self.EquipId then local isLock = XDataCenter.EquipManager.IsLock(equipId) self.BtnLockSelect.gameObject:SetActiveEx(isLock) self.BtnUnlockSelect.gameObject:SetActiveEx(not isLock) end end function XUiEquipAwarenessPopup:UpdateRecycleStatues(equipId) if self.HideAllBtns then self.BtnLaJiSelect.gameObject:SetActiveEx(false) self.BtnUnlaJiSelect.gameObject:SetActiveEx(false) self.BtnLaJiUsing.gameObject:SetActiveEx(false) self.BtnUnlaJiUsing.gameObject:SetActiveEx(false) return end if not equipId then return end if equipId == self.EquipId then local isCanRecycle = XDataCenter.EquipManager.IsEquipCanRecycle(equipId) local isRecycle = XDataCenter.EquipManager.IsRecycle(equipId) self.BtnLaJiSelect.gameObject:SetActiveEx(isCanRecycle and isRecycle) self.BtnUnlaJiSelect.gameObject:SetActiveEx(isCanRecycle and not isRecycle) end end function XUiEquipAwarenessPopup:UpdateSelectPanel() if not self.SelectEquipGrid then self.SelectEquipGrid = XUiGridEquip.New(self.GridEquipSelect, self, nil, true) self.SelectEquipGrid:InitRootUi(self) end self.SelectEquipGrid:Refresh(self.EquipId) local equip = XDataCenter.EquipManager.GetEquip(self.EquipId) self.TxtNameA.text = XDataCenter.EquipManager.GetEquipName(equip.TemplateId) local attrCount = 1 local attrMap = XDataCenter.EquipManager.GetEquipAttrMap(self.EquipId) for attrIndex, attrInfo in pairs(attrMap) do if attrCount > MAX_AWARENESS_ATTR_COUNT then break end local usingAttr = self.UsingAttrMap[attrIndex] local usingAttrValue = usingAttr and usingAttr.Value or 0 local selectAttrValue = attrInfo.Value if selectAttrValue > usingAttrValue then self["TxtSelectAttrValue" .. attrCount].color = ATTR_COLOR.OVER self["ImgArrowUpSelect" .. attrCount].gameObject:SetActiveEx(true) self["ImgArrowDownSelect" .. attrCount].gameObject:SetActiveEx(false) elseif selectAttrValue == usingAttrValue then self["TxtSelectAttrValue" .. attrCount].color = ATTR_COLOR.EQUAL self["ImgArrowUpSelect" .. attrCount].gameObject:SetActiveEx(false) self["ImgArrowDownSelect" .. attrCount].gameObject:SetActiveEx(false) else self["TxtSelectAttrValue" .. attrCount].color = ATTR_COLOR.BELOW self["ImgArrowUpSelect" .. attrCount].gameObject:SetActiveEx(false) self["ImgArrowDownSelect" .. attrCount].gameObject:SetActiveEx(true) end self["TxtSelectAttrName" .. attrCount].text = attrInfo.Name self["TxtSelectAttrValue" .. attrCount].text = selectAttrValue self["PanelSelectAttr" .. attrCount].gameObject:SetActiveEx(true) attrCount = attrCount + 1 end for i = attrCount, MAX_AWARENESS_ATTR_COUNT do self["PanelSelectAttr" .. i].gameObject:SetActiveEx(false) end --是否激活颜色不同 local suitId = XDataCenter.EquipManager.GetSuitId(equip.Id) local activeEquipsCount = XDataCenter.EquipManager.GetActiveSuitEquipsCount(self.CharacterId, suitId) local isOverrun = self:IsOverrun(suitId, self.CharacterId) local skillDesList = XDataCenter.EquipManager.GetSuitActiveSkillDesList(suitId, activeEquipsCount, isOverrun, isOverrun) for i = 1, XEquipConfig.MAX_SUIT_SKILL_COUNT do local componentText = self["TxtSkillDesA" .. i] if not skillDesList[i] then componentText.gameObject:SetActiveEx(false) else local color = SKILL_DES_COLOR[skillDesList[i].IsActive] componentText.text = skillDesList[i].SkillDes componentText.gameObject:SetActiveEx(true) componentText.color = color self["TxtPosA" .. i].color = color end end --修正弹窗位置 if self.RootUi.NeedFixPopUpPos and (not self.UsingEquipId or self.UsingEquipId == self.EquipId) then local equipSite = XDataCenter.EquipManager.GetEquipSite(self.EquipId) self.PanelSelectRectTransform.anchoredPosition = CUR_EQUIP_CLICK_POPUP_POS[equipSite] else self.PanelSelectRectTransform.anchoredPosition = CUR_EQUIP_CLICK_POPUP_POS[XEquipConfig.EquipSite.Awareness.One] end self.BtnStrengthen.gameObject:SetActiveEx(not self.HideStrengthenBtn and not self.HideAllBtns) CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self.PanelContentA) end function XUiEquipAwarenessPopup:UpdateUsingPanel() if not self.UsingEquipId or self.UsingEquipId == self.EquipId then self.PanelUsing.gameObject:SetActiveEx(false) return end if not self.UsingEquipGrid then self.UsingEquipGrid = XUiGridEquip.New(self.GridEquipUsing, self, nil, true) self.UsingEquipGrid:InitRootUi(self) end self.UsingEquipGrid:Refresh(self.UsingEquipId) local equip = XDataCenter.EquipManager.GetEquip(self.UsingEquipId) self.TxtName.text = XDataCenter.EquipManager.GetEquipName(equip.TemplateId) local attrCount = 1 local attrMap = self.UsingAttrMap for _, attrInfo in pairs(attrMap) do if attrCount > MAX_AWARENESS_ATTR_COUNT then break end self["TxtUsingAttrName" .. attrCount].text = attrInfo.Name self["TxtUsingAttrValue" .. attrCount].text = attrInfo.Value self["PanelUsingAttr" .. attrCount].gameObject:SetActiveEx(true) attrCount = attrCount + 1 end for i = attrCount, MAX_AWARENESS_ATTR_COUNT do self["PanelUsingAttr" .. i].gameObject:SetActiveEx(false) end --是否激活颜色不同 local suitId = XDataCenter.EquipManager.GetSuitId(equip.Id) local activeEquipsCount = XDataCenter.EquipManager.GetActiveSuitEquipsCount(self.CharacterId, suitId) local isOverrun = self:IsOverrun(suitId, self.CharacterId) local skillDesList = XDataCenter.EquipManager.GetSuitActiveSkillDesList(suitId, activeEquipsCount, isOverrun, isOverrun) for i = 1, XEquipConfig.MAX_SUIT_SKILL_COUNT do local componentText = self["TxtSkillDes" .. i] if not skillDesList[i] then componentText.gameObject:SetActiveEx(false) else local color = SKILL_DES_COLOR[skillDesList[i].IsActive] componentText.text = skillDesList[i].SkillDes componentText.gameObject:SetActiveEx(true) componentText.color = color self["TxtPos" .. i].color = color end end --去掉穿戴中装备的锁按钮 self.BtnLockUsing.gameObject:SetActiveEx(false) self.BtnUnlockUsing.gameObject:SetActiveEx(false) self.BtnLaJiUsing.gameObject:SetActiveEx(false) self.BtnUnlaJiUsing.gameObject:SetActiveEx(false) self.PanelUsing.gameObject:SetActiveEx(true) CS.UnityEngine.UI.LayoutRebuilder.ForceRebuildLayoutImmediate(self.PanelContent) end function XUiEquipAwarenessPopup:UpdateUsingPanelBtn() if self.HideAllBtns then self.BtnPutOn.gameObject:SetActiveEx(false) self.BtnTakeOff.gameObject:SetActiveEx(false) return end if self.UsingEquipId and self.UsingEquipId == self.EquipId then self.BtnPutOn.gameObject:SetActiveEx(false) self.BtnTakeOff.gameObject:SetActiveEx(true) else self.BtnPutOn.gameObject:SetActiveEx(true) self.BtnTakeOff.gameObject:SetActiveEx(false) end end function XUiEquipAwarenessPopup:AutoAddListener() self:RegisterClickEvent(self.BtnStrengthen, self.OnBtnStrengthenClick) self:RegisterClickEvent(self.BtnPutOn, self.OnBtnPutOnClick) self:RegisterClickEvent(self.BtnTakeOff, self.OnBtnTakeOffClick) self:RegisterClickEvent(self.BtnLockUsing, self.OnBtnLockUsingClick) self:RegisterClickEvent(self.BtnUnlockUsing, self.OnBtnUnlockUsingClick) self:RegisterClickEvent(self.BtnLockSelect, self.OnBtnLockSelectClick) self:RegisterClickEvent(self.BtnUnlockSelect, self.OnBtnUnlockSelectClick) self:RegisterClickEvent(self.BtnLaJiUsing, self.OnBtnLaJiUsingClick) self:RegisterClickEvent(self.BtnUnlaJiUsing, self.OnBtnUnlaJiUsingClick) self:RegisterClickEvent(self.BtnLaJiSelect, self.OnBtnLaJiSelectClick) self:RegisterClickEvent(self.BtnUnlaJiSelect, self.OnBtnUnlaJiSelectClick) self:RegisterClickEvent(self.BtnClose, self.Close) end function XUiEquipAwarenessPopup:OnBtnLaJiSelectClick() XDataCenter.EquipManager.EquipUpdateRecycleRequest(self.EquipId, false) end function XUiEquipAwarenessPopup:OnBtnUnlaJiSelectClick() XDataCenter.EquipManager.EquipUpdateRecycleRequest(self.EquipId, true) end function XUiEquipAwarenessPopup:OnBtnLaJiUsingClick() XDataCenter.EquipManager.EquipUpdateRecycleRequest(self.UsingEquipId, false) end function XUiEquipAwarenessPopup:OnBtnUnlaJiUsingClick() XDataCenter.EquipManager.EquipUpdateRecycleRequest(self.UsingEquipId, true) end function XUiEquipAwarenessPopup:OnBtnUnlockSelectClick() XDataCenter.EquipManager.SetLock(self.EquipId, true) end function XUiEquipAwarenessPopup:OnBtnLockSelectClick() XDataCenter.EquipManager.SetLock(self.EquipId, false) end function XUiEquipAwarenessPopup:OnBtnLockUsingClick() XDataCenter.EquipManager.SetLock(self.UsingEquipId, false) end function XUiEquipAwarenessPopup:OnBtnUnlockUsingClick() XDataCenter.EquipManager.SetLock(self.UsingEquipId, true) end function XUiEquipAwarenessPopup:OnBtnStrengthenClick() XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipDetail(self.EquipId, nil, self.CharacterId) self:Close() end function XUiEquipAwarenessPopup:OnBtnPutOnClick() local characterId = self.CharacterId local equipId = self.EquipId local wearingCharacterId = XDataCenter.EquipManager.GetEquipWearingCharacterId(equipId) if wearingCharacterId and wearingCharacterId > 0 then local fullName = XCharacterConfigs.GetCharacterFullNameStr(wearingCharacterId) local content = CSXTextManagerGetText("EquipAwarenessReplaceTip", fullName) XUiManager.DialogTip( CSXTextManagerGetText("TipTitle"), content, XUiManager.DialogType.Normal, function() end, function() XMVCA:GetAgency(ModuleId.XEquip):PutOn(characterId, equipId) end ) else XMVCA:GetAgency(ModuleId.XEquip):PutOn(characterId, equipId) end end function XUiEquipAwarenessPopup:OnBtnTakeOffClick() XMVCA:GetAgency(ModuleId.XEquip):TakeOff({self.EquipId}) end function XUiEquipAwarenessPopup:IsOverrun(suitId, characterId) if characterId then local usingWeaponId = XDataCenter.EquipManager.GetCharacterWearingWeaponId(characterId) if usingWeaponId ~= 0 then local usingEquip = XDataCenter.EquipManager.GetEquip(usingWeaponId) local choseSuit = usingEquip:GetOverrunChoseSuit() return choseSuit == suitId end end return false end