let pos=[0,200],vel=[0,-1],jmpc=0,
all4,jumpState=0,dir=1,dirdir=1,jumpTimer=0
all4=loadImage("all-four.png")
createCanvas(windowHeight,windowHeight)
if(Date.now()-jumpTimer<100)jumpState=0
else if(Date.now()-jumpTimer<370)jumpState=1
else if(Date.now()-jumpTimer<460)jumpState=2
dir=Math.max(-1,Math.min(1,dir+dirdir*0.3))
if(keyIsDown(65))vel[0]=-7+(7+vel[0])*0.9
if(keyIsDown(68))vel[0]=7+(-7+vel[0])*0.9
if(keyIsDown(LEFT_ARROW))vel[0]=-40
if(keyIsDown(RIGHT_ARROW))vel[0]=40
if(pos[1]<calTerrainAt(pos[0]/20)){
if(!keyIsPressed)vel[0]*=0.7;pos[1]=calTerrainAt(pos[0]/20);vel[1]=0
if(slopeAt(pos[0]/20)<-0.03){
if(vel[0]>3&&Date.now()-jmpc>400){jump(0.7);jmpc=Date.now()}
if(slopeAt(pos[0]/20)>0.03){
if(vel[0]<-3&&Date.now()-jmpc>400){jump(0.7);jmpc=Date.now()}
else{if(!keyIsPressed)vel[0]*=0.9}
if(keyIsPressed){if(vel[0]>0)dirdir=1;else dirdir=-1}
background(255);noStroke();fill(0)
for(let i=0;i<imgs.length;i++){
if(Math.abs(pos[0]-imgs[i][0])<imgs[i][3].width/2*imgs[i][5]+250&&Math.abs(pos[1]+120-imgs[i][1])<imgs[i][3].height/2*imgs[i][5]+250){
imgs[i][3].get(imgs[i][4][0],imgs[i][4][1],imgs[i][3].width-imgs[i][4][2],imgs[i][3].height-imgs[i][4][3]):
250+imgs[i][0]-imgs[i][3].width/2*imgs[i][5]-pos[0],200-imgs[i][3].height/2*imgs[i][5]-imgs[i][1]+pos[1],
imgs[i][3].width*imgs[i][5],imgs[i][3].height*imgs[i][5]
curveVertex(i*20-pos[0]+Math.floor(pos[0]/20)*20,240+terrainAt(i+Math.floor(pos[0]/20))+pos[1])
push();translate(250,190)
all4.get(jumpState*all4.width/4,0,all4.width/4,all4.height),
if(Math.abs(slopeAt(pos[0]/20))>0.05)stroke(0,255,0)
if(([' ','w']).includes(key))jump()
Math.abs(Math.sin(x/5))*20+200,
noise(x/9)*30+islandtransition(x)
return -terrainAt(x+12.5)+10
slopeAt=x=>(terrainAt(x+15.5)-terrainAt(x+9.5))/60