Experimental canvas 2D engine for tile-based sidescroller/sandbox games, created strictly for educational purposes.
entity-component-system
game-engine
canvas-2d
1import { Cosmic, System, Entity } from "@cosmic/core";
2import { Transform, PlayerControlled } from "@cosmic/kit/components";
3
4export class PlayerControlSystem extends System {
5 public requiredComponents = new Set([Transform.name, PlayerControlled.name]);
6
7 constructor(private engine: Cosmic) {
8 super();
9 }
10
11 update(entities: Entity[], deltaTime: number): void {
12 const input = this.engine.input;
13
14 entities.forEach((entity) => {
15 const transform = entity.getComponent(Transform)!;
16 const playerControlled = entity.getComponent(PlayerControlled)!;
17
18 if (input.isKeyDown(playerControlled.inputUp))
19 transform.y -= playerControlled.speed * deltaTime;
20 if (input.isKeyDown(playerControlled.inputDown))
21 transform.y += playerControlled.speed * deltaTime;
22 if (input.isKeyDown(playerControlled.inputLeft))
23 transform.x -= playerControlled.speed * deltaTime;
24 if (input.isKeyDown(playerControlled.inputRight))
25 transform.x += playerControlled.speed * deltaTime;
26 });
27 }
28}