diff --git a/parts/player/draw.lua b/parts/player/draw.lua index 46a1a713..c80ea2d1 100644 --- a/parts/player/draw.lua +++ b/parts/player/draw.lua @@ -210,75 +210,66 @@ local function drawFXs(P) end end local drawGhost={ - color=function(P,clr,alpha) + color=function(CB,curX,ghoY,alpha,texture,clr) gc_setColor(1,1,1,alpha) - local texture=P.skinLib - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_draw(texture[clr],30*(j+P.curX-1)-30,-30*(i+P.ghoY-1)) + gc_draw(texture[clr],30*(j+curX-1)-30,-30*(i+ghoY-1)) end end end end, - gray=function(P,_,alpha) + gray=function(CB,curX,ghoY,alpha,texture,_) gc_setColor(1,1,1,alpha) - local texture=P.skinLib - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_draw(texture[21],30*(j+P.curX-1)-30,-30*(i+P.ghoY-1)) + gc_draw(texture[21],30*(j+curX-1)-30,-30*(i+ghoY-1)) end end end end, - colorCell=function(P,clr,alpha) + colorCell=function(CB,curX,ghoY,alpha,_,clr) clr=minoColor[clr] gc_setColor(clr[1],clr[2],clr[3],alpha) - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_rectangle('fill',30*(j+P.curX-1)-30,-30*(i+P.ghoY-1),30,30) + gc_rectangle('fill',30*(j+curX-1)-30,-30*(i+ghoY-1),30,30) end end end end, - grayCell=function(P,_,alpha) + grayCell=function(CB,curX,ghoY,alpha,_,_) gc_setColor(1,1,1,alpha) - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_rectangle('fill',30*(j+P.curX-1)-30,-30*(i+P.ghoY-1),30,30) + gc_rectangle('fill',30*(j+curX-1)-30,-30*(i+ghoY-1),30,30) end end end end, - colorLine=function(P,clr,alpha) + colorLine=function(CB,curX,ghoY,alpha,_,clr) clr=minoColor[clr] gc_setColor(clr[1],clr[2],clr[3],alpha) gc_setLineWidth(4) - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_rectangle('line',30*(j+P.curX-1)-30+4,-30*(i+P.ghoY-1)+4,22,22) + gc_rectangle('line',30*(j+curX-1)-30+4,-30*(i+ghoY-1)+4,22,22) end end end end, - grayLine=function(P,_,alpha) + grayLine=function(CB,curX,ghoY,alpha,_,_) gc_setColor(1,1,1,alpha) gc_setLineWidth(4) - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_rectangle('line',30*(j+P.curX-1)-30+4,-30*(i+P.ghoY-1)+4,22,22) + gc_rectangle('line',30*(j+curX-1)-30+4,-30*(i+ghoY-1)+4,22,22) end end end end, } -local function drawBlockOutline(P,texture,trans) +local function drawBlockOutline(CB,curX,curY,texture,trans) shader_alpha:send('a',trans) 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 - local x=30*(j+P.curX)-60-3 - local y=30-30*(i+P.curY)-3 + local x=30*(j+curX)-60-3 + local y=30-30*(i+curY)-3 gc_draw(texture,x,y) gc_draw(texture,x+6,y+6) gc_draw(texture,x+6,y) @@ -287,30 +278,27 @@ local function drawBlockOutline(P,texture,trans) end end gc_setShader() end -local function drawBlockShade(P,alpha) +local function drawBlockShade(CB,curX,curY,alpha) gc_setColor(1,1,1,alpha) - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_rectangle('fill',30*(j+P.curX)-60,30-30*(i+P.curY),30,30) + gc_rectangle('fill',30*(j+curX)-60,30-30*(i+curY),30,30) end end end end -local function drawBlock(P,clr) +local function drawBlock(CB,curX,curY,texture) gc_setColor(1,1,1) gc_setShader(shader_blockSatur) - local texture=P.skinLib[clr] - local CB=P.cur.bk for i=1,#CB do for j=1,#CB[1]do if CB[i][j]then - gc_draw(texture,30*(j+P.curX-1)-30,-30*(i+P.curY-1)) + gc_draw(texture,30*(j+curX-1)-30,-30*(i+curY-1)) end end end gc_setShader() end -local function drawNextPreview(P,B) +local function drawNextPreview(B,fieldH,fieldBeneath) gc_setColor(1,1,1,.8) - local y=int(P.gameEnv.fieldH+1-modf(B.sc[1]))+ceil(P.fieldBeneath/30) + local y=int(fieldH+1-modf(B.sc[1]))+ceil(fieldBeneath/30) B=B.bk local x=int(6-#B[1]*.5) local cross=TEXTURE.puzzleMark[-1] @@ -320,10 +308,10 @@ local function drawNextPreview(P,B) end end end end -local function drawBuffer(P) +local function drawBuffer(atkBuffer,bufferWarn,atkBufferSum1,atkBufferSum) local h=0 - for i=1,#P.atkBuffer do - local A=P.atkBuffer[i] + for i=1,#atkBuffer do + local A=atkBuffer[i] local bar=A.amount*30 if h+bar>600 then bar=600-h end if not A.sent then @@ -356,8 +344,8 @@ local function drawBuffer(P) end h=h+bar end - if P.gameEnv.bufferWarn then - local sum=P.atkBufferSum1 + if bufferWarn then + local sum=atkBufferSum1 if sum>=8 then gc_push('transform') gc_translate(300,max(0,600-30*sum)) @@ -365,7 +353,7 @@ local function drawBuffer(P) gc_setColor(1,.2+min(sum*.02,.8)*(.5+.5*sin(TIME()*min(sum,32))),.2,min(sum/30,.8)) setFont(100) if sum>20 then - local d=P.atkBufferSum-sum + local d=atkBufferSum-sum if d>.5 then gc_translate(d^.5*(rnd()-.5)*15,d^.5*(rnd()-.5)*15) end @@ -375,13 +363,13 @@ local function drawBuffer(P) end end end -local function drawB2Bbar(P) - local a,b=P.b2b,P.b2b1 +local function drawB2Bbar(b2b,b2b1) + local a,b=b2b,b2b1 if a>b then a,b=b,a end - if b>=0 then + if b>0 then gc_setColor(.8,1,.2) gc_rectangle('fill',-14,600-b*.6,11,b*.6,2) - gc_setColor(P.b2b<50 and COLOR.Z or P.b2b<=800 and COLOR.lR or COLOR.lB) + gc_setColor(b2b<50 and COLOR.Z or b2b<=800 and COLOR.lR or COLOR.lB) gc_rectangle('fill',-14,600-a*.6,11,a*.6,2) if TIME()%.5<.3 then gc_setColor(1,1,1) @@ -389,39 +377,35 @@ local function drawB2Bbar(P) end end end -local function drawLDI(P,ENV)--Lock Delay Indicator - if ENV.easyFresh then +local function drawLDI(easyFresh,length,freshTime)--Lock Delay Indicator + if easyFresh then gc_setColor(.97,.97,.97) else gc_setColor(1,.5,.5) end - if P.lockDelay>=0 then - gc_rectangle('fill',0,602,300*P.lockDelay/ENV.lock,4) + if length>=0 then + gc_rectangle('fill',0,602,300*length,4) end - if P.freshTime>0 then - LDmarks:setDrawRange(1,min(P.freshTime,15)) + if freshTime>0 then + LDmarks:setDrawRange(1,min(freshTime,15)) gc_draw(LDmarks) end end -local function drawHold(P) - local ENV=P.gameEnv - if ENV.holdCount==0 then return end - - local holdQueue=P.holdQueue - local N=ENV.holdCount*72 +local function drawHold(holdQueue,holdCount,holdTime,skinLib) + local N=holdCount*72 gc_push('transform') gc_translate(12,20) gc_setLineWidth(2) gc_setColor(0,0,0,.4)gc_rectangle('fill',0,0,100,N+8,5) gc_setColor(.97,.97,.97)gc_rectangle('line',0,0,100,N+8,5) - N=#holdQueue2 then gc_draw(IMG.lifeIcon,525,595,nil,.8)end end end -local function drawMission(P) - if not P.curMission then return end - local L=P.gameEnv.mission - local cur=P.curMission - +local function drawMission(curMission,L) --Draw current mission setFont(35) if P.gameEnv.missionkill then @@ -501,12 +481,12 @@ local function drawMission(P) else gc_setColor(.97,.97,.97) end - gc_print(missionEnum[L[cur]],85,110) + gc_print(missionEnum[L[curMission]],85,110) --Draw next mission setFont(20) for i=1,3 do - local m=L[cur+i] + local m=L[curMission+i] if m then m=missionEnum[m] gc_print(m,87-28*i,117) @@ -515,12 +495,12 @@ local function drawMission(P) end end end -local function drawStartCounter(P) - local count=179-P.frameRun +local function drawStartCounter(time) + time=179-time gc_push('transform') gc_translate(300,300) - local num=int(count/60)+1 - local d=count%60 + local num=int(time/60)+1 + local d=time%60 if num==3 then gc_setColor(.7,.8,.98) if d>45 then gc_rotate((d-45)^2*.00355)end @@ -713,8 +693,8 @@ function draw.norm(P,repMode) --Draw HUD P:drawNext(repMode) - drawMission(P) - drawHold(P) + if P.curMission then drawMission(P.curMission,ENV.mission)end + if ENV.holdCount>0 then drawHold(P.holdQueue,ENV.holdCount,P.holdTime,P.skinLib)end drawDial(499,505,P.dropSpeed) if P.life>0 then drawLife(P.life)end @@ -783,34 +763,34 @@ function draw.norm(P,repMode) --Draw ghost & rotation center local centerDisp=ENV.center and P.RS.centerDisp[C.id] if ENV.ghost then - drawGhost[ENV.ghostType](P,curColor,ENV.ghost) + drawGhost[ENV.ghostType](P.cur.bk,P.curX,P.ghoY,ENV.ghost,P.skinLib,curColor) if centerDisp then gc_setColor(1,1,1,ENV.center) gc_draw(P.RS.centerTex,centerX,-30*(P.ghoY+C.sc[1])+10) end elseif repMode then - drawGhost.gray(P,nil,.15) + drawGhost.gray(P.cur.bk,P.curX,P.ghoY,.15,nil,nil) end local dy=ENV.smooth and P.ghoY~=P.curY and(P.dropDelay/ENV.drop-1)*30 or 0 gc_translate(0,-dy) --Draw block & rotation center if ENV.block then - drawBlockOutline(P,P.skinLib[curColor],trans) - drawBlock(P,curColor) + drawBlockOutline(P.cur.bk,P.curX,P.curY,P.skinLib[curColor],trans) + drawBlock(P.cur.bk,P.curX,P.curY,P.skinLib[curColor]) if centerDisp then gc_setColor(1,1,1,ENV.center) gc_draw(P.RS.centerTex,centerX,-30*(P.curY+C.sc[1])+10) end elseif repMode then - drawBlockShade(P,trans*.3) + drawBlockShade(P.cur.bk,P.curX,P.curY,trans*.3) end gc_translate(0,dy) end --Draw next preview if ENV.nextPos and P.nextQueue[1]then - drawNextPreview(P,P.nextQueue[1]) + drawNextPreview(P.nextQueue[1],ENV.fieldH,P.fieldBeneath) end --Draw AI's drop destination @@ -845,9 +825,9 @@ function draw.norm(P,repMode) --Draw Frame and buffers gc_setColor(P.frameColor) gc_draw(playerBoarder,-17,-12) - drawBuffer(P) - drawB2Bbar(P) - drawLDI(P,ENV) + drawBuffer(P.atkBuffer,ENV.bufferWarn,P.atkBufferSum1,P.atkBufferSum) + drawB2Bbar(P.b2b,P.b2b1) + drawLDI(ENV.easyFresh,P.lockDelay/ENV.lock,P.freshTime) --Draw target selecting pad if GAME.modeEnv.royaleMode then @@ -908,7 +888,7 @@ function draw.norm(P,repMode) GAME.curMode.mesDisp(P) end - if P.frameRun<180 then drawStartCounter(P)end + if P.frameRun<180 then drawStartCounter(P.frameRun)end gc_pop() end function draw.small(P) @@ -984,12 +964,12 @@ function draw.demo(P) drawField(P) drawFXs(P) if P.cur and P.waiting==-1 then - if ENV.ghost then drawGhost[ENV.ghostType](P,curColor,ENV.ghost)end + if ENV.ghost then drawGhost[ENV.ghostType](P.cur.bk,P.curX,P.ghoY,ENV.ghost,P.skinLib,curColor)end if ENV.block then local dy=ENV.smooth and P.ghoY~=P.curY and(P.dropDelay/ENV.drop-1)*30 or 0 gc_translate(0,-dy) - drawBlockOutline(P,P.skinLib[curColor],P.lockDelay/ENV.lock) - drawBlock(P,curColor) + drawBlockOutline(P.cur.bk,P.curX,P.curY,P.skinLib[curColor],P.lockDelay/ENV.lock) + drawBlock(P.cur.bk,P.curX,P.curY,P.skinLib[curColor]) gc_translate(0,dy) end end