Source: System.js

/**
 * Interface of sub-systems of game.
 * @interface
 */
class System {
  /**
   * @constructor
   */
  constructor() {
    /**
     * Name of this system
     * @type {String}
     * @readonly
     */
    this.name = '';

    /**
     * Reference to the owner game instance
     * @type {Game}
     * @readonly
     */
    this.game = null;
  }

  /**
   * Callback that will be invoked when owner game is awake.
   * @method awake
   * @memberof System#
   * @param {Object} settings Settings passed to the game
   */
  awake(settings) {} /* eslint no-unused-vars:0 */
  /**
   * Callback that will be invoked each idle frame(animation frame).
   * @method update
   * @memberof System#
   * @param {Number} dt     Delta time in millisecond
   * @param {Number} dtSec  Delta time in second
   */
  update(dt, dtSec) {} /* eslint no-unused-vars:0 */
  /**
   * Callback that will be invoked each fixed frame(based on Game#desiredFPS).
   * @method fixedUpdate
   * @memberof System#
   * @param {Number} dt     Delta time in millisecond
   * @param {Number} dtSec  Delta time in second
   */
  fixedUpdate(dt, dtSec) {} /* eslint no-unused-vars:0 */
  /**
   * Callback that will be invoked when owner game is freeze.
   * @method freeze
   * @memberof System#
   */
  freeze() {}

  /**
   * Callback that will be invoked on each entity spawn.
   * @method onEntitySpawn
   * @memberof System#
   * @param  {Entity} ent Entity instance
   */
  onEntitySpawn(ent) {} /* eslint no-unused-vars:0 */
  /**
   * Callback that will be invoked on each entity remove.
   * @method onEntityRemove
   * @memberof System#
   * @param  {Entity} ent Entity instance
   */
  onEntityRemove(ent) {} /* eslint no-unused-vars:0 */
  /**
   * Callback that will be invoked when an entity changes its tag.
   * @method onEntityTagChange
   * @memberof System#
   * @param {Entity} ent Entity instance
   * @param {String} tag New tag
   */
  onEntityTagChange(ent, tag) {} /* eslint no-unused-vars:0 */

  /**
   * Callback that will be invoked when owner game will pause.
   * @method onPause
   * @memberof System#
   */
  onPause() {}
  /**
   * Callback that will be invoked when owner game will resume from pause.
   * @method onResume
   * @memberof System#
   */
  onResume() {}
}

module.exports = System;