157 lines
2.8 KiB
Lua
157 lines
2.8 KiB
Lua
local gc=love.graphics
|
|
local rnd=math.random
|
|
|
|
local scene={}
|
|
|
|
local state
|
|
local ct
|
|
local s1,s2
|
|
local up,winner=true
|
|
|
|
local function reset()
|
|
state=0
|
|
ct=20
|
|
s1,s2=0,0
|
|
end
|
|
|
|
function scene.sceneInit()
|
|
reset()
|
|
BG.set("none")
|
|
love.keyboard.setKeyRepeat(false)
|
|
end
|
|
function scene.sceneBack()
|
|
love.keyboard.setKeyRepeat(true)
|
|
end
|
|
|
|
function scene.keyDown(key)
|
|
if state==0 then
|
|
if key=="space"then
|
|
reset()
|
|
state=1
|
|
ct=60
|
|
end
|
|
elseif state==2 then
|
|
if key=="q"or key=="a"or key=="p"or key=="l"then
|
|
if ct>6 then
|
|
SFX.play("finesseError")
|
|
if key=="q"or key=="a"then goto P2 else goto P1 end
|
|
else
|
|
if key=="q"then
|
|
if up then SFX.play("reach")goto P1
|
|
else SFX.play("fail")goto P2
|
|
end
|
|
elseif key=="a"then
|
|
if up then SFX.play("fail")goto P2
|
|
else SFX.play("reach")goto P1
|
|
end
|
|
elseif key=="p"then
|
|
if up then SFX.play("reach")goto P2
|
|
else SFX.play("fail")goto P1
|
|
end
|
|
else
|
|
if up then SFX.play("fail")goto P1
|
|
else SFX.play("reach")goto P2
|
|
end
|
|
end
|
|
end
|
|
::P1::
|
|
winner=1
|
|
s1=s1+1
|
|
goto END
|
|
::P2::
|
|
winner=2
|
|
s2=s2+1
|
|
::END::
|
|
state=3
|
|
ct=60
|
|
end
|
|
end
|
|
end
|
|
function scene.touchDown(x,y)
|
|
scene.keyDown(
|
|
state==0 and "space"or
|
|
x<640 and
|
|
(y<360 and"q"or"a")or
|
|
(y<360 and"p"or"l")
|
|
)
|
|
end
|
|
function scene.update()
|
|
if state==0 then--Menu
|
|
if ct>0 then
|
|
ct=ct-1
|
|
elseif rnd()<.00626 then
|
|
ct=30
|
|
end
|
|
elseif state==1 then--Waiting
|
|
ct=ct-1
|
|
if ct==0 then
|
|
ct=rnd(26,162)
|
|
up=rnd()<.5
|
|
state=2
|
|
end
|
|
elseif state==2 then--Winking
|
|
ct=ct-1
|
|
if ct==0 then ct=6 end
|
|
elseif state==3 then
|
|
ct=ct-1
|
|
if ct==0 then
|
|
if s1==6 or s2==6 then
|
|
state=0
|
|
else
|
|
state=1
|
|
end
|
|
ct=60
|
|
end
|
|
end
|
|
end
|
|
function scene.draw()
|
|
--Dividing line
|
|
gc.setLineWidth(10)
|
|
gc.setColor(1,1,1,.9)
|
|
gc.line(640,0,640,720)
|
|
gc.setColor(1,1,1,.3)
|
|
gc.line(500,360,780,360)
|
|
|
|
--Help
|
|
setFont(100)
|
|
mStr("Q",80,100)
|
|
mStr("A",80,480)
|
|
mStr("P",1200,100)
|
|
mStr("L",1200,480)
|
|
|
|
--Score
|
|
setFont(80)
|
|
gc.printf(s1,50,300,200,"left")
|
|
gc.printf(s2,1030,300,200,"right")
|
|
|
|
if state==0 then
|
|
setFont(40)
|
|
mStr(MOBILE and"Touch to Start"or"Press space to Start",640,400)
|
|
mStr("Press key on the same side when block appear!",640,500)
|
|
if ct>0 then
|
|
setFont(100)
|
|
gc.setColor(1,1,1,ct/30)
|
|
mStr("REFLECT",640,140)
|
|
end
|
|
elseif state==1 then
|
|
gc.setColor(.2,.7,.4,math.min((60-ct)/10,ct/10)*.8)
|
|
gc.arc("fill",640,360,260,-1.5708,-1.5708+(ct/60)*6.2832)
|
|
elseif state==2 and ct<5 then
|
|
gc.setColor(1,ct>2 and 1 or 0,0)
|
|
gc.rectangle("fill",640-100,(up and 180 or 540)-100,200,200,10)
|
|
elseif state==3 then
|
|
local x=(60-ct)*62
|
|
gc.setColor(.4,1,.4,ct/100)
|
|
if winner==1 then
|
|
gc.rectangle("fill",0,0,x,720)
|
|
else
|
|
gc.rectangle("fill",1280,0,-x,720)
|
|
end
|
|
end
|
|
end
|
|
|
|
scene.widgetList={
|
|
WIDGET.newKey{name="back",x=640,y=675,w=150,h=50,font=35,code=backScene},
|
|
}
|
|
|
|
return scene |