diff options
Diffstat (limited to 'client/lib/systems/Render.ts')
-rw-r--r-- | client/lib/systems/Render.ts | 41 |
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); + }); + } +} |