aboutsummaryrefslogtreecommitdiff
path: root/src/game/CreatureGroups.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/CreatureGroups.h')
-rw-r--r--src/game/CreatureGroups.h60
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
-