34 lines
768 B
C++
34 lines
768 B
C++
#ifndef TARGETLIST_H
|
|
#define TARGETLIST_H
|
|
|
|
#include "target.h"
|
|
|
|
class target_list: public target
|
|
{
|
|
public:
|
|
target_list() {}
|
|
target_list(target **l, int n) { list = l; list_size = n; }
|
|
virtual bool hit(const ray &r, float t_min, float t_max, hit_record &rec) const;
|
|
target **list;
|
|
int list_size;
|
|
};
|
|
|
|
bool target_list::hit(const ray &r, float t_min, float t_max, hit_record &rec) const
|
|
{
|
|
hit_record temp_rec;
|
|
bool hit_anything = false;
|
|
double closest_so_far = t_max;
|
|
for (int i = 0; i < list_size; i++)
|
|
{
|
|
if (list[i]->hit(r, t_min, closest_so_far, temp_rec))
|
|
{
|
|
hit_anything = true;
|
|
closest_so_far = temp_rec.t;
|
|
rec = temp_rec;
|
|
}
|
|
}
|
|
return hit_anything;
|
|
}
|
|
|
|
#endif
|