mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-15 23:20:36 +01:00
Core/Units: moved health and power ordering predicates from Unit header into CommonPredicates (#29584)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user