PGRData/Script/matrix/xui/xuidicegame/XUiDiceGame.lua

148 lines
4.3 KiB
Lua
Raw Normal View History

local XUiPanelStart = require("XUi/XUiDiceGame/XUiPanelStart")
local XUiPanelOperation = require("XUi/XUiDiceGame/XUiPanelOperation")
local XUiPanelEasterEgg = require("XUi/XUiDiceGame/XUiPanelEasterEgg")
---@class XUiDiceGame
---@field protected BtnBack XUiComponent.XUiButton
---@field protected BtnMainUi XUiComponent.XUiButton
---@field protected BtnHelp XUiComponent.XUiButton
---@field protected SubPanels table<number, XUiDiceGameSubPanel>
local XUiDiceGame = XLuaUiManager.Register(XLuaUi, "UiDiceGame")
function XUiDiceGame:OnStart()
self:InitTopView()
self:InitGamePanels()
self.stage = 0
end
function XUiDiceGame:InitTopView()
self:RegisterClickEvent(self.BtnBack, self.OnBtnBackClick)
self:RegisterClickEvent(self.BtnMainUi, self.OnBtnMainUiClick)
self:RegisterClickEvent(self.BtnHelp, self.OnBtnHelpClick)
--代币面板
self.AssetPanel = XUiPanelActivityAsset.New(self.PanelActivityAsset)
local itemId = XDataCenter.DiceGameManager.GetCoinItemId()
XDataCenter.ItemManager.AddCountUpdateListener({ itemId }, function(id, count)
self.AssetPanel:Refresh({ itemId })
self.OperationPanel:UpdateCoinCountColor(id, count)
end, self.AssetPanel)
self.AssetPanel:Refresh({ itemId })
end
function XUiDiceGame:InitGamePanels()
--self:RemoveLocalDataForTest()
self.StartPanel = XUiPanelStart.New(self.PanelStart, self)
self.OperationPanel = XUiPanelOperation.New(self.PanelOperation, self)
self.EasterEggPanel = XUiPanelEasterEgg.New(self.PanelTip)
self.SubPanels = {}
self.SubPanels[#self.SubPanels + 1] = self.StartPanel
self.SubPanels[#self.SubPanels + 1] = self.OperationPanel
end
function XUiDiceGame:CreateTimeListener()
if not self.Timer then
self.Timer = XScheduleManager.ScheduleForever(function()
self:AutoQuitOnFinish()
end, XScheduleManager.SECOND , 0)
end
end
function XUiDiceGame:OnEnable()
self:CreateTimeListener()
if XDataCenter.DiceGameManager.HasThrowResult() then
self:UpdatePanel(2, false, 0)
else
self:UpdatePanel(1, false, 0)
end
local key = string.format("%s_DiceGame%d_FirstOpen", XPlayer.Id, XDataCenter.DiceGameManager.GetActivityId())
if not XSaveTool.GetData(key) then
self:OnBtnHelpClick()
XSaveTool.SaveData(key, true)
end
end
function XUiDiceGame:OnBtnBackClick()
self:Close()
end
function XUiDiceGame:OnBtnMainUiClick()
XLuaUiManager.RunMain()
end
function XUiDiceGame:OnBtnHelpClick()
local helpId = tonumber(XDataCenter.DiceGameManager.GetActivityConfigValue("HelpId"))
local helpDataKey = XHelpCourseConfig.GetHelpCourseTemplateById(helpId).Function or "DiceGameHelp"
XUiManager.ShowHelpTip(helpDataKey)
end
function XUiDiceGame:PopupEasterEgg(egg)
self.EasterEggPanel:Open(egg)
end
---@param animFlag int @二进制组合1:PanelStart, 2:PanelOperation
function XUiDiceGame:UpdatePanel(stage, signal, animFlag)
if stage <= 0 then
XLog.Error("DiceGame.UpdatePanel: invalid ui stage:" .. stage)
return
end
animFlag = animFlag or 0
local function ShowNextPanel()
self.SubPanels[stage]:SetActive(true, signal, (animFlag & (1 << (stage - 1))) ~= 0)
end
if self.stage > 0 then
if self.stage == stage then
ShowNextPanel()
else
if (animFlag & (1 << (self.stage - 1))) ~= 0 then
self.SubPanels[self.stage]:SetActive(false, signal, true, function()
ShowNextPanel()
end)
else
self.SubPanels[self.stage]:SetActive(false, signal, false)
ShowNextPanel()
end
end
else
self.SubPanels[stage]:SetActive(true, signal, (animFlag & (1 << (stage - 1))) ~= 0)
end
self.stage = stage
end
function XUiDiceGame:OnDisable()
if self.Timer then
XScheduleManager.UnSchedule(self.Timer)
end
end
function XUiDiceGame:OnDestroy()
self.OperationPanel:SaveDefaultSelectionData()
self.EasterEggPanel:SaveLocalData()
self.StartPanel:OnDestroy()
end
function XUiDiceGame:AutoQuitOnFinish()
local timeLeft = XDataCenter.DiceGameManager.GetDiceGameTimeLeft()
if timeLeft <= 0 then
XUiManager.TipText("ActivityAlreadyOver")
self:OnBtnMainUiClick()
end
end
function XUiDiceGame.RemoveLocalDataForTest()
if XDataCenter.DiceGameManager.GetScore() == 0 then
XUiPanelOperation.RemoveDefaultSelectionData()
XUiPanelEasterEgg.RemoveLocalData()
end
end
---@class XUiDiceGameSubPanel
local XUiDiceGameSubPanel = {}
---@param active boolean
---@param signal boolean
---@param playAnim boolean
---@param disableFinishCb fun():void
function XUiDiceGameSubPanel:SetActive(active, signal, playAnim, disableFinishCb) end