fix: add safe erasing in loops
This commit is contained in:
@@ -33,11 +33,11 @@ void Mob::tick(std::uint64_t delta) {
|
||||
|
||||
void Mob::updateEffects(std::uint64_t delta) {
|
||||
float deltaSec = (float)delta / 1000.0f;
|
||||
for (auto it = m_Effects.begin(); it != m_Effects.end(); it++) {
|
||||
EffectDuration& effect = *it;
|
||||
for (std::size_t i = 0; i < m_Effects.size(); i++) {
|
||||
EffectDuration& effect = m_Effects[i];
|
||||
effect.second -= deltaSec;
|
||||
if (effect.second < 0) // effect has gone
|
||||
m_Effects.erase(it);
|
||||
m_Effects.erase(m_Effects.begin() + i);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -459,10 +459,10 @@ bool World::CanPlaceBigTower(const glm::vec2& worldPos, PlayerID playerID) const
|
||||
}
|
||||
|
||||
void World::cleanDeadMobs(){
|
||||
for(auto it = m_Mobs.begin(); it != m_Mobs.end(); it++){
|
||||
MobPtr mob = *it;
|
||||
for(std::size_t i = 0; i < m_Mobs.size(); i++){
|
||||
MobPtr mob = m_Mobs[i];
|
||||
if(!mob->isAlive()){
|
||||
m_Mobs.erase(it);
|
||||
m_Mobs.erase(m_Mobs.begin() + i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user