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) {
|
void Mob::updateEffects(std::uint64_t delta) {
|
||||||
float deltaSec = (float)delta / 1000.0f;
|
float deltaSec = (float)delta / 1000.0f;
|
||||||
for (auto it = m_Effects.begin(); it != m_Effects.end(); it++) {
|
for (std::size_t i = 0; i < m_Effects.size(); i++) {
|
||||||
EffectDuration& effect = *it;
|
EffectDuration& effect = m_Effects[i];
|
||||||
effect.second -= deltaSec;
|
effect.second -= deltaSec;
|
||||||
if (effect.second < 0) // effect has gone
|
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(){
|
void World::cleanDeadMobs(){
|
||||||
for(auto it = m_Mobs.begin(); it != m_Mobs.end(); it++){
|
for(std::size_t i = 0; i < m_Mobs.size(); i++){
|
||||||
MobPtr mob = *it;
|
MobPtr mob = m_Mobs[i];
|
||||||
if(!mob->isAlive()){
|
if(!mob->isAlive()){
|
||||||
m_Mobs.erase(it);
|
m_Mobs.erase(m_Mobs.begin() + i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user