Jet  v1.3.3
point_particle_emitter2.h
Go to the documentation of this file.
1 // Copyright (c) 2018 Doyub Kim
2 //
3 // I am making my contributions/submissions to this project solely in my
4 // personal capacity and am not conveying any rights to any intellectual
5 // property of any third parties.
6 
7 #ifndef INCLUDE_JET_POINT_PARTICLE_EMITTER2_H_
8 #define INCLUDE_JET_POINT_PARTICLE_EMITTER2_H_
9 
10 #include <jet/particle_emitter2.h>
11 #include <limits>
12 #include <random>
13 
14 namespace jet {
15 
23  public:
24  class Builder;
25 
42  const Vector2D& origin,
43  const Vector2D& direction,
44  double speed,
45  double spreadAngleInDegrees,
46  size_t maxNumOfNewParticlesPerSec = 1,
47  size_t maxNumOfParticles = std::numeric_limits<size_t>::max(),
48  uint32_t seed = 0);
49 
52 
55 
57  size_t maxNumberOfParticles() const;
58 
61 
63  static Builder builder();
64 
65  private:
66  std::mt19937 _rng;
67 
68  double _firstFrameTimeInSeconds = 0.0;
69  size_t _numberOfEmittedParticles = 0;
70 
71  size_t _maxNumberOfNewParticlesPerSecond;
72  size_t _maxNumberOfParticles;
73 
74  Vector2D _origin;
75  Vector2D _direction;
76  double _speed;
77  double _spreadAngleInRadians;
78 
85  void onUpdate(
86  double currentTimeInSeconds,
87  double timeIntervalInSeconds) override;
88 
89  void emit(
90  Array1<Vector2D>* newPositions,
91  Array1<Vector2D>* newVelocities,
92  size_t maxNewNumberOfParticles);
93 
94  double random();
95 };
96 
98 typedef std::shared_ptr<PointParticleEmitter2> PointParticleEmitter2Ptr;
99 
100 
105  public:
107  Builder& withOrigin(const Vector2D& origin);
108 
110  Builder& withDirection(const Vector2D& direction);
111 
113  Builder& withSpeed(double speed);
114 
116  Builder& withSpreadAngleInDegrees(double spreadAngleInDegrees);
117 
119  size_t maxNumOfNewParticlesPerSec);
120 
123 
125  Builder& withRandomSeed(uint32_t seed);
126 
129 
132 
133  private:
134  size_t _maxNumberOfNewParticlesPerSecond = 1;
135  size_t _maxNumberOfParticles = kMaxSize;
136  Vector2D _origin{0, 0};
137  Vector2D _direction{0, 1};
138  double _speed = 1.0;
139  double _spreadAngleInDegrees = 90.0;
140  uint32_t _seed = 0;
141 };
142 
143 } // namespace jet
144 
145 #endif // INCLUDE_JET_POINT_PARTICLE_EMITTER2_H_
jet::PointParticleEmitter2::maxNumberOfNewParticlesPerSecond
size_t maxNumberOfNewParticlesPerSecond() const
Returns max number of new particles per second.
jet::Array< T, 1 >
1-D array class.
Definition: array1.h:31
jet::ParticleEmitter2
Abstract base class for 2-D particle emitter.
Definition: particle_emitter2.h:18
jet::PointParticleEmitter2Ptr
std::shared_ptr< PointParticleEmitter2 > PointParticleEmitter2Ptr
Shared pointer for the PointParticleEmitter2 type.
Definition: point_particle_emitter2.h:98
jet::PointParticleEmitter2::Builder
Front-end to create PointParticleEmitter2 objects step by step.
Definition: point_particle_emitter2.h:104
jet::PointParticleEmitter2::setMaxNumberOfNewParticlesPerSecond
void setMaxNumberOfNewParticlesPerSecond(size_t rate)
Sets max number of new particles per second.
jet::max
Point2< T > max(const Point2< T > &a, const Point2< T > &b)
Returns element-wise max point: (max(a.x, b.x), max(a.y, b.y)).
jet::PointParticleEmitter2::setMaxNumberOfParticles
void setMaxNumberOfParticles(size_t maxNumberOfParticles)
Sets max number of particles to be emitted.
jet::PointParticleEmitter2
2-D point particle emitter.
Definition: point_particle_emitter2.h:22
jet::PointParticleEmitter2::Builder::withOrigin
Builder & withOrigin(const Vector2D &origin)
Returns builder with origin.
jet::kMaxSize
constexpr size_t kMaxSize
Max size_t.
Definition: constants.h:79
jet
Definition: advection_solver2.h:18
particle_emitter2.h
jet::PointParticleEmitter2::Builder::withRandomSeed
Builder & withRandomSeed(uint32_t seed)
Returns builder with random seed.
jet::PointParticleEmitter2::Builder::withMaxNumberOfParticles
Builder & withMaxNumberOfParticles(size_t maxNumberOfParticles)
Returns builder with max number of particles.
jet::PointParticleEmitter2::Builder::makeShared
PointParticleEmitter2Ptr makeShared() const
Builds shared pointer of PointParticleEmitter2 instance.
jet::PointParticleEmitter2::PointParticleEmitter2
PointParticleEmitter2(const Vector2D &origin, const Vector2D &direction, double speed, double spreadAngleInDegrees, size_t maxNumOfNewParticlesPerSec=1, size_t maxNumOfParticles=std::numeric_limits< size_t >::max(), uint32_t seed=0)
jet::PointParticleEmitter2::Builder::withSpreadAngleInDegrees
Builder & withSpreadAngleInDegrees(double spreadAngleInDegrees)
Returns builder with spread angle in degrees.
jet::Vector< T, 2 >
2-D vector class.
Definition: vector2.h:24
jet::PointParticleEmitter2::Builder::withSpeed
Builder & withSpeed(double speed)
Returns builder with speed.
jet::PointParticleEmitter2::Builder::withDirection
Builder & withDirection(const Vector2D &direction)
Returns builder with direction.
jet::PointParticleEmitter2::Builder::build
PointParticleEmitter2 build() const
Builds PointParticleEmitter2.
jet::PointParticleEmitter2::builder
static Builder builder()
Returns builder fox PointParticleEmitter2.
jet::PointParticleEmitter2::maxNumberOfParticles
size_t maxNumberOfParticles() const
Returns max number of particles to be emitted.
jet::PointParticleEmitter2::Builder::withMaxNumberOfNewParticlesPerSecond
Builder & withMaxNumberOfNewParticlesPerSecond(size_t maxNumOfNewParticlesPerSec)