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 };
00068 
00070 enum csParticleForceType
00071 {
00072   CS_PART_FORCE_RADIAL,
00073   CS_PART_FORCE_LINEAR,
00074   CS_PART_FORCE_CONE
00075 };
00076 
00078 struct csParticlesData
00079 {
00080   csVector3 position;
00081   csVector4 color;
00082   csVector3 velocity;
00083   float mass;
00084   float time_to_live;
00085   float sort;
00086 };
00087 
00088 SCF_VERSION (iParticlesColorCallback, 0, 0, 1)
00089 
00090 
00095 struct iParticlesColorCallback : public iBase
00096 {
00102   virtual csColor GetColor (float time) = 0;
00103 };
00104 
00105 SCF_VERSION (iParticlesObjectState, 0, 2, 0);
00106 
00110 struct iParticlesObjectState : public iBase
00111 {
00113   virtual void SetParticlesPerSecond (int count) = 0;
00114 
00116   virtual int GetParticlesPerSecond () = 0;
00117 
00119   virtual void SetInitialParticleCount (int count) = 0;
00120 
00122   virtual int GetInitialParticleCount () = 0;
00123 
00125   virtual void SetPointEmitType () = 0;
00126 
00128   virtual void SetSphereEmitType (float outer_radius, float inner_radius) = 0;
00129 
00131   virtual void SetPlaneEmitType (float x_size, float y_size) = 0;
00132 
00134   virtual void SetBoxEmitType (float x_size, float y_size, float z_size) = 0;
00135 
00137   virtual float GetSphereEmitInnerRadius () = 0;
00138 
00140   virtual float GetSphereEmitOuterRadius () = 0;
00141 
00143   virtual float GetEmitXSize () = 0;
00144 
00146   virtual float GetEmitYSize () = 0;
00147 
00149   virtual float GetEmitZSize () = 0;
00150 
00152   virtual csParticleEmitType GetEmitType () = 0;
00153 
00155   virtual void GetEmitPosition (csVector3 &position) = 0;
00156 
00158   virtual void SetRadialForceType (float range, csParticleFalloffType) = 0;
00159 
00161   virtual void SetLinearForceType (csVector3 &direction, float range,
00162     csParticleFalloffType falloff) = 0;
00163 
00165   virtual void SetConeForceType (csVector3 &direction, float range,
00166     csParticleFalloffType falloff, float radius,
00167     csParticleFalloffType radius_falloff) = 0;
00168 
00170   virtual csParticleForceType GetForceType () = 0;
00171 
00173   virtual float GetForceRange () = 0;
00174 
00176   virtual void GetFalloffType (csParticleFalloffType &force,
00177     csParticleFalloffType &cone) = 0;
00178 
00180   virtual void GetForceDirection (csVector3 &dir) = 0;
00181 
00183   virtual float GetForceConeRadius () = 0;
00184 
00186   virtual void SetForce (float force) = 0;
00187 
00189   virtual float GetForce () = 0;
00190 
00192   virtual void SetDiffusion (float size) = 0;
00193 
00195   virtual float GetDiffusion () = 0;
00196 
00198   virtual void SetGravity (csVector3 &gravity) = 0;
00199 
00201   virtual void GetGravity (csVector3 &gravity) = 0;
00202 
00204   virtual void SetEmitTime (float time) = 0;
00205 
00207   virtual float GetEmitTime () = 0;
00208 
00210   virtual void SetTimeToLive (float time) = 0;
00211 
00213   virtual float GetTimeToLive () = 0;
00214 
00216   virtual void SetTimeVariation (float variation) = 0;
00217 
00219   virtual float GetTimeVariation () = 0;
00220 
00222   virtual void AddColor (csColor color) = 0;
00223 
00225   virtual void ClearColors () = 0;
00226 
00227   virtual const csArray<csColor> &GetGradient () = 0;
00228 
00230   virtual void SetConstantColorMethod (csColor color) = 0;
00231 
00237   virtual void SetLinearColorMethod () = 0;
00238 
00243   virtual void SetLoopingColorMethod (float seconds) = 0;
00244 
00249   virtual void SetHeatColorMethod (int base_temp) = 0;
00250 
00252   virtual void SetColorCallback (iParticlesColorCallback*) = 0;
00253 
00255   virtual iParticlesColorCallback* GetColorCallback () = 0;
00256 
00258   virtual csParticleColorMethod GetParticleColorMethod () = 0;
00259 
00261   virtual csColor GetConstantColor () = 0;
00262 
00264   virtual float GetColorLoopTime () = 0;
00265 
00267   virtual float GetBaseHeat () = 0;
00268 
00270   virtual void SetParticleRadius (float radius) = 0;
00271 
00273   virtual float GetParticleRadius () = 0;
00274 
00276   virtual void SetDampener (float damp) = 0;
00277 
00279   virtual float GetDampener () = 0;
00280 
00282   virtual void SetMass (float mass) = 0;
00283 
00285   virtual void SetMassVariation (float variation) = 0;
00286 
00288   virtual float GetMass () = 0;
00289 
00291   virtual float GetMassVariation () = 0;
00292 
00294   virtual void SetTransformMode (bool transform) = 0;
00295 
00297   virtual csReversibleTransform GetObjectToCamera () = 0;
00298 
00303   virtual void ChangePhysicsPlugin (const char *plugin) = 0;
00304 
00310   virtual void Start () = 0;
00311 
00313   virtual void Stop () = 0;
00314 
00316   virtual bool IsRunning () = 0;
00317 };
00318 
00319 SCF_VERSION (iParticlesFactoryState, 0, 2, 0);
00320 
00324 struct iParticlesFactoryState : public iBase
00325 {
00327   virtual void SetMaterial (iMaterialWrapper *material) = 0;
00328 
00330   virtual void SetParticlesPerSecond (int count) = 0;
00331 
00333   virtual void SetInitialParticleCount (int count) = 0;
00334 
00336   virtual void SetPointEmitType () = 0;
00337 
00338   // Set the emitter type to a sphere (which can have an inner radius)
00339   virtual void SetSphereEmitType (float outer_radius, float inner_radius) = 0;
00340 
00342   virtual void SetPlaneEmitType (float x_size, float y_size) = 0;
00343 
00345   virtual void SetBoxEmitType (float x_size, float y_size, float z_size) = 0;
00346 
00348   virtual void SetRadialForceType (float range, csParticleFalloffType) = 0;
00349 
00351   virtual void SetLinearForceType (csVector3 &direction, float range,
00352     csParticleFalloffType falloff) = 0;
00353 
00355   virtual void SetConeForceType (csVector3 &direction, float range,
00356     csParticleFalloffType falloff, float radius,
00357     csParticleFalloffType radius_falloff) = 0;
00358 
00360   virtual void SetForce (float force) = 0;
00361 
00363   virtual void SetDiffusion (float size) = 0;
00364 
00366   virtual void SetGravity (csVector3 &gravity) = 0;
00367 
00369   virtual void SetEmitTime (float time) = 0;
00370 
00372   virtual void SetTimeToLive (float time) = 0;
00373 
00375   virtual void SetTimeVariation (float variation) = 0;
00376 
00378   virtual void SetConstantColorMethod (csColor color) = 0;
00379 
00385   virtual void SetLinearColorMethod () = 0;
00386 
00391   virtual void SetLoopingColorMethod (float seconds) = 0;
00392 
00397   virtual void SetHeatColorMethod (int base_temp) = 0;
00398 
00400   virtual void SetColorCallback (iParticlesColorCallback*) = 0;
00401 
00403   virtual iParticlesColorCallback* GetColorCallback () = 0;
00404 
00406   virtual void AddColor (csColor color) = 0;
00407 
00409   virtual void ClearColors () = 0;
00410 
00412   virtual void SetParticleRadius (float radius) = 0;
00413 
00415   virtual void SetDampener (float damp) = 0;
00416 
00418   virtual float GetDampener () = 0;
00419 
00421   virtual void SetMass(float mass) = 0;
00422 
00424   virtual void SetMassVariation (float variation) = 0;
00425 
00427   virtual float GetMass () = 0;
00428 
00430   virtual float GetMassVariation () = 0;
00431 
00433   virtual void SetAutoStart (bool autostart) = 0;
00434 
00436   virtual void SetTransformMode (bool transform) = 0;
00437 
00442   virtual void SetPhysicsPlugin (const char *plugin) = 0;
00443 };
00444 
00445 
00446 SCF_VERSION (iParticlesPhysics, 0, 1, 0);
00447 
00451 struct iParticlesPhysics : public iBase
00452 {
00456   virtual const csArray<csParticlesData> *RegisterParticles (iParticlesObjectState *particles) = 0;
00457 
00461   virtual void RemoveParticles (iParticlesObjectState *particles) = 0;
00462 
00464   virtual void Start (iParticlesObjectState *particles) = 0;
00465 
00467   virtual void Stop (iParticlesObjectState *particles) = 0;
00468 };
00469 
00472 #endif // __CS_IMESH_PARTICLES_H__

Generated for Crystal Space by doxygen 1.2.18