diff options
| author | Ovahlord <dreadkiller@gmx.de> | 2024-01-16 20:18:25 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-01-16 20:18:25 +0100 |
| commit | 2f6ed2c203b16a1d1e85f61a8b8e2cf3d1a4e784 (patch) | |
| tree | 95e239433e83a5a47c1b809bf0f3b1db99a02166 /src/server/game | |
| parent | 39621fa41c96f66698055447c7a9134865e0f00b (diff) | |
Core/Units: moved health and power ordering predicates from Unit header into CommonPredicates (#29584)
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 56 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/CommonPredicates.cpp | 32 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/CommonPredicates.h | 29 |
3 files changed, 61 insertions, 56 deletions
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index f49fc6f4511..e278384a315 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1972,60 +1972,4 @@ class TC_GAME_API Unit : public WorldObject bool _isCombatDisallowed; }; -namespace Trinity -{ - // Binary predicate for sorting Units based on percent value of a power - class PowerPctOrderPred - { - public: - PowerPctOrderPred(Powers power, bool ascending = true) : _power(power), _ascending(ascending) { } - - bool 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 operator()(Unit const* a, Unit const* b) const - { - float rA = a->GetPowerPct(_power); - float rB = b->GetPowerPct(_power); - return _ascending ? rA < rB : rA > rB; - } - - private: - Powers const _power; - bool const _ascending; - }; - - // Binary predicate for sorting Units based on percent value of health - class HealthPctOrderPred - { - public: - HealthPctOrderPred(bool ascending = true) : _ascending(ascending) { } - - bool 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 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; - } - - private: - bool const _ascending; - }; -} - #endif 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; +} diff --git a/src/server/game/Miscellaneous/CommonPredicates.h b/src/server/game/Miscellaneous/CommonPredicates.h index 54040245972..f450c2e33f7 100644 --- a/src/server/game/Miscellaneous/CommonPredicates.h +++ b/src/server/game/Miscellaneous/CommonPredicates.h @@ -24,6 +24,8 @@ class Unit; class WorldObject; +enum Powers : int8; + namespace Trinity { namespace Predicates @@ -38,6 +40,33 @@ namespace Trinity WorldObject const* _victim; }; + /// Binary predicate for sorting Units based on percent value of a power + class TC_GAME_API PowerPctOrderPred + { + public: + PowerPctOrderPred(Powers power, bool ascending = true) : _power(power), _ascending(ascending) { } + + bool operator()(WorldObject const* objA, WorldObject const* objB) const; + bool operator()(Unit const* a, Unit const* b) const; + + private: + Powers const _power; + bool const _ascending; + }; + + /// Binary predicate for sorting Units based on percent value of health + class TC_GAME_API HealthPctOrderPred + { + public: + HealthPctOrderPred(bool ascending = true) : _ascending(ascending) { } + + bool operator()(WorldObject const* objA, WorldObject const* objB) const; + bool operator() (Unit const* a, Unit const* b) const; + + private: + bool const _ascending; + }; + template <typename PRED> class TC_GAME_API Inverter { |
