TurtleBrains  0.3.0
High quality, portable, C++ API for native application and game development.
tb_particle_manager.h
1 
9 #ifndef _TurtleBrains_ParticleManager_h_
10 #define _TurtleBrains_ParticleManager_h_
11 
12 #include "../../core/tb_string.h"
13 #include "../../core/tb_noncopyable.h"
14 #include "../../core/tb_types.h"
15 #include "../../math/tb_vector.h"
16 #include "../tb_sprite.h"
17 
18 #include <vector>
19 #include <list>
20 #include <map>
21 
22 namespace tbImplementation
23 {
28  class Particle
29  {
30  public:
31  tbMath::Vector2 mPosition;
32  tbMath::Vector2 mVelocity;
33  tbMath::Vector2 mAcceleration;
34 
35  float mScale;
36  float mDragCoefficient;
37  tbCore::uint32 mFadeInTime;
38  tbCore::uint32 mFadeOutTime;
39  tbCore::uint32 mLifeTimer;
40 
41  tbGraphics::SpriteFrame mSpriteFrame;
42  tbGraphics::Color mColor;
43 
44  Particle(void);
45  bool Update(const float deltaTime);
46  };
47 };
48 
49 namespace TurtleBrains
50 {
51  namespace Graphics
52  {
53  namespace Unstable
54  {
55 
56  template <typename Type> class RangedType
57  {
58  public:
59  explicit RangedType(const Type& value) :
60  mMinimumValue(value),
61  mMaximumValue(value)
62  {
63  }
64 
65  explicit RangedType(const Type& minimumValue, const Type& maximumValue) :
66  mMinimumValue(minimumValue),
67  mMaximumValue(maximumValue)
68  {
69  tb_error_if(maximumValue < minimumValue, "tbExternalError: Expected minimumValue to be less-than-or-equal-to maximumValue.");
70  }
71 
72  ~RangedType(void)
73  {
74  }
75 
76  void SetRange(const Type& minimumValue, const Type& maximumValue)
77  {
78  tb_error_if(maximumValue < minimumValue, "tbExternalError: Expected minimumValue to be less-than-or-equal-to maximumValue.");
79  mMinimumValue = minimumValue;
80  mMaximumValue = maximumValue;
81  }
82 
83  const Type& Minimum(void) const { return mMinimumValue; }
84  const Type& Maximum(void) const { return mMaximumValue; }
85 
86  private:
87  Type mMinimumValue;
88  Type mMaximumValue;
89  };
90 
92  {
93  tbGraphics::SpriteFrame mSpriteFrame;
94  RangedType<float> mSpawnDistanceRange;
95  RangedType<float> mDragCoefficientRange;
96  RangedType<float> mScaleRange;
97  RangedType<float> mSpeedRange;
98  RangedType<float> mLaunchAngleRange;
99 
100  RangedType<tbCore::uint32> mParticleLifeTimeRange;
101  RangedType<tbCore::uint32> mParticleFadeInTimeRange;
102  RangedType<tbCore::uint32> mParticleFadeOutTimeRange;
103 
104  explicit ParticleDefinition(const tbGraphics::SpriteFrame& spriteFrame);
105  };
106 
108  {
109  TextureHandle mTextureHandle;
110  std::vector<ParticleDefinition> mParticleDefinitions;
111  tbCore::uint32 mLifeTime;
112  tbCore::uint32 mSpawnRate;
113  tbCore::uint8 mSpawnCount;
114 
115  explicit EmitterDefinition(const TextureHandle& textureHandle);
116  };
117 
123  {
124  public:
125  ParticleManager(void);
126  ~ParticleManager(void);
127 
128  bool LoadParticleSheetFromFile(const tbCore::tbString& particleSheetName, const tbCore::tbString& particleSheetFile);
129 
130  const EmitterDefinition& GetEmitterDefinition(const tbCore::tbString& particleSheet, const tbCore::tbString& emitterName) const;
131 
133  void ClearAllParticles(void);
134  void ManageParticle(const tbImplementation::Particle& particle);
135  void UpdateParticles(const float deltaTime);
136  void RenderParticles(void) const;
137 
138  private:
139  typedef std::list<tbImplementation::Particle> ParticleList;
140  typedef std::map<tbGraphics::TextureHandle, ParticleList> ParticleTable;
141 
142  ParticleTable mParticleTable;
143 
144  struct ParticleSheet
145  {
146  typedef std::map<tbCore::tbString, ParticleDefinition> ParticleDefinitionTable;
147  typedef std::map<tbCore::tbString, EmitterDefinition> EmitterDefinitionTable;
148 
149  ParticleDefinitionTable mParticles;
150  EmitterDefinitionTable mEmitters;
151  };
152 
153  typedef std::map<tbCore::tbString, ParticleSheet> ParticleSheetTable;
154  ParticleSheetTable mParticleSheets;
155  };
156 
157  extern ParticleManager theParticleManager;
158 
159  } /* namespace Unstable */
160  }; /* namespace Graphics */
161 }; /* namespace TurtleBrains */
162 
164 
165 #endif /* _TurtleBrains_ParticleManager_h_ */
Definition: tb_vector.h:47
Definition: tb_particle_manager.h:91
Give the GameScene and Entities something to display, Text, Sprites and AnimatedSprites help bring th...
Definition: tb_sprite.h:29
Definition: tb_particle_manager.h:107
unsigned int TextureHandle
Definition: tb_texture_manager.h:41
Definition: tb_particle_manager.h:56
Definition: tb_noncopyable.h:22
Contains all functions, classes and helpers related to game/application development written by Tim "B...
Definition: tb_application_dialog.h:21
Definition: tb_color.h:23
Definition: tb_particle_manager.h:28
uint8_t uint8
Unsigned integer with a size of 8 bits. Supports values from 0 to 255.
Definition: tb_types.h:23
uint32_t uint32
Unsigned integer with a size of 32 bits. Supports values from 0 to 4294967295, (2^32 - 1)...
Definition: tb_types.h:28
#define tb_error_if(errorTest, message,...)
Definition: tb_error.h:37
std::string tbString
Definition: tb_string.h:335
Definition: tb_application_dialog.h:19
Definition: tb_particle_manager.h:122