|
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]); |
|
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([]); |
|
} |
|
} |