270 lines
No EOL
8.6 KiB
Lua
270 lines
No EOL
8.6 KiB
Lua
local Panels = {
|
||
PanelStart = require("XUi/XUiHitMouse/Panels/XUiHitMousePanelStart"),
|
||
PanelMoles = require("XUi/XUiHitMouse/Panels/XUiHitMousePanelMoles"),
|
||
PanelInformation = require("XUi/XUiHitMouse/Panels/XUiHitMousePanelInfo"),
|
||
PanelCombos = require("XUi/XUiHitMouse/Panels/XUiHitMousePanelCombo")
|
||
}
|
||
|
||
--================
|
||
--打地鼠小游戏游戏页面
|
||
--================
|
||
local XUiHitMouse = XLuaUiManager.Register(XLuaUi, "UiHitMouse")
|
||
|
||
function XUiHitMouse:OnStart(stageId)
|
||
self.StageId = stageId
|
||
self.Round = 0
|
||
self.RefreshIntervalDic = {}
|
||
self.ComboCount = 0
|
||
self.FeverComboCount = 0
|
||
self.FeverTimeCount = 0
|
||
self.Score = 0
|
||
self:InitStageCfg()
|
||
self:InitRefreshCfg()
|
||
self:InitBaseBtns()
|
||
self:InitPanels()
|
||
self:AddListeners()
|
||
Panels.PanelStart.PlayStart(self, function() self:StartGame() end)
|
||
end
|
||
|
||
function XUiHitMouse:InitStageCfg()
|
||
local stageCfg = XHitMouseConfigs.GetCfgByIdKey(
|
||
XHitMouseConfigs.TableKey.Stage,
|
||
self.StageId
|
||
)
|
||
self.FeverCount = stageCfg.HaveFever
|
||
self.FeverRefresh = stageCfg.FeverRefresh
|
||
self.FeverTime = stageCfg.FeverTime
|
||
self.ComboSizeDic = XDataCenter.HitMouseManager.GetComboSizeDic()
|
||
end
|
||
|
||
function XUiHitMouse:InitRefreshCfg()
|
||
local refreshDic = XHitMouseConfigs.GetCfgByIdKey(
|
||
XHitMouseConfigs.TableKey.Stage2Refresh,
|
||
self.StageId
|
||
)
|
||
local targetRefreshCfg = refreshDic[0]
|
||
self.IsFever = false
|
||
self.ScoreRate = (targetRefreshCfg.HitScoreRate and targetRefreshCfg.HitScoreRate > 0 and targetRefreshCfg.HitScoreRate) or 1
|
||
self.RoundTime = targetRefreshCfg.MaxShowTime or 5
|
||
self.BreakTime = targetRefreshCfg.RestTime or 0.2
|
||
self.FeverComboCount = 0
|
||
self.RefreshHitKeyList = {}
|
||
self.HitKey2RefreshDic = {}
|
||
for hitKey, cfg in pairs(refreshDic) do
|
||
table.insert(self.RefreshHitKeyList, hitKey)
|
||
self.HitKey2RefreshDic[hitKey] = cfg
|
||
end
|
||
table.sort(self.RefreshHitKeyList, function(v1, v2) return v1 > v2 end)
|
||
end
|
||
--==============
|
||
--注册基础按钮
|
||
--==============
|
||
function XUiHitMouse:InitBaseBtns()
|
||
--self.BtnMainUi.CallBack = handler(self, self.OnClickBtnMainUi)
|
||
self.BtnBack.CallBack = handler(self, self.OnClickBtnBack)
|
||
--self:BindHelpBtn(self.BtnHelp, "HitMouseHelp")
|
||
end
|
||
|
||
function XUiHitMouse:InitPanels()
|
||
for _, panel in pairs(Panels) do
|
||
panel.Init(self)
|
||
end
|
||
end
|
||
|
||
function XUiHitMouse:OnClickBtnBack()
|
||
self.Paused = true
|
||
XLuaUiManager.Open("UiHitMouseExitTips", false,
|
||
self.Score,
|
||
XDataCenter.HitMouseManager.GetStageScore(self.StageId),
|
||
function()
|
||
XDataCenter.HitMouseManager.GameFinish(self.StageId, self.Score, function()
|
||
self:Close()
|
||
end)
|
||
end,
|
||
function()
|
||
self:ResumeGame()
|
||
end)
|
||
end
|
||
|
||
function XUiHitMouse:StartGame()
|
||
self.UpdateScheduleId = XScheduleManager.ScheduleForever(
|
||
function()
|
||
self:OnUpdate()
|
||
end,
|
||
1
|
||
)
|
||
self:NewRound()
|
||
end
|
||
|
||
function XUiHitMouse:ResumeGame()
|
||
self.Paused = false
|
||
end
|
||
|
||
function XUiHitMouse:OnUpdate()
|
||
if self.Paused then return end
|
||
--[[ 需要处理顺序,这部分先注释
|
||
for _, panel in pairs(Panels) do
|
||
if panel.OnUpdate then
|
||
panel.OnUpdate(self)
|
||
end
|
||
end
|
||
]]
|
||
Panels.PanelMoles.OnUpdate(self)
|
||
Panels.PanelCombos.OnUpdate(self)
|
||
Panels.PanelInformation.OnUpdate(self)
|
||
end
|
||
|
||
function XUiHitMouse:OnDestroy()
|
||
self:UnSchedule()
|
||
self:RemoveListeners()
|
||
end
|
||
|
||
function XUiHitMouse:NewRound()
|
||
self.Round = self.Round + 1
|
||
--XLog.Error("===========第" .. self.Round .. "轮开始============================")
|
||
Panels.PanelMoles.StartRound(self)
|
||
self.RoundTimeFlag = true
|
||
self.RoundTimeCount = 0
|
||
end
|
||
|
||
function XUiHitMouse:EndRound()
|
||
self.BreakTimeFlag = true
|
||
self.BreakTimeCount = 0
|
||
self.ClearRoundFlag = false
|
||
self.RoundTimeFlag = false
|
||
if self.FeverCount > 0 and self.FeverComboCount >= self.FeverCount then
|
||
self:StartFever()
|
||
end
|
||
if self.FeverEnd then
|
||
self.FeverEnd = false
|
||
Panels.PanelCombos.OnComboChange(self)
|
||
end
|
||
--XLog.Error("===========第" .. self.Round .. "轮结束============================")
|
||
end
|
||
|
||
--===================
|
||
--清屏,把未消失的地鼠全部强制消失
|
||
--(满足回合结束条件:1.全部得分地鼠被击倒, 2.回合时间到)
|
||
--@param isChecked:是否已经检测过全部地鼠被击倒
|
||
--===================
|
||
function XUiHitMouse:ClearRound(isChecked)
|
||
self.ClearRoundFlag = true
|
||
self.RoundTime = nil
|
||
local allClear = isChecked and true or Panels.PanelMoles.CheckMoleClear(self.Moles)
|
||
if not allClear then
|
||
if self.IsFever then
|
||
self:EndFever(false)
|
||
else
|
||
self:ComboFailed()
|
||
end
|
||
end
|
||
Panels.PanelMoles.ClearRound(self)
|
||
self.MolesPanel.SoundCloseGaiZi.gameObject:SetActiveEx(false)
|
||
self.MolesPanel.SoundCloseGaiZi.gameObject:SetActiveEx(true)
|
||
end
|
||
|
||
function XUiHitMouse:OnMoleDead(mole)
|
||
Panels.PanelCombos.OnMoleDead(self, mole)
|
||
Panels.PanelInformation.OnMoleDead(self, mole)
|
||
end
|
||
|
||
function XUiHitMouse:ComboFailed()
|
||
Panels.PanelCombos.ComboFailed(self)
|
||
if self.IsFever then
|
||
self:EndFever(true)
|
||
end
|
||
end
|
||
|
||
function XUiHitMouse:StartFever()
|
||
local refreshCfg = XHitMouseConfigs.GetCfgByIdKey(
|
||
XHitMouseConfigs.TableKey.Refresh,
|
||
self.FeverRefresh
|
||
)
|
||
self.ScoreRate = (refreshCfg.HitScoreRate and refreshCfg.HitScoreRate > 0 and refreshCfg.HitScoreRate) or 1
|
||
self.RoundTime = refreshCfg.MaxShowTime
|
||
self.BreakTime = refreshCfg.RestTime
|
||
self.IsFever = true
|
||
Panels.PanelCombos.StartFever(self)
|
||
end
|
||
|
||
function XUiHitMouse:EndFever(needClear)
|
||
self.IsFever = false
|
||
self.FeverComboCount = 0
|
||
self.FeverTimeCount = 0
|
||
self.FeverEnd = true
|
||
Panels.PanelCombos.EndFever(self)
|
||
if needClear then
|
||
self.ClearRoundFlag = true
|
||
self.RoundTime = nil
|
||
Panels.PanelMoles.ClearRound(self)
|
||
end
|
||
end
|
||
--====================
|
||
--一局时间用完处理
|
||
--====================
|
||
function XUiHitMouse:TimesUp()
|
||
self.ClearFinishCount = 0
|
||
XLuaUiManager.SetMask(true)
|
||
local _clearFinish = function()
|
||
self.ClearFinishCount = self.ClearFinishCount + 1
|
||
if self.ClearFinishCount >= #self.Moles then
|
||
self.Paused = true
|
||
self.PanelFinish.gameObject:SetActiveEx(true)
|
||
self.PaneFinishEnable:PlayTimelineAnimation(
|
||
function()
|
||
XLuaUiManager.SetMask(false)
|
||
self.PanelFinish.gameObject:SetActiveEx(false)
|
||
XLuaUiManager.Open("UiHitMouseExitTips", true,
|
||
self.Score,
|
||
XDataCenter.HitMouseManager.GetStageScore(self.StageId),
|
||
function()
|
||
XDataCenter.HitMouseManager.GameFinish(self.StageId, self.Score, function()
|
||
self:Close()
|
||
end)
|
||
end,
|
||
function()
|
||
XDataCenter.HitMouseManager.GameFinish(self.StageId, self.Score, function()
|
||
self.Round = 0
|
||
self.RefreshIntervalDic = {}
|
||
self.ComboCount = 0
|
||
self.Score = 0
|
||
self:InitRefreshCfg()
|
||
self:InitPanels()
|
||
Panels.PanelStart.PlayStart(self,
|
||
function()
|
||
self.Paused = false
|
||
self:NewRound()
|
||
end)
|
||
end)
|
||
end)
|
||
end)
|
||
end
|
||
end
|
||
for _, mole in pairs(self.Moles) do
|
||
mole:Clear(_clearFinish)
|
||
end
|
||
end
|
||
|
||
function XUiHitMouse:UnSchedule()
|
||
if self.UpdateScheduleId then
|
||
XScheduleManager.UnSchedule(self.UpdateScheduleId)
|
||
self.UpdateScheduleId = nil
|
||
end
|
||
end
|
||
|
||
function XUiHitMouse:OnActivityEnd()
|
||
XDataCenter.HitMouseManager.OnActivityEndHandler()
|
||
end
|
||
|
||
--==============
|
||
--添加UI事件监听
|
||
--==============
|
||
function XUiHitMouse:AddListeners()
|
||
XEventManager.AddEventListener(XEventId.EVENT_HIT_MOUSE_ACTIVITY_END, self.OnActivityEnd, self)
|
||
end
|
||
--==============
|
||
--移除UI事件监听
|
||
--==============
|
||
function XUiHitMouse:RemoveListeners()
|
||
XEventManager.RemoveEventListener(XEventId.EVENT_HIT_MOUSE_ACTIVITY_END, self.OnActivityEnd, self)
|
||
end |