forked from endernon/PGRData
319 lines
12 KiB
Lua
319 lines
12 KiB
Lua
|
local XUiEquipOverrunSelect = XLuaUiManager.Register(XLuaUi, "UiEquipOverrunSelect")
|
|||
|
local XUiEquipOverrunSelectGrid = require("XUi/XUiEquipOverrun/XUiEquipOverrunSelectGrid")
|
|||
|
local CSInstantiate = CS.UnityEngine.Object.Instantiate
|
|||
|
local CanNotBuyColor = CS.XGame.ClientConfig:GetString("ActivityShopItemTextCanNotBuyColor")
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnAwake()
|
|||
|
self.GridSuitSimple.gameObject:SetActiveEx(false)
|
|||
|
self.PanelActive.gameObject:SetActiveEx(false)
|
|||
|
self.PanelNotActive.gameObject:SetActiveEx(false)
|
|||
|
self.ActiveGoList = {}
|
|||
|
self.NotActiveGoList = {}
|
|||
|
|
|||
|
self:SetButtonCallBack()
|
|||
|
self:InitDynamicTable()
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnStart(equipId, selectCallBack, isPreview)
|
|||
|
self.EquipId = equipId
|
|||
|
self.SelectCallBack = selectCallBack
|
|||
|
self.IsPreview = isPreview == true
|
|||
|
self.Equip = XDataCenter.EquipManager.GetEquip(self.EquipId)
|
|||
|
self.LastSelectSuitId = self.Equip:GetOverrunChoseSuit()
|
|||
|
self.CurSelectSuitId = self.LastSelectSuitId
|
|||
|
self:Refresh()
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnEnable()
|
|||
|
self:RefreshCost()
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:SetButtonCallBack()
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnClose, self.Close)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnTanchuangClose, self.Close)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnActive, self.OnBtnActive)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.BtnChange, self.OnBtnChange)
|
|||
|
XUiHelper.RegisterClickEvent(self, self.RImgSpendIcon, self.OnBtnRImgSpendIcon)
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnBtnActive()
|
|||
|
if not self.CanActive then
|
|||
|
XUiManager.TipText("PokemonUpgradeItemNotEnough")
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
-- 二次确认
|
|||
|
local activePos
|
|||
|
for _, skillInfo in ipairs(self.SkillInfoList) do
|
|||
|
if skillInfo.IsActiveByOverrun then
|
|||
|
activePos = skillInfo.Pos
|
|||
|
end
|
|||
|
end
|
|||
|
local suitName = XMVCA:GetAgency(ModuleId.XEquip):GetEquipSuitName(self.CurSelectSuitId)
|
|||
|
local content = activePos and XUiHelper.GetText("EquipOverrunActiveEffectTips1", activePos, suitName) or XUiHelper.GetText("EquipOverrunActiveEffectTips2", suitName)
|
|||
|
XUiManager.DialogTip(nil, content, XUiManager.DialogType.Normal, nil, function()
|
|||
|
XMVCA:GetAgency(ModuleId.XEquip):EquipWeaponActiveOverrunSuitRequest(self.EquipId, self.CurSelectSuitId, function()
|
|||
|
self:OnBtnChange()
|
|||
|
end)
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnBtnChange()
|
|||
|
if self.SelectSuitData.Id == self.LastSelectSuitId then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
XMVCA:GetAgency(ModuleId.XEquip):EquipWeaponChoseOverrunSuitRequest(self.EquipId, self.CurSelectSuitId, function()
|
|||
|
local tips = XUiHelper.GetText("DormTemplateSelectSuccess")
|
|||
|
XMVCA:GetAgency(ModuleId.XEquip):TipEquipOperation(nil, tips)
|
|||
|
self.SelectCallBack()
|
|||
|
self:Close()
|
|||
|
end)
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnBtnRImgSpendIcon()
|
|||
|
local overrunSuitCfg = XEquipConfig.GetWeaponOverrunSuitCfgByTemplateId(self.Equip.TemplateId)
|
|||
|
XLuaUiManager.Open("UiTip", overrunSuitCfg.ActiveSuitItemId)
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新意识列表
|
|||
|
function XUiEquipOverrunSelect:Refresh()
|
|||
|
self.TxtTitle.gameObject:SetActiveEx(not self.IsPreview)
|
|||
|
self.TxtPreviewTitle.gameObject:SetActiveEx(self.IsPreview)
|
|||
|
|
|||
|
self.SuitDataList = self:GetSuitDataList()
|
|||
|
local suitData = self.SuitDataList[1]
|
|||
|
self.CurSelectSuitId = suitData.Id
|
|||
|
self.DynamicTable:SetDataSource(self.SuitDataList)
|
|||
|
self.DynamicTable:ReloadDataASync(1)
|
|||
|
|
|||
|
self:RefreshSuitDetail(suitData)
|
|||
|
end
|
|||
|
|
|||
|
-- 意识激活回调
|
|||
|
function XUiEquipOverrunSelect:OnActiveSuit()
|
|||
|
self.SuitDataList = self:GetSuitDataList()
|
|||
|
self.DynamicTable:SetDataSource(self.SuitDataList)
|
|||
|
self.DynamicTable:ReloadDataASync(1)
|
|||
|
|
|||
|
for _, suitData in ipairs(self.SuitDataList) do
|
|||
|
if suitData.Id == self.CurSelectSuitId then
|
|||
|
self:RefreshSuitDetail(suitData)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:GetSuitDataList()
|
|||
|
local overrunSuitCfg = XEquipConfig.GetWeaponOverrunSuitCfgByTemplateId(self.Equip.TemplateId)
|
|||
|
local bindType = overrunSuitCfg.ChipBindType
|
|||
|
-- 类型配置为0的武器,装备在角色身上时,需额外判断,只显示与当前角色匹配的意识套装
|
|||
|
if bindType == XEquipConfig.UserType.All and self.Equip:IsWearing() then
|
|||
|
bindType = XCharacterConfigs.GetCharacterType(self.Equip.CharacterId)
|
|||
|
end
|
|||
|
local suitIdList = XEquipConfig.GetSuitIdListByCharacterType(bindType, XEquipConfig.OVERRUN_BLIND_SUIT_MIN_QUALITY, true, true)
|
|||
|
|
|||
|
-- 意识套装品质、是否跟角色身上装备的意识一样
|
|||
|
local suitDataDic = {}
|
|||
|
for _, suitId in ipairs(suitIdList) do
|
|||
|
local suitData = {}
|
|||
|
suitData.Id = suitId
|
|||
|
suitData.Quality = XEquipConfig.GetSuitQuality(suitId)
|
|||
|
suitData.IsCharWear = false
|
|||
|
suitData.CharWearCnt = 0 -- 角色装备该套装意识数量
|
|||
|
suitData.IsActive = false
|
|||
|
suitDataDic[suitId] = suitData
|
|||
|
end
|
|||
|
|
|||
|
-- 意识套装是否穿戴
|
|||
|
if self.Equip:IsWearing() then
|
|||
|
local awarenessIds = XDataCenter.EquipManager.GetCharacterWearingAwarenessIds(self.Equip.CharacterId)
|
|||
|
for _, awarenessId in ipairs(awarenessIds) do
|
|||
|
local templateId = XDataCenter.EquipManager.GetEquipTemplateId(awarenessId)
|
|||
|
local equipCfg = XEquipConfig.GetEquipCfg(templateId)
|
|||
|
local suitData = suitDataDic[equipCfg.SuitId]
|
|||
|
if suitData then
|
|||
|
suitData.IsCharWear = true
|
|||
|
suitData.CharWearCnt = suitData.CharWearCnt + 1
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 意识套装是否已激活
|
|||
|
local activeSuits = self.Equip:GetOverrunActiveSuits()
|
|||
|
for _, suitId in ipairs(activeSuits) do
|
|||
|
local suitData = suitDataDic[suitId]
|
|||
|
if suitData then
|
|||
|
suitData.IsActive = true
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 转换成list
|
|||
|
local suitDataList = {}
|
|||
|
for _, suitData in pairs(suitDataDic) do
|
|||
|
table.insert(suitDataList, suitData)
|
|||
|
end
|
|||
|
|
|||
|
-- 排序
|
|||
|
table.sort(suitDataList, function(a, b)
|
|||
|
-- 当前已绑定的意识套装
|
|||
|
local priorityA = a.Id == self.LastSelectSuitId and 10000 or 0
|
|||
|
local priorityB = b.Id == self.LastSelectSuitId and 10000 or 0
|
|||
|
|
|||
|
-- 武器穿戴角色身上装备的意识套装,武器未穿戴在角色身上时此项忽略
|
|||
|
priorityA = priorityA + (a.IsCharWear and 1000 or 0)
|
|||
|
priorityB = priorityB + (b.IsCharWear and 1000 or 0)
|
|||
|
|
|||
|
-- 已激活的意识套装
|
|||
|
priorityA = priorityA + (a.IsActive and 100 or 0)
|
|||
|
priorityB = priorityB + (b.IsActive and 100 or 0)
|
|||
|
|
|||
|
-- 按照品质排序
|
|||
|
priorityA = priorityA + (a.Quality > b.Quality and 10 or 0)
|
|||
|
priorityB = priorityB + (b.Quality > a.Quality and 10 or 0)
|
|||
|
|
|||
|
return priorityA > priorityB
|
|||
|
end)
|
|||
|
|
|||
|
return suitDataList
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:InitDynamicTable()
|
|||
|
self.DynamicTable = XDynamicTableNormal.New(self.PanelSelectList.gameObject)
|
|||
|
self.DynamicTable:SetDelegate(self)
|
|||
|
self.DynamicTable:SetProxy(XUiEquipOverrunSelectGrid)
|
|||
|
end
|
|||
|
|
|||
|
function XUiEquipOverrunSelect:OnDynamicTableEvent(event, index, grid)
|
|||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
|||
|
grid:Init(self)
|
|||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
|||
|
local suitData = self.SuitDataList[index]
|
|||
|
local isLastSelect = suitData.Id == self.LastSelectSuitId
|
|||
|
local isCurSelect = suitData.Id == self.CurSelectSuitId
|
|||
|
grid:Refresh(suitData, isLastSelect)
|
|||
|
grid:SetCurSelect(isCurSelect)
|
|||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
|||
|
local suitData = self.SuitDataList[index]
|
|||
|
self.CurSelectSuitId = suitData.Id
|
|||
|
local grids = self.DynamicTable:GetGrids()
|
|||
|
for _, grid in pairs(grids) do
|
|||
|
grid:SetCurSelect(false)
|
|||
|
end
|
|||
|
grid:SetCurSelect(true)
|
|||
|
self:RefreshSuitDetail(suitData)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新意识套装详情
|
|||
|
function XUiEquipOverrunSelect:RefreshSuitDetail(suitData)
|
|||
|
self:PlayAnimation("QieHuan")
|
|||
|
self.SelectSuitData = suitData
|
|||
|
self.TxtName.text = XMVCA:GetAgency(ModuleId.XEquip):GetEquipSuitName(suitData.Id)
|
|||
|
local iconPath = XMVCA:GetAgency(ModuleId.XEquip):GetEquipSuitIconPath(suitData.Id)
|
|||
|
self.RImgIcon:SetRawImage(iconPath)
|
|||
|
|
|||
|
-- 刷新意识
|
|||
|
for _, activeGo in ipairs(self.ActiveGoList) do
|
|||
|
activeGo.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
for _, notActiveGo in ipairs(self.NotActiveGoList) do
|
|||
|
notActiveGo.gameObject:SetActiveEx(false)
|
|||
|
end
|
|||
|
|
|||
|
self.SkillInfoList = XMVCA:GetAgency(ModuleId.XEquip):GetSuitActiveSkillDesList(suitData.Id, suitData.CharWearCnt, true)
|
|||
|
local activeIndex = 1
|
|||
|
local notActiveIndex = 1
|
|||
|
for i, info in ipairs(self.SkillInfoList) do
|
|||
|
local showActive = suitData.Id == self.LastSelectSuitId and info.IsActive or (info.IsActive and not info.IsActiveByOverrun)
|
|||
|
if showActive then
|
|||
|
local activeGo = self.ActiveGoList[activeIndex]
|
|||
|
if not activeGo then
|
|||
|
activeGo = CSInstantiate(self.PanelActive, self.PanelActive.transform.parent)
|
|||
|
table.insert(self.ActiveGoList, activeGo)
|
|||
|
end
|
|||
|
activeGo.gameObject:SetActiveEx(true)
|
|||
|
activeGo.transform:SetAsLastSibling()
|
|||
|
local uiObj = activeGo:GetComponent("UiObject")
|
|||
|
uiObj:GetObject("TxtTitle").text = info.PosDes
|
|||
|
uiObj:GetObject("TxtSkill").text = info.SkillDes
|
|||
|
|
|||
|
-- 超限激活状态
|
|||
|
local imgState = XUiHelper.TryGetComponent(uiObj.transform, "PanelTitle/ImgState")
|
|||
|
imgState.gameObject:SetActiveEx(info.IsActiveByOverrun)
|
|||
|
if info.IsActiveByOverrun then
|
|||
|
local txtState = XUiHelper.TryGetComponent(uiObj.transform, "PanelTitle/ImgState/TxtState", "Text")
|
|||
|
txtState.gameObject:SetActiveEx(true)
|
|||
|
txtState.text = XUiHelper.GetText("EquipOverrunActive")
|
|||
|
end
|
|||
|
|
|||
|
activeIndex = activeIndex + 1
|
|||
|
else
|
|||
|
local notActiveGo = self.NotActiveGoList[notActiveIndex]
|
|||
|
if not notActiveGo then
|
|||
|
notActiveGo = CSInstantiate(self.PanelNotActive, self.PanelNotActive.transform.parent)
|
|||
|
table.insert(self.NotActiveGoList, notActiveGo)
|
|||
|
end
|
|||
|
notActiveGo.gameObject:SetActiveEx(true)
|
|||
|
notActiveGo.transform:SetAsLastSibling()
|
|||
|
local uiObj = notActiveGo:GetComponent("UiObject")
|
|||
|
uiObj:GetObject("TxtTitle").text = info.PosDes
|
|||
|
uiObj:GetObject("TxtSkill").text = info.SkillDes
|
|||
|
notActiveIndex = notActiveIndex + 1
|
|||
|
|
|||
|
uiObj:GetObject("PanelCanActive").gameObject:SetActiveEx(info.IsActiveByOverrun)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 意识
|
|||
|
if self.Equip:IsWearing() then
|
|||
|
local isActiveByOverrun = false
|
|||
|
for _, info in ipairs(self.SkillInfoList) do
|
|||
|
if info.IsActiveByOverrun then
|
|||
|
isActiveByOverrun = true
|
|||
|
self.TxtDetail.text = info.OverrunTips
|
|||
|
end
|
|||
|
end
|
|||
|
if not isActiveByOverrun then
|
|||
|
self.TxtDetail.text = XUiHelper.GetText("EquipOverrunNotActive")
|
|||
|
end
|
|||
|
else
|
|||
|
self.TxtDetail.text = XUiHelper.GetText("EquipOverrunNotEquip")
|
|||
|
end
|
|||
|
|
|||
|
-- 按钮
|
|||
|
if self.IsPreview then
|
|||
|
self.BtnCanActive.gameObject:SetActiveEx(true)
|
|||
|
self.BtnCanActive:SetDisable(true)
|
|||
|
self.BtnChange.gameObject:SetActiveEx(false)
|
|||
|
self.BtnActive.gameObject:SetActiveEx(false)
|
|||
|
else
|
|||
|
self.BtnCanActive.gameObject:SetActiveEx(false)
|
|||
|
self.BtnChange.gameObject:SetActiveEx(suitData.IsActive)
|
|||
|
self.BtnActive.gameObject:SetActiveEx(not suitData.IsActive)
|
|||
|
self.TxtSpend.gameObject:SetActiveEx(not suitData.IsActive)
|
|||
|
if suitData.IsActive then
|
|||
|
self.BtnChange:SetDisable(suitData.Id == self.LastSelectSuitId)
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
-- 消耗
|
|||
|
self:RefreshCost()
|
|||
|
end
|
|||
|
|
|||
|
-- 刷新消耗
|
|||
|
function XUiEquipOverrunSelect:RefreshCost()
|
|||
|
if self.SelectSuitData.IsActive then
|
|||
|
return
|
|||
|
end
|
|||
|
|
|||
|
local overrunSuitCfg = XEquipConfig.GetWeaponOverrunSuitCfgByTemplateId(self.Equip.TemplateId)
|
|||
|
local icon = XItemConfigs.GetItemIconById(overrunSuitCfg.ActiveSuitItemId)
|
|||
|
local ownCnt = XDataCenter.ItemManager.GetCount(overrunSuitCfg.ActiveSuitItemId)
|
|||
|
self.RImgSpendIcon:SetRawImage(icon)
|
|||
|
self.CanActive = ownCnt >= overrunSuitCfg.ActiveSuitItemCount
|
|||
|
if self.CanActive then
|
|||
|
self.TxtSpend.text = tostring(ownCnt) .. "/" .. tostring(overrunSuitCfg.ActiveSuitItemCount)
|
|||
|
else
|
|||
|
self.TxtSpend.text = string.format("<color=#%s>%s</color>/%s", CanNotBuyColor, ownCnt, overrunSuitCfg.ActiveSuitItemCount)
|
|||
|
end
|
|||
|
end
|