PGRData/Script/matrix/xui/xuicomeacross/XUiPanelEliminateGame.lua

322 lines
9.9 KiB
Lua
Raw Normal View History

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