diff options
author | QAston <none@none> | 2009-04-07 20:40:00 +0200 |
---|---|---|
committer | QAston <none@none> | 2009-04-07 20:40:00 +0200 |
commit | 741b51cc471d8a3f897b7ded51e1d3122e3d8300 (patch) | |
tree | 3c579933847679c780be6b672e00d636a32690dd /src/game/CreatureGroups.h | |
parent | 26b856a5135f51372cb1b15de21a0e995cdb6435 (diff) | |
parent | c6b6a72956efdc10da8fac982db734b054984d08 (diff) |
*Merge
--HG--
branch : trunk
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 - |