Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages
particles.h
Go to the documentation of this file.00001 /* 00002 Copyright (C) 2003 by Jorrit Tyberghein, John Harger, Daniel Duhprey 00003 00004 This library is free software; you can redistribute it and/or 00005 modify it under the terms of the GNU Library General Public 00006 License as published by the Free Software Foundation; either 00007 version 2 of the License, or (at your option) any later version. 00008 00009 This library is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00012 Library General Public License for more details. 00013 00014 You should have received a copy of the GNU Library General Public 00015 License along with this library; if not, write to the Free 00016 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 00017 */ 00018 00019 #ifndef __CS_IMESH_PARTICLES_H__ 00020 #define __CS_IMESH_PARTICLES_H__ 00021 00030 #include "csgeom/vector3.h" 00031 #include "csgeom/vector4.h" 00032 00033 #include "csutil/array.h" 00034 #include "csutil/refarr.h" 00035 #include "csutil/scf.h" 00036 00037 #include "iengine/material.h" 00038 00039 #include "iengine/movable.h" 00040 00041 class csColor; 00042 00044 enum csParticleFalloffType 00045 { 00046 CS_PART_FALLOFF_CONSTANT, 00047 CS_PART_FALLOFF_LINEAR, 00048 CS_PART_FALLOFF_PARABOLIC 00049 }; 00050 00052 enum csParticleColorMethod 00053 { 00054 CS_PART_COLOR_CONSTANT, 00055 CS_PART_COLOR_LINEAR, 00056 CS_PART_COLOR_LOOPING, 00057 CS_PART_COLOR_HEAT, 00058 CS_PART_COLOR_CALLBACK 00059 }; 00060 00062 enum csParticleEmitType 00063 { 00064 CS_PART_EMIT_SPHERE, 00065 CS_PART_EMIT_PLANE, 00066 CS_PART_EMIT_BOX, 00067 CS_PART_EMIT_CYLINDER 00068 }; 00069 00071 enum csParticleForceType 00072 { 00073 CS_PART_FORCE_RADIAL, 00074 CS_PART_FORCE_LINEAR, 00075 CS_PART_FORCE_CONE 00076 }; 00077 00079 struct csParticlesData 00080 { 00081 csVector3 position; 00082 csVector4 color; 00083 csVector3 velocity; 00084 float mass; 00085 float time_to_live; 00086 float sort; 00087 }; 00088 00089 SCF_VERSION (iParticlesColorCallback, 0, 0, 1); 00090 00096 struct iParticlesColorCallback : public iBase 00097 { 00103 virtual csColor GetColor (float time) = 0; 00104 }; 00105 00106 SCF_VERSION (iParticlesStateBase, 1, 1, 0); 00107 00111 struct iParticlesStateBase : public iBase 00112 { 00114 virtual void SetParticlesPerSecond (int count) = 0; 00115 00117 virtual int GetParticlesPerSecond () = 0; 00118 00120 virtual void SetInitialParticleCount (int count) = 0; 00121 00123 virtual int GetInitialParticleCount () = 0; 00124 00126 virtual void SetPointEmitType () = 0; 00127 00129 virtual void SetSphereEmitType (float outer_radius, float inner_radius) = 0; 00130 00132 virtual void SetPlaneEmitType (float x_size, float y_size) = 0; 00133 00135 virtual void SetBoxEmitType (float x_size, float y_size, float z_size) = 0; 00136 00138 virtual void SetCylinderEmitType (float radius, float height) = 0; 00139 00141 virtual float GetSphereEmitInnerRadius () = 0; 00142 00144 virtual float GetSphereEmitOuterRadius () = 0; 00145 00147 virtual float GetEmitXSize () = 0; 00148 00150 virtual float GetEmitYSize () = 0; 00151 00153 virtual float GetEmitZSize () = 0; 00154 00156 virtual csParticleEmitType GetEmitType () = 0; 00157 00159 virtual void SetRadialForceType (float range, csParticleFalloffType) = 0; 00160 00162 virtual void SetLinearForceType (const csVector3 &direction, float range, 00163 csParticleFalloffType falloff) = 0; 00164 00166 virtual void SetConeForceType (const csVector3 &direction, float range, 00167 csParticleFalloffType falloff, float radius, 00168 csParticleFalloffType radius_falloff) = 0; 00169 00171 virtual csParticleForceType GetForceType () = 0; 00172 00174 virtual float GetForceRange () = 0; 00175 00177 virtual void GetFalloffType (csParticleFalloffType &force, 00178 csParticleFalloffType &cone) = 0; 00179 00181 virtual void GetForceDirection (csVector3 &dir) = 0; 00182 00184 virtual float GetForceConeRadius () = 0; 00185 00187 virtual void SetForce (float force) = 0; 00188 00190 virtual float GetForce () = 0; 00191 00193 virtual void SetDiffusion (float size) = 0; 00194 00196 virtual float GetDiffusion () = 0; 00197 00199 virtual void SetGravity (const csVector3 &gravity) = 0; 00200 00202 virtual void GetGravity (csVector3 &gravity) = 0; 00203 00205 virtual void SetEmitTime (float time) = 0; 00206 00208 virtual float GetEmitTime () = 0; 00209 00211 virtual void SetTimeToLive (float time) = 0; 00212 00214 virtual float GetTimeToLive () = 0; 00215 00217 virtual void SetTimeVariation (float variation) = 0; 00218 00220 virtual float GetTimeVariation () = 0; 00221 00223 virtual void SetConstantColorMethod (csColor4 color) = 0; 00224 00230 virtual void SetLinearColorMethod () = 0; 00231 00236 virtual void SetLoopingColorMethod (float seconds) = 0; 00237 00242 virtual void SetHeatColorMethod (int base_temp) = 0; 00243 00245 virtual void SetColorCallback (iParticlesColorCallback*) = 0; 00246 00248 virtual iParticlesColorCallback* GetColorCallback () = 0; 00249 00251 virtual void AddColor (csColor4 color) = 0; 00252 00254 virtual void ClearColors () = 0; 00255 00257 virtual csParticleColorMethod GetParticleColorMethod () = 0; 00258 00260 virtual void GetConstantColor (csColor4& color) = 0; 00261 00263 virtual const csArray<csColor4> &GetGradient () = 0; 00264 00266 virtual float GetColorLoopTime () = 0; 00267 00269 virtual float GetBaseHeat () = 0; 00270 00272 virtual void SetParticleRadius (float radius) = 0; 00273 00275 virtual float GetParticleRadius () = 0; 00276 00278 virtual void SetDampener (float damp) = 0; 00279 00281 virtual float GetDampener () = 0; 00282 00284 virtual void SetMass(float mass) = 0; 00285 00287 virtual void SetMassVariation (float variation) = 0; 00288 00290 virtual float GetMass () = 0; 00291 00293 virtual float GetMassVariation () = 0; 00294 00296 virtual void SetTransformMode (bool transform) = 0; 00297 00299 virtual bool GetTransformMode () = 0; 00300 }; 00301 00302 00303 SCF_VERSION (iParticlesObjectState, 1, 0, 0); 00304 00308 struct iParticlesObjectState : public iParticlesStateBase 00309 { 00311 virtual void GetEmitPosition (csVector3 &position) = 0; 00312 00314 virtual const csMatrix3 &GetRotation () = 0; 00315 00317 virtual csReversibleTransform GetObjectToCamera () = 0; 00318 00323 virtual void ChangePhysicsPlugin (const char *plugin) = 0; 00324 00330 virtual void Start () = 0; 00331 00333 virtual void Stop () = 0; 00334 00336 virtual bool IsRunning () = 0; 00337 }; 00338 00339 SCF_VERSION (iParticlesFactoryState, 1, 0, 0); 00340 00344 struct iParticlesFactoryState : public iParticlesStateBase 00345 { 00347 virtual void SetMaterial (iMaterialWrapper *material) = 0; 00348 00350 virtual void SetAutoStart (bool autostart) = 0; 00351 00356 virtual void SetPhysicsPlugin (const char *plugin) = 0; 00357 }; 00358 00359 00360 SCF_VERSION (iParticlesPhysics, 0, 1, 0); 00361 00365 struct iParticlesPhysics : public iBase 00366 { 00370 virtual const csArray<csParticlesData> *RegisterParticles (iParticlesObjectState *particles) = 0; 00371 00375 virtual void RemoveParticles (iParticlesObjectState *particles) = 0; 00376 00378 virtual void Start (iParticlesObjectState *particles) = 0; 00379 00381 virtual void Stop (iParticlesObjectState *particles) = 0; 00382 }; 00383 00386 #endif // __CS_IMESH_PARTICLES_H__
Generated for Crystal Space by doxygen 1.3.9.1