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

163 lines
No EOL
4.3 KiB
Lua

local ComeAcrossGamePlayer = require("XUi/XUiComeAcross/ComeAcrossGamePlayer")
local ComeAcrossClickGamePlayer = XClass(ComeAcrossGamePlayer, "ComeAcrossClickGamePlayer")
------------------需要重写的方法--------------------------------
--初始化
function ComeAcrossClickGamePlayer:OnPlayerInit()
self.TotalTimeLimit = 0 --游戏时间限制
ComeAcrossClickGamePlayer.Super.OnPlayerInit(self)
end
--播放下一关
function ComeAcrossClickGamePlayer:OnPlayerNextLevel()
self.TotalTimeLimit = self.GameData.Time
ComeAcrossClickGamePlayer.Super.OnPlayerNextLevel(self)
end
--开始游戏
function ComeAcrossClickGamePlayer:OnPlayerStart()
self.TotalTimeLimit = 0
end
--等待开始
function ComeAcrossClickGamePlayer:OnPlayerReadyDelay(isReadyDelay, delayTime)
if self.OnPlayReadyDelay then
self.OnPlayReadyDelay(isReadyDelay, delayTime)
end
end
--等待下关
function ComeAcrossClickGamePlayer:OnPlayerWaitForNext(isWaiting, waitTime)
if self.OnPlayWaitForNext then
self.OnPlayWaitForNext(isWaiting, waitTime)
end
end
--等待结束
function ComeAcrossClickGamePlayer:OnPlayerWaitForEnding(isEnding, delayTime)
if self.OnPlayEndingDelay then
self.OnPlayEndingDelay(isEnding, delayTime)
end
end
--更新
function ComeAcrossClickGamePlayer:OnPlayerUpdate()
if self.OnPlayUpdate then
self.OnPlayUpdate(self.Time, self.TotalTimeLimit)
end
if self.Time >= self.TotalTimeLimit then
self.State = ComeAcrossGamePlayer.PlayerState.WAIT
self:TimeOut()
end
end
--停止回调
function ComeAcrossClickGamePlayer:OnPlayerStop()
end
--完成回调
function ComeAcrossClickGamePlayer:OnPlayerFinish()
if self.OnPlayFinish then
self.OnPlayFinish(self.PlayResult)
end
end
--处理消除的元素
function ComeAcrossClickGamePlayer:OnPlayerDealClick(id)
local target = nil
local targetIndex = -1
for i, v in ipairs(self.GameData.Answer) do
if v.Index == id then
target = v
targetIndex = i
break
end
end
if not target then
XLog.Error("ComeAcrossClickGamePlayer:OnClick 找不到Id", id)
return
end
local removeList = {}
local last = target.Last
local next = target.Next
table.insert(removeList, target)
removeList, last, next, targetIndex = self:FindNeighborRecursion(removeList, target.Type, targetIndex, last, next, true)
if removeList and #removeList >= targetIndex then
for _ = 1,#removeList,1 do
table.remove(self.GameData.Answer,targetIndex)
end
end
if last then
last.Next = next
end
if next then
next.Last = last
end
--如果条件不符合
local success = false
local question = self.GameData.Question[self.Step]
if #question == #removeList and question[1] == target.Type then
success = true
end
if self.OnPlayClick then
self.OnPlayClick(success, removeList,self.Step)
end
if success then
self.State = ComeAcrossGamePlayer.PlayerState.ELIMINATE
self.LastEliminate = self.Time
self.Step = self.Step + 1
self:OnPlayerCheckLevelFinish()
else
self.PlayResult[self.LevelIndex] = 0
self:OnPlayerStepChanged()
self.State = ComeAcrossGamePlayer.PlayerState.WAIT
self.LevelChangeWaitTime = CS.XGame.Config:GetInt("TrustGameWaitForNextSecond")
end
end
--检测当前关卡是否完成
function ComeAcrossClickGamePlayer:OnPlayerCheckLevelFinish()
if self.Step > #self.GameData.Question then
self.PlayResult[self.LevelIndex] = 1
self:OnPlayerStepChanged()
self.State = ComeAcrossGamePlayer.PlayerState.WAIT
self.LevelChangeWaitTime = CS.XGame.Config:GetInt("TrustGameWaitForNextSecond")
end
end
--每一步骤回调
function ComeAcrossGamePlayer:OnPlayerStepChanged(isTimeOut)
if self.OnPlayStepChange then
self.OnPlayStepChange(self.LevelIndex,self.PlayResult,isTimeOut)
end
end
------------------------------------------
--超时
function ComeAcrossClickGamePlayer:TimeOut()
self.PlayResult[self.LevelIndex] = 0
self:OnPlayerStepChanged(true)
self.State = ComeAcrossGamePlayer.PlayerState.WAIT
self.LevelChangeWaitTime = CS.XGame.Config:GetInt("TrustGameWaitForNextSecond")
end
return ComeAcrossClickGamePlayer