diff options
author | Fedja Beader <fedja@protonmail.ch> | 2025-04-01 00:42:11 +0200 |
---|---|---|
committer | Fedja Beader <fedja@protonmail.ch> | 2025-04-01 00:56:40 +0200 |
commit | ca510bb8786941b2445830e3448a7c6d64910323 (patch) | |
tree | 03a84e454e9674501eda25afe654295d70b691d9 | |
parent | b4cb2bae6dbe86d6280790c47f4dfd1e80295e99 (diff) | |
download | manaplus-ca510bb8786941b2445830e3448a7c6d64910323.tar.gz manaplus-ca510bb8786941b2445830e3448a7c6d64910323.tar.bz2 manaplus-ca510bb8786941b2445830e3448a7c6d64910323.tar.xz manaplus-ca510bb8786941b2445830e3448a7c6d64910323.zip |
Refactor ActorManager::validateBeing()
-rw-r--r-- | src/actormanager.cpp | 34 |
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 |