diff options
Diffstat (limited to 'engine/entities/Entity.ts')
-rw-r--r-- | engine/entities/Entity.ts | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/engine/entities/Entity.ts b/engine/entities/Entity.ts new file mode 100644 index 0000000..e57ccde --- /dev/null +++ b/engine/entities/Entity.ts @@ -0,0 +1,33 @@ +import type { Component } from "../components"; +import { ComponentNotFoundError } from "../exceptions"; + +export abstract class Entity { + private static ID = 0; + + public readonly id: number; + public readonly components: Map<string, Component>; + + constructor() { + this.id = Entity.ID++; + this.components = new Map(); + } + + public addComponent(component: Component) { + this.components.set(component.name, component); + } + + public getComponent<T extends Component>(name: string): T { + if (!this.hasComponent(name)) { + throw new Error("Entity does not have component " + name); + } + return this.components.get(name) as T; + } + + public getComponents(): Component[] { + return Array.from(this.components.values()); + } + + public hasComponent(name: string): boolean { + return this.components.has(name); + } +} |