167 lines
5.1 KiB
Lua
167 lines
5.1 KiB
Lua
|
local CSUnityEngineObjectInstantiate = CS.UnityEngine.Object.Instantiate
|
||
|
local XUiDoubleTowersGridInfo = require("XUi/XUiDoubleTowers/XUiDoubleTowersGridInfo")
|
||
|
|
||
|
---@class XUiDoubleTowersDetail:XLuaUi
|
||
|
local XUiDoubleTowersDetail = XLuaUiManager.Register(XLuaUi, "UiDoubleTowersDetail")
|
||
|
|
||
|
function XUiDoubleTowersDetail:Ctor()
|
||
|
self._StageId = false
|
||
|
self._InfoGrids = {}
|
||
|
self._RewardGrids = {}
|
||
|
self.DynamicTable = false
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:OnAwake()
|
||
|
self:RegisterButtonClick()
|
||
|
|
||
|
if not self.PanelScrollView then
|
||
|
self.PanelScrollView = XUiHelper.TryGetComponent(self.Transform,"SafeAreaContentPane/PanelDropList/PanelScrollView")
|
||
|
end
|
||
|
self.DynamicTable = XDynamicTableNormal.New(self.PanelScrollView)
|
||
|
self.DynamicTable:SetProxy(XUiDoubleTowersGridInfo)
|
||
|
self.DynamicTable:SetDelegate(self)
|
||
|
self.GridCommon.gameObject:SetActiveEx(false)
|
||
|
|
||
|
XUiPanelAsset.New(
|
||
|
self,
|
||
|
self.PanelAsset,
|
||
|
XDataCenter.ItemManager.ItemId.FreeGem,
|
||
|
XDataCenter.ItemManager.ItemId.ActionPoint
|
||
|
)
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:OnEnable()
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:OnDisable()
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:SetStage(stageId)
|
||
|
if self._StageId == stageId then
|
||
|
return
|
||
|
end
|
||
|
self._StageId = stageId
|
||
|
self:Refresh()
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:Refresh()
|
||
|
if not self._StageId then
|
||
|
self:CloseDetailWithAnimation()
|
||
|
return
|
||
|
end
|
||
|
-- 标题
|
||
|
local stageName = XDoubleTowersConfigs.GetStageName(self._StageId)
|
||
|
self.TxtTitle.text = stageName
|
||
|
|
||
|
-- 场地提示
|
||
|
local stageTip = XDoubleTowersConfigs.GetStageTip(self._StageId)
|
||
|
self.TextDescribe.text = stageTip
|
||
|
|
||
|
-- 敌人情报
|
||
|
self:UpdateEnemyInfo()
|
||
|
|
||
|
-- 奖励
|
||
|
self:UpdateRewards()
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:UpdateEnemyInfo()
|
||
|
local infoIds = XDoubleTowersConfigs.GetInfoIdGroup(self._StageId)
|
||
|
self.DynamicTable:SetDataSource(infoIds)
|
||
|
self.DynamicTable:ReloadDataASync(1)
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:UpdateRewards()
|
||
|
local stageId = self._StageId
|
||
|
local stageInfo = XDataCenter.FubenManager.GetStageInfo(stageId)
|
||
|
if not stageInfo then
|
||
|
return
|
||
|
end
|
||
|
local firstRewardShow = XFubenConfigs.GetFirstRewardShow(stageId)
|
||
|
local finishRewardShow = XFubenConfigs.GetFinishRewardShow(stageId)
|
||
|
|
||
|
-- 获取显示奖励Id
|
||
|
local rewardId = 0
|
||
|
local IsFirst = false
|
||
|
local cfg = XDataCenter.FubenManager.GetStageCfg(stageId)
|
||
|
|
||
|
local isStageClear = XDataCenter.DoubleTowersManager.IsStageClear(stageId)
|
||
|
if not isStageClear or finishRewardShow == 0 then
|
||
|
rewardId = cfg and cfg.FirstRewardShow or firstRewardShow
|
||
|
if cfg and cfg.FirstRewardShow > 0 or firstRewardShow > 0 then
|
||
|
IsFirst = true
|
||
|
end
|
||
|
end
|
||
|
if rewardId == 0 then
|
||
|
rewardId = cfg and cfg.FinishRewardShow or finishRewardShow
|
||
|
end
|
||
|
if not self._RewardGrids[1] then
|
||
|
self._RewardGrids[1] = XUiGridCommon.New(self, self.GridCommonPopUp1)
|
||
|
end
|
||
|
if not self._RewardGrids[2] then
|
||
|
self._RewardGrids[2] = XUiGridCommon.New(self, self.GridCommonPopUp2)
|
||
|
end
|
||
|
|
||
|
if rewardId == 0 then
|
||
|
for j = 1, #self._RewardGrids do
|
||
|
self._RewardGrids[j].GameObject:SetActive(false)
|
||
|
end
|
||
|
return
|
||
|
end
|
||
|
|
||
|
local rewards = IsFirst and XRewardManager.GetRewardList(rewardId) or XRewardManager.GetRewardListNotCount(rewardId)
|
||
|
if rewards then
|
||
|
for i, item in ipairs(rewards) do
|
||
|
local grid
|
||
|
if self._RewardGrids[i] then
|
||
|
grid = self._RewardGrids[i]
|
||
|
else
|
||
|
local ui = CSUnityEngineObjectInstantiate(self.GridCommonPopUp1, self.GridCommonPopUp1.parent)
|
||
|
grid = XUiGridCommon.New(self, ui)
|
||
|
self._RewardGrids[i] = grid
|
||
|
end
|
||
|
grid:Refresh(item, {ShowReceived = isStageClear})
|
||
|
grid.GameObject:SetActive(true)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
local rewardsCount = rewards and #rewards or 0
|
||
|
for j = 1, #self._RewardGrids do
|
||
|
if j > rewardsCount then
|
||
|
self._RewardGrids[j].GameObject:SetActive(false)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:RegisterButtonClick()
|
||
|
self:RegisterClickEvent(
|
||
|
self.BtnEnter,
|
||
|
function()
|
||
|
self:EnterFight()
|
||
|
end
|
||
|
)
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:EnterFight()
|
||
|
local stageId = self._StageId
|
||
|
if
|
||
|
XDataCenter.DoubleTowersManager.IsStageCanChallenge(self._StageId) and
|
||
|
XDataCenter.FubenManager.CheckPreFight(XDataCenter.FubenManager.GetStageCfg(stageId))
|
||
|
then
|
||
|
XEventManager.DispatchEvent(XEventId.EVENT_DOUBLE_TOWERS_ON_OPENED_ROOM)
|
||
|
XLuaUiManager.Open("UiDoubleTowersRoom", stageId)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:CloseDetailWithAnimation()
|
||
|
self:Close()
|
||
|
end
|
||
|
|
||
|
function XUiDoubleTowersDetail:OnDynamicTableEvent(event, index, grid)
|
||
|
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
|
||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
|
||
|
local infoIds = XDoubleTowersConfigs.GetInfoIdGroup(self._StageId)
|
||
|
grid:Refresh(infoIds[index])
|
||
|
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_TOUCHED then
|
||
|
end
|
||
|
end
|