local XUiPanelEliminateGame = XClass(nil, "XUiPanelEliminateGame") local XUiGridElement = require("XUi/XUiComeAcross/XUiGridElement") function XUiPanelEliminateGame:Ctor(ui, rootUi) self.GameObject = ui.gameObject self.Transform = ui.transform self.RootUi = rootUi self:InitAutoScript() self:Init() end function XUiPanelEliminateGame:Init() self.SmallPool = self.PanelPoolSmall:GetComponent("XUnityPoolSingle") self.BigPool = self.PanelAnsPool:GetComponent("XUnityPoolSingle") self.QuePanel = {} self.AddingList = {} self.TickPanel = {} local XUiPanelTick = require("XUi/XUiComeAcross/XUiPanelTick") self.TickPanel[1] = XUiPanelTick.New(self.PanelTick_1) self.TickPanel[2] = XUiPanelTick.New(self.PanelTick_2) self.TickPanel[3] = XUiPanelTick.New(self.PanelTick_3) self.PanelTimes.gameObject:SetActive(false) self.PanelReady.gameObject:SetActive(false) self.PanelQuestion.gameObject:SetActive(false) self.PanelAnswer.gameObject:SetActive(false) self.PanelResult.gameObject:SetActive(false) self.PanelScore.gameObject:SetActive(false) local gamePlayer = require("XUi/XUiComeAcross/ComeAcrossEliminateGamePlayer").New() gamePlayer.OnPlayNext = handler(self, self.OnPlayNext) -- 下一关回调 gamePlayer.OnPlayWaitForNext = handler(self, self.OnPlayWaitForNext) -- 等待下一关回调 gamePlayer.OnPlayAddAnswer = handler(self, self.OnPlayAddAnswer) -- 添加元素 gamePlayer.OnPlayFinish = handler(self, self.OnPlayFinish) -- 完成回调 gamePlayer.OnPlayStepChange = handler(self, self.OnPlayStepChange) -- 完成一步骤回调 gamePlayer.OnPlayClick = handler(self, self.OnPlayClick) -- 点击回调 gamePlayer.OnPlayReadyDelay = handler(self, self.OnPlayReadyDelay) -- 准备步骤回调 gamePlayer.OnPlayEndingDelay = handler(self, self.OnPlayEndingDelay) -- 结束步骤回调 self.GamePlayer = gamePlayer self.CountDown = -1 end --准备倒计时 function XUiPanelEliminateGame:OnPlayReadyDelay(IsReady, countDown) if self.CountDown == countDown then return end self.CountDown = countDown if not IsReady then self.PanelTimes.gameObject:SetActive(not IsReady) self.PanelQuestion.gameObject:SetActive(not IsReady) self.PanelAnswer.gameObject:SetActive(not IsReady) self.PanelScore.gameObject:SetActive(not IsReady) end self.PanelReady.gameObject:SetActive(IsReady) if self.CountDown > 1 then self.TxtCountDown.text = tostring(countDown - 1) else self.TxtCountDown.text = CS.XTextManager.GetText("ComeAcrossStart") end end --等待下一关 function XUiPanelEliminateGame:OnPlayWaitForNext(IsWait, countDown) if self.CountDown == countDown then return end self.CountDown = countDown self.PanelResult.gameObject:SetActive(IsWait) self.TxtResultDesc.text = string.format(CS.XTextManager.GetText("ComeAcrossNext"), countDown) end --设置Ui function XUiPanelEliminateGame:OnPlayNext(gameData, answer) self.SmallPool:DespawnAll() self.BigPool:DespawnAll() self.AnswerGirds = {} self.QuestionGirds = {} local question = gameData.Question local questionGirds = {} if question then for _, var in ipairs(question) do local grid = self.SmallPool:Spawn() grid.transform:SetParent(self.Panel, false) grid:SetActive(true) local gridElement = XUiGridElement.New(grid, self, self.RootUi) gridElement:SetSmallGridContent(var) table.insert(questionGirds, gridElement) end end local answerGirds = {} if answer then for _, var in ipairs(answer) do local grid = self.BigPool:Spawn() grid.transform:SetParent(self.PanelLayout, false) grid:SetActive(true) local gridElement = XUiGridElement.New(grid, self, self.RootUi) gridElement:SetBigGridContent(var) answerGirds[var.Index] = gridElement end end self.TxtTimes.text = string.format("%s/%s", 0, gameData.Times) self.TxtTimesLeft.text = gameData.LimitTimes self.AnswerGirds = answerGirds self.QuestionGirds = questionGirds end --追加 function XUiPanelEliminateGame:OnPlayAddAnswer(answer) local grid = self.BigPool:Spawn() grid.transform:SetParent(self.PanelLayout, false) grid:SetActive(false) local gridElement = XUiGridElement.New(grid, self, self.RootUi) gridElement:SetBigGridContent(answer) self.AddingList[answer.Index] = gridElement self.AnswerGirds[answer.Index] = gridElement end --点击回调 function XUiPanelEliminateGame:OnPlayClick(success, removeList) if not removeList then return end for _, v in ipairs(removeList) do local grid = self.AnswerGirds[v.Index] if grid then grid:OnEliminate(function() self.AnswerGirds[v.Index] = nil self.BigPool:Despawn(grid.GameObject) for _, v2 in pairs(self.AddingList) do v2.GameObject:SetActive(true) end self.AddingList = {} end) end end end --完成一个关卡 function XUiPanelEliminateGame:OnPlayStepChange(idx, results, step, totalStep, times) if not results then return end local result = results[idx] if self.TickPanel[idx] then self.TickPanel[idx]:SetResult(result) end self.TxtTimes.text = string.format("%s/%s", step, totalStep) self.TxtTimesLeft.text = times self.TxtResult.text = result == 1 and CS.XTextManager.GetText("ComeAcrossRight") or CS.XTextManager.GetText("ComeAcrossWrong") end --结束步骤回调 function XUiPanelEliminateGame:OnPlayEndingDelay(isEnding, countDown) if self.CountDown == countDown then return end self.CountDown = countDown self.PanelResult.gameObject:SetActive(isEnding) self.TxtResult.text = CS.XTextManager.GetText("ComeAcrossGameEnd") self.TxtResultDesc.text = string.format(CS.XTextManager.GetText("ComeAcrossEnd"), countDown) end --完成 function XUiPanelEliminateGame:OnPlayFinish(result) self.RootUi:OnFinish(result) end -------------------------------------------------------- --解释表数据 function XUiPanelEliminateGame:ParserGameData(data) local gameLevels = data.TypeOfGames local curGamelevel = {} for _, v in ipairs(gameLevels) do local game = {} game.Question = {} local question = v.Question for i = 1, #question, 1 do local idx = tonumber(string.sub(question, i, i)) table.insert(game.Question, idx) end game.Answer = {} for i = 1, #v.Answer, 1 do local idx = tonumber(string.sub(v.Answer, i, i)) local answer = {} answer.Index = i answer.Type = idx table.insert(game.Answer, answer) end game.Tab = v game.Times = v.Times game.LimitTimes = v.LimitTimes table.insert(curGamelevel, game) end return curGamelevel end --开始 function XUiPanelEliminateGame:Play() self.GameData = self:ParserGameData(self.CurData) self.GamePlayer:SetPlayerData(self.GameData) self:Reset() self.RootUi:PlayAnimation("UiComeAcrossGame2Begin", function() self.GamePlayer:Play() end) end --更新 function XUiPanelEliminateGame:Update(dt) if self.GamePlayer then self.GamePlayer:Update(dt) end end --重置 function XUiPanelEliminateGame:Reset() for i, v in ipairs(self.TickPanel) do v.GameObject:SetActive(i <= self.CurData.GameConfig.Count) v:Reset() end end --设置游戏数据 function XUiPanelEliminateGame:SetupGameData(data) if not data then return end self.CurData = data end -- auto -- Automatic generation of code, forbid to edit function XUiPanelEliminateGame:InitAutoScript() self:AutoInitUi() self:AutoAddListener() end function XUiPanelEliminateGame:AutoInitUi() self.PanelScore = self.Transform:Find("PanelScore") self.Panel = self.Transform:Find("PanelScore/Panel") self.PanelTick_1 = self.Transform:Find("PanelScore/Panel/PanelTick_1") self.PanelTick_2 = self.Transform:Find("PanelScore/Panel/PanelTick_2") self.PanelTick_3 = self.Transform:Find("PanelScore/Panel/PanelTick_3") self.TxtTimes = self.Transform:Find("PanelScore/Text/TxtTimes"):GetComponent("Text") self.PanelResult = self.Transform:Find("PanelScore/PanelResult") self.TxtResult = self.Transform:Find("PanelScore/PanelResult/TxtResult"):GetComponent("Text") self.TxtResultDesc = self.Transform:Find("PanelScore/PanelResult/TxtResultDesc"):GetComponent("Text") self.PanelQuestion = self.Transform:Find("PanelQuestion") self.Panel = self.Transform:Find("PanelQuestion/Panel") self.PanelPoolSmall = self.Transform:Find("PanelQuestion/PanelPoolSmall") self.PanelAnswer = self.Transform:Find("PanelAnswer") self.PanelLayout = self.Transform:Find("PanelAnswer/PanelLayout") self.PanelAnsPool = self.Transform:Find("PanelAnswer/PanelAnsPool") self.PanelTimes = self.Transform:Find("PanelTimes") self.TxtTimesLeft = self.Transform:Find("PanelTimes/TxtTimesLeft"):GetComponent("Text") self.PanelReady = self.Transform:Find("PanelReady") self.TxtCountDown = self.Transform:Find("PanelReady/TxtCountDown"):GetComponent("Text") end function XUiPanelEliminateGame:RegisterClickEvent(uiNode, func) if func == nil then XLog.Error("XUiPanelEliminateGame:RegisterClickEvent函数参数错误:参数func不能为空") return end if type(func) ~= "function" then XLog.Error("XUiPanelEliminateGame:RegisterClickEvent函数错误, 参数func需要是function类型, func的类型是" .. type(func)) end local listener = function(...) func(self, ...) end CsXUiHelper.RegisterClickEvent(uiNode, listener) end function XUiPanelEliminateGame:AutoAddListener() end -- auto return XUiPanelEliminateGame