added ability for particle system to perform a 'soft stop' where the birthing is effectively stopped while the rest of the system runs down
This commit is contained in:
parent
bdfdeb5f2c
commit
eef56b66b4
|
|
@ -38,7 +38,7 @@ render() {
|
|||
|
||||
INLINE void ParticleSystem::
|
||||
induce_labor() {
|
||||
_tics_since_birth = _birth_rate;
|
||||
_tics_since_birth = _cur_birth_rate;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
|
@ -62,6 +62,35 @@ clear_to_initial() {
|
|||
_tics_since_birth = 0.0f;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : soft_start
|
||||
// Access : Public
|
||||
// Description : Causes system to use birth rate set by set_birth_rate()
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
INLINE void ParticleSystem::
|
||||
soft_start(float br) {
|
||||
if (br > 0.0)
|
||||
set_birth_rate(br);
|
||||
_cur_birth_rate = _birth_rate;
|
||||
_tics_since_birth = 0.0f;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : soft_stop
|
||||
// Access : Public
|
||||
// Description : Causes system to use birth rate set by
|
||||
// set_soft_birth_rate()
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
INLINE void ParticleSystem::
|
||||
soft_stop(float br) {
|
||||
if (br > 0.0)
|
||||
set_soft_birth_rate(br);
|
||||
_cur_birth_rate = _soft_birth_rate;
|
||||
_tics_since_birth = 0.0f;
|
||||
}
|
||||
|
||||
//// ///////////////////////////////////////////////////////
|
||||
//// SET METHODS ///////////////////////////////////////////////////////
|
||||
//// ///////////////////////////////////////////////////////
|
||||
|
|
@ -84,9 +113,21 @@ set_pool_size(int size) {
|
|||
INLINE void ParticleSystem::
|
||||
set_birth_rate(float new_br) {
|
||||
_birth_rate = new_br;
|
||||
_cur_birth_rate = _birth_rate;
|
||||
if(IS_NEARLY_ZERO(_birth_rate)) _birth_rate = NEARLY_ZERO(float);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : set_soft_birth_rate
|
||||
// Access : Public
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
INLINE void ParticleSystem::
|
||||
set_soft_birth_rate(float new_br) {
|
||||
_soft_birth_rate = new_br;
|
||||
if(IS_NEARLY_ZERO(_soft_birth_rate)) _soft_birth_rate = NEARLY_ZERO(float);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : set_litter_size
|
||||
// Access : Public
|
||||
|
|
@ -294,6 +335,15 @@ get_birth_rate() const {
|
|||
return _birth_rate;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : get_soft_birth_rate
|
||||
// Access : Public
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE float ParticleSystem::
|
||||
get_soft_birth_rate() const {
|
||||
return _soft_birth_rate;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function : get_litter_size
|
||||
// Access : Public
|
||||
|
|
|
|||
|
|
@ -46,7 +46,9 @@ ParticleSystem(int pool_size) :
|
|||
Physical(pool_size, false)
|
||||
{
|
||||
_birth_rate = 0.5f;
|
||||
_tics_since_birth = _birth_rate;
|
||||
_cur_birth_rate = _birth_rate;
|
||||
_soft_birth_rate = HUGE_VAL;
|
||||
_tics_since_birth = 0.0;
|
||||
_litter_size = 1;
|
||||
_litter_spread = 0;
|
||||
_living_particles = 0;
|
||||
|
|
@ -91,6 +93,7 @@ ParticleSystem(const ParticleSystem& copy) :
|
|||
_template_system_flag(false)
|
||||
{
|
||||
_birth_rate = copy._birth_rate;
|
||||
_cur_birth_rate = copy._cur_birth_rate;
|
||||
_litter_size = copy._litter_size;
|
||||
_litter_spread = copy._litter_spread;
|
||||
_active_system_flag = copy._active_system_flag;
|
||||
|
|
@ -106,7 +109,7 @@ ParticleSystem(const ParticleSystem& copy) :
|
|||
_render_node = _renderer->get_render_node();
|
||||
_render_parent->add_child(_render_node);
|
||||
|
||||
_tics_since_birth = _birth_rate;
|
||||
_tics_since_birth = 0.0;
|
||||
_system_lifespan = copy._system_lifespan;
|
||||
_living_particles = 0;
|
||||
|
||||
|
|
@ -534,9 +537,9 @@ update(float dt) {
|
|||
// generate new particles if necessary.
|
||||
_tics_since_birth += dt;
|
||||
|
||||
while (_tics_since_birth >= _birth_rate) {
|
||||
while (_tics_since_birth >= _cur_birth_rate) {
|
||||
birth_litter();
|
||||
_tics_since_birth -= _birth_rate;
|
||||
_tics_since_birth -= _cur_birth_rate;
|
||||
}
|
||||
|
||||
#ifdef PARTICLE_SYSTEM_UPDATE_SENTRIES
|
||||
|
|
|
|||
|
|
@ -55,6 +55,7 @@ PUBLISHED:
|
|||
// access/queries
|
||||
INLINE void set_pool_size(int size);
|
||||
INLINE void set_birth_rate(float new_br);
|
||||
INLINE void set_soft_birth_rate(float new_br);
|
||||
INLINE void set_litter_size(int new_ls);
|
||||
INLINE void set_litter_spread(int new_ls);
|
||||
INLINE void set_local_velocity_flag(bool lv);
|
||||
|
|
@ -75,6 +76,7 @@ PUBLISHED:
|
|||
|
||||
INLINE int get_pool_size() const;
|
||||
INLINE float get_birth_rate() const;
|
||||
INLINE float get_soft_birth_rate() const;
|
||||
INLINE int get_litter_size() const;
|
||||
INLINE int get_litter_spread() const;
|
||||
INLINE bool get_local_velocity_flag() const;
|
||||
|
|
@ -102,6 +104,8 @@ PUBLISHED:
|
|||
INLINE void render();
|
||||
INLINE void induce_labor();
|
||||
INLINE void clear_to_initial();
|
||||
INLINE void soft_stop(float br = 0.0);
|
||||
INLINE void soft_start(float br = 0.0);
|
||||
void update(float dt);
|
||||
|
||||
virtual void output(ostream &out) const;
|
||||
|
|
@ -123,7 +127,9 @@ private:
|
|||
|
||||
int _particle_pool_size;
|
||||
int _living_particles;
|
||||
float _cur_birth_rate;
|
||||
float _birth_rate;
|
||||
float _soft_birth_rate;
|
||||
float _tics_since_birth;
|
||||
int _litter_size;
|
||||
int _litter_spread;
|
||||
|
|
|
|||
Loading…
Reference in New Issue