adding setUniformEmission function to ringEmitter

This commit is contained in:
Przemyslaw Iwanowski 2008-11-26 01:45:43 +00:00
parent e81e4efb46
commit 86ee18fd71
3 changed files with 46 additions and 4 deletions

View File

@ -45,6 +45,17 @@ set_radius_spread(float spread) {
_radius_spread = spread;
}
////////////////////////////////////////////////////////////////////
// Function : set_uniform_emission
// Access : public
// Description : uniform_emission set
////////////////////////////////////////////////////////////////////
INLINE void RingEmitter::
set_uniform_emission(int uniform_emission) {
_uniform_emission = uniform_emission;
}
////////////////////////////////////////////////////////////////////
// Function : get_radius
// Access : public
@ -78,3 +89,16 @@ get_radius_spread() const {
return _radius_spread;
}
////////////////////////////////////////////////////////////////////
// Function : get_uniform_emission
// Access : public
// Description : uniform_emission get
////////////////////////////////////////////////////////////////////
INLINE int RingEmitter::
get_uniform_emission() const {
return _uniform_emission;
}

View File

@ -21,7 +21,7 @@
////////////////////////////////////////////////////////////////////
RingEmitter::
RingEmitter() :
_radius(1.0f), _radius_spread(0.0f), _aoe(0.0f)
_radius(1.0f), _radius_spread(0.0f), _aoe(0.0f), _uniform_emission(0), _theta(0.0f)
{
}
@ -36,7 +36,9 @@ RingEmitter(const RingEmitter &copy) :
_radius = copy._radius;
_aoe = copy._aoe;
_radius_spread = copy._radius_spread;
_uniform_emission = copy._uniform_emission;
_theta = copy._theta;
_sin_theta = copy._sin_theta;
_cos_theta = copy._cos_theta;
}
@ -67,9 +69,19 @@ make_copy() {
////////////////////////////////////////////////////////////////////
void RingEmitter::
assign_initial_position(LPoint3f& pos) {
float theta = NORMALIZED_RAND() * 2.0f * MathNumbers::pi_f;
_cos_theta = cosf(theta);
_sin_theta = sinf(theta);
if (_uniform_emission > 0)
{
_theta = _theta + 1.0/_uniform_emission;
if (_theta > 1.0)
_theta = _theta - 1.0;
}
else
{
_theta = NORMALIZED_RAND();
}
_cos_theta = cosf(_theta * 2.0f * MathNumbers::pi_f);
_sin_theta = sinf(_theta * 2.0f * MathNumbers::pi_f);
float new_radius_spread = SPREAD(_radius_spread);
float new_x = _cos_theta * (_radius + new_radius_spread);

View File

@ -33,10 +33,12 @@ PUBLISHED:
INLINE void set_radius(float r);
INLINE void set_angle(float angle);
INLINE void set_radius_spread(float spread);
INLINE void set_uniform_emission(int uniform_emission);
INLINE float get_radius() const;
INLINE float get_angle() const;
INLINE float get_radius_spread() const;
INLINE int get_uniform_emission() const;
virtual void output(ostream &out) const;
virtual void write(ostream &out, int indent=0) const;
@ -48,6 +50,10 @@ protected:
// CUSTOM EMISSION PARAMETERS
float _aoe; // angle of elevation
// viariables used for uniform particle emission
int _uniform_emission;
float _theta;
///////////////////////////////
// scratch variables that carry over from position calc to velocity calc
float _sin_theta;