import { EventDispatcher } from "three";
export interface Task {
    run: () => any;
    meta: Record<string, any>;
    tid: number;
}
interface TaskEventMap {
    "active-task-end": {
        task: Task;
        res: any;
    };
    "active-task-start": {
        task: Task;
    };
}
/**
 * 按照队列执行任务
 */
export default class TaskQueue extends EventDispatcher<TaskEventMap> {
    _task: Task[];
    started: boolean;
    activeTask: Task | null;
    _id: number;
    constructor(start?: boolean);
    /**
     * 判断任务是否有效
     * @param task
     * @return {boolean}
     * @private
     */
    _isEffectiveTask(task: MakeOptional<Task, "meta" | "tid">): task is Task;
    /**
     * 根据tid获取元素的位置
     * @param tid
     * @return {number}
     * @private
     */
    _getIndexByTid(tid: number): number;
    /**
     * 创建任务
     * @param task
     * @private
     */
    _createTask(task: Task): Task | false;
    get task(): Task[];
    /**
     * 获取当前队列中的任务
     */
    getTasks(): Task[];
    /**
     * 添加任务
     * @param task
     * @return
     */
    add(task: MakeOptional<Task, "meta" | "tid">): number | false;
    /**
     * 替换队列中的某个任务
     * @param id
     * @param task
     */
    replace(id: number, task: MakeOptional<Task, "meta" | "tid">): number | false;
    replaceByMetaType(task: MakeOptional<Task, "meta" | "tid">): number | false;
    /**
     * 根据id删除对应的task
     * @param id
     */
    remove(id: number): boolean;
    /**
     * 清空队列
     */
    clear(): void;
    /**
     * 开始执行任务，默认在构造函数中执行
     */
    start(): void;
    /**
     * 停止执行队列中的任务，不包括当前执行中的任务
     */
    stop(): void;
    /**
     * 从任务队列中的第一个任务开始执行
     */
    exec(): Promise<false>;
}
export { TaskQueue };
