Only set entity size once. Test entity is dead before testing alive (race condition when adding to quadtree).
This commit is contained in:
parent
7e88125864
commit
a84f261154
|
@ -76,10 +76,17 @@ void doEntities(void)
|
|||
|
||||
for (self = world.entityHead.next ; self != NULL ; self = self->next)
|
||||
{
|
||||
r = &self->sprite[self->facing]->frames[self->spriteFrame]->rect;
|
||||
|
||||
self->w = r->w;
|
||||
self->h = r->h;
|
||||
/*
|
||||
* 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->h = r->h;
|
||||
}
|
||||
|
||||
removeFromQuadtree(self, &world.quadtree);
|
||||
|
||||
|
@ -173,7 +180,20 @@ void doEntities(void)
|
|||
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)
|
||||
{
|
||||
|
@ -186,18 +206,6 @@ void doEntities(void)
|
|||
addToQuadtree(self, &world.quadtree);
|
||||
}
|
||||
}
|
||||
|
||||
if (self->alive == ALIVE_DEAD)
|
||||
{
|
||||
prev->next = self->next;
|
||||
|
||||
if (self == world.entityTail)
|
||||
{
|
||||
world.entityTail = prev;
|
||||
}
|
||||
|
||||
self = prev;
|
||||
}
|
||||
}
|
||||
|
||||
prev = self;
|
||||
|
|
Loading…
Reference in New Issue