1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-12-26 14:45:48 +00:00

Fix possible crash due to unsafe shot iteration.

Fixes regression introduced in 0784d1b9df.
With a std::list it was okay to create shots while iterating with an
iterator, but not so with a std::vector.
Now using index access, which is safe with push_back() operations.
This commit is contained in:
fgenesis 2013-05-16 03:54:20 +02:00
parent 5717149234
commit 36247593d4

View file

@ -8402,9 +8402,9 @@ void Game::handleShotCollisions(Entity *e, bool hasShield)
{
BBGE_PROF(Game_handleShotCollisions);
bool isRegValid=true;
for (Shot::Shots::iterator i = Shot::shots.begin(); i != Shot::shots.end(); i++)
for (size_t i = 0; i < Shot::shots.size(); ++i)
{
Shot *shot = *i;
Shot *shot = Shot::shots[i];
if (shot->isActive() && isEntityCollideWithShot(e, shot) && (!hasShield || (!shot->shotData || !shot->shotData->ignoreShield)))
{
Vector collidePoint = e->position+e->offset;
@ -8434,9 +8434,9 @@ bool Game::isDamageTypeEnemy(DamageType dt)
void Game::handleShotCollisionsSkeletal(Entity *e)
{
BBGE_PROF(Game_HSSKELETAL);
for (Shot::Shots::iterator i = Shot::shots.begin(); i != Shot::shots.end(); i++)
for (size_t i = 0; i < Shot::shots.size(); ++i)
{
Shot *shot = *i;
Shot *shot = Shot::shots[i];
if (shot->isActive() && isEntityCollideWithShot(e, shot))
{
Bone *b = collideSkeletalVsCircle(e, shot->position, shot->collideRadius);
@ -8451,9 +8451,9 @@ void Game::handleShotCollisionsSkeletal(Entity *e)
void Game::handleShotCollisionsHair(Entity *e, int num)
{
for (Shot::Shots::iterator i = Shot::shots.begin(); i != Shot::shots.end(); i++)
for (size_t i = 0; i < Shot::shots.size(); ++i)
{
Shot *shot = *i;
Shot *shot = Shot::shots[i];
if (shot->isActive() && isEntityCollideWithShot(e, shot))
{
bool b = collideHairVsCircle(e, num, shot->position, 8);