aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Miscellaneous/CommonPredicates.cpp
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2024-01-16 20:18:25 +0100
committerGitHub <noreply@github.com>2024-01-16 20:18:25 +0100
commit2f6ed2c203b16a1d1e85f61a8b8e2cf3d1a4e784 (patch)
tree95e239433e83a5a47c1b809bf0f3b1db99a02166 /src/server/game/Miscellaneous/CommonPredicates.cpp
parent39621fa41c96f66698055447c7a9134865e0f00b (diff)
Core/Units: moved health and power ordering predicates from Unit header into CommonPredicates (#29584)
Diffstat (limited to 'src/server/game/Miscellaneous/CommonPredicates.cpp')
-rw-r--r--src/server/game/Miscellaneous/CommonPredicates.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/server/game/Miscellaneous/CommonPredicates.cpp b/src/server/game/Miscellaneous/CommonPredicates.cpp
index 834985b0a34..3ecbd776ff6 100644
--- a/src/server/game/Miscellaneous/CommonPredicates.cpp
+++ b/src/server/game/Miscellaneous/CommonPredicates.cpp
@@ -19,3 +19,35 @@
#include "Unit.h"
Trinity::Predicates::IsVictimOf::IsVictimOf(Unit const* attacker) : _victim(attacker ? attacker->GetVictim() : nullptr) { }
+
+bool Trinity::Predicates::PowerPctOrderPred::operator()(WorldObject const* objA, WorldObject const* objB) const
+{
+ Unit const* a = objA->ToUnit();
+ Unit const* b = objB->ToUnit();
+ float rA = a ? a->GetPowerPct(_power) : 0.0f;
+ float rB = b ? b->GetPowerPct(_power) : 0.0f;
+ return _ascending ? rA < rB : rA > rB;
+}
+
+bool Trinity::Predicates::PowerPctOrderPred::operator()(Unit const* a, Unit const* b) const
+{
+ float rA = a->GetPowerPct(_power);
+ float rB = b->GetPowerPct(_power);
+ return _ascending ? rA < rB : rA > rB;
+}
+
+bool Trinity::Predicates::HealthPctOrderPred::operator()(WorldObject const* objA, WorldObject const* objB) const
+{
+ Unit const* a = objA->ToUnit();
+ Unit const* b = objB->ToUnit();
+ float rA = (a && a->GetMaxHealth()) ? float(a->GetHealth()) / float(a->GetMaxHealth()) : 0.0f;
+ float rB = (b && b->GetMaxHealth()) ? float(b->GetHealth()) / float(b->GetMaxHealth()) : 0.0f;
+ return _ascending ? rA < rB : rA > rB;
+}
+
+bool Trinity::Predicates::HealthPctOrderPred::operator()(Unit const* a, Unit const* b) const
+{
+ float rA = a->GetMaxHealth() ? float(a->GetHealth()) / float(a->GetMaxHealth()) : 0.0f;
+ float rB = b->GetMaxHealth() ? float(b->GetHealth()) / float(b->GetMaxHealth()) : 0.0f;
+ return _ascending ? rA < rB : rA > rB;
+}