summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/actormanager.cpp36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/actormanager.cpp b/src/actormanager.cpp
index 9cedb37b7..80dc6e25d 100644
--- a/src/actormanager.cpp
+++ b/src/actormanager.cpp
@@ -1515,8 +1515,12 @@ Being* ActorManager::findMostDamagedPlayer(const int maxTileDist) const
if (localPlayer == nullptr)
return nullptr;
+ const int maxTileDistSq = maxTileDist * maxTileDist;
int maxDamageTaken = 0;
- Being *target = nullptr;
+ Being *maxDamagePlayer = nullptr;
+
+ const int my_x = localPlayer->getTileX();
+ const int my_y = localPlayer->getTileY();
for_actors
{
@@ -1525,29 +1529,31 @@ Being* ActorManager::findMostDamagedPlayer(const int maxTileDist) const
Being *const being = static_cast<Being*>(*it);
- if ((being == nullptr) || !being->isAlive() || // don't heal dead
- playerRelations.getRelation(being->getName()) ==
- Relation::ENEMY2 || // don't heal enemy
- localPlayer == being) // don't heal self
+ if ((being == nullptr)
+ || (localPlayer == being) // don't heal self
+ || (!being->isAlive()) ) // don't heal the dead
{
continue;
}
- const int dx = being->getTileX() - localPlayer->getTileX();
- const int dy = being->getTileY() - localPlayer->getTileY();
- const int distance = fastSqrtInt(dx * dx + dy * dy);
+ if (being->getDamageTaken() <= maxDamageTaken)
+ continue;
+
+ const int dx = being->getTileX() - my_x;
+ const int dy = being->getTileY() - my_y;
+ const int distSq = dx*dx + dy*dy;
- if (distance > maxTileDist)
+ if (distSq > maxTileDistSq)
continue;
- if (being->getDamageTaken() > maxDamageTaken)
- {
- maxDamageTaken = being->getDamageTaken();
- target = being;
- }
+ if (playerRelations.getRelation(being->getName()) == Relation::ENEMY2)
+ continue; // don't heal enemy
+
+ maxDamageTaken = being->getDamageTaken();
+ maxDamagePlayer = being;
}
- return target;
+ return maxDamagePlayer;
}
#ifdef TMWA_SUPPORT