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

399 lines
15 KiB
Lua

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