It is in this function (collision detection), when I introduced my addEntity(...) on row 61.
I started to randomly get the error in the title, and I don't know why! It works sometimes and won't work others. Anyone has any idea how to do this correctly?
void EntityManager::collitionDetection()
{
double r1 = 0, r2 = 0, x1 = 0, x2 = 0, y1 = 0, y2 = 0, xDelta = 0, yDelta = 0, d = 0;
bool hit = false;
if(vecEntity.size() > 1)
{
for(std::vector<Entity*>::iterator i = vecEntity.begin(); i != vecEntity.end(); i++)
{
r1 = vecEntity[0]->getRadie();
x1 = vecEntity[0]->getX();
y1 = vecEntity[0]->getY();
x2 = (*i)->getX();
y2 = (*i)->getY();
r2 = (*i)->getRadie();
xDelta = (x1 - x2);
yDelta = (y1 - y2);
if(sqrt(pow(xDelta,2) + pow(yDelta, 2)) <= (r1+r2))
{
if(dynamic_cast<Enemy*>(*i))
{
(*i)->setAlive(false);
//addEntity(new Explosion(((*i)->getX()), (*i)->getY(), true));
dynamic_cast<Player*>(vecEntity[0])->updateLife();
}
}
}
}
for(std::vector<Entity*>::iterator i = vecEntity.begin(); i != vecEntity.end(); i++)
{
for(std::vector<Entity*>::iterator j = vecEntity.begin(); j != vecEntity.end(); j++)
{
if(i != j)
{
r1 = (*i)->getRadie();
x1 = (*i)->getX();
y1 = (*i)->getY();
r2 = (*j)->getRadie();
x2 = (*j)->getX();
y2 = (*j)->getY();
xDelta = x1-x2;
yDelta = y1-y2;
if(sqrt(pow(xDelta,2) + pow(yDelta, 2)) <= (r1+r2))
{
if(dynamic_cast<Enemy*>(*j) && dynamic_cast<Bullet*>(*i))
{
if(dynamic_cast<Bullet*>(*i)->isFriendly())
{
(*j)->setAlive(false);
(*i)->setAlive(false);
if(dynamic_cast<Enemy*>(*j))
{
dynamic_cast<Player*>(vecEntity[0])->updateScore();
addEntity(new Explosion(((*j)->getX()), (*j)->getY(), true));
}
}
/*if(!(*i)->checkStatus())
{
addEntity(new Explosion(((*i)->getX()), (*i)->getY()));
}*/
}
if(dynamic_cast<Player*>(*j) && (dynamic_cast<Bullet*>(*i)->isFriendly() == false))
{
dynamic_cast<Player*>(vecEntity[0])->updateLife();
(*i)->setAlive(false);
}
}
}
}
for(std::vector<Entity*>::iterator i = vecEntity.begin(); i != vecEntity.end(); i++)
{
if(!(*i)->checkStatus())
{
delete *i;
i = vecEntity.erase(i);
return;
}
}
}
}
Here is the function addEntity
void EntityManager::addEntity(Entity *entity)
{
vecEntity.push_back(entity);
}
This post has been edited by FrozenSnake: 03 October 2012 - 03:18 AM

New Topic/Question
Reply




MultiQuote




|