This commit is contained in:
Schluffe
2026-03-01 11:55:27 +01:00
parent a0671e7953
commit d8668f807c
4 changed files with 18 additions and 8 deletions
+7
View File
@@ -0,0 +1,7 @@
export type Box<T> = {
value: T;
};
export function box<T>(value: T): Box<T> {
return { value };
}
+6 -5
View File
@@ -1,3 +1,4 @@
import type { Box } from "#/engine/Box.ts";
import { type Drawable, draw, isDrawable } from "#/engine/Drawable.ts"; import { type Drawable, draw, isDrawable } from "#/engine/Drawable.ts";
import { import {
entityMap, entityMap,
@@ -28,7 +29,7 @@ export type EntityMap = Map<
} }
>; >;
export type AnimationMap = Map<number, { value: SpriteAnimation }>; export type AnimationMap = Map<number, Box<SpriteAnimation>>;
export type Scene = { export type Scene = {
data: SceneData; data: SceneData;
@@ -119,6 +120,7 @@ function processSystems(ctx: CanvasRenderingContext2D, delta: number): void {
for (const drawable of drawables.sort( for (const drawable of drawables.sort(
(a, b) => a.position.y - b.position.y, (a, b) => a.position.y - b.position.y,
)) { )) {
// this dosn't belong here
if (animationsMap.has(drawable.id)) { if (animationsMap.has(drawable.id)) {
animateSprite(animationsMap.get(drawable.id)!.value, delta); animateSprite(animationsMap.get(drawable.id)!.value, delta);
} }
@@ -195,13 +197,12 @@ export async function setScene(name: string): Promise<void> {
drawableInstances.push(instance); drawableInstances.push(instance);
} }
if ( if (
(instance as { id: number; $animation: object }).$animation !== (instance as { id: number; animation: object }).animation !== undefined
undefined
) { ) {
animateInstances.set( animateInstances.set(
instance.id, instance.id,
(instance as { id: number; $animation: { value: SpriteAnimation } }) (instance as { id: number; animation: Box<SpriteAnimation> })
.$animation, // TODO: unify that $ value component thing .animation, // TODO
); );
} }
} }
+3 -2
View File
@@ -1,3 +1,4 @@
import { type Box, box } from "#/engine/Box.ts";
import { type Circle, createCircle } from "#/engine/Circle.ts"; import { type Circle, createCircle } from "#/engine/Circle.ts";
import { moveAndCollide } from "#/engine/Collision.ts"; import { moveAndCollide } from "#/engine/Collision.ts";
import { defineEntity } from "#/engine/Entity.ts"; import { defineEntity } from "#/engine/Entity.ts";
@@ -17,7 +18,7 @@ export type Hero = {
velocity: Vector; velocity: Vector;
body: Circle; body: Circle;
sprite: Sprite; sprite: Sprite;
$animation: { value: SpriteAnimation }; animation: Box<SpriteAnimation>;
}; };
const speed = 0.05; const speed = 0.05;
@@ -35,7 +36,7 @@ const state: Hero = {
velocity: createVector(), velocity: createVector(),
body: createCircle(createVector(), 4), body: createCircle(createVector(), 4),
sprite, sprite,
$animation: { value: createSpriteAnimation(sprite, 500, 2) }, animation: box(createSpriteAnimation(sprite, 500, 2)),
}; };
const process = defineEntity("hero", state); const process = defineEntity("hero", state);
+2 -1
View File
@@ -1,3 +1,4 @@
import { box } from "#/engine/Box";
import { defineEntity } from "#/engine/Entity.ts"; import { defineEntity } from "#/engine/Entity.ts";
import { createSpriteAnimation, useSpriteSheetSrc } from "#/engine/Sprite.ts"; import { createSpriteAnimation, useSpriteSheetSrc } from "#/engine/Sprite.ts";
import { createVector } from "#/engine/Vector.ts"; import { createVector } from "#/engine/Vector.ts";
@@ -15,5 +16,5 @@ const sprite = {
defineEntity("portal", { defineEntity("portal", {
position: createVector(64, 64), position: createVector(64, 64),
sprite, sprite,
$animation: { value: createSpriteAnimation(sprite, 400, 0) }, animation: box(createSpriteAnimation(sprite, 400, 0)),
}); });