diff options
Diffstat (limited to 'src/game/UnitAI.h')
-rw-r--r-- | src/game/UnitAI.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/game/UnitAI.h b/src/game/UnitAI.h index 93992724c08..c5e02b07d1b 100644 --- a/src/game/UnitAI.h +++ b/src/game/UnitAI.h @@ -17,14 +17,18 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + #ifndef TRINITY_UNITAI_H #define TRINITY_UNITAI_H + #include "Platform/Define.h" #include <list> #include "Unit.h" + class Unit; class Player; struct AISpellInfoType; + //Selection method used by SelectTarget enum SelectAggroTarget { @@ -34,6 +38,7 @@ enum SelectAggroTarget SELECT_TARGET_NEAREST, SELECT_TARGET_FARTHEST, }; + class TRINITY_DLL_SPEC UnitAI { protected: @@ -43,40 +48,54 @@ class TRINITY_DLL_SPEC UnitAI virtual bool CanAIAttack(const Unit *who) const { return true; } virtual void AttackStart(Unit *); virtual void UpdateAI(const uint32 diff) = 0; + virtual void InitializeAI() { if(!me->isDead()) Reset(); } + virtual void Reset() {}; + // Called when unit is charmed virtual void OnCharmed(bool apply) = 0; + // Pass parameters between AI virtual void DoAction(const int32 param = 0) {} virtual uint32 GetData(uint32 id = 0) { return 0; } virtual void SetData(uint32 id, uint32 value) {} virtual void SetGUID(const uint64 &guid, int32 id = 0) {} virtual uint64 GetGUID(int32 id = 0) { return 0; } + Unit* SelectTarget(SelectAggroTarget target, uint32 position = 0, float dist = 0, bool playerOnly = false, int32 aura = 0); void SelectTargetList(std::list<Unit*> &targetList, uint32 num, SelectAggroTarget target, float dist = 0, bool playerOnly = false, int32 aura = 0); + void AttackStartCaster(Unit *victim, float dist); + void DoCast(uint32 spellId); void DoCast(Unit* victim, uint32 spellId, bool triggered = false); void DoCastVictim(uint32 spellId, bool triggered = false); void DoCastAOE(uint32 spellId, bool triggered = false); + float DoGetSpellMaxRange(uint32 spellId, bool positive = false); + void DoMeleeAttackIfReady(); bool DoSpellAttackIfReady(uint32 spell); + static AISpellInfoType *AISpellInfo; static void FillAISpellInfo(); }; + class TRINITY_DLL_SPEC PlayerAI : public UnitAI { protected: Player* const me; public: explicit PlayerAI(Player *p) : UnitAI((Unit*)p), me(p) {} + void OnCharmed(bool apply); }; + class TRINITY_DLL_SPEC SimpleCharmedAI : public PlayerAI { public: void UpdateAI(const uint32 diff); }; + #endif |