Code for 2D camera system

This commit is contained in:
2025-03-08 12:26:20 -05:00
parent 7fb5a22cdf
commit 2d810fe20f
7 changed files with 291 additions and 5 deletions

View File

@ -0,0 +1,38 @@
export function camera(
x: number,
y: number,
width: number,
height: number,
scale: number,
zoom: number,
rotate: number,
offsetX: number,
offsetY: number,
): [number, number] {
const zoomFactor = Math.pow(2, zoom);
// Zoom, offset, and rotation are
// applied in IFS coordinates
[x, y] = [
(x - offsetX) * zoomFactor,
(y - offsetY) * zoomFactor,
];
[x, y] = [
x * Math.cos(rotate) -
y * Math.sin(rotate),
x * Math.sin(rotate) +
y * Math.cos(rotate),
]
// Scale is applied to pixel
// coordinates. Shift by half
// the image width and height
// to compensate for the
// IFS coordinates being symmetric
// around the origin
return [
Math.floor(x * scale + width / 2),
Math.floor(y * scale + height / 2)
];
}