|
|
@@ -9,9 +9,38 @@ class Star |
|
|
|
this.canvas = inCanvas; |
|
|
|
|
|
|
|
this.position = inPosition; |
|
|
|
this.points = 5; |
|
|
|
|
|
|
|
this.size = inSize; |
|
|
|
this.innerRingSize = this.size * 0.6; |
|
|
|
|
|
|
|
this.colour = "white"; |
|
|
|
|
|
|
|
this.recalculatePoints(); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* The step around a circle (in radians) between each point (both inner and |
|
|
|
* outer) on the star. |
|
|
|
* Used by recalculatePoints(). |
|
|
|
* @return {number} The step around a circle between each point on the star. |
|
|
|
*/ |
|
|
|
get pointStep() |
|
|
|
{ |
|
|
|
return (Math.PI * 2) / (this.points * 2); |
|
|
|
} |
|
|
|
|
|
|
|
recalculatePoints() |
|
|
|
{ |
|
|
|
this.points = []; |
|
|
|
for (let n = 0, i = 0; n < Math.PI * 2; n += this.pointStep, i++) |
|
|
|
{ |
|
|
|
let currentSize = i % 2 == 0 ? this.size : this.innerRingSize; |
|
|
|
this.points.push(new Vector( |
|
|
|
currentSize * Math.cos(Math.PI * 2 * (n / this.points * 2) + this.rotation - Math.PI / 2), |
|
|
|
currentSize * Math.sin(Math.PI * 2 * (n / this.points * 2) + this.rotation - Math.PI / 2) |
|
|
|
)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
update(dt) |
|
|
@@ -23,9 +52,16 @@ class Star |
|
|
|
{ |
|
|
|
context.save(); |
|
|
|
context.translate(this.position.x, this.position.y); |
|
|
|
// TODO: Debug this |
|
|
|
context.beginPath(); |
|
|
|
context.moveTo(this.points[0].x, this.points[0].y); |
|
|
|
for (let point of this.points) { |
|
|
|
context.lineTo(point.x, point.y); |
|
|
|
} |
|
|
|
context.closePath(); |
|
|
|
|
|
|
|
context.fillStyle = this.colour; |
|
|
|
context.fillRect(-5, -5, 10, 10); |
|
|
|
context.fill(); |
|
|
|
|
|
|
|
context.restore(); |
|
|
|
} |
|
|
|