import EntityUpdater from "./entity-updater";
import { IGameUI } from "./canvas-ui/canvas-ui";
import EntityManager, { IEntityManager } from "./entity-manager";
import Entity from "./entities/entity";
import { BugState } from "./entities/bug/bug";
import { PlantState } from "./entities/plant/plant";
export interface GameEngineOptions {
    gameUI: IGameUI;
    entityManager: EntityManager;
    height: number;
    width: number;
    initialState?: string;
}
export interface Game {
    togglePause: () => void;
    isPaused: boolean;
    addPlant: (initialState?: Partial<PlantState>) => void;
    addBug: (initialState?: Partial<BugState> | {
        size?: number;
    }) => void;
    getEntities: () => Entity[];
    start: () => void;
    width: number;
    height: number;
    exportCurrentState: () => string;
    setSpeed: (speed: number) => void;
}
export declare class GameEngine implements Game {
    isPaused: boolean;
    height: number;
    width: number;
    entityManager: IEntityManager;
    gameUI: IGameUI;
    entityUpdater: EntityUpdater;
    frame: number;
    private plantFactory;
    private bugFactory;
    private updateHandle;
    constructor(args: GameEngineOptions);
    start(): void;
    addBug(initialState?: Partial<BugState & Entity> & {
        size?: number;
    }): void;
    addPlant(initialState?: Partial<PlantState & Entity>): void;
    getEntities(): Entity[];
    togglePause(): void;
    update: () => void;
    setSpeed(speed: number): void;
    createInitialGameState(initialState?: string): void;
    exportCurrentState(): string;
}
