text: /* 
   * To change this license header, choose License Headers in Project Properties.
   * To change this template file, choose Tools | Templates
   * and open the template in the editor.
   */
  /*jslint node: true, vars: true, evil: true, bitwise: true */
  "use strict";
  /* global RigidCircle, vec2 */
  
  /**
   * This function decides which collision function to use based on the type of the shape
   * @memberOf RigidCircle
   * @param {RigidShape} otherShape The shape being checked
   * @param {CollisionInfo} collisionInfo Where the collision info is to be stored
   * @returns {Boolean} If there is a collision
   */
  RigidCircle.prototype.collisionTest = function (otherShape, collisionInfo) {
      var status = false;
      if (otherShape.mType === "RigidCircle") {
          status = this.collideCircCirc(this, otherShape, collisionInfo);
      } else {
          status = otherShape.collideRectCirc(this, collisionInfo);
      }
      return status;
  };
  
  /**
   * Handles collision between 2 Rigid Circles
   * @param {RigidCircle} c1 The 1st Rigid Circle
   * @param {RigidCircle} c2 The 2nd Rigid Circle
   * @param {CollisionInfo} collisionInfo Where the collision info is stored
   * @returns {Boolean} Whether there was a collision or not
   */
  RigidCircle.prototype.collideCircCirc = function (c1, c2, collisionInfo) {
      var vFrom1to2 = [0, 0];
      vec2.subtract(vFrom1to2, c2.getCenter(), c1.getCenter());
      var rSum = c1.mRadius + c2.mRadius;
      var dist = vec2.length(vFrom1to2);
      if (dist > Math.sqrt(rSum * rSum)) {
          //not overlapping
          return false;
      }
      if (dist !== 0) {
          // overlapping bu not same position
          vec2.normalize(vFrom1to2, vFrom1to2);
          var vToC2 = [0, 0];
          vec2.scale(vToC2, vFrom1to2, -c2.mRadius);
          vec2.add(vToC2, c2.getCenter(), vToC2);
          collisionInfo.setInfo(rSum - dist, vFrom1to2, vToC2);
      } else {
          var n = [0, -1];
          //same position
          if (c1.mRadius > c2.mRadius) {
              var pC1 = c1.getCenter();
              var ptOnC1 = [pC1[0], pC1[1] + c1.mRadius];
              collisionInfo.setInfo(rSum, n, ptOnC1);
          } else {
              var pC2 = c2.getCenter();
              var ptOnC2 = [pC2[0], pC2[1]+ c2.mRadius];
              collisionInfo.setInfo(rSum, n, ptOnC2);
          }
      }
      return true;
  };
  
  