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

248 lines
No EOL
8.1 KiB
Lua

---@class XUiTheatre3Main : XLuaUi
---@field _Control XTheatre3Control
local XUiTheatre3Main = XLuaUiManager.Register(XLuaUi, "UiTheatre3Main")
function XUiTheatre3Main:OnAwake()
self:RegisterUiEvents()
self.Grid256New.gameObject:SetActiveEx(false)
end
function XUiTheatre3Main:OnStart()
self:InitReward()
end
function XUiTheatre3Main:OnEnable()
self:Refresh()
self:CheckOpenSettleTip()
end
function XUiTheatre3Main:OnGetEvents()
return {
XEventId.EVENT_THEATRE3_BATTLE_PASS_EXP_CHANGE,
}
end
function XUiTheatre3Main:OnNotify(event, ...)
if event == XEventId.EVENT_THEATRE3_BATTLE_PASS_EXP_CHANGE then
self:RefreshReward()
end
end
function XUiTheatre3Main:InitReward()
-- 奖励
local rewardId = self._Control:GetClientConfig("MainViewShowRewardId")
rewardId = rewardId and tonumber(rewardId)
if not XTool.IsNumberValid(rewardId) then
return
end
local rewards = XRewardManager.GetRewardList(rewardId)
local rewardsNum = #rewards
for i = 1, rewardsNum do
local go = i == 1 and self.Grid256New or XUiHelper.Instantiate(self.Grid256New, self.PanelReward)
local grid = XUiGridCommon.New(self, go)
grid:Refresh(rewards[i])
grid.GameObject:SetActiveEx(true)
if grid.BtnClick then
XUiHelper.RegisterClickEvent(grid, grid.BtnClick, function()
XLuaUiManager.Open("UiTheatre3Tips", rewards[i].TemplateId)
end)
end
end
-- 物品图片
local icon = XDataCenter.ItemManager.GetItemIcon(XEnumConst.THEATRE3.Theatre3OutCoin)
self.IconPoints:SetRawImage(icon)
end
function XUiTheatre3Main:Refresh()
self:RefreshView()
self:RefreshReward()
self:RefreshMainTask()
self:RefreshGameBtn()
self:RefreshRedPoint()
end
function XUiTheatre3Main:RefreshView()
-- 活动名
self.TxtTitle.text = self._Control:GetActivityName()
end
function XUiTheatre3Main:RefreshReward()
-- 当前奖励等级
local level = self._Control:GetCurBattlePassLevel()
self.TxtLvNum.text = level
-- 进度
local isMaxlevel = self._Control:CheckBattlePassMaxLevel(level)
if isMaxlevel then
self.TxtPointsNum.text = self._Control:GetClientConfig("RewardTips", 3)
self.ImgProgress.fillAmount = 1
else
local curLevelExp = self._Control:GetCurLevelExp(level)
local nextLevelExp = self._Control:GetNextLevelExp(level + 1)
self.TxtPointsNum.text = string.format("%s/%s", curLevelExp, nextLevelExp)
local progress = XTool.IsNumberValid(nextLevelExp) and curLevelExp / nextLevelExp or 1
self.ImgProgress.fillAmount = progress
end
end
function XUiTheatre3Main:RefreshMainTask()
local taskId = self._Control:GetMainShowTaskId()
if not XTool.IsNumberValid(taskId) or XDataCenter.TaskManager.IsTaskFinished(taskId) then
self:HideMainTask()
return
end
local config = XDataCenter.TaskManager.GetTaskTemplate(taskId)
local taskData = XDataCenter.TaskManager.GetTaskDataById(taskId)
if not config or not taskData then
self:HideMainTask()
return
end
-- 标题
self.TxtTaskTitle.text = config.Title
-- 描述
self.TxtTaskDescribe.text = config.Desc
-- 显示进度
if #config.Condition < 2 then
if self.TxtTaskNum then
self.TxtTaskNum.gameObject:SetActive(true)
end
local result = config.Result > 0 and config.Result or 1
XTool.LoopMap(taskData.Schedule, function(_, pair)
pair.Value = (pair.Value >= result) and result or pair.Value
if self.TxtTaskNum then
self.TxtTaskNum.text = pair.Value .. "/" .. result
end
end)
else
if self.TxtTaskNum then
self.TxtTaskNum.gameObject:SetActive(false)
end
end
-- 显示奖励
local rewards = XRewardManager.GetRewardList(config.RewardId)
if not rewards then
self.BtnReward.gameObject:SetActiveEx(false)
return
end
local reward = rewards[1]
if not self.MainTaskReward then
self.MainTaskReward = XUiGridCommon.New(self, self.BtnReward)
end
self.MainTaskReward:Refresh(reward)
self.MainTaskReward:SetClickCallback(function()
XLuaUiManager.Open("UiTheatre3Tips", reward.TemplateId)
end)
end
function XUiTheatre3Main:RefreshGameBtn()
local isInGame = self._Control:IsHaveAdventure()
local btnIcon = self._Control:GetClientConfig("MainBtnIcon", isInGame and 1 or 2)
self.BtnRetreat.gameObject:SetActiveEx(isInGame)
if self.BtnBattle.RawImageList.Count > 0 and not string.IsNilOrEmpty(btnIcon) then
self.BtnBattle:SetRawImage(btnIcon)
end
end
function XUiTheatre3Main:RefreshRedPoint()
-- bp奖励红点
local level = self._Control:GetCurBattlePassLevel()
local isBpRedPoint = self._Control:CheckIsHaveReward(level)
self.BtnBP:ShowReddot(isBpRedPoint)
-- 任务红点
local isMaxlevel = self._Control:CheckBattlePassMaxLevel(level)
---@type XTheatre3Agency
local theatre3Agency = XMVCA:GetAgency(ModuleId.XTheatre3)
local isTaskAchieved = theatre3Agency:CheckAllTaskAchieved()
self.BtnTask:ShowReddot(not isMaxlevel and isTaskAchieved)
-- 图鉴红点
local isItemRedPoint = self._Control:CheckAllItemRedPoint()
local isSuitRedPoint = self._Control:CheckAllEquipSuitRedPoint()
self.BtnHandBook:ShowReddot(isItemRedPoint or isSuitRedPoint)
-- 精通红点
local isTreeRedPoint = self._Control:CheckAllStrengthenTreeRedPoint()
self.BtnMaster:ShowReddot(isTreeRedPoint)
end
function XUiTheatre3Main:HideMainTask()
self.TxtTaskTitle.text = self._Control:GetClientConfig("Theatre3MainTaskCompleteTitle")
self.TxtTaskDescribe.text = self._Control:GetClientConfig("Theatre3MainTaskCompleteDesc")
self.TxtTaskNum.gameObject:SetActive(false)
self.BtnReward.gameObject:SetActiveEx(false)
end
--region Ui - BtnListener
function XUiTheatre3Main:RegisterUiEvents()
XUiHelper.RegisterClickEvent(self, self.BtnBack, self.OnBtnBackClick)
XUiHelper.RegisterClickEvent(self, self.BtnMainUi, self.OnBtnMainUiClick)
XUiHelper.RegisterClickEvent(self, self.BtnBP, self.OnBtnBPClick)
XUiHelper.RegisterClickEvent(self, self.BtnTask, self.OnBtnTaskClick)
XUiHelper.RegisterClickEvent(self, self.BtnMaster, self.OnBtnMasterClick)
XUiHelper.RegisterClickEvent(self, self.BtnHandBook, self.OnBtnHandBookClick)
XUiHelper.RegisterClickEvent(self, self.BtnRetreat, self.OnBtnRetreat)
XUiHelper.RegisterClickEvent(self, self.BtnBattle, self.OnBtnBattle)
self:BindHelpBtn(self.BtnHelp, self._Control:GetClientConfig("HelpKey"))
end
function XUiTheatre3Main:OnBtnBackClick()
self:Close()
end
function XUiTheatre3Main:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiTheatre3Main:OnBtnBPClick()
XLuaUiManager.Open("UiTheatre3LvReward")
end
function XUiTheatre3Main:OnBtnTaskClick()
XLuaUiManager.Open("UiTheatre3Task")
end
function XUiTheatre3Main:OnBtnMasterClick()
XLuaUiManager.Open("UiTheatre3Master")
end
function XUiTheatre3Main:OnBtnHandBookClick()
XLuaUiManager.Open("UiTheatre3Handbook")
end
function XUiTheatre3Main:OnBtnRetreat()
self:PlayAnimationWithMask("BtnRetreatDianji", function()
self._Control:AdventureGiveUp(function()
---@type XTheatre3Agency
local agency = XMVCA:GetAgency(ModuleId.XTheatre3)
agency:CheckAndOpenSettle()
end)
end)
end
function XUiTheatre3Main:OnBtnBattle()
self:PlayAnimationWithMask("BtnBattleDianji", function()
if not self._Control:IsHaveAdventure() then
self._Control:AdventureStart()
else
self._Control:AdventureContinue()
end
end)
end
--endregion
function XUiTheatre3Main:CheckOpenSettleTip()
local settle = self._Control:GetSettleData()
if not settle or not settle.IsNeedShowTip then
return
end
self._Control:SignSettleTip()
local asynOpen = asynTask(XLuaUiManager.Open)
RunAsyn(function()
local uiDatas = self._Control:GetSettleTips()
for _, v in pairs(uiDatas) do
asynOpen(v.uiName, v.uiParam)
end
end)
end
return XUiTheatre3Main