CrystalSpace

Public API Reference

Main Page   Modules   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

imesh/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 
00091 
00096 struct iParticlesColorCallback : public iBase
00097 {
00103   virtual csColor GetColor (float time) = 0;
00104 };
00105 
00106 SCF_VERSION (iParticlesStateBase, 1, 0, 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 (csColor 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 (csColor color) = 0;
00252 
00254   virtual void ClearColors () = 0;
00255 
00257   virtual csParticleColorMethod GetParticleColorMethod () = 0;
00258 
00260   virtual csColor GetConstantColor () = 0;
00261 
00263   virtual const csArray<csColor> &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.2.18