forked from endernon/PGRData
370 lines
No EOL
14 KiB
Lua
370 lines
No EOL
14 KiB
Lua
local XUiGridEquip = require("XUi/XUiEquipAwarenessReplace/XUiGridEquip")
|
|
local XUiGridEquipReplaceAttr = require("XUi/XUiEquipReplaceNew/XUiGridEquipReplaceAttr")
|
|
local XUiGridResonanceSkill = require("XUi/XUiEquipResonanceSkill/XUiGridResonanceSkill")
|
|
local XUiEquipOverrunDetail = require("XUi/XUiEquipOverrun/XUiEquipOverrunDetail")
|
|
|
|
local XUiEquipReplaceNew = XLuaUiManager.Register(XLuaUi, "UiEquipReplaceNew")
|
|
|
|
function XUiEquipReplaceNew:OnAwake()
|
|
self:AutoAddListener()
|
|
self:InitComponentStatus()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnStart(charId, closecallback, notShowStrengthenBtn)
|
|
self.IsAscendOrder = false --初始降序
|
|
self.NotShowStrengthenBtn = notShowStrengthenBtn or false
|
|
self:InitViewData(charId, closecallback)
|
|
self:InitDynamicTable()
|
|
|
|
self.ImgAscend.gameObject:SetActive(self.IsAscendOrder)
|
|
self.ImgDescend.gameObject:SetActive(not self.IsAscendOrder)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnEnable()
|
|
self:UpdateView()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnDestroy()
|
|
if self.CloseCallback then
|
|
self.CloseCallback(self.CharacterId, self.ChangeEquipSuccess)
|
|
end
|
|
end
|
|
|
|
--注册监听事件
|
|
function XUiEquipReplaceNew:OnGetEvents()
|
|
return {
|
|
XEventId.EVENT_EQUIP_PUTON_NOTYFY
|
|
, XEventId.EVENT_EQUIP_LOCK_STATUS_CHANGE_NOTYFY
|
|
, XEventId.EVENT_EQUIP_RECYCLE_STATUS_CHANGE_NOTYFY
|
|
, XEventId.EVENT_EQUIP_STRENGTHEN_NOTYFY
|
|
, XEventId.EVENT_EQUIP_BREAKTHROUGH_NOTYFY
|
|
, XEventId.EVENT_EQUIP_RESONANCE_ACK_NOTYFY
|
|
, XEventId.EVENT_EQUIP_RECYCLE_NOTIFY
|
|
}
|
|
end
|
|
|
|
--处理事件监听
|
|
function XUiEquipReplaceNew:OnNotify(evt, ...)
|
|
local args = { ... }
|
|
local equipId = args[1]
|
|
|
|
if evt == XEventId.EVENT_EQUIP_PUTON_NOTYFY then
|
|
self.UsingEquipId = equipId
|
|
self:OnPutOnEquip()
|
|
elseif evt == XEventId.EVENT_EQUIP_LOCK_STATUS_CHANGE_NOTYFY
|
|
or evt == XEventId.EVENT_EQUIP_RECYCLE_STATUS_CHANGE_NOTYFY then
|
|
self:OnEquipLockStatusChange(equipId)
|
|
self:UpdateEquipGridList()
|
|
elseif evt == XEventId.EVENT_EQUIP_STRENGTHEN_NOTYFY
|
|
or evt == XEventId.EVENT_EQUIP_BREAKTHROUGH_NOTYFY
|
|
or evt == XEventId.EVENT_EQUIP_RESONANCE_ACK_NOTYFY
|
|
or evt == XEventId.EVENT_EQUIP_RECYCLE_NOTIFY
|
|
then
|
|
self:UpdateView()
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:InitComponentStatus()
|
|
self.GridEquip.gameObject:SetActive(false)
|
|
self.GridEquipReplaceAttr.gameObject:SetActive(false)
|
|
self.GridEquipReplaceAttr.gameObject:SetActive(false)
|
|
self.GridResonanceSkill.gameObject:SetActive(false)
|
|
self.AssetPanel = XUiPanelAsset.New(self, self.PanelAsset, XDataCenter.ItemManager.ItemId.FreeGem, XDataCenter.ItemManager.ItemId.ActionPoint, XDataCenter.ItemManager.ItemId.Coin)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:InitViewData(characterid, closecallback)
|
|
self.CharacterId = characterid
|
|
self.CloseCallback = closecallback
|
|
self.AttrGridList = {}
|
|
self.GridResonanceSkills = {}
|
|
self.PriorSortType = XEquipConfig.PriorSortType.Star
|
|
local equipId = XDataCenter.EquipManager.GetCharacterWearingWeaponId(self.CharacterId) --初始为角色身上的装备
|
|
self.SelectEquipId = equipId
|
|
self.UsingEquipId = equipId
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UpdateView()
|
|
self.WeaponIdList = XDataCenter.EquipManager.GetCanUseWeaponIds(self.CharacterId)
|
|
self:OnPutOnEquip()
|
|
self:SelectSortType()
|
|
self:OnSelectEquip()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:InitDynamicTable()
|
|
self.DynamicTable = XDynamicTableNormal.New(self.PanelEquipScroll)
|
|
self.DynamicTable:SetProxy(XUiGridEquip, self)
|
|
self.DynamicTable:SetDelegate(self)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnDynamicTableEvent(event, index, grid)
|
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
|
grid:InitRootUi(self)
|
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
|
local equipId = self.WeaponIdList[index]
|
|
grid:Refresh(equipId)
|
|
|
|
local isSelected = equipId == self.SelectEquipId
|
|
grid:SetSelected(isSelected)
|
|
if isSelected then
|
|
self.LastSelectGrid = grid
|
|
end
|
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
|
self.SelectEquipId = self.WeaponIdList[index]
|
|
self:OnSelectEquip()
|
|
if self.LastSelectGrid then
|
|
self.LastSelectGrid:SetSelected(false)
|
|
end
|
|
self.LastSelectGrid = grid
|
|
self.LastSelectGrid:SetSelected(true)
|
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_RELOAD_COMPLETED then
|
|
XEventManager.DispatchEvent(XEventId.EVENT_GUIDE_STEP_OPEN_EVENT)
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnPutOnEquip()
|
|
self:UpdateCompareAttr()
|
|
self:UpdateBtnEquipStatus()
|
|
self:SelectSortType()
|
|
if self.UiEquipOverrunDetail then
|
|
self.UiEquipOverrunDetail:Refresh()
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnEquipLockStatusChange(equipId)
|
|
if equipId ~= self.SelectEquipId then return end
|
|
local equip = XDataCenter.EquipManager.GetEquip(equipId)
|
|
|
|
self.BtnLock.gameObject:SetActive(equip.IsLock)
|
|
self.BtnUnlock.gameObject:SetActive(not equip.IsLock)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:SelectSortType()
|
|
XDataCenter.EquipManager.SortEquipIdListByPriorType(self.WeaponIdList, self.PriorSortType)
|
|
if self.IsAscendOrder then
|
|
XTool.ReverseList(self.WeaponIdList)
|
|
end
|
|
self:UpdateEquipGridList()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UpdateEquipGridList()
|
|
self:UsingWeaponFirstInList()
|
|
self.DynamicTable:SetDataSource(self.WeaponIdList)
|
|
self.DynamicTable:ReloadDataASync(#self.WeaponIdList > 0 and 1 or -1)
|
|
|
|
self:PlayAnimation("LeftQieHuan")
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UpdateResonanceSkills()
|
|
local skillCount = 0
|
|
|
|
local resonanceSkillNum = XDataCenter.EquipManager.GetResonanceSkillNum(self.SelectEquipId)
|
|
for pos = resonanceSkillNum, 1, -1 do
|
|
if XDataCenter.EquipManager.CheckEquipPosResonanced(self.SelectEquipId, pos) then
|
|
if not self.GridResonanceSkills[pos] then
|
|
local item = CS.UnityEngine.Object.Instantiate(self.GridResonanceSkill) -- 复制一个item
|
|
self.GridResonanceSkills[pos] = XUiGridResonanceSkill.New(item, self.SelectEquipId, pos, self.CharacterId, function(equipId, selectPos, characterId)
|
|
XLuaUiManager.Open("UiEquipResonanceSkillDetailInfo", equipId, selectPos, characterId)
|
|
end)
|
|
self.GridResonanceSkills[pos].Transform:SetParent(self.PanelSkills, false)
|
|
end
|
|
|
|
self.GridResonanceSkills[pos]:SetEquipIdAndPos(self.SelectEquipId, pos)
|
|
self.GridResonanceSkills[pos]:Refresh()
|
|
self.GridResonanceSkills[pos].GameObject:SetActive(true)
|
|
self.GridResonanceSkills[pos].Transform:SetAsFirstSibling()
|
|
|
|
skillCount = skillCount + 1
|
|
else
|
|
if self.GridResonanceSkills[pos] then
|
|
self.GridResonanceSkills[pos].GameObject:SetActive(false)
|
|
end
|
|
end
|
|
end
|
|
|
|
if skillCount == 0 then
|
|
for _, grid in pairs(self.GridResonanceSkills) do
|
|
grid.GameObject:SetActive(false)
|
|
end
|
|
end
|
|
|
|
for pos = 1, XEquipConfig.MAX_RESONANCE_SKILL_COUNT do
|
|
self["ImgBg" .. pos].gameObject:SetActive(pos > skillCount and pos <= resonanceSkillNum)
|
|
end
|
|
|
|
if resonanceSkillNum == 0 then
|
|
self.PanelResonanceSkill.gameObject:SetActive(false)
|
|
else
|
|
self.PanelResonanceSkill.gameObject:SetActive(true)
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnSelectEquip()
|
|
self:UpdateSelectEquip()
|
|
self:UpdateCompareAttr()
|
|
self:UpdateBtnEquipStatus()
|
|
self:OnEquipLockStatusChange(self.SelectEquipId)
|
|
self:UpdateResonanceSkills()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UpdateSelectEquip()
|
|
local equip = XDataCenter.EquipManager.GetEquip(self.SelectEquipId)
|
|
local weaponSkillInfo = XDataCenter.EquipManager.GetOriginWeaponSkillInfo(equip.TemplateId)
|
|
|
|
self.RImgEquipIcon:SetRawImage(XDataCenter.EquipManager.GetWeaponTypeIconPath(self.SelectEquipId))
|
|
self.TxtEquipName.text = XDataCenter.EquipManager.GetEquipName(equip.TemplateId)
|
|
self.TxtEquipLevel.text = equip.Level
|
|
self.TxtSkillDes.text = weaponSkillInfo.Description
|
|
|
|
local noSkill = not weaponSkillInfo.Description and not weaponSkillInfo.Name
|
|
self.PanelSkillDes.gameObject:SetActive(not noSkill)
|
|
|
|
for i = 1, XEquipConfig.MAX_STAR_COUNT do
|
|
if i <= XDataCenter.EquipManager.GetEquipStar(equip.TemplateId) then
|
|
self["ImgStar" .. i].gameObject:SetActive(true)
|
|
else
|
|
self["ImgStar" .. i].gameObject:SetActive(false)
|
|
end
|
|
end
|
|
|
|
-- 武器超限
|
|
local canOverrun = equip:CanOverrun()
|
|
self.PanelEquipOverrun.gameObject:SetActiveEx(canOverrun)
|
|
if canOverrun then
|
|
if not self.UiEquipOverrunDetail then
|
|
self.UiEquipOverrunDetail = XUiEquipOverrunDetail.New(self, self.OverrunDetail)
|
|
end
|
|
self.UiEquipOverrunDetail:SetEquipId(self.SelectEquipId, self.CharacterId)
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UpdateCompareAttr()
|
|
if not self.UsingEquipId or not self.SelectEquipId then return end
|
|
local curAttrMap = XDataCenter.EquipManager.GetEquipAttrMap(self.UsingEquipId)
|
|
local newAttrMap = XDataCenter.EquipManager.GetEquipAttrMap(self.SelectEquipId)
|
|
|
|
for key, _ in pairs(curAttrMap) do
|
|
local curAttrValue = curAttrMap[key] and curAttrMap[key].Value or 0
|
|
local newAttrValue = newAttrMap[key] and newAttrMap[key].Value or 0
|
|
|
|
if not self.AttrGridList[key] then
|
|
local ui = CS.UnityEngine.Object.Instantiate(self.GridEquipReplaceAttr)
|
|
self.AttrGridList[key] = XUiGridEquipReplaceAttr.New(ui, curAttrMap[key].Name)
|
|
self.AttrGridList[key].Transform:SetParent(self.PanelAttrParent, false)
|
|
end
|
|
|
|
self.AttrGridList[key]:UpdateData(curAttrValue, newAttrValue)
|
|
self.AttrGridList[key].GameObject:SetActive(true)
|
|
end
|
|
|
|
self:PlayAnimation("RightQieHuan")
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UpdateBtnEquipStatus()
|
|
if self.UsingEquipId == self.SelectEquipId then
|
|
--当前角色使用中
|
|
self.BtnTakeOn.gameObject:SetActive(false)
|
|
self.ImgEquipOn.gameObject:SetActive(true)
|
|
else
|
|
self.BtnTakeOn.gameObject:SetActive(true)
|
|
self.ImgEquipOn.gameObject:SetActive(false)
|
|
end
|
|
|
|
self.BtnStrengthen.gameObject:SetActive(not self.NotShowStrengthenBtn)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:AutoAddListener()
|
|
self:RegisterClickEvent(self.BtnTakeOn, self.OnBtnTakeOnClick)
|
|
self:RegisterClickEvent(self.BtnStrengthen, self.OnBtnStrengthenClick)
|
|
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
|
|
self:RegisterClickEvent(self.BtnMain, self.OnBtnMainClick)
|
|
self:RegisterClickEvent(self.BtnOrder, self.OnBtnOrderClick)
|
|
self:RegisterClickEvent(self.BtnLock, self.OnBtnLockClick)
|
|
self:RegisterClickEvent(self.BtnUnlock, self.OnBtnUnlockClick)
|
|
self.DrdSort.onValueChanged:AddListener(function()
|
|
self.PriorSortType = self.DrdSort.value
|
|
self:SelectSortType()
|
|
end)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnOrderClick()
|
|
self.IsAscendOrder = not self.IsAscendOrder
|
|
XTool.ReverseList(self.WeaponIdList)
|
|
self:UpdateEquipGridList()
|
|
self.ImgAscend.gameObject:SetActive(self.IsAscendOrder)
|
|
self.ImgDescend.gameObject:SetActive(not self.IsAscendOrder)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnLockClick()
|
|
XDataCenter.EquipManager.SetLock(self.SelectEquipId, false)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnUnlockClick()
|
|
XDataCenter.EquipManager.SetLock(self.SelectEquipId, true)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnStrengthenClick()
|
|
XMVCA:GetAgency(ModuleId.XEquip):OpenUiEquipDetail(self.SelectEquipId, nil, self.CharacterId)
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnTakeOnClick()
|
|
local equip = XDataCenter.EquipManager.GetEquip(self.SelectEquipId)
|
|
local characterId = equip.CharacterId
|
|
--其他角色使用中
|
|
if characterId and characterId > 0 then
|
|
--自己穿戴了专属装备
|
|
local specialCharacterId = XDataCenter.EquipManager.GetEquipSpecialCharacterId(self.UsingEquipId)
|
|
if specialCharacterId and specialCharacterId > 0 then
|
|
XUiManager.TipText("EquipWithSpecialCharacterIdCanNotBeReplaced")
|
|
return
|
|
end
|
|
|
|
local fullName = XCharacterConfigs.GetCharacterFullNameStr(characterId)
|
|
local content = CS.XTextManager.GetText("EquipReplaceTip", fullName)
|
|
XUiManager.DialogTip(CS.XTextManager.GetText("TipTitle"), content, XUiManager.DialogType.Normal, function() end, function()
|
|
XMVCA:GetAgency(ModuleId.XEquip):PutOn(self.CharacterId, self.SelectEquipId)
|
|
self.ChangeEquipSuccess = true
|
|
end)
|
|
|
|
-- 检测这个角色穿戴是否意识不匹配
|
|
elseif not equip:IsOverrunBlindMatch(self.CharacterId) then
|
|
local content = CS.XTextManager.GetText("EquipOverrunBlindNotMatchTips")
|
|
XUiManager.DialogTip(CS.XTextManager.GetText("TipTitle"), content, XUiManager.DialogType.Normal, function() end, function()
|
|
XMVCA:GetAgency(ModuleId.XEquip):PutOn(self.CharacterId, self.SelectEquipId)
|
|
self.ChangeEquipSuccess = true
|
|
end)
|
|
else
|
|
XMVCA:GetAgency(ModuleId.XEquip):PutOn(self.CharacterId, self.SelectEquipId)
|
|
self.ChangeEquipSuccess = true
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnBackClick()
|
|
self:Close()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:OnBtnMainClick()
|
|
XLuaUiManager.RunMain()
|
|
end
|
|
|
|
function XUiEquipReplaceNew:UsingWeaponFirstInList()
|
|
local usingEquipId
|
|
for index, equipId in pairs(self.WeaponIdList) do
|
|
if equipId == self.UsingEquipId then
|
|
usingEquipId = table.remove(self.WeaponIdList, index)
|
|
end
|
|
end
|
|
if usingEquipId then
|
|
table.insert(self.WeaponIdList, 1, usingEquipId)
|
|
end
|
|
end
|
|
|
|
function XUiEquipReplaceNew:GuideGetDynamicTableIndex(id)
|
|
for i, v in ipairs(self.WeaponIdList) do
|
|
local equip = XDataCenter.EquipManager.GetEquip(v)
|
|
if tostring(equip.TemplateId) == id then
|
|
return i
|
|
end
|
|
end
|
|
|
|
return -1
|
|
end |