From 12824deba2dd5bf1ba1160b8df7c4559285b8ae0 Mon Sep 17 00:00:00 2001 From: Lynix Date: Sun, 8 Feb 2015 15:43:27 +0100 Subject: [PATCH] (World) Fixed entity killing Former-commit-id: 180cd3c163cb2c6595a6710ce9302bcb83923870 --- SDK/src/NDK/World.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/SDK/src/NDK/World.cpp b/SDK/src/NDK/World.cpp index 98815a280..75159ddaa 100644 --- a/SDK/src/NDK/World.cpp +++ b/SDK/src/NDK/World.cpp @@ -52,7 +52,8 @@ namespace Ndk void World::KillEntity(Entity& entity) { - m_killedEntities.push_back(entity); + if (IsEntityValid(entity)) + m_killedEntities.push_back(entity); } void World::KillEntities(EntityList& list) @@ -87,12 +88,11 @@ namespace Ndk { if (!m_killedEntities.empty()) { - ///FIXME: Inverser les deux boucles ? - for (unsigned int i = 0; i < m_aliveEntities.size(); ++i) + for (unsigned int i = 0; i < m_killedEntities.size(); ++i) { Entity::Id e1 = m_aliveEntities[i].GetId(); - for (unsigned int j = 0; j < m_killedEntities.size(); ++j) + for (unsigned int j = 0; j < m_aliveEntities.size(); ++j) { Entity::Id e2 = m_killedEntities[j].GetId(); if (e1 == e2) @@ -105,14 +105,15 @@ namespace Ndk m_freeIdList.push_back(e1); // Suppression de l'entité des deux tableaux - m_aliveEntities.erase(m_aliveEntities.begin() + i); - m_killedEntities.erase(m_killedEntities.begin() + j); + m_aliveEntities.erase(m_aliveEntities.begin() + j); + m_killedEntities.erase(m_killedEntities.begin() + i); + + // Correction des indices (pour ne pas sauter une case) + i--; + j--; break; } } - - if (m_killedEntities.empty()) - break; } } }