File size: 1,826 Bytes
0a9894c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
class Road{
constructor(x,width,laneCount=3){
this.x=x;
this.width=width;
this.laneCount=laneCount;
this.left=x-width/4;
this.right=x+width/4;
const infinity=1000000;
this.top=-infinity;
this.bottom=infinity;
const topLeft={x:this.left,y:this.top};
const bottomLeft={x:this.left,y:this.bottom};
const topRight={x:this.right,y:this.top};
const bottomRight={x:this.right,y:this.bottom};
this.borders=[
[topLeft],
[topRight]
];
for(let y=-1000;y<=0;y++){
const x=Math.sin(y*0.01)*50;
this.borders[0].push({x:x+this.left,y:y});
this.borders[1].push({x:x+this.right,y:y});
}
this.borders[0].push(bottomLeft);
this.borders[1].push(bottomRight);
}
getLaneCenter(laneIndex){
const laneWidth=this.width/this.laneCount;
return this.left+laneWidth/2+
Math.min(laneIndex,this.laneCount-1)*laneWidth;
}
draw(ctx){
ctx.lineWidth=5;
ctx.strokeStyle="white";
/*
ctx.setLineDash([20,20]);
for(let i=1;i<=this.laneCount-1;i++){
const x=lerp(
this.left,
this.right,
i/this.laneCount
);
ctx.beginPath();
ctx.moveTo(x,this.top);
ctx.lineTo(x,this.bottom);
ctx.stroke();
}
*/
ctx.setLineDash([20,20]);
this.borders.forEach(border=>{
ctx.beginPath();
ctx.moveTo(border[0].x,border[0].y);
for(let i=1;i<border.length;i++){
ctx.lineTo(border[i].x,border[i].y);
}
ctx.stroke();
});
ctx.setLineDash([]);
}
} |