diff options
Diffstat (limited to 'src/game/CreatureGroups.h')
-rw-r--r-- | src/game/CreatureGroups.h | 63 |
1 files changed, 36 insertions, 27 deletions
diff --git a/src/game/CreatureGroups.h b/src/game/CreatureGroups.h index dbf8dcec645..8c345aadd40 100644 --- a/src/game/CreatureGroups.h +++ b/src/game/CreatureGroups.h @@ -1,7 +1,7 @@ -/* - * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/> +/* + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> * - * Copyright (C) 2008 Trinity <http://www.trinitycore.org/> + * Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,49 +21,58 @@ #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 UNORDERED_MAP<uint32/*memberDBGUID*/, FormationInfo*> CreatureGroupInfoType; + +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; + bool m_Formed; + public: - CreatureGroup() : m_leader(NULL) {} - ~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();} -}; + //Group cannot be created empty + explicit CreatureGroup(uint32 id) : m_groupID(id), m_leader(NULL), m_Formed(false) {} + ~CreatureGroup() { sLog.outDebug("Destroying group"); } + + Creature* getLeader() const { return m_leader; } + uint32 GetId() const { return m_groupID; } + 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 - |