00001
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef NL_PARTICLE_SYSTEM_PROCESS_H
00027 #define NL_PARTICLE_SYSTEM_PROCESS_H
00028
00029 #include "nel/misc/types_nl.h"
00030 #include "nel/misc/stream.h"
00031 #include "nel/3d/animation_time.h"
00032
00033 namespace NLMISC
00034 {
00035 class CAABBox ;
00036 }
00037
00038 namespace NL3D {
00039
00040
00041 class CParticleSystem ;
00042 class CFontGenerator ;
00043 class CFontManager ;
00044
00045
00053 enum TPSProcessPass
00054 { PSEmit, PSCollision, PSMotion, PSSolidRender, PSBlendRender, PSToolRender } ;
00055
00056
00057
00062 class CParticleSystemProcess : public NLMISC::IStreamable
00063 {
00064 public:
00065
00069 CParticleSystemProcess() : _Owner(NULL), _SystemBasisEnabled(false) {}
00070
00072 virtual ~CParticleSystemProcess() {}
00073
00078 virtual void serial(NLMISC::IStream &f) throw(NLMISC::EStream) ;
00080
00081
00086 virtual void step(TPSProcessPass pass, TAnimationTime ellapsedTime, TAnimationTime realEt) = 0 ;
00087
00088
00093 virtual bool computeBBox(NLMISC::CAABBox &aabbox) const = 0 ;
00094
00096 void setOwner(CParticleSystem *ps)
00097 {
00098 if (ps == NULL)
00099 {
00100 releaseAllRef();
00101 }
00102 _Owner = ps ;
00103 }
00104
00106 CParticleSystem *getOwner(void) { return _Owner ; }
00107
00109 const CParticleSystem *getOwner(void) const { return _Owner ; }
00110
00115 virtual void releaseRefTo(const CParticleSystemProcess *other) = 0;
00116
00120 virtual void releaseAllRef() = 0;
00121
00123
00124
00125 CFontGenerator *getFontGenerator(void) ;
00126
00128 const CFontGenerator *getFontGenerator(void) const ;
00129
00131 CFontManager *getFontManager(void) ;
00132
00134 const CFontManager *getFontManager(void) const ;
00136
00140 bool isInSystemBasis(void) const
00141 {
00142 return _SystemBasisEnabled ;
00143 }
00144
00149 virtual void setSystemBasis(bool sysBasis = true) { _SystemBasisEnabled = sysBasis ; }
00150
00152 virtual bool hasParticles(void) const { return false ; }
00153
00155 virtual bool hasEmitters(void) const { return false ; }
00156
00157
00159 virtual uint querryMaxWantedNumFaces(void) = 0 ;
00160
00161
00162
00164 virtual bool isParametricMotionEnabled(void) const { return false;}
00165
00167 virtual void performParametricMotion(TAnimationTime date,
00168 TAnimationTime ellapsedTime,
00169 TAnimationTime realEllapsedTime) { nlassert(0);}
00170
00172 virtual void updateLife(TAnimationTime ellapsedTime) = 0;
00173
00174 protected:
00175 CParticleSystem *_Owner ;
00176
00177
00178 bool _SystemBasisEnabled ;
00179
00180 } ;
00181
00182
00183 }
00184
00185
00186 #endif // NL_PARTICLE_SYSTEM_PROCESS_H
00187
00188