/src/object.ts
import Storable from './storable';
import { ID, generateID } from './id';

export enum GameObjectType {
    Player = 'PLAYER',
    Unknown = 'UNKNOWN',
}

export interface GameObjectProperties {
    id: ID
    type: GameObjectType
    name: string
    description: string
    properties: PropertyBag
}

interface PropertyBag {
    [k: string]: number | string
}

export class GameObject extends Storable {
    id: ID
    type: GameObjectType
    name: string
    description: string
    properties: PropertyBag
    saveProperties = ['id', 'type', 'name', 'description', 'properties']

    constructor(t: GameObjectType = GameObjectType.Unknown) {
        super();
        this.id = generateID();
        this.type = t;
        this.properties = {};
    }

    set(k: string, v: number | string) {
        this.properties[k] = v;
    }

    get(k: string): number | string {
        return this.properties[k];
    }

    store(): GameObjectProperties {
        return <GameObjectProperties>super.store();
    }

    load(o: GameObjectProperties) {
        super.load(o);
    }
}