Source: model/update.js

/**
 * @author    Wolfgang Kowarschick <kowa@hs-augsburg.de>
 * @copyright 2017 - 2018
 * @license   CC-BY-NC-SA-4.0
 */

/**
 * @module model/update
 */

import {collisionCircleStage}  from './collisionCircleStage';
import {collisionPaddleStage}  from './collisionPaddleStage';
import {collisionPaddleCircle} from './collisionPaddleCircle';

/** @private */
let v_start_button, v_stage, v_ball, v_paddles;

/**
 * @function initUpdater
 * @static
 *
 * @param {Object}       p_config
 * @param {ModelCircle}  p_config.startButton
 * @param {ModelStage}   p_config.stage
 * @param {ModelCircle}  p_config.ball
 * @param {Array.<ModelPaddle>} p_config.paddles
 */
function initUpdater({startButton: p_start_button,
                      stage: p_stage, ball: p_ball, paddles: p_paddles
                    })
{ v_start_button = p_start_button;
  v_stage        = p_stage;
  v_ball         = p_ball;
  v_paddles      = p_paddles;
}

/**
 * @function update
 * @static
 * @description
 *   Update function to be called at least 60 times per second.
 *   Typically used as a callback function.
 *
 * @param {number} p_delta_s - time in seconds since last call (max 1/60)
 */
function update(p_delta_s)
{ v_start_button.update(p_delta_s);

  v_ball.update(p_delta_s);
  collisionCircleStage(v_ball, v_stage);

  for (let v_paddle of v_paddles)
  { v_paddle.update(p_delta_s);
    collisionPaddleStage(v_paddle, v_stage);
    collisionPaddleCircle(v_paddle, v_ball);
  }
}

export {initUpdater, update};