18#ifndef TRINITY_COMBATMANAGER_H
19#define TRINITY_COMBATMANAGER_H
23#include <unordered_map>
63 void SuppressFor(
Unit* who);
64 bool IsSuppressedFor(
Unit const* who)
const {
return (who == first) ? _suppressFirst : _suppressSecond; }
73 void Suppress(
Unit* who) { (who == first ? _suppressFirst : _suppressSecond) =
true; }
75 bool _suppressFirst =
false;
76 bool _suppressSecond =
false;
92 uint32 _combatTimer = PVP_COMBAT_TIMEOUT;
101 static bool CanBeginCombat(
Unit const* a,
Unit const* b);
108 bool HasCombat()
const {
return HasPvECombat() || HasPvPCombat(); }
109 bool HasPvECombat()
const;
110 bool HasPvECombatWithPlayers()
const;
111 std::unordered_map<ObjectGuid, CombatReference*>
const&
GetPvECombatRefs()
const {
return _pveRefs; }
112 bool HasPvPCombat()
const;
113 std::unordered_map<ObjectGuid, PvPCombatReference*>
const&
GetPvPCombatRefs()
const {
return _pvpRefs; }
115 Unit* GetAnyTarget()
const;
118 bool SetInCombatWith(
Unit* who,
bool addSecondUnitSuppressed =
false);
119 bool IsInCombatWith(
ObjectGuid const& who)
const;
120 bool IsInCombatWith(
Unit const* who)
const;
121 void InheritCombatStatesFrom(
Unit const* who);
122 void EndCombatBeyondRange(
float range,
bool includingPvP =
false);
127 void SuppressPvPCombat(
UnitFilter* unitFilter =
nullptr);
128 void EndAllPvECombat(
UnitFilter* unitFilter =
nullptr);
129 void RevalidateCombat();
130 void EndAllPvPCombat(
UnitFilter* unitFilter =
nullptr);
137 static void NotifyAICombat(
Unit* me,
Unit* other);
139 void PurgeReference(
ObjectGuid const& guid,
bool pvp);
140 bool UpdateOwnerCombatState()
const;
142 std::unordered_map<ObjectGuid, CombatReference*>
_pveRefs;
143 std::unordered_map<ObjectGuid, PvPCombatReference*>
_pvpRefs;
std::unordered_map< ObjectGuid, PvPCombatReference * > _pvpRefs
CombatManager & operator=(CombatManager const &)=delete
std::unordered_map< ObjectGuid, PvPCombatReference * > const & GetPvPCombatRefs() const
std::unordered_map< ObjectGuid, CombatReference * > _pveRefs
CombatManager(Unit *owner)
std::unordered_map< ObjectGuid, CombatReference * > const & GetPvECombatRefs() const
CombatManager(CombatManager const &)=delete
void EndAllCombat(UnitFilter *unitFilter=nullptr)
bool(Unit const *otherUnit) UnitFilter
void Update(VignetteData &vignette, WorldObject const *owner)
CombatReference & operator=(CombatReference const &)=delete
bool IsSuppressedFor(Unit const *who) const
Unit * GetOther(Unit const *me) const
CombatReference(CombatReference const &)=delete
CombatReference(Unit *a, Unit *b, bool pvp=false)
PvPCombatReference(Unit *first, Unit *second)