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

81 lines
No EOL
2.6 KiB
Lua

---@class XUiPanelDice
---@field public ImgDiceAnimEnable UnityEngine.Transform
---@field public PanelResult UnityEngine.Transform
local XUiPanelDice = XClass(nil, "XUiPanelDice")
local tailDiceFrameNames = {
"ImgDiceAn103",
"ImgDiceAn102",
"ImgDiceAn100",
}
function XUiPanelDice:Ctor(ui, root)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.Root = root
XTool.InitUiObject(self)
end
function XUiPanelDice:UpdateDiceView(playAnimEnable, animFinishCb)
local manager = XDataCenter.DiceGameManager
local points = manager.GetThrowResult()
for i = 1, manager.GetDiceCount() do
local imgPath = XDiceGameConfigs.GetDiceGamePointById(points[i]).ImgPath
self["ImgDice" .. i]:SetRawImage(imgPath)
end
if playAnimEnable then
self.Root:PlayAnimation("PanelResultEnable", animFinishCb)
end
end
function XUiPanelDice:PlayThrowAnimation(finishCb, beginCb)
local manager = XDataCenter.DiceGameManager
local points = manager.GetThrowResult()
for i = 1, manager.GetDiceCount() do
--SetRawImage requires gameObject is active
self:SetAnimSubNodeActive(self["DiceAnimation" .. i], true)
self:SetThrowAnimTailFrames(self["DiceAnimation" .. i], points[i])
end
XScheduleManager.ScheduleOnce(function()
for i = 1, manager.GetDiceCount() do
self:SetAnimSubNodeActive(self["DiceAnimation" .. i], false)
end
self:SetDiceAnimNodeActive(true)
self.ImgDiceAnimEnable:PlayTimelineAnimation(function()
self:SetDiceAnimNodeActive(false)
if finishCb then finishCb() end
end, beginCb)
end, 1) --execute in next frame to make sure XLoadRawImage has initialized completely.
end
---@param animationNode UiObject
function XUiPanelDice:SetAnimSubNodeActive(animationNode, active)
for i = 1, #tailDiceFrameNames do
animationNode:GetObject(tailDiceFrameNames[i]).gameObject:SetActiveEx(active)
end
animationNode:GetComponent("CanvasGroup").alpha = active and 0 or 1.0
end
function XUiPanelDice:SetThrowAnimTailFrames(animationNode, point)
local tailFrames = XDiceGameConfigs.GetDiceAnimationById(point).TailFrames
for i = 1, #tailDiceFrameNames do
animationNode:GetObject(tailDiceFrameNames[i]):SetRawImage(tailFrames[i], nil, false)
end
end
function XUiPanelDice:SetResultViewActive(active)
self.PanelResult.gameObject:SetActiveEx(active)
end
function XUiPanelDice:SetDiceAnimNodeActive(value)
for i = 1, XDataCenter.DiceGameManager.GetDiceCount() do
local animNode = self["DiceAnimation" .. i]
animNode.gameObject:SetActiveEx(value)
end
end
return XUiPanelDice