352 lines
11 KiB
Lua
352 lines
11 KiB
Lua
|
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
|