From 7d5059c6ca2aef12f77ee1b537f4d822da4f50b6 Mon Sep 17 00:00:00 2001
From: MrZ626 <1046101471@qq.com>
Date: Thu, 25 Mar 2021 14:10:50 +0800
Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81=EF=BC=8Csc?=
=?UTF-8?q?issor=E6=8D=A2=E7=94=A8stencil=EF=BC=8C=E4=B8=BA=E6=97=8B?=
=?UTF-8?q?=E8=BD=AC=E5=9C=BA=E5=9C=B0=E5=81=9A=E5=87=86=E5=A4=87?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
parts/player/draw.lua | 115 +++++++++++++++++++++---------------------
1 file changed, 58 insertions(+), 57 deletions(-)
diff --git a/parts/player/draw.lua b/parts/player/draw.lua
index 0d1faa0c..8e986d08 100644
--- a/parts/player/draw.lua
+++ b/parts/player/draw.lua
@@ -1,12 +1,16 @@
local gc=love.graphics
-local gc_push,gc_pop,gc_scale,gc_translate=gc.push,gc.pop,gc.scale,gc.translate
-local gc_draw,gc_print,gc_line,gc_rectangle,gc_circle=gc.draw,gc.print,gc.line,gc.rectangle,gc.circle
+local gc_push,gc_pop,gc_clear,gc_origin=gc.push,gc.pop,gc.clear,gc.origin
+local gc_translate,gc_scale=gc.translate,gc.scale
+local gc_setCanvas,gc_setShader=gc.setCanvas,gc.setShader
+local gc_draw,gc_line,gc_rectangle,gc_circle=gc.draw,gc.line,gc.rectangle,gc.circle
+local gc_print,gc_printf=gc.print,gc.printf
local gc_setColor,gc_setLineWidth=gc.setColor,gc.setLineWidth
-local TIME=TIME
+local gc_stencil,gc_setStencilTest=gc.stencil,gc.setStencilTest
+
local int,ceil,rnd=math.floor,math.ceil,math.random
local max,min,sin,modf=math.max,math.min,math.sin,math.modf
-local SCR=SCR
local setFont,mStr=setFont,mStr
+local TIME=TIME
local frameColorList={
[0]=COLOR.white,
@@ -16,6 +20,7 @@ local frameColorList={
COLOR.lOrange,
}
--local function drawCell(y,x,id)gc_draw(SKIN.curText[id],30*x-30,-30*y)end
+local function stencilBoard()gc_rectangle("fill",0,-10,300,610)end
local function drawGrid(P)
local d=P.fieldBeneath+P.fieldUp
gc_setLineWidth(1)
@@ -67,13 +72,13 @@ local function drawField(P)
if P.falling==-1 then--Blocks only
if ENV.upEdge then
- gc.setShader(SHADER.lighter)
- gc.translate(0,-4)
+ gc_setShader(SHADER.lighter)
+ gc_translate(0,-4)
--
for j=start,min(start+21,#F)do drawRow(j,V[j],F[j])end
--
- gc.setShader()
- gc.translate(0,4)
+ gc_setShader()
+ gc_translate(0,4)
end
--
@@ -85,8 +90,8 @@ local function drawField(P)
local h=1
if ENV.upEdge then
gc_push("transform")
- gc.setShader(SHADER.lighter)
- gc.translate(0,-4)
+ gc_setShader(SHADER.lighter)
+ gc_translate(0,-4)
--
for j=start,min(start+21,#F)do
while j==P.clearingRow[h]do
@@ -98,7 +103,7 @@ local function drawField(P)
drawRow(j,V[j],F[j])
end
--
- gc.setShader()
+ gc_setShader()
gc_pop()
h=1
end
@@ -169,7 +174,7 @@ local function drawGhost(P,clr)
end
local function drawBlockOutline(P,texture,trans)
SHADER.alpha:send("a",trans)
- gc.setShader(SHADER.alpha)
+ gc_setShader(SHADER.alpha)
local CB=P.cur.bk
for i=1,#CB do for j=1,#CB[1]do
if CB[i][j]then
@@ -181,7 +186,7 @@ local function drawBlockOutline(P,texture,trans)
gc_draw(texture,x,y+6)
end
end end
- gc.setShader()
+ gc_setShader()
end
local function drawBlock(P,clr)
gc_setColor(1,1,1)
@@ -315,6 +320,26 @@ local function drawHold(P)
gc_pop()
gc_pop()
end
+local RCPB={5,33,195,33,100,5,100,60}
+local hideBoardStencil={
+ up=function()gc_rectangle("fill",0,0,300,300)end,
+ down=function()gc_rectangle("fill",0,300,300,300)end,
+ all=function()gc_rectangle("fill",0,0,300,600)end,
+}
+local function drawDial(x,y,speed)
+ gc_setColor(1,1,1)
+ setFont(25)
+ mStr(int(speed),x,y-18)
+
+ gc_setLineWidth(2)
+ gc_circle("line",x,y,30,6)
+
+ gc_draw(IMG.dialNeedle,x,y,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4)
+
+ gc_setLineWidth(4)
+ gc_setColor(1,1,1,.4)
+ gc_circle("line",x,y,30,6)
+end
local function drawFinesseCombo_norm(P)
if P.finesseCombo>2 then
local S=P.stat
@@ -504,26 +529,6 @@ function draw.drawTargetLine(P,r)
end
end
-local RCPB={5,33,195,33,100,5,100,60}
-local function drawDial(x,y,speed)
- gc_setColor(1,1,1)
- setFont(25)
- mStr(int(speed),x,y-18)
-
- gc_setLineWidth(2)
- gc_circle("line",x,y,30,6)
-
- gc_draw(IMG.dialNeedle,x,y,2.094+(speed<=175 and .02094*speed or 4.712-52.36/(speed-125)),nil,nil,5,4)
-
- gc_setLineWidth(4)
- gc_setColor(1,1,1,.4)
- gc_circle("line",x,y,30,6)
-end
-local hideBoardStencil={
- up=function()gc_rectangle("fill",0,0,300,300)end,
- down=function()gc_rectangle("fill",0,300,300,300)end,
- all=function()gc_rectangle("fill",0,0,300,600)end,
-}
function draw.norm(P)
local ENV=P.gameEnv
local FBN,FUP=P.fieldBeneath,P.fieldUp
@@ -543,7 +548,9 @@ function draw.norm(P)
gc_setColor(0,0,0,.6)
gc_rectangle("fill",0,-10,300,610)
- --In-field things
+ --Stenciled in-field things
+ gc_stencil(stencilBoard,"replace",1)
+ gc_setStencilTest("equal",1)
gc_push("transform")
boardTransform(ENV.flipBoard)
@@ -553,9 +560,6 @@ function draw.norm(P)
--Move camera
gc_translate(0,600+FBN+FUP)
- --Set scissor
- gc.setScissor(SCR.x+(P.absFieldX+P.fieldOff.x)*SCR.k,SCR.y+(P.absFieldY+P.fieldOff.y)*SCR.k,300*P.size*SCR.k,610*P.size*SCR.k)
-
local fieldTop=-ENV.fieldH*30
--Draw dangerous area
gc_setColor(1,0,0,.3)
@@ -613,9 +617,8 @@ function draw.norm(P)
gc_draw(texture,30*L[i],-30*L[i+1]-30)
end
end
-
- gc.setScissor()
gc_pop()
+ gc_setStencilTest()
drawBoarders(P)
drawBuffer(P)
@@ -633,18 +636,18 @@ function draw.norm(P)
setFont(35)
for i=1,4 do
gc_rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4)
- gc.printf(text.atkModeName[i],RCPB[2*i-1]-4,RCPB[2*i]+4,200,"center",nil,.5)
+ gc_printf(text.atkModeName[i],RCPB[2*i-1]-4,RCPB[2*i]+4,200,"center",nil,.5)
end
end
if ENV.hideBoard then
- gc.stencil(hideBoardStencil[ENV.hideBoard],"replace",1)
- gc.setStencilTest("equal",1)
+ gc_stencil(hideBoardStencil[ENV.hideBoard],"replace",1)
+ gc_setStencilTest("equal",1)
gc_setLineWidth(20)
for i=0,24 do
gc_setColor(COLOR.rainbow_grey(t*.626+i*.1))
gc_line(20*i-190,-2,20*i+10,602)
end
- gc.setStencilTest()
+ gc_setStencilTest()
end
gc_pop()
@@ -710,7 +713,9 @@ function draw.norm_remote(P)
gc_setColor(0,0,0,.6)
gc_rectangle("fill",0,-10,300,610)
- --In-field things
+ --Stenciled in-field things
+ gc_stencil(stencilBoard,"replace",1)
+ gc_setStencilTest("equal",1)
gc_push("transform")
boardTransform(ENV.flipBoard)
@@ -720,9 +725,6 @@ function draw.norm_remote(P)
--Move camera
gc_translate(0,600+FBN+FUP)
- --Set scissor
- gc.setScissor(SCR.x+(P.absFieldX+P.fieldOff.x)*SCR.k,SCR.y+(P.absFieldY+P.fieldOff.y)*SCR.k,300*P.size*SCR.k,610*P.size*SCR.k)
-
local fieldTop=-ENV.fieldH*30
--Draw dangerous area
gc_setColor(1,0,0,.3)
@@ -771,9 +773,8 @@ function draw.norm_remote(P)
if ENV.nextPos and P.nextQueue[1]then
drawNextPreview(P,P.nextQueue[1])
end
-
- gc.setScissor()
gc_pop()
+ gc_setStencilTest()
drawBoarders(P)
drawBuffer(P)
@@ -791,18 +792,18 @@ function draw.norm_remote(P)
setFont(35)
for i=1,4 do
gc_rectangle("line",RCPB[2*i-1],RCPB[2*i],90,35,8,4)
- gc.printf(text.atkModeName[i],RCPB[2*i-1]-4,RCPB[2*i]+4,200,"center",nil,.5)
+ gc_printf(text.atkModeName[i],RCPB[2*i-1]-4,RCPB[2*i]+4,200,"center",nil,.5)
end
end
if ENV.hideBoard then
- gc.stencil(hideBoardStencil[ENV.hideBoard],"replace",1)
- gc.setStencilTest("equal",1)
+ gc_stencil(hideBoardStencil[ENV.hideBoard],"replace",1)
+ gc_setStencilTest("equal",1)
gc_setLineWidth(20)
for i=0,24 do
gc_setColor(COLOR.rainbow_grey(t*.626+i*.1))
gc_line(20*i-190,-2,20*i+10,602)
end
- gc.setStencilTest()
+ gc_setStencilTest()
end
gc_pop()
@@ -839,10 +840,10 @@ function draw.small(P)
P.frameWait=P.frameWait-1
if P.frameWait==0 then
P.frameWait=10
- gc.setCanvas(P.canvas)
- gc.clear(0,0,0,.4)
+ gc_setCanvas(P.canvas)
+ gc_clear(0,0,0,.4)
gc_push("transform")
- gc.origin()
+ gc_origin()
gc_setColor(1,1,1,P.result and max(20-P.endCounter,0)*.05 or 1)
--Field
@@ -876,7 +877,7 @@ function draw.small(P)
setFont(15)mStr(P.modeData.place,30,82)
end
gc_pop()
- gc.setCanvas()
+ gc_setCanvas()
end
--Draw Canvas