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

352 lines
11 KiB
Lua
Raw Normal View History

local XUiPanelGame = XClass(nil, "XUiPanelGame")
local XUiGridElement = require("XUi/XUiComeAcross/XUiGridElement")
function XUiPanelGame:Ctor(ui, rootUi)
self.GameObject = ui.gameObject
self.Transform = ui.transform
self.RootUi = rootUi
self:InitAutoScript()
self:Init()
end
function XUiPanelGame:Init()
self.SmallPool = self.PanelPoolSmall:GetComponent("XUnityPoolSingle")
self.BigPool = self.PanelAnsPool:GetComponent("XUnityPoolSingle")
self.QuePanel = {}
self.QuePanel[1] = self.PanelQue_1
self.QuePanel[2] = self.PanelQue_2
self.QuePanel[3] = self.PanelQue_3
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.PanelTime.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/ComeAcrossClickGamePlayer").New()
--gamePlayer.OnPlayInit = onPlayInit -- 初始化回调
gamePlayer.OnPlayNext = handler(self, self.OnPlayNext) -- 下一关回调
gamePlayer.OnPlayWaitForNext = handler(self, self.OnPlayWaitForNext) -- 等待下一关回调
gamePlayer.OnPlayUpdate = handler(self, self.OnPlayUpdate) -- 等待下一关回调
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 XUiPanelGame:SetupGameData(data)
if not data then
return
end
self.CurData = data
end
--解释表数据
function XUiPanelGame:ParserGameData(data)
local gameLevels = data.TypeOfGames
local curGamelevel = {}
for _, v in ipairs(gameLevels) do
local game = {}
game.Question = {}
local question = v.Question
local group = string.Split(question, "|")
if group and #group >= 0 then
for index, var in ipairs(group) do
game.Question[index] = {}
for i = 1, #var, 1 do
local idx = tonumber(string.sub(var, i, i))
table.insert(game.Question[index], idx)
end
end
end
game.Answer = {}
local lastAnswer = nil
for i = 1, #v.Answer, 1 do
local idx = tonumber(string.sub(v.Answer, i, i))
local answer = {}
answer.Index = i
answer.Type = idx
if lastAnswer then
answer.Last = lastAnswer
lastAnswer.Next = answer
end
lastAnswer = answer
table.insert(game.Answer, answer)
end
game.Tab = v
game.Time = v.Time
table.insert(curGamelevel, game)
end
return curGamelevel
end
-------------------------------------------
--准备阶段
function XUiPanelGame:OnPlayReadyDelay(IsReady, countDown)
if self.CountDown == countDown then
return
end
self.CountDown = countDown
if not IsReady then
self.PanelTime.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
--XUiHelper.PlayAnimation(self.RootUi, "UiComeAcrossGame1ReadyBegin")
end
--结束步骤回调
function XUiPanelGame: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)
--XUiHelper.PlayAnimation(self.RootUi, "UiComeAcrossGame1ResultBegin")
end
--设置Ui
function XUiPanelGame:OnPlayNext(gameData)
self.SliderTime.value = 1
self.SmallPool:DespawnAll()
self.BigPool:DespawnAll()
self.AnswerGirds = {}
self.QuestionGirds = {}
local question = gameData.Question
local questionGirds = {}
if question then
for i, v in ipairs(question) do
if not v or #v <= 0 then
break
end
questionGirds[i] = {}
for _, var in ipairs(v) do
local grid = self.SmallPool:Spawn()
grid.transform:SetParent(self.QuePanel[i], false)
grid:SetActive(true)
local gridElement = XUiGridElement.New(grid, self, self.RootUi)
gridElement:SetSmallGridContent(var)
table.insert(questionGirds[i], gridElement)
end
end
end
local answer = gameData.Answer
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.AnswerGirds = answerGirds
self.QuestionGirds = questionGirds
end
--更新进度条
function XUiPanelGame:OnPlayUpdate(curtime, timeLimit)
if curtime >= timeLimit then
curtime = timeLimit
end
self.SliderTime.value = 1 - curtime / timeLimit
end
--完成
function XUiPanelGame:OnPlayFinish(result)
self.RootUi:OnFinish(result)
end
--等待下一关
function XUiPanelGame: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
--完成一个关卡
function XUiPanelGame:OnPlayStepChange(idx, results, isTimeOut)
if not results then
return
end
local result = results[idx]
if self.TickPanel[idx] then
self.TickPanel[idx]:SetResult(result)
end
if isTimeOut then
self.TxtResult.text = CS.XTextManager.GetText("ComeAcrossTimeout")
else
self.TxtResult.text = result == 1 and CS.XTextManager.GetText("ComeAcrossRight") or CS.XTextManager.GetText("ComeAcrossWrong")
end
--XUiHelper.PlayAnimation(self.RootUi, "UiComeAcrossGame1ResultBegin")
end
--点击回调
function XUiPanelGame:OnPlayClick(success, removeList, step)
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)
end)
end
end
for i = 1, step, 1 do
if self.QuestionGirds[i] then
for _, var in ipairs(self.QuestionGirds[i]) do
var:SetGray()
end
end
end
end
----------------------------------------------------
--开始
function XUiPanelGame:Play()
self.GameData = self:ParserGameData(self.CurData)
self.GamePlayer:SetPlayerData(self.GameData)
self:Reset()
self.RootUi:PlayAnimation("UiComeAcrossGame1Begin", function()
self.GamePlayer:Play()
end)
end
--更新
function XUiPanelGame:Update(dt)
if self.GamePlayer then
self.GamePlayer:Update(dt)
end
end
--重置
function XUiPanelGame:Reset()
for i, v in ipairs(self.TickPanel) do
v.GameObject:SetActive(i <= self.CurData.GameConfig.Count)
v:Reset()
end
end
-- auto
-- Automatic generation of code, forbid to edit
function XUiPanelGame:InitAutoScript()
self:AutoInitUi()
self:AutoAddListener()
end
function XUiPanelGame: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.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.PanelA = self.Transform:Find("PanelQuestion/Panel")
self.PanelQue_1 = self.Transform:Find("PanelQuestion/Panel/PanelQue_1")
self.PanelQue_2 = self.Transform:Find("PanelQuestion/Panel/PanelQue_2")
self.PanelQue_3 = self.Transform:Find("PanelQuestion/Panel/PanelQue_3")
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.PanelTime = self.Transform:Find("PanelTime")
self.SliderTime = self.Transform:Find("PanelTime/SliderTime"):GetComponent("Slider")
self.PanelReady = self.Transform:Find("PanelReady")
self.TxtCountDown = self.Transform:Find("PanelReady/TxtCountDown"):GetComponent("Text")
end
function XUiPanelGame:RegisterClickEvent(uiNode, func)
if func == nil then
XLog.Error("XUiPanelGame:RegisterClickEvent函数参数错误参数func不能为空")
return
end
if type(func) ~= "function" then
XLog.Error("XUiPanelGame:RegisterClickEvent函数错误, 参数func需要是function类型, func的类型是" .. type(func))
end
local listener = function(...)
func(self, ...)
end
CsXUiHelper.RegisterClickEvent(uiNode, listener)
end
function XUiPanelGame:AutoAddListener()
end
-- auto
return XUiPanelGame