diff options
Diffstat (limited to 'src/game/CreatureGroups.h')
-rw-r--r-- | src/game/CreatureGroups.h | 60 |
1 files changed, 36 insertions, 24 deletions
diff --git a/src/game/CreatureGroups.h b/src/game/CreatureGroups.h index 11d45167fd9..aba86ffcaac 100644 --- a/src/game/CreatureGroups.h +++ b/src/game/CreatureGroups.h @@ -1,4 +1,4 @@ -/* +/* * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> @@ -21,49 +21,61 @@ #ifndef _FORMATIONS_H #define _FORMATIONS_H -#include <map> -#include "Creature.h" -#include "Policies/Singleton.h" +#include "Common.h" -struct FormationMember +class CreatureGroup; + +struct FormationInfo { - float follow_dist; - float follow_angle; - uint32 memberGUID; uint32 leaderGUID; + float follow_dist; + float follow_angle; uint8 groupAI; }; class CreatureGroupManager { public: - void UpdateCreatureGroup(uint32 group_id, Creature *member); - void DestroyGroup(uint32 group_id, uint64 guid); + void AddCreatureToGroup(uint32 group_id, Creature *creature); + void RemoveCreatureFromGroup(CreatureGroup *group, Creature *creature); void LoadCreatureFormations(); }; +typedef std::multimap<uint32/*leaderDBGUID*/, CreatureGroup*> CreatureGroupHolderType; +typedef UNORDERED_MAP<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType; + +extern CreatureGroupHolderType CreatureGroupHolder; +extern CreatureGroupInfoType CreatureGroupMap; + class CreatureGroup { - UNORDERED_MAP<uint64, Creature*>CreatureGroupMembers; - Creature *m_leader; //Important do not forget sometimes to work with pointers instead synonims :D:D + private: + Creature *m_leader; //Important do not forget sometimes to work with pointers instead synonims :D:D + typedef std::map<Creature*, FormationInfo*> CreatureGroupMemberType; + CreatureGroupMemberType m_members; + uint32 m_groupID, mInstanceID; + bool m_Formed; + public: - CreatureGroup() : m_leader(NULL) {} + //Group cannot be created empty + explicit CreatureGroup(uint32 id, uint32 InstanceID) : m_groupID(id), m_leader(NULL), mInstanceID(InstanceID), m_Formed(false) {} ~CreatureGroup(){sLog.outDebug("Destroying group");} - void AddMember(Creature *); - void RemoveMember(uint64 guid); - void LeaderMovedInEvade(); - void MemberHasAttacked(Creature *); - void SetMemberDestination(Creature *); - bool isEmpty() {return CreatureGroupMembers.empty();} -}; + + Creature* getLeader() const { return m_leader; } + uint32 GetId() const { return m_groupID; } + uint32 getInstanceID() const { return mInstanceID; } + bool isEmpty() const { return m_members.empty(); } + bool isFormed() const { return m_Formed; } -typedef UNORDERED_MAP<uint32, CreatureGroup*> CreatureGroupHolderType; + void AddMember(Creature *member); + void RemoveMember(Creature *member); + void FormationReset(bool dismiss); -extern CreatureGroupHolderType CreatureGroupHolder; -extern UNORDERED_MAP<uint32, FormationMember*> CreatureGroupMap; + void LeaderMoveTo(float x, float y, float z); + void MemberAttackStart(Creature* member, Unit *target); +}; #define formation_mgr Trinity::Singleton<CreatureGroupManager>::Instance() #endif - |