Fix Intersect and add sort the list each time we add something to it.

This commit is contained in:
Godzil
2020-02-20 00:46:19 +00:00
parent a82b67faa4
commit dbaa6eea2c
2 changed files with 30 additions and 8 deletions

View File

@@ -15,14 +15,15 @@
class Intersect
{
private:
Intersection *list;
Intersection **list;
uint32_t num;
uint32_t allocated;
public:
Intersect();
~Intersect();
void add(Intersection i);
int count() { return this->num; };
Intersection operator[](const int p) { return this->list[p]; }
Intersection operator[](const int p) { return *this->list[p]; }
Intersection hit();
};

View File

@@ -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];
}