diff options
author | Andrei Karas <akaras@inbox.ru> | 2010-06-20 23:10:02 +0300 |
---|---|---|
committer | Chuck Miller <shadowmil@gmail.com> | 2010-06-20 18:02:28 -0400 |
commit | 75587e38bd6f3b91d46f3e10ccd195f26a00f098 (patch) | |
tree | 6ea7c1734392f3513ca920986acb7d59346ac065 /src/actorspritemanager.cpp | |
parent | ceab31510f4c419ba3d68b25633504890db483f6 (diff) | |
download | mana-75587e38bd6f3b91d46f3e10ccd195f26a00f098.tar.gz mana-75587e38bd6f3b91d46f3e10ccd195f26a00f098.tar.bz2 mana-75587e38bd6f3b91d46f3e10ccd195f26a00f098.tar.xz mana-75587e38bd6f3b91d46f3e10ccd195f26a00f098.zip |
Fix ActorSprite double deletion
Also replaces std::list to std::set in actorspritemanager.
Reviewed-by: Chuck Miller <shadowmil@gmail.com>
Diffstat (limited to 'src/actorspritemanager.cpp')
-rw-r--r-- | src/actorspritemanager.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/src/actorspritemanager.cpp b/src/actorspritemanager.cpp index ead469c2..a6c82420 100644 --- a/src/actorspritemanager.cpp +++ b/src/actorspritemanager.cpp @@ -74,14 +74,14 @@ void ActorSpriteManager::setMap(Map *map) void ActorSpriteManager::setPlayer(LocalPlayer *player) { player_node = player; - mActors.push_back(player); + mActors.insert(player); } Being *ActorSpriteManager::createBeing(int id, ActorSprite::Type type, int subtype) { Being *being = new Being(id, type, subtype, mMap); - mActors.push_back(being); + mActors.insert(being); return being; } @@ -89,7 +89,7 @@ FloorItem *ActorSpriteManager::createItem(int id, int itemId, int x, int y) { FloorItem *floorItem = new FloorItem(id, itemId, x, y, mMap); - mActors.push_back(floorItem); + mActors.insert(floorItem); return floorItem; } @@ -98,7 +98,7 @@ void ActorSpriteManager::destroy(ActorSprite *actor) if (!actor || actor == player_node) return; - mDeleteActors.push_back(actor); + mDeleteActors.insert(actor); } Being *ActorSpriteManager::findBeing(int id) const @@ -208,7 +208,7 @@ void ActorSpriteManager::logic() it != it_end; ++it) { viewport->clearHover(*it); - mActors.remove(*it); + mActors.erase(*it); delete *it; } @@ -220,15 +220,16 @@ void ActorSpriteManager::clear() if (player_node) { player_node->setTarget(0); - mActors.remove(player_node); + mActors.erase(player_node); } - delete_all(mActors); + for_actors + delete *it; mActors.clear(); mDeleteActors.clear(); if (player_node) - mActors.push_back(player_node); + mActors.insert(player_node); } Being *ActorSpriteManager::findNearestLivingBeing(int x, int y, @@ -297,7 +298,9 @@ void ActorSpriteManager::getPlayerNames(std::vector<std::string> &names, if ((being->getType() == ActorSprite::PLAYER || (being->getType() == ActorSprite::NPC && npcNames)) && being->getName() != "") + { names.push_back(being->getName()); + } } } |