ps_shockwave.h
Go to the documentation of this file.00001
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef NL_PS_SHOCKWAVE_H
00025 #define NL_PS_SHOCKWAVE_H
00026
00027 #include "nel/3d/ps_particle_basic.h"
00028 #include "nel/3d/vertex_buffer.h"
00029 #include "nel/3d/index_buffer.h"
00030
00031 namespace NL3D
00032 {
00033
00034 class CPSShockWave : public CPSParticle, public CPSSizedParticle
00035 , public CPSColoredParticle, public CPSTexturedParticle
00036 , public CPSRotated3DPlaneParticle, public CPSRotated2DParticle
00037 , public CPSMaterial
00038 {
00039 public:
00045 CPSShockWave(uint nbSeg = 9, float radiusCut = 0.8f , CSmartPtr<ITexture> tex = NULL);
00046
00050 void setNbSegs(uint nbSeg);
00051
00053 uint getNbSegs(void) const { return _NbSeg; }
00054
00058 void setRadiusCut(float aRatio);
00059
00061 float getRadiusCut(void) const { return _RadiusCut; }
00062
00064 virtual void serial(NLMISC::IStream &f) throw(NLMISC::EStream);
00065
00066 NLMISC_DECLARE_CLASS(CPSShockWave);
00067
00069 virtual bool completeBBox(NLMISC::CAABBox &box) const ;
00070
00072 virtual bool hasTransparentFaces(void);
00073
00075 virtual bool hasOpaqueFaces(void);
00076
00078 virtual uint32 getNumWantedTris() const;
00079
00081 void setUFactor(float value);
00082
00084 float getUFactor(void) const { return _UFactor; }
00085
00087 virtual bool hasLightableFaces() { return false; }
00088
00089
00090 virtual bool supportGlobalColorLighting() const { return true; }
00091
00092
00093 virtual void enumTexs(std::vector<NLMISC::CSmartPtr<ITexture> > &dest, IDriver &drv);
00094
00095
00096 virtual void setZBias(float value) { CPSMaterial::setZBias(value); }
00097 virtual float getZBias() const { return CPSMaterial::getZBias(); }
00098
00099 protected:
00100
00104 void updateVbColNUVForRender(uint32 startIndex, uint32 size, uint32 srcStep, CVertexBuffer &vb, IDriver &drv);
00105
00107 virtual void updateMatAndVbForColor(void);
00108
00110 virtual void updateMatAndVbForTexture(void);
00111
00114 virtual void newElement(const CPSEmitterInfo &info);
00115
00120 virtual void deleteElement(uint32 index) ;
00121
00125 virtual void resize(uint32 size);
00126
00127 virtual CPSLocated *getColorOwner(void) { return _Owner; }
00128 virtual CPSLocated *getSizeOwner(void) { return _Owner; }
00129 virtual CPSLocated *getAngle2DOwner(void) { return _Owner; }
00130 virtual CPSLocated *getPlaneBasisOwner(void) { return _Owner; }
00131 virtual CPSLocated *getTextureIndexOwner(void) { return _Owner; }
00132
00133 private:
00134 typedef CHashMap<uint, CVertexBuffer> TVBMap;
00135 typedef CHashMap<uint, CIndexBuffer> TPBMap;
00136 private:
00137 static TPBMap _PBMap;
00138 static TVBMap _VBMap;
00139 static TVBMap _AnimTexVBMap;
00140 static TVBMap _ColoredVBMap;
00141 static TVBMap _ColoredAnimTexVBMap;
00142
00143 uint32 _NbSeg;
00144
00145 float _RadiusCut;
00146
00147 float _UFactor;
00148 private:
00149 friend class CPSShockWaveHelper;
00150
00151 void getVBnPB(CVertexBuffer *&vb, CIndexBuffer *&pb);
00152
00153 uint getNumShockWavesInVB() const;
00154
00155 void setupUFactor();
00156 virtual void draw(bool opaque);
00158 virtual void init(void);
00159
00160 };
00161
00162 }
00163
00164
00165 #endif // NL_PS_SHOCKWAVE_H
00166
00167