270 lines
8.6 KiB
Lua
270 lines
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
|