Try a different approach for creature deletion

This works almost instantly, as opposed to the refactored version, which
takes nearly a second, or more.
This commit is contained in:
2016-04-14 21:52:44 +10:00
parent b74a5aabcd
commit f9a5f60969
+18
View File
@@ -71,6 +71,8 @@ void RoomData::RunFrame() {
for (auto characterIt : characterList) {
BoundingBox characterBox = characterIt->GetBounds() + characterIt->GetOrigin();
std::list<int> creatureUnloadList;
for (auto creatureIt : *creatureMgr.GetContainer()) {
BoundingBox creatureBox = creatureIt.second.GetBounds() + creatureIt.second.GetOrigin();
@@ -88,8 +90,24 @@ void RoomData::RunFrame() {
copyBarrierToPacket(&barrierPacket, barrierData, barrierIndex);
pumpPacketProximity(reinterpret_cast<SerialPacket*>(&barrierPacket), roomIndex, characterIt->GetOrigin(), INFLUENCE_RADIUS);
//delete this creature
creatureUnloadList.push_back(creatureIt.first);
}
}
//actually unload these creatures
for (auto& it : creatureUnloadList) {
CreatureData* creatureData = creatureMgr.Find(it);
CreaturePacket creaturePacket;
creaturePacket.type = SerialPacketType::CREATURE_UNLOAD;
copyCreatureToPacket(&creaturePacket, creatureData, it);
pumpPacketProximity(reinterpret_cast<SerialPacket*>(&creaturePacket), roomIndex, creatureData->GetOrigin(), INFLUENCE_RADIUS);
creatureMgr.Unload(it);
}
}
//send the creature updates