util_task_task_manager.js

/**
 * @module TaskManager
 * @fileoverview Contains TaskManager class.
 */

/**
 * @class
 * Object to manage tasks that are running in the engine.
 */
class TaskManager {
    /**
     * Create a new task manager.
     * @constructor
     */
    constructor() {
        this._tasks = new Set();
    }


    // Updating

    /**
     * Update the task manager and all its tasks.
     * @param {number} elapsed Time since last update cycle
     */
    update(elapsed) {
        for (const task of this._tasks.values()) {
            task.update(elapsed);
            if (task.isDone())
                this._tasks.delete(task);
        }
    }


    // Adding and removing

    /**
     * Add a task to the manager to run.
     * @param {Task} task Task to add
     * @returns {Task} Task that was added
     */
    add(task) {
        this._tasks.add(task);
        task.init();

        return task;
    }

    /**
     * Delete a task from the manager.
     * @param {Task} task Task to remove
     */
    delete(task) {
        this._tasks.delete(task);
    }
}

export default TaskManager;