Only set entity size once. Test entity is dead before testing alive (race condition when adding to quadtree).

This commit is contained in:
Steve 2018-02-04 12:01:55 +00:00
parent 7e88125864
commit a84f261154
1 changed files with 25 additions and 17 deletions

View File

@ -76,10 +76,17 @@ void doEntities(void)
for (self = world.entityHead.next ; self != NULL ; self = self->next) for (self = world.entityHead.next ; self != NULL ; self = self->next)
{ {
r = &self->sprite[self->facing]->frames[self->spriteFrame]->rect; /*
* Most things retain their dimensions, so this isn't a big deal. If we set
* this each frame, it will muck up the bouncing, especially in the case of grenades.
*/
if (self->w == 0 || self->h == 0)
{
r = &self->sprite[self->facing]->frames[self->spriteFrame]->rect;
self->w = r->w; self->w = r->w;
self->h = r->h; self->h = r->h;
}
removeFromQuadtree(self, &world.quadtree); removeFromQuadtree(self, &world.quadtree);
@ -173,7 +180,20 @@ void doEntities(void)
self->isOnScreen = 0; self->isOnScreen = 0;
} }
if (self->alive == ALIVE_ALIVE) if (self->alive == ALIVE_DEAD)
{
prev->next = self->next;
if (self == world.entityTail)
{
world.entityTail = prev;
}
free(self);
self = prev;
}
else if (self->alive == ALIVE_ALIVE)
{ {
if (self->health <= 0) if (self->health <= 0)
{ {
@ -186,18 +206,6 @@ void doEntities(void)
addToQuadtree(self, &world.quadtree); addToQuadtree(self, &world.quadtree);
} }
} }
if (self->alive == ALIVE_DEAD)
{
prev->next = self->next;
if (self == world.entityTail)
{
world.entityTail = prev;
}
self = prev;
}
} }
prev = self; prev = self;