Jet  v1.3.3
point_particle_emitter3.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_EMITTER3_H_
8 #define INCLUDE_JET_POINT_PARTICLE_EMITTER3_H_
9 
10 #include <jet/particle_emitter3.h>
11 #include <limits>
12 #include <random>
13 
14 namespace jet {
15 
23  public:
24  class Builder;
25 
42  const Vector3D& origin,
43  const Vector3D& 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 = 1;
72  size_t _maxNumberOfParticles = std::numeric_limits<size_t>::max();
73 
74  Vector3D _origin;
75  Vector3D _direction;
76  double _speed;
77  double _spreadAngleInRadians;
78 
85  void onUpdate(
86  double currentTimeInSeconds,
87  double timeIntervalInSeconds) override;
88 
89  void emit(
90  Array1<Vector3D>* newPositions,
91  Array1<Vector3D>* newVelocities,
92  size_t maxNewNumberOfParticles);
93 
94  double random();
95 };
96 
98 typedef std::shared_ptr<PointParticleEmitter3> PointParticleEmitter3Ptr;
99 
100 
105  public:
107  Builder& withOrigin(const Vector3D& origin);
108 
110  Builder& withDirection(const Vector3D& 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  Vector3D _origin{0, 0, 0};
137  Vector3D _direction{0, 1, 0};
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_EMITTER3_H_
jet::Array< T, 1 >
1-D array class.
Definition: array1.h:31
jet::PointParticleEmitter3::Builder::withRandomSeed
Builder & withRandomSeed(uint32_t seed)
Returns builder with random seed.
particle_emitter3.h
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::ParticleEmitter3
Abstract base class for 3-D particle emitter.
Definition: particle_emitter3.h:18
jet::PointParticleEmitter3::setMaxNumberOfNewParticlesPerSecond
void setMaxNumberOfNewParticlesPerSecond(size_t rate)
Sets max number of new particles per second.
jet::kMaxSize
constexpr size_t kMaxSize
Max size_t.
Definition: constants.h:79
jet::PointParticleEmitter3::Builder
Front-end to create PointParticleEmitter3 objects step by step.
Definition: point_particle_emitter3.h:104
jet::PointParticleEmitter3::setMaxNumberOfParticles
void setMaxNumberOfParticles(size_t maxNumberOfParticles)
Sets max number of particles to be emitted.
jet
Definition: advection_solver2.h:18
jet::PointParticleEmitter3::builder
static Builder builder()
Returns builder fox PointParticleEmitter3.
jet::PointParticleEmitter3Ptr
std::shared_ptr< PointParticleEmitter3 > PointParticleEmitter3Ptr
Shared pointer for the PointParticleEmitter3 type.
Definition: point_particle_emitter3.h:98
jet::PointParticleEmitter3
3-D point particle emitter.
Definition: point_particle_emitter3.h:22
jet::PointParticleEmitter3::maxNumberOfNewParticlesPerSecond
size_t maxNumberOfNewParticlesPerSecond() const
Returns max number of new particles per second.
jet::PointParticleEmitter3::Builder::withMaxNumberOfNewParticlesPerSecond
Builder & withMaxNumberOfNewParticlesPerSecond(size_t maxNumOfNewParticlesPerSec)
jet::PointParticleEmitter3::Builder::withDirection
Builder & withDirection(const Vector3D &direction)
Returns builder with direction.
jet::PointParticleEmitter3::Builder::withMaxNumberOfParticles
Builder & withMaxNumberOfParticles(size_t maxNumberOfParticles)
Returns builder with max number of particles.
jet::PointParticleEmitter3::PointParticleEmitter3
PointParticleEmitter3(const Vector3D &origin, const Vector3D &direction, double speed, double spreadAngleInDegrees, size_t maxNumOfNewParticlesPerSec=1, size_t maxNumOfParticles=std::numeric_limits< size_t >::max(), uint32_t seed=0)
jet::PointParticleEmitter3::maxNumberOfParticles
size_t maxNumberOfParticles() const
Returns max number of particles to be emitted.
jet::PointParticleEmitter3::Builder::build
PointParticleEmitter3 build() const
Builds PointParticleEmitter3.
jet::Vector< T, 3 >
3-D vector class.
Definition: vector3.h:25
jet::PointParticleEmitter3::Builder::withSpreadAngleInDegrees
Builder & withSpreadAngleInDegrees(double spreadAngleInDegrees)
Returns builder with spread angle in degrees.
jet::PointParticleEmitter3::Builder::withOrigin
Builder & withOrigin(const Vector3D &origin)
Returns builder with origin.
jet::PointParticleEmitter3::Builder::makeShared
PointParticleEmitter3Ptr makeShared() const
Builds shared pointer of PointParticleEmitter3 instance.
jet::PointParticleEmitter3::Builder::withSpeed
Builder & withSpeed(double speed)
Returns builder with speed.