PGRData/Script/matrix/xui/xuifubenflopreward/XUiFubenFlopReward.lua

267 lines
8.1 KiB
Lua

local XUiFubenFlopReward = XLuaUiManager.Register(XLuaUi, "UiFubenFlopReward")
local PanelStatus = {
SelectTime = 0,
WaitForClose = 1
}
function XUiFubenFlopReward:OnAwake()
self:InitAutoScript()
end
function XUiFubenFlopReward:OnStart(cb, winData)
self.Cb = cb
self.WinData = winData
self.Animation = self.Transform:GetComponent("Animation")
self.PanelRewardBox.gameObject:SetActive(false)
self.RewardBox = {}
local roomData = XDataCenter.RoomManager.RoomData
if roomData then
local levelControl = XDataCenter.FubenManager.GetStageMultiplayerLevelControl(roomData.StageId, roomData.StageLevel)
self.TxtDifficulty.text = string.format("(%s)", levelControl.DifficultyDesc)
end
self:InitRewardBox()
self.Selected = false
self.Status = PanelStatus.SelectTime
self:StartTimer()
self.SelectedPlayerId = {}
self.SelectedPos = {}
for _, v in pairs(self.WinData.FlopRewardList) do
if v.PlayerId and v.PlayerId ~= 0 then
self.SelectedPlayerId[v.PlayerId] = false
end
end
XEventManager.AddEventListener(XEventId.EVENT_ONLINEBOSS_DROPREWARD_NOTIFY, self.OnDropReaward, self)
end
function XUiFubenFlopReward:OnEnable()
for _, v in pairs(self.RewardBox) do
v:OnEnable()
end
end
function XUiFubenFlopReward:OnDisable()
for _, v in pairs(self.RewardBox) do
v:OnDisable()
end
end
function XUiFubenFlopReward:CheckAllSelected()
for _, v in pairs(self.SelectedPlayerId) do
if not v then
return false
end
end
return true
end
--选取奖励推送
function XUiFubenFlopReward:OnDropReaward(dropData)
if not self.RewardBox then
return
end
local pos = dropData.Pos
local playerId = dropData.PlayerId
local flopRewardList = self.WinData.FlopRewardList
if playerId == XPlayer.Id then
self.Animation:Stop()
self.Selected = true
self.TxtDesc.color = CS.UnityEngine.Color(1, 1, 1, 1)
self.TxtDesc.text = CS.XTextManager.GetText("FlopRewardWait")
end
self.SelectedPlayerId[playerId] = true
for _, v in pairs(flopRewardList) do
if v and playerId == v.PlayerId then
self.RewardBox[pos]:Refresh(v)
self.SelectedPos[pos] = true
break
end
end
if self:CheckAllSelected() then
self:AutoDrawReward()
end
end
--自动选择奖励
function XUiFubenFlopReward:AutoDrawReward()
self.Animation:Stop()
self.Selected = true
self.TotalTime = CS.XGame.Config:GetFloat("FlopRewardCloseTime")
self.Time = self.TotalTime
self.StartTicks = CS.XTimerManager.Ticks
self.TxtDesc.text = CS.XTextManager.GetText("FlopRewardWaitClose")
self.Status = PanelStatus.WaitForClose
self.TxtDesc.color = CS.UnityEngine.Color(1, 1, 1, 1)
local flopRewardList = self.WinData.FlopRewardList
if not flopRewardList then
return
end
for _, var in pairs(flopRewardList) do
if not self.SelectedPlayerId[var.PlayerId] then
for k, v in pairs(self.RewardBox) do
if var and not self.SelectedPos[k] then
v:Refresh(var)
self.SelectedPos[k] = true
break
end
end
end
end
end
function XUiFubenFlopReward:StartTimer()
if self.Timers then
self:StopTimer()
end
self.TotalTime = CS.XGame.Config:GetInt("OnlineBossResultSelectTime")
self.Time = self.TotalTime
self.StartTicks = CS.XTimerManager.Ticks
self.Timers = XScheduleManager.ScheduleForever(function(timer)
self:OnUpdateTime(timer)
end, 0)
end
function XUiFubenFlopReward:StopTimer()
if self.Timers then
XScheduleManager.UnSchedule(self.Timers)
self.ImgCountDownBarRight.fillAmount = 0
self.ImgCountDownBarLeft.fillAmount = 0
self.Timers = nil
self:OnBtnBgClick()
end
end
function XUiFubenFlopReward:OnUpdateTime()
if not self.ImgCountDownBarRight.gameObject:Exist() or not self.ImgCountDownBarLeft.gameObject:Exist() then
self:StopTimer()
return
end
self.ImgCountDownBarRight.fillAmount = self.Time / self.TotalTime
self.ImgCountDownBarLeft.fillAmount = self.Time / self.TotalTime
local t = self.TotalTime - (CS.XTimerManager.Ticks - self.StartTicks) / CS.System.TimeSpan.TicksPerSecond
self.Time = t
if self.Time <= 0 then
if self.Status == PanelStatus.SelectTime then
self:AutoDrawReward()
else
self:StopTimer()
end
end
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiFubenFlopReward:InitAutoScript()
self:AutoInitUi()
self.SpecialSoundMap = {}
self:AutoAddListener()
end
function XUiFubenFlopReward:AutoInitUi()
self.PanelBase = self.Transform:Find("SafeAreaContentPane/PanelBase")
self.PanelCountDown = self.Transform:Find("SafeAreaContentPane/PanelBase/PanelCountDown")
self.ImgCountDownBarRight = self.Transform:Find("SafeAreaContentPane/PanelBase/PanelCountDown/ImgCountDownBarRight"):GetComponent("Image")
self.ImgCountDownBarLeft = self.Transform:Find("SafeAreaContentPane/PanelBase/PanelCountDown/ImgCountDownBarLeft"):GetComponent("Image")
self.TxtDesc = self.Transform:Find("SafeAreaContentPane/PanelBase/TxtDesc"):GetComponent("Text")
self.TxtDifficulty = self.Transform:Find("SafeAreaContentPane/PanelBase/PanelTxt/TxtDifficulty"):GetComponent("Text")
self.PanelReward = self.Transform:Find("SafeAreaContentPane/PanelReward")
self.PanelLayout = self.Transform:Find("SafeAreaContentPane/PanelReward/PanelLayout")
self.PanelRewardBox = self.Transform:Find("SafeAreaContentPane/PanelReward/PanelLayout/PanelRewardBox")
self.BtnBg = self.Transform:Find("FullScreenBackground/BtnBg"):GetComponent("Button")
end
function XUiFubenFlopReward:GetAutoKey(uiNode, eventName)
if not uiNode then
return
end
return eventName .. uiNode:GetHashCode()
end
function XUiFubenFlopReward:RegisterListener(uiNode, eventName, func)
local key = self:GetAutoKey(uiNode, eventName)
if not key then
return
end
local listener = self.AutoCreateListeners[key]
if listener ~= nil then
uiNode[eventName]:RemoveListener(listener)
end
if func ~= nil then
if type(func) ~= "function" then
XLog.Error("XUiFubenFlopReward:RegisterListener函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
listener = function(...)
XSoundManager.PlayBtnMusic(self.SpecialSoundMap[key], eventName)
func(self, ...)
end
uiNode[eventName]:AddListener(listener)
self.AutoCreateListeners[key] = listener
end
end
function XUiFubenFlopReward:AutoAddListener()
self.AutoCreateListeners = {}
self:RegisterClickEvent(self.BtnBg, self.OnBtnBgClick)
end
-- auto
function XUiFubenFlopReward:OnBtnBgClick()
if self.Time > 0 then
return
end
if self.Selected == false then
return
end
if self.Cb then
self.Cb()
else
self:Close()
end
end
function XUiFubenFlopReward:InitRewardBox()
local rewardCount = XDataCenter.FubenManager.FubenFlopCount
local canSelect = XDataCenter.FubenManager.CheckHasFlopReward(self.WinData, true)
local stage = XDataCenter.FubenManager.GetStageCfg(self.WinData.StageId)
for i = 1, rewardCount do
local ui = CS.UnityEngine.Object.Instantiate(self.PanelRewardBox)
local grid = XUiPanelRewardBox.New(ui, self, i, canSelect, stage.IsMultiplayer)
grid.Transform:SetParent(self.PanelLayout, false)
grid.GameObject:SetActive(true)
self.RewardBox[i] = grid
end
self.Animation:Stop()
if XDataCenter.FubenManager.CheckHasFlopReward(self.WinData, true) then
self.TxtDesc.text = CS.XTextManager.GetText("FlopRewardSelect")
self.Animation:Play("UiTxtTips")
else
self.TxtDesc.text = CS.XTextManager.GetText("FlopRewardWait")
end
end
function XUiFubenFlopReward:OnDestroy()
self:StopTimer()
XEventManager.RemoveEventListener(XEventId.EVENT_ONLINEBOSS_DROPREWARD_NOTIFY, self.OnDropReaward, self)
end