boids/draw.mjs

54 lines
1.2 KiB
JavaScript
Raw Normal View History

2020-05-04 15:17:55 +00:00
import Vector from './vector.mjs';
const boidShape = [
2020-05-04 16:29:00 +00:00
new Vector(1, 0),
new Vector(-.5, .5),
new Vector(-.5, -.5),
new Vector(1, 0),
2020-05-04 15:17:55 +00:00
];
const boidShapeSize = boidShape.length;
const transformed = new Vector(0, 0);
2020-05-04 16:29:00 +00:00
export const fill = (activeBoids, params, ctx, width, height, center) =>
2020-05-04 15:17:55 +00:00
{
const boidsSize = activeBoids.length;
2020-05-04 15:17:55 +00:00
ctx.clearRect(0, 0, width, height);
// Draw each boids head following the angle of its course
ctx.beginPath();
ctx.fillStyle = 'black';
for (let i = 0; i < boidsSize; ++i)
2020-05-04 15:17:55 +00:00
{
const boid = activeBoids[i];
2020-05-04 15:17:55 +00:00
const angle = boid.vel.angle();
let isFirst = true;
for (let j = 0; j < boidShapeSize; ++j)
2020-05-04 15:17:55 +00:00
{
transformed.x = boidShape[j].x;
transformed.y = boidShape[j].y;
transformed
.rotate(angle)
.mul(params.radius)
.add(center)
.add(boid.pos);
2020-05-04 15:17:55 +00:00
if (isFirst)
{
ctx.moveTo(transformed.x, transformed.y);
2020-05-04 15:17:55 +00:00
isFirst = false;
}
else
{
ctx.lineTo(transformed.x, transformed.y);
2020-05-04 15:17:55 +00:00
}
}
}
ctx.fill();
};