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

#include "ScenePhysicsManager.hpp"
#include "scene/Scene.hpp"
#include "scene/components/physics/3d/Collider3D.hpp"

using namespace Dawn;

ScenePhysicsManager::ScenePhysicsManager(Scene *scene) {
  this->scene = scene;
}

void ScenePhysicsManager::update() {
  
}

std::vector<struct Collider3DRayResult> ScenePhysicsManager::raycast3DAll(
  struct Ray3D ray
) {
  // TODO: Optimize the crap out of this.
  struct Collider3DRayResult result;
  auto colliders = scene->findComponents<Collider3D>();
  std::vector<struct Collider3DRayResult> results;
  auto itCollider = colliders.begin();
  while(itCollider != colliders.end()) {
    if((*itCollider)->raycast(&result, ray)) {
      results.push_back(result);
    }
    ++itCollider;
  }

  return results;
}