/**
 * Copyright:       Copyright (C) 2018 Gabriel Gheorghe, All Rights Reserved
 * Authors:         $(Gabriel Gheorghe)
 * License:         $(LINK2 https://www.gnu.org/licenses/gpl-3.0.txt, GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007)
 * Source:          $(LINK2 https://github.com/GabyForceQ/LibertyEngine/blob/master/source/liberty/physics/primitive/sphere.d)
 * Documentation:
 * Coverage:
**/
module liberty.physics.primitive.sphere;

import liberty.math.vector;
import liberty.physics.primitive.data;

class SphereCollider {
  private {
    Vector3F center;
    float radius;
  }

  this(Vector3F center, float radius)   {
    this.center = center;
    this.radius = radius;
  }

  Vector3F getCenter()   {
    return center;
  }

  float getRadius()   const {
    return radius;
  }

  CollisionData collideSphere(SphereCollider rhs) {
    const float radius_distance = radius + rhs.radius;
    float center_distance = (cast(Vector3F)rhs.center - cast(Vector3F)center).magnitude;
    return CollisionData(center_distance < radius_distance, center_distance - radius_distance);
  }
}