This commit is contained in:
Schluffe
2026-03-15 14:48:17 +01:00
parent 650b28a660
commit a1c4dd8401
4 changed files with 108 additions and 19 deletions
+42 -1
View File
@@ -1,7 +1,48 @@
import type { Vector } from "#/engine/Vector.ts";
import { createVector, type Vector } from "#/engine/Vector.ts";
export type Polygon = {
position: Vector;
points: Array<Vector>;
axes: Array<Vector>;
};
export function createPolygon(
position: Vector,
points: Array<Vector>,
): Polygon {
const axes = points.map(() => createVector());
const polygon = { position, points, axes };
updateAxes(polygon);
return polygon;
}
export function updateAxes({ points, axes }: Polygon): void {
const cap = axes.length - 1;
const p0 = points[0];
let pi = p0;
for (let i = 0; i < cap; i++) {
const pj = points[i + 1];
const nx = -(pj.y - pi.y);
const ny = pj.x - pi.x;
const invLen = 1.0 / Math.sqrt(nx * nx + ny * ny);
const axis = axes[i];
axis.x = nx * invLen;
axis.y = ny * invLen;
pi = pj;
}
const nx = -(p0.y - pi.y);
const ny = p0.x - pi.x;
const invLen = 1.0 / Math.sqrt(nx * nx + ny * ny);
const axis = axes[cap];
axis.x = nx * invLen;
axis.y = ny * invLen;
}
+8 -5
View File
@@ -27,13 +27,16 @@ export function drawSprites(ctx: CanvasRenderingContext2D): void {
for (const drawable of drawables.sort(
(a, b) => a.position.value.y - b.position.value.y,
)) {
const sprite = drawable.sprite.value;
const position = drawable.position.value;
drawSprite(
ctx,
spriteSheetMap.get(drawable.sprite.value.src)!,
drawable.sprite.value.xStart,
drawable.sprite.value.yStart,
drawable.position.value.x,
drawable.position.value.y,
spriteSheetMap.get(sprite.src)!,
sprite.xStart,
sprite.yStart,
position.x,
position.y,
);
}
}