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

266 lines
8.7 KiB
Lua

local XUiGridAreaWarSpecialRole = require("XUi/XUiAreaWar/XUiGridAreaWarSpecialRole")
local XUiGridAreaWarSpecialRoleReward = require("XUi/XUiAreaWar/XUiGridAreaWarSpecialRoleReward")
local XUiAreaWarSpecialRole = XLuaUiManager.Register(XLuaUi, "UiAreaWarSpecialRole")
function XUiAreaWarSpecialRole:OnAwake()
self.GridCourse.gameObject:SetActiveEx(false)
self.GridSpecialRole.gameObject:SetActiveEx(false)
self.AssetActivityPanel = XUiPanelActivityAsset.New(self.PanelSpecialTool)
XDataCenter.ItemManager.AddCountUpdateListener(
{
XDataCenter.ItemManager.ItemId.AreaWarCoin,
XDataCenter.ItemManager.ItemId.AreaWarActionPoint
},
handler(self, self.UpdateAssets),
self.AssetActivityPanel
)
self.DynamicTable = XDynamicTableNormal.New(self.SViewCourse)
self.DynamicTable:SetProxy(XUiGridAreaWarSpecialRoleReward)
self.DynamicTable:SetDelegate(self)
self:AutoAddListener()
end
function XUiAreaWarSpecialRole:OnStart(chapterId)
self.ChapterIds = XAreaWarConfigs.GetChapterIds()
chapterId = chapterId or XDataCenter.AreaWarManager.GetBranchNewChapterId()
self.SelectIndex = self:GetBtnIndexByAreaId(chapterId)
self.RewardIds = XAreaWarConfigs.GetAllSpecialRoleUnlockRewardIds()
self.Btns = {}
self.RoleGridList = {}
self:InitView()
end
function XUiAreaWarSpecialRole:OnEnable()
if self.IsEnd then
return
end
if XDataCenter.AreaWarManager.OnActivityEnd() then
self.IsEnd = true
return
end
self:UpdateAssets()
self:UpdateAreas()
self:UpdateRewardProgress()
self.SkipAnim = true
self.PanelTabGroup:SelectIndex(self.SelectIndex)
end
function XUiAreaWarSpecialRole:OnGetEvents()
return {
XEventId.EVENT_AREA_WAR_SPECIAL_ROLE_REWARD_GOT,
XEventId.EVENT_AREA_WAR_ACTIVITY_END
}
end
function XUiAreaWarSpecialRole:OnNotify(evt, ...)
if self.IsEnd then
return
end
local args = {...}
if evt == XEventId.EVENT_AREA_WAR_SPECIAL_ROLE_REWARD_GOT then
self:UpdateRewardProgress()
elseif evt == XEventId.EVENT_AREA_WAR_ACTIVITY_END then
if XDataCenter.AreaWarManager.OnActivityEnd() then
self.IsEnd = true
return
end
end
end
function XUiAreaWarSpecialRole:AutoAddListener()
self:BindHelpBtn(self.BtnHelp, "AreaWarSpecialRole")
self.BtnBack.CallBack = function()
self:Close()
end
self.BtnMainUi.CallBack = function()
XLuaUiManager.RunMain()
end
end
function XUiAreaWarSpecialRole:InitView()
self.TxtTips.text = CsXTextManagerGetText("AreaWarSpecialRoleTips")
for index, chapterId in ipairs(self.ChapterIds) do
local btn = self.Btns[index]
if not btn then
local go =
index == 1 and self.BtnFirst or
CSObjectInstantiate(self.BtnFirst.gameObject, self.PanelTabGroup.transform)
btn = go:GetComponent("XUiButton")
self.Btns[index] = btn
end
end
self.PanelTabGroup:Init(
self.Btns,
function(index)
self:OnClickTabBtn(index)
end
)
end
function XUiAreaWarSpecialRole:UpdateAssets()
self.AssetActivityPanel:Refresh(
{
XDataCenter.ItemManager.ItemId.AreaWarCoin,
XDataCenter.ItemManager.ItemId.AreaWarActionPoint
},
{
XDataCenter.ItemManager.ItemId.AreaWarActionPoint
}
)
end
function XUiAreaWarSpecialRole:UpdateAreas()
for index, chapterId in ipairs(self.ChapterIds) do
local btn = self.Btns[index]
if btn then
local chapterName = XAreaWarConfigs.GetChapterName(chapterId)
btn:SetNameByGroup(0, chapterName)
local tipStr = ""
local isUnlock = XDataCenter.AreaWarManager.IsChapterUnlock(chapterId)
if isUnlock then
local unlockCount, totalCount = XDataCenter.AreaWarManager.GetAreaSpecialRolesUnlockProgress(chapterId)
tipStr = CsXTextManagerGetText("AreaWarAreaSpeicalRoleUnlockProgress", unlockCount, totalCount)
else
local leftTime = XDataCenter.AreaWarManager.GetChapterUnlockLeftTime(chapterId)
if leftTime > 0 then
tipStr =
CsXTextManagerGetText(
"AreaWarAreaUnlockLeftTime",
XUiHelper.GetTime(leftTime, XUiHelper.TimeFormatType.AREA_WAR_AREA_UNLOCK)
)
else
tipStr = CsXTextManagerGetText("AreaWarAreaLock")
end
end
btn:SetDisable(not isUnlock, isUnlock)
btn:SetNameByGroup(1, tipStr)
end
end
end
function XUiAreaWarSpecialRole:OnClickTabBtn(index)
local isUnlock = XDataCenter.AreaWarManager.IsChapterUnlock(self.ChapterIds[index])
if not isUnlock then
return
end
self.SelectIndex = index
self:UpdateSpecialRoles()
if self.SkipAnim then
self.SkipAnim = nil
else
self:PlayAnimation("QieHuan")
end
end
function XUiAreaWarSpecialRole:UpdateSpecialRoles()
local areaId = self:GetChapterId()
local roleIds = XAreaWarConfigs.GetChapterSpecialRoleIds(areaId)
for index, roleId in ipairs(roleIds) do
local grid = self.RoleGridList[index]
if not grid then
local go =
index == 1 and self.GridSpecialRole or CSObjectInstantiate(self.GridSpecialRole, self.PanelContent)
local clickCb = handler(self, self.OnClickRole)
grid = XUiGridAreaWarSpecialRole.New(go, clickCb)
self.RoleGridList[index] = grid
end
grid:Refresh(roleId)
grid.GameObject:SetActiveEx(true)
end
for index = #roleIds + 1, #self.RoleGridList do
self.RoleGridList[index].GameObject:SetActiveEx(false)
end
end
function XUiAreaWarSpecialRole:OnClickRole(roleId)
local chapterId = self:GetChapterId()
local roleIds = XAreaWarConfigs.GetChapterSpecialRoleIds(chapterId)
for index, grid in pairs(self.RoleGridList) do
grid:SetSelect(roleId == roleIds[index])
end
XLuaUiManager.Open(
"UiAreaWarSpecialRolePopUp",
roleId,
function()
for index, grid in pairs(self.RoleGridList) do
grid:SetSelect(false)
end
end
)
end
function XUiAreaWarSpecialRole:UpdateRewardProgress()
local unlockCount, totalCount = XDataCenter.AreaWarManager.GetSpecialRoleProgress()
self.TxtCurProgress.text = unlockCount
self.TxtTotalProgress.text = "/" .. totalCount
--全部未达成,滑到最左
--有已领取的,则上滑到已领取里档位最高的在最左第一格,直到无法再右滑
--当期活动策划不需要这个功能了
--local selectIndex = -1
--for index = #self.RewardIds, 1, -1 do
-- if XDataCenter.AreaWarManager.IsSpecialRoleRewardHasGot(self.RewardIds[index]) then
-- selectIndex = index
-- break
-- end
--end
self.DynamicTable:SetDataSource(self.RewardIds)
--self.DynamicTable:ReloadDataSync(selectIndex)
self.DynamicTable:ReloadDataSync()
end
function XUiAreaWarSpecialRole:OnDynamicTableEvent(event, index, grid)
if event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_INIT then
grid.RootUi = self
grid.ClickCb = function(rewardId)
self:OnClickSpecialRoleReward(rewardId)
end
elseif event == DYNAMIC_DELEGATE_EVENT.DYNAMIC_GRID_ATINDEX then
grid:Refresh(self.RewardIds[index])
end
end
function XUiAreaWarSpecialRole:OnClickSpecialRoleReward(rewardId)
local hasGot = XDataCenter.AreaWarManager.IsSpecialRoleRewardHasGot(rewardId)
if hasGot then
XUiManager.TipText("AreaWarAreaSpecialRoleRewardGot")
return
end
local canGet = XDataCenter.AreaWarManager.IsSpecialRoleRewardCanGet(rewardId)
if not canGet then
local realRewardId = XAreaWarConfigs.GetSpecialRoleRewardRewardId(rewardId)
local rewardData = XRewardManager.GetRewardList(realRewardId)
XLuaUiManager.Open("UiTip", rewardData[1])
else
XDataCenter.AreaWarManager.AreaWarGetSpecialRoleRewardRequest(
rewardId,
function(rewardGoodsList)
if not XTool.IsTableEmpty(rewardGoodsList) then
XUiManager.OpenUiObtain(rewardGoodsList)
end
end
)
end
end
function XUiAreaWarSpecialRole:GetChapterId()
return self.ChapterIds[self.SelectIndex]
end
function XUiAreaWarSpecialRole:GetBtnIndexByAreaId(areaId)
for index, inAreaId in pairs(self.ChapterIds) do
if inAreaId == areaId then
return index
end
end
end