PGRData/Script/matrix/xui/xuireform/XUiReformEnemyBuffPanel.lua

270 lines
10 KiB
Lua
Raw Normal View History

2024-09-01 20:49:41 +00:00
--######################## XUiReformEnemyBuffDetailGrid ########################
local XUiReformEnemyBuffDetailGrid = XClass(nil, "XUiReformEnemyBuffDetailGrid")
function XUiReformEnemyBuffDetailGrid:Ctor(ui)
XUiHelper.InitUiClass(self, ui)
XUiHelper.RegisterClickEvent(self, self.BtnSelf, self.OnBtnSelfClicked)
self.ViewModel = nil
end
function XUiReformEnemyBuffDetailGrid:SetData(viewModel)
self.ViewModel = viewModel
self.Have.gameObject:SetActiveEx(viewModel ~= nil)
self.None.gameObject:SetActiveEx(viewModel == nil)
if viewModel == nil then return end
self.RImgBuff:SetRawImage(viewModel.Icon)
end
function XUiReformEnemyBuffDetailGrid:SetReformPanelData(viewModel)
self.ViewModel = viewModel
self.TxtName.text = viewModel.Name
if not string.IsNilOrEmpty(viewModel.SimpleDes) then
self.TxtDesc.text = viewModel.SimpleDes
else
self.TxtDesc.text = viewModel.Description
end
self.TxtScore.text = viewModel.Score
self.RImgIcon:SetRawImage(viewModel.Icon)
end
function XUiReformEnemyBuffDetailGrid:OnBtnSelfClicked()
if self.ViewModel then
XLuaUiManager.Open("UiReformBuffTips", { self.ViewModel }, XUiHelper.GetText("ReformEnemyBuffTipsTitle"))
end
end
function XUiReformEnemyBuffDetailGrid:SetSelectStatus(value)
self.Select.gameObject:SetActiveEx(value)
end
--######################## XUiReformPanel ########################
local XUiReformPanel = XClass(nil, "XUiReformPanel")
function XUiReformPanel:Ctor(ui)
XUiHelper.InitUiClass(self, ui)
XUiHelper.RegisterClickEvent(self, self.BtnClose, self.OnBtnCloseClicked)
-- 动态列表
self.GridBuff.gameObject:SetActiveEx(false)
self.DynamicTable = XDynamicTableNormal.New(self.PanelReformList)
self.DynamicTable:SetProxy(XUiReformEnemyBuffDetailGrid)
self.DynamicTable:SetDelegate(self)
self.EnemySource = nil
self.StageId = nil
self.Difficulty = nil
self.EnemyGroup = nil
self.Index = nil
end
function XUiReformPanel:Open(source, stageId, difficulty, enemyGroup, index)
self.EnemySource = source
self.StageId = stageId
self.Difficulty = difficulty
self.EnemyGroup = enemyGroup
self.Index = index
self.GameObject:SetActiveEx(true)
self.BtnClose.gameObject:SetActiveEx(true)
self:Refresh()
end
function XUiReformPanel:Refresh()
local target = self.EnemySource:GetCurrentTarget() or self.EnemySource:GetDefaultTarget()
self.TxtTip.text = XUiHelper.GetText("ReformEnemyBuffTipsTitle2", #target:GetBuffGroup():GetActiveBuffIds()
, target:GetMaxReformBuffCount())
self.DynamicTable:SetDataSource(target:GetAllReformBuffViewModels())
self.DynamicTable:ReloadDataSync(1)
end
function XUiReformPanel:OnBtnCloseClicked()
self.GameObject:SetActiveEx(false)
self.BtnClose.gameObject:SetActiveEx(false)
end
function XUiReformPanel:OnDynamicTableEvent(event, index, grid)
local buffViewModel = self.DynamicTable.DataSource[index]
local target = self.EnemySource:GetCurrentTarget() or self.EnemySource:GetDefaultTarget()
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:SetReformPanelData(buffViewModel)
grid:SetSelectStatus(target:GetBuffGroup():CheckBuffIsActive(buffViewModel.Id))
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
self:OnEnemyBuffClicked(buffViewModel)
end
end
function XUiReformPanel:OnEnemyBuffClicked(data)
local buffIds = XTool.Clone(self.EnemyGroup:GetEnemyReformBuffIds(self.EnemySource:GetId()))
local isHave = false
for i = #buffIds, 1, -1 do
if buffIds[i] == data.Id then
isHave = true
table.remove(buffIds, i)
break
end
end
if not isHave then
table.insert(buffIds, data.Id)
end
XDataCenter.ReformActivityManager.EnemyBuffReplaceRequest(self.StageId, self.Difficulty
, self.EnemyGroup:GetId(), self.EnemyGroup:GetEnemyGroupType(), self.EnemySource:GetId(), buffIds, function()
self:Refresh()
end, self.Index)
end
--######################## XUiReformEnemyBuffGrid ########################
local XUiReformEnemyBuffGrid = XClass(nil, "XUiReformEnemyBuffGrid")
function XUiReformEnemyBuffGrid:Ctor(ui, rootUi)
XUiHelper.InitUiClass(self, ui)
XUiHelper.RegisterClickEvent(self, self.BtnReform, self.BtnReformClicked)
XUiHelper.RegisterClickEvent(self, self.BtnHead, self.BtnHeadClicked)
self.EnemySource = nil
self.RootUi = rootUi
self.Index = nil
end
function XUiReformEnemyBuffGrid:SetData(source, index)
self.EnemySource = source
self.Index = index
local target = source:GetCurrentTarget() or source:GetDefaultTarget()
self.TxtLevel.text = XUiHelper.GetText("ReformEnemyLevelText"
, target:GetShowLevel())
self.RImgIcon:SetRawImage(target:GetIcon())
self.Tab1.gameObject:SetActiveEx(source:GetIsActive() and source:GetEntityType() == XReformConfigs.EntityType.Add)
self.Tab2.gameObject:SetActiveEx(source:GetIsActive() and source:GetEntityType() == XReformConfigs.EntityType.Entity)
self.TxtScore.text = target:GetReformedBuffTotalScore()
-- 刷新buff
local buffViewModels = target:GetReformBuffDetailViewModels()
XUiHelper.RefreshCustomizedList(self.PanelBuff, self.BtnBuff, target:GetMaxReformBuffCount(), function(index, gridGo)
if self.__BuffGridDic == nil then
self.__BuffGridDic = {}
end
local grid = self.__BuffGridDic[index]
if grid == nil then
grid = XUiReformEnemyBuffDetailGrid.New(gridGo)
self.__BuffGridDic[index] = grid
end
grid:SetData(buffViewModels[index])
end)
end
function XUiReformEnemyBuffGrid:SetSelectStatus(value)
self.PanelSelect.gameObject:SetActiveEx(value)
end
function XUiReformEnemyBuffGrid:BtnReformClicked()
self.RootUi:OpenReformPanel(self.EnemySource, self.Index)
end
function XUiReformEnemyBuffGrid:BtnHeadClicked()
-- 检查图鉴是否已经开放
if not XFunctionManager.DetectionFunction(XFunctionManager.FunctionName.Archive, false, true) then
XUiManager.TipError(CsXTextManager.GetText("ReformMonsterOpenTip"))
return
end
local monsterEntity = self.EnemySource:GetMonsterEntity()
if monsterEntity == nil then return end
if monsterEntity:GetIsLockMain() then
XUiManager.TipText("ArchiveMonsterLock")
return
end
XDataCenter.ArchiveManager.GetMonsterEvaluateFromSever(monsterEntity:GetNpcId(), function()
XLuaUiManager.Open("UiArchiveMonsterDetail", { monsterEntity }, 1, XArchiveConfigs.MonsterDetailUiType.Show)
end)
end
--######################## XUiReformEnemyBuffPanel ########################
local XUiReformEnemyGroupGrid = require("XUi/XUiReform/XUiReformEnemyGroupGrid")
local XUiReformEnemyBuffPanel = XClass(XSignalData, "XUiReformEnemyBuffPanel")
function XUiReformEnemyBuffPanel:Ctor(ui)
XUiHelper.InitUiClass(self, ui)
self.BaseStage = nil
self.EvolvableStage = nil
self.EvolvableGroups = nil
self.CurrentEvolvableGroupIndex = 1
-- 动态列表
self.GirdEnemy.gameObject:SetActiveEx(false)
self.DynamicTable = XDynamicTableNormal.New(self.PanelEnemyList)
self.DynamicTable:SetProxy(XUiReformEnemyBuffGrid, self)
self.DynamicTable:SetDelegate(self)
-- 改造面板
self.ReformPanel = XUiReformPanel.New(self.PanelReform)
self.GridDic = {}
end
function XUiReformEnemyBuffPanel:SetData(baseStage, evolvableStage)
self.BaseStage = baseStage
self.EvolvableStage = evolvableStage
self.EvolvableGroups = evolvableStage:GetEvolvableGroupByType(XReformConfigs.EvolvableGroupType.EnemyBuff)
for index, group in ipairs(self.EvolvableGroups) do
if group:GetIsActive(false) then
self.CurrentEvolvableGroupIndex = index
break
end
end
-- 顶部提示
self.TxtTopTip.text = XUiHelper.GetText("ReformEnemyBuffPanelTopTip")
-- 刷新顶部按钮组
self:RefreshEnemyGroupInfo()
-- 刷新列表
self:RefreshDynamicTable()
end
function XUiReformEnemyBuffPanel:RefreshDynamicTable(index)
local currentEvolvableGroup = self.EvolvableGroups[self.CurrentEvolvableGroupIndex]
self.DynamicTable:SetDataSource(currentEvolvableGroup:GetSourcesWithEntity(false))
self.DynamicTable:ReloadDataSync(index or 1)
end
function XUiReformEnemyBuffPanel:OnDynamicTableEvent(event, index, grid)
self.GridDic[index] = grid
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:SetData(self.DynamicTable.DataSource[index], index)
end
end
function XUiReformEnemyBuffPanel:SetCurrentGroupIndex(value)
self.CurrentEvolvableGroupIndex = value
self:EmitSignal("RefreshChallengeScore", false, value)
self.AnimSwitch:Play()
end
function XUiReformEnemyBuffPanel:GetCurrentGroupIndex()
return self.CurrentEvolvableGroupIndex
end
function XUiReformEnemyBuffPanel:RefreshEvolvableData(index)
-- 刷新列表
if index == nil then
self:RefreshDynamicTable(index)
elseif self.GridDic[index] then
self.GridDic[index]:SetData(self.DynamicTable.DataSource[index], index)
end
self:RefreshEnemyGroupInfo()
end
-- 刷新敌人波次改造信息
function XUiReformEnemyBuffPanel:RefreshEnemyGroupInfo()
if self.__ReformEnemyGroupGridDic == nil then
self.__ReformEnemyGroupGridDic = {}
end
local group = nil
XUiHelper.RefreshCustomizedList(self.PanelTabTop, self.ReformGroup, #self.EvolvableGroups, function(index, grid)
local groupGrid = self.__ReformEnemyGroupGridDic[index]
if groupGrid == nil then
groupGrid = XUiReformEnemyGroupGrid.New(grid, self)
self.__ReformEnemyGroupGridDic[index] = groupGrid
end
group = self.EvolvableGroups[index]
groupGrid:SetData(index, group)
groupGrid:SetSelectedIndex(self.CurrentEvolvableGroupIndex)
grid.gameObject:SetActiveEx(group:GetIsActive())
end)
end
function XUiReformEnemyBuffPanel:OpenReformPanel(source, index)
self.ReformPanel:Open(source, self.BaseStage:GetId(), self.EvolvableStage:GetDifficulty(), self.EvolvableGroups[self.CurrentEvolvableGroupIndex]
, index)
end
return XUiReformEnemyBuffPanel