Files
Techmino/timer.lua
2020-02-04 19:26:27 +08:00

241 lines
5.2 KiB
Lua

Tmr={}
function Tmr.load()
if loading==1 then
loadnum=loadnum+1
loadprogress=loadnum/10
if loadnum==5 then
--require("load_texture")
elseif loadnum==10 then
loadnum=1
loading=2
end
elseif loading==2 then
if loadnum<=#bgm then
bgm[bgm[loadnum]]=love.audio.newSource("/BGM/"..bgm[loadnum]..".ogg","stream")
bgm[bgm[loadnum]]:setLooping(true)
loadprogress=loadnum/#bgm
loadnum=loadnum+1
else
for i=1,#bgm do bgm[i]=nil end
loading=3
loadnum=1
end
elseif loading==3 then
if loadnum<=#sfx then
sfx[sfx[loadnum]]={love.audio.newSource("/SFX/"..sfx[loadnum]..".ogg","static")}
loadprogress=loadnum/#sfx
loadnum=loadnum+1
else
for i=1,#sfx do sfx[i]=nil end
loading=4
loadnum=0
end
elseif loading==4 then
loadnum=loadnum+1
if loadnum==15 then
gotoScene("main")
end
end
end
function Tmr.play(dt)
frame=frame+1
stat.gametime=stat.gametime+dt
for i=#FX.beam,1,-1 do
local b=FX.beam[i]
b.t=b.t+1
local t=b.t*.025
PTC.attack[b.lv]:setPosition(b[1]+(b[3]-b[1])*t,b[2]+(b[4]-b[2])*t-100*(4*t*(1-t)))
PTC.attack[b.lv]:emit(1)
if t==1 then
rem(FX.beam,i)
end
end
for i=1,3 do
PTC.attack[i]:update(dt)
end
-- Update attack beam
local list=tc.getTouches()
for K=1,#gamepad do
local b=gamepad[K]
local press=false
for k,v in ipairs(list)do
local x,y=convert(tc.getPosition(v))
if (x-b.x)^2+(y-b.y)^2<b.r then
press=true
end
end
if b.press~=press then
(press and pressKey or releaseKey)(K)
b.press=press
end
end
--Touch system
if count then
count=count-1
if count==0 then
count=nil
sysSFX("start")
for P=1,#players do
P=players[P]
_G.P=P
setmetatable(_G,P.index)
P.control=true
P.timing=true
resetblock()
end
setmetatable(_G,nil)
elseif count%60==0 then
sysSFX("ready")
end
if count then
for p=1,#players do
P=players[p]
setmetatable(_G,P.index)
if keyPressing[1]or keyPressing[2]then
P.moving=moving+sgn(moving)
else
P.moving=0
end
end
return nil
end
end--Start counting,include pre-das
for p=1,#players do
P=players[p]
setmetatable(_G,P.index)
if timing then P.time=time+dt end
if alive then
local v=0
for i=2,10 do v=v+i*(i-1)*7.2/(frame-keyTime[i])end P.keySpeed=keySpeed*.99+v*.1
v=0 for i=2,10 do v=v+i*(i-1)*7.2/(frame-dropTime[i])end P.dropSpeed=dropSpeed*.99+v*.1
--Update speeds
if P.ai then
P.ai.controlDelay=P.ai.controlDelay-1
if P.ai.controlDelay==0 then
if #P.ai.controls>0 then
pressKey(P.ai.controls[1],P)
releaseKey(P.ai.controls[1],P)
rem(P.ai.controls,1)
P.ai.controlDelay=P.ai.controlDelay0+rnd(3)
else
AI_getControls(P.ai.controls)
P.ai.controlDelay=2*P.ai.controlDelay0
end
end
end
for j=1,#field do for i=1,10 do
if visTime[j][i]>0 then P.visTime[j][i]=visTime[j][i]-1 end
end end
--Fresh visible time
if keyPressing[1]or keyPressing[2]then
P.moving=moving+sgn(moving)
local d=abs(moving)-gameEnv.das
if d>1 then
if gameEnv.arr>0 then
if d%gameEnv.arr==0 then
act[moving>0 and"moveRight"or"moveLeft"](true)
end
else
act[moving>0 and"toRight"or"toLeft"]()
end
end
else
P.moving=0
end
if keyPressing[7]then
P.downing=downing+1
local d=abs(downing)-gameEnv.sddas
if d>1 then
if gameEnv.sdarr>0 then
if d%gameEnv.sdarr==0 then
act.down1()
end
else
act.toDown()
end
end
else
P.downing=0
end
if falling>0 then
P.falling=falling-1
if falling<=0 then
if #field>clearing[1]then SFX("fall")end
for i=1,#clearing do
removeRow(field,clearing[i])
removeRow(visTime,clearing[i])
end
P.clearing={}
end
--Rows cleared drop
elseif waiting>0 then
P.waiting=waiting-1
if waiting<=0 then
resetblock()
end
else
if cy~=y_img then
if dropDelay>1 then
P.dropDelay=dropDelay-1
else
drop()
P.dropDelay,P.lockDelay=gameEnv.drop,gameEnv.lock
end
else
if lockDelay>0 then P.lockDelay=lockDelay-1
else drop()
end
end
end
if P.b2b>480 then P.b2b=P.b2b-1 end
else--Alive
P.keySpeed=keySpeed*.96+cstat.key/time*60*.04
P.dropSpeed=dropSpeed*.96+cstat.piece/time*60*.04
--Final average speeds
if falling>0 then
P.falling=falling-1
if falling<=0 then
if #field>clearing[1]then SFX("fall")end
for i=1,#clearing do
removeRow(field,clearing[i])
removeRow(visTime,clearing[i])
end
P.clearing={}
end
end--Rows cleared drop
for j=1,#field do for i=1,10 do
if visTime[j][i]<20 then P.visTime[j][i]=visTime[j][i]+.5 end
end end--Make field visible
end--Dead
for i=#bonus,1,-1 do
bonus[i].t=bonus[i].t+1
if bonus[i].t>60 then rem(bonus,i)end
end
for i=#task,1,-1 do
if task[i]()then rem(task,i)end
end
for i=#atkBuffer,1,-1 do
local atk=atkBuffer[i]
atk.time=atk.time+1
if not atk.sent then
if atk.countdown>0 then
atk.countdown=atk.countdown-1
end
else
if atk.time>20 then
rem(atkBuffer,i)
end
end
end
if fieldBeneath>0 then P.fieldBeneath=fieldBeneath-3 end
P.b2b1=P.b2b1*.95+P.b2b*.05
PTC.dust[p]:update(dt)
end
setmetatable(_G,nil)
end