TurtleBrains  0.2.1
High quality, portable, C++ API for native application and 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 <utility> //std::pair
19 
20 namespace TurtleBrains
21 {
22  namespace Game
23  {
24 
29 
30  class EntityManager;
32 
40  {
41  public:
46  static const EntityType kInvalidType;
47 
52  explicit Entity(const EntityType& entityType);
53 
58  virtual ~Entity(void) = 0;
59 
63  EntityManager* GetEntityManager(void) const;
64 
69  void Simulate(void);
70 
71  //
72  // Entity Behavior System
73  //
74 
78  void PushBehavior(EntityBehaviorInterface* entityBehavior);
79 
83  void PopBehavior(void);
84 
88  void PopBehaviorIf(EntityBehaviorInterface* entityBehavior);
89 
93  void PopAllBehaviors(void);
94 
99  const EntityBehaviorInterface* GetActiveBehavior(void) const;
100 
106 
107  //
108  // Collision and Bounding Volume
109  //
110 
119  bool IsCollidable(void) const;
120 
132  void SetCollidable(const bool isCollidable);
133 
137  bool HasBoundingVolume(void) const;
138 
144  void RemoveBoundingVolumes(void);
145 
157  void AddBoundingCircle(const float circleRadius, const tbMath::Vector2& centerOffset = tbMath::Vector2::kZero);
158 
170  void AddBoundingBox(const float boxWidth, const float boxHeight, const tbMath::Vector2& centerOffset = tbMath::Vector2::kZero);
171 
179  bool CheckCollisionWith(const tbMath::Vector2& point) const;
180 
192  bool CheckCollisionWith(const tbMath::Vector2& center, const float radius) const;
193 
207  bool CheckCollisionWith(const tbMath::Vector2& center, const float width, const float height) const;
208 
217  bool CheckCollisionWith(const Entity& otherEntity) const;
218 
222  const EntityType& GetEntityType(void) const { return mEntityType; }
223 
224  protected://TODO: TIM: Check this !
233  virtual void OnSimulate(void);
234 
235  virtual void OnUpdate(const float deltaTime);
236 
237  virtual void OnRender(void) const;
238 
245  virtual void OnCollideWith(Entity& other);
246 
250  virtual void OnAdded(void);
251 
255  virtual void OnRemoved(void);
256 
257  private:
258  void ReallyPopBehavior(void);
259 
260  typedef std::stack<EntityBehaviorInterface*> BehaviorContainer;
261  typedef std::pair<tbMath::Unstable::BoundingVolume, tbMath::Vector2> BoundingVolumeInformation;
262  typedef std::vector<BoundingVolumeInformation> BoundingVolumeContainer;
263 
264  BehaviorContainer mBehaviorStack;
265  BoundingVolumeContainer mBoundingVolumes;
266  EntityType mEntityType;
267 
268  EntityManager* mEntityManager;
269  bool mIsCollidable;
270 
271  friend class EntityManager;
272  };
273 
279 
280  }; /* namespace Game */
281 }; /* namespace TurtleBrains */
282 
283 namespace tbGame = TurtleBrains::Game;
284 
285 #endif /* _TurtleBrains_Entity_h_ */
Definition: tb_vector.h:48
void PushBehavior(EntityBehaviorInterface *entityBehavior)
Definition: tb_entity.h:39
Definition: tb_graphic_list.h:25
void PopBehaviorIf(EntityBehaviorInterface *entityBehavior)
virtual void OnSimulate(void)
Definition: tb_entity_behavior_interface.h:23
EntityManager * GetEntityManager(void) const
static const Vector2 kZero
Definition: tb_vector.h:54
Entity EntityInterface
Definition: tb_entity.h:278
virtual void OnCollideWith(Entity &other)
Contains all functions, classes and helpers related to game/application development written by Tim "B...
Definition: tb_application_dialog.h:21
virtual void OnRemoved(void)
Definition: tb_entity_manager.h:114
void SetCollidable(const bool isCollidable)
tbCore::tbString EntityType
Definition: tb_entity.h:28
bool HasBoundingVolume(void) const
virtual void OnRender(void) const
static const EntityType kInvalidType
Definition: tb_entity.h:46
virtual void OnAdded(void)
void AddBoundingCircle(const float circleRadius, const tbMath::Vector2 &centerOffset=tbMath::Vector2::kZero)
const EntityBehaviorInterface * GetActiveBehavior(void) const
bool CheckCollisionWith(const tbMath::Vector2 &point) const
bool IsCollidable(void) const
virtual void OnUpdate(const float deltaTime)
Entity(const EntityType &entityType)
const EntityType & GetEntityType(void) const
Definition: tb_entity.h:222
void AddBoundingBox(const float boxWidth, const float boxHeight, const tbMath::Vector2 &centerOffset=tbMath::Vector2::kZero)
std::string tbString
Definition: tb_string.h:293
This is the heart of TurtleBrains for game developers to create GameScenes and Entities to interact w...