// Copyright (c) 2023 Dominic Masters
// 
// This software is released under the MIT License.
// https://opensource.org/licenses/MIT

#include "SphereCollider.hpp"

using namespace Dawn;

SphereCollider::SphereCollider(std::weak_ptr<SceneItem> item) : Collider3D(item) {

}

enum Collider3DType SphereCollider::getColliderType() {
  return COLLIDER3D_TYPE_SPHERE;
}

bool_t SphereCollider::performRaycast(
  struct Collider3DRayResult *result,
  struct Ray3D ray
) {
  assertNotNull(result, "SphereCollider::performRaycast: Result cannot be null");

  return raytestSphere(
    ray,
    { .center = item.lock()->getLocalPosition(), .radius = this->radius },
    &result->point,
    &result->normal,
    &result->distance
  );
}