summaryrefslogtreecommitdiff
path: root/client/lib/systems/Render.ts
diff options
context:
space:
mode:
Diffstat (limited to 'client/lib/systems/Render.ts')
-rw-r--r--client/lib/systems/Render.ts41
1 files changed, 41 insertions, 0 deletions
diff --git a/client/lib/systems/Render.ts b/client/lib/systems/Render.ts
new file mode 100644
index 0000000..0c76b00
--- /dev/null
+++ b/client/lib/systems/Render.ts
@@ -0,0 +1,41 @@
+import { System, SystemNames } from ".";
+import { BoundingBox, ComponentNames, Sprite } from "../components";
+import type { Entity } from "../entities";
+import type { DrawArgs } from "../interfaces";
+
+export class Render extends System {
+ private ctx: CanvasRenderingContext2D;
+
+ constructor(ctx: CanvasRenderingContext2D) {
+ super(SystemNames.Render);
+ this.ctx = ctx;
+ }
+
+ public update(
+ dt: number,
+ entityMap: Map<number, Entity>,
+ componentEntities: Map<string, Set<number>>
+ ) {
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
+
+ componentEntities.get(ComponentNames.Sprite)?.forEach((entityId) => {
+ const entity = entityMap.get(entityId);
+ const sprite = entity.getComponent<Sprite>(ComponentNames.Sprite);
+ sprite.update(dt);
+
+ let drawArgs: DrawArgs;
+ if (entity.hasComponent(ComponentNames.BoundingBox)) {
+ const boundingBox = entity.getComponent<BoundingBox>(
+ ComponentNames.BoundingBox
+ );
+
+ drawArgs = {
+ center: boundingBox.center,
+ dimension: boundingBox.dimension,
+ rotation: boundingBox.rotation,
+ };
+ }
+ sprite.draw(this.ctx, drawArgs);
+ });
+ }
+}