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 | |
parent | 39621fa41c96f66698055447c7a9134865e0f00b (diff) |
Core/Units: moved health and power ordering predicates from Unit header into CommonPredicates (#29584)
-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 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_item.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_paladin.cpp | 5 |
6 files changed, 68 insertions, 60 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 { diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index da6a028a78f..c179b78bc0e 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -26,6 +26,7 @@ #include "Battleground.h" #include "BattlePetMgr.h" #include "CellImpl.h" +#include "CommonPredicates.h" #include "Containers.h" #include "CreatureAI.h" #include "DB2Stores.h" @@ -2991,7 +2992,7 @@ class spell_gen_replenishment : public SpellScript if (targets.size() > maxTargets) { - targets.sort(Trinity::PowerPctOrderPred(POWER_MANA)); + targets.sort(Trinity::Predicates::PowerPctOrderPred(POWER_MANA)); targets.resize(maxTargets); } } diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index ce116529c4c..828523e0bf3 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -23,6 +23,7 @@ #include "ScriptMgr.h" #include "Battleground.h" +#include "CommonPredicates.h" #include "Containers.h" #include "Creature.h" #include "CreatureAIImpl.h" @@ -995,7 +996,7 @@ class spell_item_echoes_of_light : public SpellScript if (targets.size() < 2) return; - targets.sort(Trinity::HealthPctOrderPred()); + targets.sort(Trinity::Predicates::HealthPctOrderPred()); WorldObject* target = targets.front(); targets.clear(); diff --git a/src/server/scripts/Spells/spell_paladin.cpp b/src/server/scripts/Spells/spell_paladin.cpp index e6079efb253..cbd48045a5f 100644 --- a/src/server/scripts/Spells/spell_paladin.cpp +++ b/src/server/scripts/Spells/spell_paladin.cpp @@ -24,6 +24,7 @@ #include "ScriptMgr.h" #include "AreaTrigger.h" #include "AreaTriggerAI.h" +#include "CommonPredicates.h" #include "Containers.h" #include "DB2Stores.h" #include "Group.h" @@ -692,7 +693,7 @@ class spell_pal_glyph_of_holy_light : public SpellScript if (targets.size() > maxTargets) { - targets.sort(Trinity::HealthPctOrderPred()); + targets.sort(Trinity::Predicates::HealthPctOrderPred()); targets.resize(maxTargets); } } @@ -897,7 +898,7 @@ class spell_pal_holy_prism_selector : public SpellScript { if (GetSpellInfo()->Id == SPELL_PALADIN_HOLY_PRISM_TARGET_ALLY) { - targets.sort(Trinity::HealthPctOrderPred()); + targets.sort(Trinity::Predicates::HealthPctOrderPred()); targets.resize(maxTargets); } else |