forked from endernon/PGRData
267 lines
8.1 KiB
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
|