summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFedja Beader <fedja@protonmail.ch>2025-04-01 00:42:11 +0200
committerFedja Beader <fedja@protonmail.ch>2025-04-01 00:56:40 +0200
commitca510bb8786941b2445830e3448a7c6d64910323 (patch)
tree03a84e454e9674501eda25afe654295d70b691d9
parentb4cb2bae6dbe86d6280790c47f4dfd1e80295e99 (diff)
downloadmanaplus-ca510bb8786941b2445830e3448a7c6d64910323.tar.gz
manaplus-ca510bb8786941b2445830e3448a7c6d64910323.tar.bz2
manaplus-ca510bb8786941b2445830e3448a7c6d64910323.tar.xz
manaplus-ca510bb8786941b2445830e3448a7c6d64910323.zip
Refactor ActorManager::validateBeing()
-rw-r--r--src/actormanager.cpp34
1 files changed, 28 insertions, 6 deletions
diff --git a/src/actormanager.cpp b/src/actormanager.cpp
index 80dc6e25d..c5d1bd1a7 100644
--- a/src/actormanager.cpp
+++ b/src/actormanager.cpp
@@ -1405,12 +1405,34 @@ bool ActorManager::validateBeing(const Being *const aroundBeing,
{
if (localPlayer == nullptr)
return false;
- return (being != nullptr) && ((being->getType() == type
- || type == ActorType::Unknown) && (being->isAlive()
- || (mTargetDeadPlayers && type == ActorType::Player))
- && being != aroundBeing) && being != excluded
- && (type != ActorType::Monster || !mTargetOnlyReachable
- || localPlayer->isReachable(being, maxCost));
+
+ if (being == nullptr)
+ return false;
+
+ // Exclude the being we're checking around of.
+ if (being == aroundBeing)
+ return false;
+
+ // and the one that is specifically excluded.
+ if (being == excluded)
+ return false;
+
+ // If specific being type is given, it must match.
+ if (!(being->getType() == type || type == ActorType::Unknown))
+ return false;
+
+ if (!being->isAlive())
+ if (!mTargetDeadPlayers || type != ActorType::Player)
+ return false;
+
+ // Why are we ignoring real reachability checks for non-monsters?
+ if (type != ActorType::Monster)
+ return true;
+
+ if (!mTargetOnlyReachable)
+ return true;
+
+ return localPlayer->isReachable(being, maxCost);
}
#ifdef TMWA_SUPPORT