From b43b1369eb7946b797ad2fe55d467b23ccf5ed73 Mon Sep 17 00:00:00 2001
From: MrZ626 <1046101471@qq.com>
Date: Tue, 10 Nov 2020 15:41:42 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E5=8F=98=E9=87=8F=E5=90=8D/?=
=?UTF-8?q?=E7=8E=A9=E5=AE=B6=E6=93=8D=E4=BD=9C=E5=87=BD=E6=95=B0/?=
=?UTF-8?q?=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
parts/player.lua | 199 +++++++++++++++++++++++++----------------------
1 file changed, 104 insertions(+), 95 deletions(-)
diff --git a/parts/player.lua b/parts/player.lua
index f0e9b837..8533a288 100644
--- a/parts/player.lua
+++ b/parts/player.lua
@@ -221,14 +221,14 @@ local function Pupdate_alive(P,dt)
if not P.cur or P:ifoverlap(P.cur.bk,P.curX+1,P.curY)then
mov=das+arr-1
else
- P.act.moveRight(P,true)
+ P:act_moveRight(true)
mov=das
end
end
mov=mov+1
else
if mov==das then
- P.act.insRight(P,true)
+ P:act_insRight(true)
else
mov=mov+1
end
@@ -246,14 +246,14 @@ local function Pupdate_alive(P,dt)
if not P.cur or P:ifoverlap(P.cur.bk,P.curX-1,P.curY)then
mov=das+arr-1
else
- P.act.moveLeft(P,true)
+ P:act_moveLeft(true)
mov=das
end
end
mov=mov+1
else
if mov==das then
- P.act.insLeft(P,true)
+ P:act_insLeft(true)
else
mov=mov+1
end
@@ -278,10 +278,10 @@ local function Pupdate_alive(P,dt)
if d>1 then
if P.gameEnv.sdarr>0 then
if d%P.gameEnv.sdarr==0 then
- P.act.down1(P)
+ P:act_down1()
end
else
- P.act.insDown(P)
+ P:act_insDown()
end
if P.gameEnv.shakeFX then
P.fieldOff.vy=P.gameEnv.shakeFX*.3
@@ -1043,10 +1043,10 @@ local function getNewStatTable()
end
return T
end
-local function pressKey(P,i)
- if P.keyAvailable[i]then
- P.keyPressing[i]=true
- P.act[i](P)
+local function pressKey(P,keyID)
+ if P.keyAvailable[keyID]then
+ P.keyPressing[keyID]=true
+ P.actList[keyID](P)
if P.control then
if P.keyRec then
ins(P.keyTime,1,GAME.frame)
@@ -1056,17 +1056,17 @@ local function pressKey(P,i)
P.stat.key=P.stat.key+1
end
end
-local function releaseKey(P,i)
- P.keyPressing[i]=false
+local function releaseKey(P,keyID)
+ P.keyPressing[keyID]=false
end
-local function pressKey_Rec(P,i)
- if P.keyAvailable[i]then
+local function pressKey_Rec(P,keyID)
+ if P.keyAvailable[keyID]then
if GAME.recording then
ins(GAME.rec,GAME.frame+1)
- ins(GAME.rec,i)
+ ins(GAME.rec,keyID)
end
- P.keyPressing[i]=true
- P.act[i](P)
+ P.keyPressing[keyID]=true
+ P.actList[keyID](P)
if P.control then
if P.keyRec then
ins(P.keyTime,1,GAME.frame)
@@ -1076,12 +1076,12 @@ local function pressKey_Rec(P,i)
P.stat.key=P.stat.key+1
end
end
-local function releaseKey_Rec(P,i)
+local function releaseKey_Rec(P,keyID)
if GAME.recording then
ins(GAME.rec,GAME.frame+1)
- ins(GAME.rec,-i)
+ ins(GAME.rec,-keyID)
end
- P.keyPressing[i]=false
+ P.keyPressing[keyID]=false
end
local function loadGameEnv(P)--Load gameEnv
P.gameEnv={}--Current game setting environment
@@ -1089,13 +1089,13 @@ local function loadGameEnv(P)--Load gameEnv
--Load game settings
for k,v in next,gameEnv0 do
if modeEnv[k]~=nil then
- v=modeEnv[k] --Mode setting
+ v=modeEnv[k] --Mode setting
-- DBP("mode-"..k..":"..tostring(v))
elseif GAME.setting[k]~=nil then
- v=GAME.setting[k] --Game setting
+ v=GAME.setting[k] --Game setting
-- DBP("game-"..k..":"..tostring(v))
elseif SETTING[k]~=nil then
- v=SETTING[k] --Global setting
+ v=SETTING[k] --Global setting
-- DBP("global-"..k..":"..tostring(v))
-- else
-- DBP("default-"..k..":"..tostring(v))
@@ -2026,7 +2026,7 @@ function player.popNext(P)--Pop next queue to hand
--IHdS
if _[6]then
- P.act.hardDrop(P)
+ P.act_hardDrop(P)
_[6]=false
end
end
@@ -2059,25 +2059,24 @@ function player.cancel(P,N)--Cancel Garbage
end
return off
end
-do--player.drop(P)--Place piece
- local b2bPoint={50,100,180,1000,1200}
- local b2bATK={3,5,8,12,18}
- local clearSCR={80,200,400}
- local spinSCR={--[blockName][row]
+do--player:drop()--Place piece
+ local clearSCR={80,200,400}--Techrash:1K; B2Bmul:1.3/1.8
+ local spinSCR={
{200,750,1300,2000},--Z
{200,750,1300,2000},--S
{220,700,1300,2000},--L
{220,700,1300,2000},--J
{250,800,1400,2000},--T
- {260,900,1700,4000,6000},--O
+ {260,900,1600,4500,7000},--O
{300,1200,1700,4000,6000},--I
{220,800,2000,3000,8000,26000},--Else
- }
- --B2BMUL:1.2/2.0
- --Techrash:1K;MUL:1.3/1.8
- --Mini*=.6
+ }--B2Bmul:1.2/2.0; Mini*=.6
+ local b2bPoint={50,100,180,1000,1200,9999}
+
+ local b2bATK={3,5,8,12,18}
local reAtk={0,0,1,1,1,2,2,3,3}
local reDef={0,1,1,2,3,3,4,4,5}
+
local spinVoice={"zspin","sspin","jspin","lspin","tspin","ospin","ispin","zspin","sspin","pspin","qspin","fspin","espin","tspin","uspin","vspin","wspin","xspin","jspin","lspin","rspin","yspin","hspin","nspin","ispin"}
local clearVoice={"single","double","triple","techrash","pentcrash","hexcrash"}
local spinSFX={[0]="spin_0","spin_1","spin_2"}
@@ -2830,22 +2829,10 @@ function player.lose(P,force)
PLAYERS.alive[1]:win()
end
end
-
-function PLY.check_lineReach(P)
- if P.stat.row>=P.gameEnv.target then
- P:win("finish")
- end
-end
-function PLY.check_attackReach(P)
- if P.stat.atk>=P.gameEnv.target then
- P:win("finish")
- end
-end
--------------------------<\Events>--------------------------
----------------------------------------------------
-player.act={}
-function player.act.moveLeft(P,auto)
+function player.act_moveLeft(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
@@ -2872,7 +2859,7 @@ function player.act.moveLeft(P,auto)
P.moving=0
end
end
-function player.act.moveRight(P,auto)
+function player.act_moveRight(P,auto)
if not auto then
P.ctrlCount=P.ctrlCount+1
end
@@ -2899,28 +2886,28 @@ function player.act.moveRight(P,auto)
P.moving=0
end
end
-function player.act.rotRight(P)
+function player.act_rotRight(P)
if P.control and P.waiting==-1 and P.cur then
P.ctrlCount=P.ctrlCount+1
P:spin(1)
P.keyPressing[3]=false
end
end
-function player.act.rotLeft(P)
+function player.act_rotLeft(P)
if P.control and P.waiting==-1 and P.cur then
P.ctrlCount=P.ctrlCount+1
P:spin(3)
P.keyPressing[4]=false
end
end
-function player.act.rot180(P)
+function player.act_rot180(P)
if P.control and P.waiting==-1 and P.cur then
P.ctrlCount=P.ctrlCount+2
P:spin(2)
P.keyPressing[5]=false
end
end
-function player.act.hardDrop(P)
+function player.act_hardDrop(P)
if P.keyPressing[9]then
if P.gameEnv.swap then
P:changeAtkMode(3)
@@ -2946,7 +2933,7 @@ function player.act.hardDrop(P)
P.keyPressing[6]=false
end
end
-function player.act.softDrop(P)
+function player.act_softDrop(P)
if P.keyPressing[9]then
if P.gameEnv.swap then
P:changeAtkMode(4)
@@ -2962,22 +2949,22 @@ function player.act.softDrop(P)
end
end
end
-function player.act.hold(P)
+function player.act_hold(P)
if P.control and P.waiting==-1 then
P:hold()
end
end
-function player.act.func(P)
+function player.act_func(P)
P.gameEnv.Fkey(P)
end
-function player.act.restart()
+function player.act_restart()
if GAME.frame<240 or GAME.result then
resetPartGameData()
else
LOG.print(text.holdR,20,COLOR.orange)
end
end
-function player.act.insLeft(P,auto)
+function player.act_insLeft(P,auto)
if not P.cur then return end
local x0=P.curX
while not P:ifoverlap(P.cur.bk,P.curX-1,P.curY)do
@@ -2999,7 +2986,7 @@ function player.act.insLeft(P,auto)
P.ctrlCount=P.ctrlCount+1
end
end
-function player.act.insRight(P,auto)
+function player.act_insRight(P,auto)
if not P.cur then return end
local x0=P.curX
while not P:ifoverlap(P.cur.bk,P.curX+1,P.curY)do
@@ -3021,21 +3008,21 @@ function player.act.insRight(P,auto)
P.ctrlCount=P.ctrlCount+1
end
end
-function player.act.insDown(P)
+function player.act_insDown(P)
if P.cur and P.curY>P.imgY then
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-P.imgY-P.r>-1 then
P:createDropFX(P.curX,P.curY-1,P.c,P.curY-P.imgY-P.r+1)
end
if P.gameEnv.shakeFX then
P.fieldOff.vy=P.gameEnv.shakeFX*.5
- end
+ end
P.curY=P.imgY
P.lockDelay=P.gameEnv.lock
P.spinLast=false
P:freshBlock(true,true)
- end
end
-function player.act.down1(P)
+ end
+function player.act_down1(P)
if P.cur and P.curY>P.imgY then
if P.gameEnv.moveFX and P.gameEnv.block then
P:createMoveFX("down")
@@ -3045,7 +3032,7 @@ function player.act.down1(P)
P.spinLast=false
end
end
-function player.act.down4(P)
+function player.act_down4(P)
if P.cur and P.curY>P.imgY then
local y=max(P.curY-4,P.imgY)
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-y-P.r>-1 then
@@ -3056,7 +3043,7 @@ function player.act.down4(P)
P.spinLast=false
end
end
-function player.act.down10(P)
+function player.act_down10(P)
if P.cur and P.curY>P.imgY then
local y=max(P.curY-10,P.imgY)
if P.gameEnv.dropFX and P.gameEnv.block and P.curY-y-P.r>-1 then
@@ -3067,44 +3054,66 @@ function player.act.down10(P)
P.spinLast=false
end
end
-function player.act.dropLeft(P)
+function player.act_dropLeft(P)
if not P.cur then return end
- P.act.insLeft(P)
- P.act.hardDrop(P)
-end
-function player.act.dropRight(P)
+ P:act_insLeft()
+ P:act_hardDrop()
+ end
+function player.act_dropRight(P)
if not P.cur then return end
- P.act.insRight(P)
- P.act.hardDrop(P)
-end
-function player.act.zangiLeft(P)
+ P:act_insRight()
+ P:act_hardDrop()
+ end
+function player.act_zangiLeft(P)
if not P.cur then return end
- P.act.insLeft(P)
- P.act.insDown(P)
- P.act.insRight(P)
- P.act.hardDrop(P)
+ P:act_insLeft()
+ P:act_insDown()
+ P:act_insRight()
+ P:act_hardDrop()
end
-function player.act.zangiRight(P)
+function player.act_zangiRight(P)
if not P.cur then return end
- P.act.insRight(P)
- P.act.insDown(P)
- P.act.insLeft(P)
- P.act.hardDrop(P)
-end
---Give operations a num name
-do
- local A=player.act
- local T={
- A.moveLeft ,A.moveRight, A.rotRight, A.rotLeft,
- A.rot180 ,A.hardDrop, A.softDrop, A.hold,
- A.func ,A.restart, A.insLeft, A.insRight,
- A.insDown ,A.down1, A.down4, A.down10,
- A.dropLeft ,A.dropRight, A.zangiLeft,A.zangiRight
- }for i=1,20 do A[i]=T[i]end
+ P:act_insRight()
+ P:act_insDown()
+ P:act_insLeft()
+ P:act_hardDrop()
end
+player.actList={
+ player.act_moveLeft,
+ player.act_moveRight,
+ player.act_rotRight,
+ player.act_rotLeft,
+ player.act_rot180,
+ player.act_hardDrop,
+ player.act_softDrop,
+ player.act_hold,
+ player.act_func,
+ player.act_restart,
+ player.act_insLeft,
+ player.act_insRight,
+ player.act_insDown,
+ player.act_down1,
+ player.act_down4,
+ player.act_down10,
+ player.act_dropLeft,
+ player.act_dropRight,
+ player.act_zangiLeft,
+ player.act_zangiRight,
+}
----------------------------------------------------
-----------------------------------------------------
+----------------------------------------------------
+function PLY.check_lineReach(P)
+ if P.stat.row>=P.gameEnv.target then
+ P:win("finish")
+end
+end
+function PLY.check_attackReach(P)
+ if P.stat.atk>=P.gameEnv.target then
+ P:win("finish")
+end
+end
+
function PLY.newDemoPlayer(id,x,y,size)
local P=newEmptyPlayer(id,x,y,size)
P.sound=true
@@ -3206,5 +3215,5 @@ function PLY.newPlayer(id,x,y,size)
prepareSequence(P)
end
-----------------------------------------------------
+----------------------------------------------------
return PLY
\ No newline at end of file