TurtleBrains  0.3.1
High quality, portable, C++ framework for rapid 2D game development.
tb_entity.h
1 
9 #ifndef _TurtleBrains_Entity_h_
10 #define _TurtleBrains_Entity_h_
11 
12 #include "../core/tb_string.h"
13 #include "../graphics/tb_graphic_list.h"
14 #include "../math/unstable/tbu_bounding_volume.h"
15 
16 #include <vector>
17 #include <stack>
18 #include <list>
19 #include <utility> //std::pair
20 
21 namespace TurtleBrains
22 {
23  namespace Game
24  {
25 
31 
35  typedef std::list<EntityType> EntityTypeContainer;
36 
37  class EntityManager;
39 
47  {
48  public:
53  static const EntityType kInvalidType;
54 
59  explicit Entity(const EntityType& entityType);
60 
65  virtual ~Entity(void) = 0;
66 
70  EntityManager* GetEntityManager(void) const;
71 
76  void Simulate(void);
77 
78  //
79  // Entity Behavior System
80  //
81 
90  void ClearBehaviors(void);
91 
100  void PushBehavior(EntityBehaviorInterface* entityBehavior);
101 
111  void PopBehavior(void);
112 
124  void PopBehaviorIf(EntityBehaviorInterface* entityBehavior);
125 
134  void PopAllBehaviors(void);
135 
140  const EntityBehaviorInterface* GetActiveBehavior(void) const;
141 
147 
148  //
149  // Collision and Bounding Volume
150  //
151 
160  bool IsCollidable(void) const;
161 
171  void SetCollidable(const bool isCollidable);
172 
176  bool HasBoundingVolume(void) const;
177 
183  void ClearBoundingVolumes(void);
184 
196  void AddBoundingCircle(const float circleRadius, const tbMath::Vector2& centerOffset = tbMath::Vector2::Zero());
197 
209  void AddBoundingBox(const float boxWidth, const float boxHeight, const tbMath::Vector2& centerOffset = tbMath::Vector2::Zero());
210 
218  bool CheckCollisionWith(const tbMath::Vector2& point) const;
219 
231  bool CheckCollisionWith(const tbMath::Vector2& center, const float radius) const;
232 
246  bool CheckCollisionWith(const tbMath::Vector2& center, const float width, const float height) const;
247 
256  bool CheckCollisionWith(const Entity& otherEntity) const;
257 
258  //
259  // EntityType and other Properties
260  //
261 
268  const EntityType& GetEntityType(void) const;
269 
273  const EntityTypeContainer& GetEntityTypes(void) const;
274 
279  void AddEntityType(const EntityType& entityType);
280 
284  void RemoveEntityType(const EntityType& entityType);
285 
290  bool IsEntityOfType(const EntityType& entityType) const;
291 
292  protected:
301  virtual void OnSimulate(void);
302 
303  virtual void OnUpdate(const float deltaTime);
304 
305  virtual void OnRender(void) const;
306 
310  virtual void OnDebugRender(void) const;
311 
318  virtual void OnCollide(const Entity& other);
319 
324  virtual void OnAdd(void);
325 
330  virtual void OnRemove(void);
331 
332  private:
333  void ReallyPopBehavior(void);
334  void DeleteDelayedBehaviors(void);
335 
336  typedef std::stack<EntityBehaviorInterface*> BehaviorStack;
337  typedef std::list<EntityBehaviorInterface*> BehaviorList;
338  typedef std::pair<tbMath::Unstable::BoundingVolume, tbMath::Vector2> BoundingVolumeInformation;
339  typedef std::vector<BoundingVolumeInformation> BoundingVolumeContainer;
340 
341  BehaviorStack mBehaviorStack;
342  BehaviorList mBehaviorsToDelete;
343  BoundingVolumeContainer mBoundingVolumes;
344  EntityTypeContainer mEntityTypes;
345 
346  EntityManager* mEntityManager;
347  bool mIsCollidable;
348 
349  friend class EntityManager;
350 
351  //This is only a friend until BoundingVolume API is stabilized and Entity has accessors to grab the volumes of
352  //the entity in a better way to perform MoveEntity in the TileSystem.
353  friend class TileSystem;
354  };
355 
356  }; /* namespace Game */
357 }; /* namespace TurtleBrains */
358 
359 namespace tbGame = TurtleBrains::Game;
360 
361 #endif /* _TurtleBrains_Entity_h_ */
Definition: tb_vector.h:47
void PushBehavior(EntityBehaviorInterface *entityBehavior)
bool IsEntityOfType(const EntityType &entityType) const
Definition: tb_entity.h:46
Definition: tb_graphic_list.h:27
void PopBehaviorIf(EntityBehaviorInterface *entityBehavior)
void AddBoundingCircle(const float circleRadius, const tbMath::Vector2 &centerOffset=tbMath::Vector2::Zero())
virtual void OnSimulate(void)
virtual void OnDebugRender(void) const
void AddBoundingBox(const float boxWidth, const float boxHeight, const tbMath::Vector2 &centerOffset=tbMath::Vector2::Zero())
Definition: tb_entity_behavior_interface.h:25
EntityManager * GetEntityManager(void) const
std::list< EntityType > EntityTypeContainer
Definition: tb_entity.h:35
virtual void OnCollide(const Entity &other)
Definition: tb_tile_system.h:90
void AddEntityType(const EntityType &entityType)
Here is some information about the primary namespace.
Definition: tb_application_dialog.h:21
static Vector2 Zero(void)
Definition: tb_vector.h:53
Definition: tb_entity_manager.h:32
void SetCollidable(const bool isCollidable)
tbCore::tbString EntityType
Definition: tb_entity.h:30
bool HasBoundingVolume(void) const
void RemoveEntityType(const EntityType &entityType)
virtual void OnRender(void) const
static const EntityType kInvalidType
Definition: tb_entity.h:53
const EntityBehaviorInterface * GetActiveBehavior(void) const
bool CheckCollisionWith(const tbMath::Vector2 &point) const
const EntityTypeContainer & GetEntityTypes(void) const
virtual void OnAdd(void)
bool IsCollidable(void) const
virtual void OnUpdate(const float deltaTime)
virtual void OnRemove(void)
Entity(const EntityType &entityType)
const EntityType & GetEntityType(void) const
std::string tbString
Definition: tb_string.h:335
This is the heart of TurtleBrains for game developers to create GameScenes and Entities to interact w...