TurtleBrains  0.3.1
High quality, portable, C++ framework for rapid 2D game development.
tb_entity_manager.h
1 
9 #ifndef _TurtleBrains_EntityManager_h_
10 #define _TurtleBrains_EntityManager_h_
11 
12 #include "tb_entity.h" //For EntityType definition.
13 #include "../core/tb_noncopyable.h"
14 
15 #include <map>
16 #include <set>
17 #include <list>
18 
19 namespace TurtleBrains
20 {
21  namespace Game
22  {
23 
24  class Entity;
25 
33  {
34  public:
38  typedef std::list<Entity*> EntityList;
39 
43  EntityManager(void);
44 
49  virtual ~EntityManager(void) = 0;
50 
54  void ClearEntities(void);
55 
62  //Entity& AddEntity(const EntityType& entityType);
63 
69  void AddEntity(Entity* entity);
70 
77  void AddEntity(Entity& entity);
78 
83  void RemoveEntity(Entity* entity);
84 
88  void RemoveEntities(const EntityType& byType = Entity::kInvalidType);
89 
93  void EntityTypeChanged(Entity& entity, const EntityTypeContainer& oldTypes);
94 
98  EntityList GetAllEntities(void);
99 
103  EntityList GetEntitiesByType(const EntityType& byType);
104 
118  EntityList GetEntitiesAt(const tbMath::Vector2& point, const EntityType& byType = Entity::kInvalidType, bool onlyCollidableEntities = false);
119 
123  EntityList GetEntitiesWithin(const tbMath::Vector2& center, const float radius, const EntityType& byType = Entity::kInvalidType, bool onlyCollidableEntities = false);
124 
128  EntityList GetEntitiesWithin(const tbMath::Vector2& center, const float width, const float height, const EntityType& byType = Entity::kInvalidType, bool onlyCollidableEntities = false);
129 
134  void Simulate(void);
135 
136  protected:
140  virtual void OnUpdate(const float deltaTime) override;
141 
142  private:
143  void ReallyAddEntity(Entity* entity, bool managed);
144  void ReallyRemoveEntity(Entity* entityToRemove);
145  void ReallyRemoveMarkedEntities(void);
146 
147  typedef std::set<Entity*> EntitySet;
148  typedef std::map<EntityType, EntityList> EntityByTypeMap;
149 
150  EntityList mEntities;
151  EntityList mManagedEntities;
152  EntitySet mEntitiesToRemove;
153  EntityByTypeMap mEntitiesByType;
154  bool mIsSafeToRemove;
155  };
156 
157  }; /* namespace Game */
158 }; /* namespace TurtleBrains */
159 
160 namespace tbGame = TurtleBrains::Game;
161 
162 #endif /* _TurtleBrains_EntityManager_h_ */
Definition: tb_vector.h:47
Definition: tb_entity.h:46
void AddEntity(Entity *entity)
Definition: tb_graphic_list.h:27
std::list< EntityType > EntityTypeContainer
Definition: tb_entity.h:35
std::list< Entity * > EntityList
Definition: tb_entity_manager.h:38
Here is some information about the primary namespace.
Definition: tb_application_dialog.h:21
virtual void OnUpdate(const float deltaTime) override
Definition: tb_entity_manager.h:32
void RemoveEntities(const EntityType &byType=Entity::kInvalidType)
tbCore::tbString EntityType
Definition: tb_entity.h:30
static const EntityType kInvalidType
Definition: tb_entity.h:53
EntityList GetEntitiesWithin(const tbMath::Vector2 &center, const float radius, const EntityType &byType=Entity::kInvalidType, bool onlyCollidableEntities=false)
EntityList GetEntitiesByType(const EntityType &byType)
void EntityTypeChanged(Entity &entity, const EntityTypeContainer &oldTypes)
EntityList GetEntitiesAt(const tbMath::Vector2 &point, const EntityType &byType=Entity::kInvalidType, bool onlyCollidableEntities=false)
void RemoveEntity(Entity *entity)
This is the heart of TurtleBrains for game developers to create GameScenes and Entities to interact w...