split freshBlock into 4 methods

This commit is contained in:
Imple Lee
2023-11-20 23:36:38 +08:00
parent 074cefed5d
commit ea3fb8d09e
5 changed files with 60 additions and 55 deletions

View File

@@ -170,7 +170,7 @@ do
},-- T
function(P,d)
if P.gameEnv.easyFresh then
P:freshBlock('fresh')
P:freshBlockDelay()
end
if P.gameEnv.ospin then
local x,y=P.curX,P.curY
@@ -203,7 +203,7 @@ do
C.dir=dir
P.spinLast=2
P.stat.rotate=P.stat.rotate+1
P:freshBlock('move')
P:freshMoveBlock()
C.spinSeq=nil
return
end
@@ -681,7 +681,7 @@ do
local t=P.freshTime
if not ifpre then
P:freshBlock('move')
P:freshMoveBlock()
end
if fdy>0 and P.freshTime==t and P.curY~=P.imgY then
P.freshTime=P.freshTime-1

View File

@@ -15,13 +15,13 @@ return {
if P.cur and not P:ifoverlap(P.cur.bk,P.curX-1,P.curY) then
P:createMoveFX('left')
P.curX=P.curX-1
P:freshBlock('move')
P:freshMoveBlock()
end
elseif r==2 then
if P.cur and not P:ifoverlap(P.cur.bk,P.curX-1,P.curY) then
P:createMoveFX('left')
P.curX=P.curX-1
P:freshBlock('move')
P:freshMoveBlock()
end
elseif r==3 then
P:act_rotRight()

View File

@@ -26,7 +26,7 @@ return {
P.garbageBeneath=P.garbageBeneath-bonus
end
end
P:freshBlock('push')
P:freshBlockGhost()
end
end,
}

View File

@@ -26,7 +26,7 @@ return {
P.garbageBeneath=P.garbageBeneath-bonus
end
end
P:freshBlock('push')
P:freshBlockGhost()
end
end,
}

View File

@@ -214,7 +214,7 @@ function Player:_deepDrop()
self.ghoY=y
self:createDropFX()
self.curY=y
self:freshBlock('move')
self:freshMoveBlock()
SFX.play('swipe')
end
end
@@ -230,7 +230,7 @@ function Player:act_moveLeft(auto)
self:_triggerEvent('hook_left_'..(auto and 'auto' or 'manual'))
self:createMoveFX('left')
self.curX=self.curX+self.movDir
self:freshBlock('move')
self:freshMoveBlock()
if not auto then
self.moving=0
end
@@ -254,7 +254,7 @@ function Player:act_moveRight(auto)
self:_triggerEvent('hook_right_'..(auto and 'auto' or 'manual'))
self:createMoveFX('right')
self.curX=self.curX+self.movDir
self:freshBlock('move')
self:freshMoveBlock()
if not auto then
self.moving=0
end
@@ -367,7 +367,7 @@ function Player:act_insLeft(auto)
while not self:ifoverlap(self.cur.bk,self.curX-1,self.curY) do
self:createMoveFX('left')
self.curX=self.curX-1
self:freshBlock('move',true)
self:freshMoveBlock(true)
end
if self.curX~=x0 then
self.spinLast=false
@@ -391,7 +391,7 @@ function Player:act_insRight(auto)
while not self:ifoverlap(self.cur.bk,self.curX+1,self.curY) do
self:createMoveFX('right')
self.curX=self.curX+1
self:freshBlock('move',true)
self:freshMoveBlock(true)
end
if self.curX~=x0 then
self.spinLast=false
@@ -417,7 +417,7 @@ function Player:act_insDown()
self.curY=self.ghoY
self.lockDelay=ENV.lock
self.spinLast=false
self:freshBlock('fresh')
self:freshBlockDelay()
self:checkTouchSound()
end
end
@@ -427,7 +427,7 @@ function Player:act_down1()
if self.curY>self.ghoY then
self:createMoveFX('down')
self.curY=self.curY-1
self:freshBlock('fresh')
self:freshBlockDelay()
self.spinLast=false
elseif self.gameEnv.deepDrop then
self:_deepDrop()
@@ -442,7 +442,7 @@ function Player:act_down4()
self.ghoY=max(self.curY-4,self.ghoY)
self:createDropFX()
self.curY,self.ghoY=self.ghoY,ghoY0
self:freshBlock('fresh')
self:freshBlockDelay()
self.spinLast=false
elseif self.gameEnv.deepDrop then
self:_deepDrop()
@@ -457,7 +457,7 @@ function Player:act_down10()
self.ghoY=max(self.curY-0,self.ghoY)
self:createDropFX()
self.curY,self.ghoY=self.ghoY,ghoY0
self:freshBlock('fresh')
self:freshBlockDelay()
self.spinLast=false
elseif self.gameEnv.deepDrop then
self:_deepDrop()
@@ -747,7 +747,7 @@ function Player:garbageRise(color,amount,line)-- Release n-lines garbage to fiel
for i=1,#self.clearingRow do
self.clearingRow[i]=self.clearingRow[i]+amount
end
self:freshBlock('push')
self:freshBlockGhost()
for i=1,#self.lockFX do
_=self.lockFX[i]
_[2]=_[2]-30*amount-- Shift 30px per line cleared
@@ -789,7 +789,7 @@ function Player:pushLineList(L,mir)-- Push some lines to field
self.curY=self.curY+l
self.ghoY=self.ghoY+l
end
self:freshBlock('push')
self:freshBlockGhost()
end
function Player:pushNextList(L,mir)-- Push some nexts to nextQueue
for i=1,#L do
@@ -947,10 +947,9 @@ function Player:changeAtk(R)
self.atking=false
end
end
function Player:freshBlock(mode,ifTele)-- string mode: push/move/fresh/newBlock
function Player:freshBlockGhost()
local ENV=self.gameEnv
-- Fresh ghost
if (mode=='move' or mode=='newBlock' or mode=='push') and self.cur then
if self.cur then
local CB=self.cur.bk
self.ghoY=min(#self.field+1,self.curY)
if self._20G or ENV.sdarr==0 and self.keyPressing[7] and self.downing>=ENV.sddas then
@@ -980,42 +979,48 @@ function Player:freshBlock(mode,ifTele)-- string mode: push/move/fresh/newBlock
end
end
end
-- Fresh delays
if mode=='move' or mode=='newBlock' or mode=='fresh' then
local d0,l0=ENV.drop,ENV.lock
local C=self.cur
local sc=C.RS.centerPos[C.id][C.dir]
if ENV.easyFresh then
end
function Player:freshBlockDelay(keepFreshTime)
local ENV=self.gameEnv
local d0,l0=ENV.drop,ENV.lock
local C=self.cur
local sc=C.RS.centerPos[C.id][C.dir]
if ENV.easyFresh then
if self.lockDelay<l0 and self.freshTime>0 then
if not keepFreshTime then
self.freshTime=self.freshTime-1
end
self.lockDelay=l0
self.dropDelay=d0
end
if self.curY+sc[1]<self.minY then
self.minY=self.curY+sc[1]
self.dropDelay=d0
self.lockDelay=l0
end
else
if self.curY+sc[1]<self.minY then
self.minY=self.curY+sc[1]
if self.lockDelay<l0 and self.freshTime>0 then
if mode~='newBlock' then
self.freshTime=self.freshTime-1
end
self.lockDelay=l0
self.dropDelay=d0
end
if self.curY+sc[1]<self.minY then
self.minY=self.curY+sc[1]
self.freshTime=self.freshTime-1
self.dropDelay=d0
self.lockDelay=l0
end
else
if self.curY+sc[1]<self.minY then
self.minY=self.curY+sc[1]
if self.lockDelay<l0 and self.freshTime>0 then
self.freshTime=self.freshTime-1
self.dropDelay=d0
self.lockDelay=l0
end
end
end
end
end
function Player:freshMoveBlock(ifTele)
self:freshBlockGhost()
self:freshBlockDelay()
-- Play sound if touch ground
if mode=='move' and not ifTele then
if not ifTele then
self:checkTouchSound()
end
end
function Player:freshNewBlock()
self:freshBlockGhost()
self:freshBlockDelay(true)
end
function Player:lock()
local CB=self.cur.bk
for i=1,#CB do
@@ -1207,7 +1212,7 @@ function Player:spin(d,ifpre)
local idir=(C.dir+d)%4
kickData=kickData[C.dir*10+idir]
if not kickData then
self:freshBlock('move')
self:freshMoveBlock()
SFX.play(ifpre and 'prerotate' or 'rotate',nil,self:getCenterX()*.15)
return
end
@@ -1228,7 +1233,7 @@ function Player:spin(d,ifpre)
-- Fresh ghost and freshTime
local t=self.freshTime
if not ifpre then
self:freshBlock('move')
self:freshMoveBlock()
end
if kickData[test][2]>0 and self.freshTime==t and self.curY~=self.imgY then
self.freshTime=self.freshTime-1
@@ -1254,7 +1259,7 @@ function Player:spin(d,ifpre)
elseif kickData then
kickData(self,d)
else
self:freshBlock('move')
self:freshMoveBlock()
SFX.play(ifpre and 'prerotate' or 'rotate',nil,self:getCenterX()*.15)
end
end
@@ -1325,7 +1330,7 @@ function Player:hold_norm(ifpre)
self:resetBlock()
end
self:freshBlock('move')
self:freshMoveBlock()
self.dropDelay=ENV.drop
self.lockDelay=ENV.lock
self:_checkSuffocate()
@@ -1403,7 +1408,7 @@ function Player:hold_swap(ifpre)
self:resetBlock()
end
self:freshBlock('move')
self:freshMoveBlock()
self.dropDelay=ENV.drop
self.lockDelay=ENV.lock
self:_checkSuffocate()
@@ -1483,7 +1488,7 @@ function Player:popNext(ifhold)-- Pop nextQueue to hand
if self.cur then
self:_checkSuffocate()
self:freshBlock('newBlock')
self:freshNewBlock()
end
-- IHdS
@@ -2638,7 +2643,7 @@ local function update_alive(P,dt)
end
P.spinLast=false
P:freshBlock('fresh')
P:freshBlockDelay()
P:checkTouchSound()
else
P.lockDelay=P.lockDelay-1
@@ -2842,7 +2847,7 @@ function Player:revive()
self.life=self.life-1
self.fieldBeneath=0
self.b2b=0
self:freshBlock('push')
self:freshBlockGhost()
for i=1,h do
self:createClearingFX(i)