mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2024-12-27 07:06:00 +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:
parent
5717149234
commit
36247593d4
1 changed files with 6 additions and 6 deletions
|
@ -8402,9 +8402,9 @@ void Game::handleShotCollisions(Entity *e, bool hasShield)
|
||||||
{
|
{
|
||||||
BBGE_PROF(Game_handleShotCollisions);
|
BBGE_PROF(Game_handleShotCollisions);
|
||||||
bool isRegValid=true;
|
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)))
|
if (shot->isActive() && isEntityCollideWithShot(e, shot) && (!hasShield || (!shot->shotData || !shot->shotData->ignoreShield)))
|
||||||
{
|
{
|
||||||
Vector collidePoint = e->position+e->offset;
|
Vector collidePoint = e->position+e->offset;
|
||||||
|
@ -8434,9 +8434,9 @@ bool Game::isDamageTypeEnemy(DamageType dt)
|
||||||
void Game::handleShotCollisionsSkeletal(Entity *e)
|
void Game::handleShotCollisionsSkeletal(Entity *e)
|
||||||
{
|
{
|
||||||
BBGE_PROF(Game_HSSKELETAL);
|
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))
|
if (shot->isActive() && isEntityCollideWithShot(e, shot))
|
||||||
{
|
{
|
||||||
Bone *b = collideSkeletalVsCircle(e, shot->position, shot->collideRadius);
|
Bone *b = collideSkeletalVsCircle(e, shot->position, shot->collideRadius);
|
||||||
|
@ -8451,9 +8451,9 @@ void Game::handleShotCollisionsSkeletal(Entity *e)
|
||||||
|
|
||||||
void Game::handleShotCollisionsHair(Entity *e, int num)
|
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))
|
if (shot->isActive() && isEntityCollideWithShot(e, shot))
|
||||||
{
|
{
|
||||||
bool b = collideHairVsCircle(e, num, shot->position, 8);
|
bool b = collideHairVsCircle(e, num, shot->position, 8);
|
||||||
|
|
Loading…
Reference in a new issue