消除所有填满行的函数整理为玩家类的clearFilledLines方法

添加消7~20和20+的消除文本与消除音效
播放消n音效打包为函数移至gameFuncs文件
This commit is contained in:
MrZ626
2021-11-02 16:30:00 +08:00
parent aa01ab07f7
commit bd260b2c6f
14 changed files with 63 additions and 43 deletions

View File

@@ -621,7 +621,7 @@ function Player:lock()
end
end
function Player:checkClear(field,start,height,CB,CX)
function Player:_checkClear(field,start,height,CB,CX)
local cc,gbcc=0,0
for i=1,height do
local h=start+i-2
@@ -653,7 +653,7 @@ function Player:checkClear(field,start,height,CB,CX)
end
return cc,gbcc
end
function Player:roofCheck()
function Player:_roofCheck()
local CB=self.cur.bk
for x=1,#CB[1]do
local y=#CB
@@ -672,7 +672,7 @@ function Player:roofCheck()
end
return false
end
function Player:removeClearedLines()
function Player:_removeClearedLines()
for i=#self.clearedRow,1,-1 do
local h=self.clearedRow[i]
if self.field[h].garbage then
@@ -682,6 +682,18 @@ function Player:removeClearedLines()
FREEROW.discard(rem(self.visTime,h))
end
end
function Player:clearFilledLines(start,height)
local _cc,_gbcc=self:_checkClear(self.field,start,height)
if _cc>0 then
playClearSFX(_cc)
self:showText(text.clear[min(_cc,21)],0,0,60,'beat',.4)
self:_removeClearedLines()
self.falling=self.gameEnv.fall
self.stat.row=self.stat.row+_cc
self.stat.dig=self.stat.dig+_gbcc
end
return _cc,_gbcc
end
function Player:removeTopClearingFX()
for i=#self.clearingRow,1,-1 do
if self.clearingRow[i]>#self.field then
@@ -710,7 +722,7 @@ function Player:checkMission(piece,mission)
return false
end
local spawnSFX_name={}for i=1,7 do spawnSFX_name[i]='spawn_'..i end
local spawnSFX_name={'spawn_1','spawn_2','spawn_3','spawn_4','spawn_5','spawn_6','spawn_7'}
function Player:resetBlock()--Reset Block's position and execute I*S
local C=self.cur
local sc=C.RS.centerPos[C.id][C.dir]
@@ -1083,7 +1095,6 @@ do--Player.drop(self)--Place piece
local spinVoice={'zspin','sspin','jspin','lspin','tspin','ospin','ispin','zspin','sspin','pspin','qspin','fspin','espin','tspin','uspin','vspin','wspin','xspin','jspin','lspin','rspin','yspin','nspin','hspin','ispin','ispin','cspin','ispin','ospin'}
local clearVoice={'single','double','triple','techrash','pentacrash','hexacrash'}
local spinSFX={[0]='spin_0','spin_1','spin_2'}
local clearSFX={'clear_1','clear_2','clear_3','clear_4','clear_5','clear_6'}
local renSFX={}for i=1,11 do renSFX[i]='ren_'..i end
local finesseList={
{
@@ -1241,7 +1252,7 @@ do--Player.drop(self)--Place piece
--Check line clear
if self.gameEnv.fillClear then
local _cc,_gbcc=self:checkClear(self.field,CY,#CB,CB,CX)
local _cc,_gbcc=self:_checkClear(self.field,CY,#CB,CB,CX)
cc,gbcc=cc+_cc,gbcc+_gbcc
end
@@ -1272,10 +1283,10 @@ do--Player.drop(self)--Place piece
end
--Finesse: roof check
local finesse=CY>ENV.fieldH-2 or self:roofCheck()
local finesse=CY>ENV.fieldH-2 or self:_roofCheck()
--Remove rows need to be cleared
self:removeClearedLines()
self:_removeClearedLines()
--Cancel top clearing FX & get clear flag
clear=self:removeTopClearingFX()
@@ -1519,7 +1530,7 @@ do--Player.drop(self)--Place piece
--SFX & Vibrate
if self.sound then
SFX.play(clearSFX[cc])
playClearSFX(cc)
SFX.play(renSFX[min(cmb,11)],.75)
if cmb>14 then
SFX.play('ren_mega',(cmb-10)*.1)
@@ -2283,7 +2294,7 @@ function Player:revive()
SYSFX.newShade(1.4,self.fieldX,self.fieldY,300*self.size,610*self.size)
SYSFX.newRectRipple(2,self.fieldX,self.fieldY,300*self.size,610*self.size)
SYSFX.newRipple(2,self.x+(475+25*(self.life<3 and self.life or 0)+12)*self.size,self.y+(595+12)*self.size,20)
SFX.play('clear_3')
playClearSFX(3)
SFX.play('emit')
end
function Player:win(result)