|
@@ -17,18 +17,39 @@
|
|
|
Intersect::Intersect()
|
|
|
{
|
|
|
this->allocated = MIN_ALLOC;
|
|
|
- this->list = (Intersection *)calloc(sizeof(Intersection *), MIN_ALLOC);
|
|
|
+ this->list = (Intersection **)calloc(sizeof(Intersection *), MIN_ALLOC);
|
|
|
this->num = 0;
|
|
|
}
|
|
|
|
|
|
+Intersect::~Intersect()
|
|
|
+{
|
|
|
+ /* Free stuff */
|
|
|
+}
|
|
|
+
|
|
|
void Intersect::add(Intersection i)
|
|
|
{
|
|
|
+ Intersection *x;
|
|
|
+ int j, k;
|
|
|
+
|
|
|
if ((this->num + 1) > this->allocated)
|
|
|
{
|
|
|
this->allocated *= 2;
|
|
|
- this->list = (Intersection *)realloc(this->list, sizeof(Intersection *) * this->allocated);
|
|
|
+ this->list = (Intersection **)realloc(this->list, sizeof(Intersection *) * this->allocated);
|
|
|
+ }
|
|
|
+ this->list[this->num++] = new Intersection(i.t, i.object);
|
|
|
+
|
|
|
+ /* Now sort.. */
|
|
|
+ for(j = 1; j < (this->num); j++)
|
|
|
+ {
|
|
|
+ x = this->list[j];
|
|
|
+ k = j;
|
|
|
+ while( (k > 0) && (this->list[k - 1]->t) > x->t )
|
|
|
+ {
|
|
|
+ this->list[k] = this->list[k - 1];
|
|
|
+ k--;
|
|
|
+ }
|
|
|
+ this->list[k] = x;
|
|
|
}
|
|
|
- this->list[this->num++] = i;
|
|
|
}
|
|
|
|
|
|
Intersection Intersect::hit()
|
|
@@ -38,10 +59,10 @@ Intersection Intersect::hit()
|
|
|
uint32_t curHit = -1;
|
|
|
for(i = 0; i < this->num; i++)
|
|
|
{
|
|
|
- if ((this->list[i].t >= 0) && (this->list[i].t < minHit))
|
|
|
+ if ((this->list[i]->t >= 0) && (this->list[i]->t < minHit))
|
|
|
{
|
|
|
curHit = i;
|
|
|
- minHit = this->list[i].t;
|
|
|
+ minHit = this->list[i]->t;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -50,5 +71,5 @@ Intersection Intersect::hit()
|
|
|
return Intersection(0, nullptr);
|
|
|
}
|
|
|
|
|
|
- return this->list[curHit];
|
|
|
+ return *this->list[curHit];
|
|
|
}
|