import { Component, ComponentType, PositionComponent, RenderableComponent, TrailingPositionComponent, } from "./component"; export enum EntityType { LASER = "LASER", CAT = "CAT", } export interface Entity { entity_type: EntityType; id: string; components: Record; } export const create_laser = (base: Entity) => { const trailing_position: TrailingPositionComponent = { name: ComponentType.TRAILING_POSITION, trails: [], }; base.components[ComponentType.TRAILING_POSITION] = trailing_position; const renderable: RenderableComponent = { name: ComponentType.RENDERABLE, }; base.components[ComponentType.RENDERABLE] = renderable; return base; }; export const create_cat = (base: Entity) => { const renderable: RenderableComponent = { name: ComponentType.RENDERABLE, }; base.components[ComponentType.RENDERABLE] = renderable; base.components[ComponentType.POSITION] = { component: ComponentType.POSITION, x: Math.random() * 1_000, y: Math.random() * 1_000, } as unknown as PositionComponent; // TODO: hack return base; };