18#ifndef TRINITY_UNITAI_H
19#define TRINITY_UNITAI_H
26#include <unordered_map>
28#define CAST_AI(a, b) (dynamic_cast<a*>(b))
29#define ENSURE_AI(a,b) (EnsureAI<a>(b))
31template<
class T,
class U>
34 T* cast_ai =
dynamic_cast<T*
>(ai);
58 virtual void AttackStart(
Unit* victim);
61 virtual void InitializeAI();
69 virtual void OnCharmed(
bool isNew);
92 template<
class PREDICATE>
95 std::list<Unit*> targetList;
96 SelectTargetList(targetList, std::numeric_limits<uint32>::max(), targetType, offset, predicate);
98 return FinalizeTargetSelection(targetList, targetType);
111 void SelectTargetList(std::list<Unit*>& targetList,
uint32 num,
SelectTargetMethod targetType,
uint32 offset = 0,
float dist = 0.0f,
bool playerOnly =
false,
bool withTank =
true,
int32 aura = 0);
116 template <
class PREDICATE>
119 if (!PrepareTargetListSelection(targetList, targetType, offset))
123 targetList.remove_if([&predicate](
Unit* target) {
return !predicate(target); });
125 FinalizeTargetListSelection(targetList, num, targetType);
155 void AttackStartCaster(
Unit* victim,
float dist);
163 bool DoSpellAttackIfReady(
uint32 spellId);
166 static void FillAISpellInfo();
std::string GetDebugInfo()
static ObjectGuid const Empty
virtual void HealReceived(Unit *, uint32 &)
virtual void SetData(uint32 id, uint32 value)
virtual void JustEnteredCombat(Unit *)
virtual void SpellInterrupted(uint32, uint32)
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Unit * SelectTarget(SelectTargetMethod targetType, uint32 offset, PREDICATE const &predicate)
virtual void SetGUID(ObjectGuid const &guid, int32 id)
virtual bool CanAIAttack(Unit const *) const
void SelectTargetList(std::list< Unit * > &targetList, uint32 num, SelectTargetMethod targetType, uint32 offset, PREDICATE const &predicate)
virtual void DoAction(int32 param)
static std::unordered_map< std::pair< uint32, Difficulty >, AISpellInfoType > AISpellInfo
UnitAI & operator=(UnitAI const &right)=delete
virtual void DamageTaken(Unit *, uint32 &, DamageEffectType, SpellInfo const *)
virtual void OnGameEvent(bool, uint16)
virtual ObjectGuid GetGUID(int32 id) const
virtual void JustExitedCombat()
virtual void HealDone(Unit *, uint32 &)
virtual void DamageDealt(Unit *, uint32 &, DamageEffectType)
virtual void UpdateAI(uint32 diff)=0
UnitAI(UnitAI const &right)=delete
SpellCastResult DoCastAOE(uint32 spellId, CastSpellExtraArgs const &args={})
virtual uint32 GetData(uint32 id) const