00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef BASEPARTICLEEMITTER_H
00020 #define BASEPARTICLEEMITTER_H
00021
00022 #include <pandabase.h>
00023 #include <referenceCount.h>
00024 #include <luse.h>
00025
00026 #include "particleCommonFuncs.h"
00027
00028 #include <mathNumbers.h>
00029
00030
00031
00032
00033
00034
00035 class EXPCL_PANDAPHYSICS BaseParticleEmitter : public ReferenceCount {
00036 PUBLISHED:
00037 enum emissionType {
00038 ET_EXPLICIT,
00039 ET_RADIATE,
00040 ET_CUSTOM
00041 };
00042
00043 virtual ~BaseParticleEmitter(void);
00044 virtual BaseParticleEmitter *make_copy(void) = 0;
00045
00046 void generate(LPoint3f& pos, LVector3f& vel);
00047
00048 INLINE void set_emission_type(emissionType et);
00049 INLINE void set_amplitude(float a);
00050 INLINE void set_amplitude_spread(float as);
00051 INLINE void set_offset_force(const LVector3f& of);
00052 INLINE void set_explicit_launch_vector(const LVector3f& elv);
00053 INLINE void set_radiate_origin(const LPoint3f& ro);
00054
00055 INLINE emissionType get_emission_type(void) const;
00056 INLINE float get_amplitude(void) const;
00057 INLINE float get_amplitude_spread(void) const;
00058 INLINE LVector3f get_offset_force(void) const;
00059 INLINE LVector3f get_explicit_launch_vector(void) const;
00060 INLINE LPoint3f get_radiate_origin(void) const;
00061
00062 protected:
00063 BaseParticleEmitter(void);
00064 BaseParticleEmitter(const BaseParticleEmitter ©);
00065
00066 emissionType _emission_type;
00067 LVector3f _explicit_launch_vector;
00068 LPoint3f _radiate_origin;
00069
00070 float _amplitude;
00071 float _amplitude_spread;
00072
00073 private:
00074
00075 virtual void assign_initial_position(LPoint3f& pos) = 0;
00076 virtual void assign_initial_velocity(LVector3f& vel) = 0;
00077
00078 LVector3f _offset_force;
00079 };
00080
00081 #include "baseParticleEmitter.I"
00082
00083 #endif // BASEPARTICLEEMITTER_H