#include "first_hit.h"

bool first_hit(
    const Ray & ray,
    const double min_t,
    const std::vector< std::shared_ptr<Object> > & objects,
    int & hit_id,
    double & t,
    Eigen::Vector3d & n)
{
    bool hit = false;
    /* Initialize to a value that will never be used. */
    t = -1;
    /* Alternatively, use a max integer value, and remove the check t == -1. */

    /* Store intermediate results that are not necessarily the first hit. */
    double t_temp;
    Eigen::Vector3d n_temp;

    for (int i = 0; i < objects.size(); ++i) {
        if (objects[i]->intersect(ray, min_t, t_temp, n_temp)) {
            hit = true;
            if (t == -1 || t_temp < t) {
                hit_id = i;
                t = t_temp;
                n = n_temp;
            }
        }
    }

    return hit;
}

