CrystalSpace

Public API Reference

Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | 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 
00022 #include "csutil/scf.h"
00023 
00024 #include "csgeom/vector3.h"
00025 #include "csgeom/vector4.h"
00026 #include "csutil/array.h"
00027 #include "csutil/cscolor.h"
00028 
00029 
00030 
00039 struct iMaterialWrapper;
00040 
00041 class csColor;
00042 class csMatrix3;
00043 class csReversibleTransform;
00044 
00046 enum csParticleFalloffType
00047 {
00048   CS_PART_FALLOFF_CONSTANT,
00049   CS_PART_FALLOFF_LINEAR,
00050   CS_PART_FALLOFF_PARABOLIC
00051 };
00052 
00054 enum csParticleColorMethod
00055 {
00056   CS_PART_COLOR_CONSTANT,
00057   CS_PART_COLOR_LINEAR,
00058   CS_PART_COLOR_LOOPING,
00059   CS_PART_COLOR_HEAT,
00060   CS_PART_COLOR_CALLBACK
00061 };
00062 
00064 enum csParticleEmitType
00065 {
00066   CS_PART_EMIT_SPHERE,
00067   CS_PART_EMIT_PLANE,
00068   CS_PART_EMIT_BOX,
00069   CS_PART_EMIT_CYLINDER
00070 };
00071 
00073 enum csParticleForceType
00074 {
00075   CS_PART_FORCE_RADIAL,
00076   CS_PART_FORCE_LINEAR,
00077   CS_PART_FORCE_CONE
00078 };
00079 
00081 struct csParticlesData
00082 {
00083   csVector3 position;
00084   csVector4 color;
00085   csVector3 velocity;
00086   float mass;
00087   float time_to_live;
00088   float sort;
00089 };
00090 
00091 SCF_VERSION (iParticlesColorCallback, 0, 0, 1);
00092 
00098 struct iParticlesColorCallback : public iBase
00099 {
00105   virtual csColor GetColor (float time) = 0;
00106 };
00107 
00108 SCF_VERSION (iParticlesStateBase, 1, 1, 0);
00109 
00113 struct iParticlesStateBase : public iBase
00114 {
00116   virtual void SetParticlesPerSecond (int count) = 0;
00117 
00119   virtual int GetParticlesPerSecond () = 0;
00120 
00122   virtual void SetInitialParticleCount (int count) = 0;
00123 
00125   virtual int GetInitialParticleCount () = 0;
00126 
00128   virtual void SetPointEmitType () = 0;
00129 
00131   virtual void SetSphereEmitType (float outer_radius, float inner_radius) = 0;
00132 
00134   virtual void SetPlaneEmitType (float x_size, float y_size) = 0;
00135 
00137   virtual void SetBoxEmitType (float x_size, float y_size, float z_size) = 0;
00138 
00140   virtual void SetCylinderEmitType (float radius, float height) = 0;
00141 
00143   virtual float GetSphereEmitInnerRadius () = 0;
00144 
00146   virtual float GetSphereEmitOuterRadius () = 0;
00147 
00149   virtual float GetEmitXSize () = 0;
00150 
00152   virtual float GetEmitYSize () = 0;
00153 
00155   virtual float GetEmitZSize () = 0;
00156 
00158   virtual csParticleEmitType GetEmitType () = 0;
00159 
00161   virtual void SetRadialForceType (float range, csParticleFalloffType) = 0;
00162 
00164   virtual void SetLinearForceType (const csVector3 &direction, float range,
00165     csParticleFalloffType falloff) = 0;
00166 
00168   virtual void SetConeForceType (const csVector3 &direction, float range,
00169     csParticleFalloffType falloff, float radius,
00170     csParticleFalloffType radius_falloff) = 0;
00171 
00173   virtual csParticleForceType GetForceType () = 0;
00174 
00176   virtual float GetForceRange () = 0;
00177 
00179   virtual void GetFalloffType (csParticleFalloffType &force,
00180     csParticleFalloffType &cone) = 0;
00181 
00183   virtual void GetForceDirection (csVector3 &dir) = 0;
00184 
00186   virtual float GetForceConeRadius () = 0;
00187 
00189   virtual void SetForce (float force) = 0;
00190 
00192   virtual float GetForce () = 0;
00193 
00195   virtual void SetDiffusion (float size) = 0;
00196 
00198   virtual float GetDiffusion () = 0;
00199 
00201   virtual void SetGravity (const csVector3 &gravity) = 0;
00202 
00204   virtual void GetGravity (csVector3 &gravity) = 0;
00205 
00207   virtual void SetEmitTime (float time) = 0;
00208 
00210   virtual float GetEmitTime () = 0;
00211 
00213   virtual void SetTimeToLive (float time) = 0;
00214 
00216   virtual float GetTimeToLive () = 0;
00217 
00219   virtual void SetTimeVariation (float variation) = 0;
00220 
00222   virtual float GetTimeVariation () = 0;
00223 
00225   virtual void SetConstantColorMethod (csColor4 color) = 0;
00226 
00232   virtual void SetLinearColorMethod () = 0;
00233 
00238   virtual void SetLoopingColorMethod (float seconds) = 0;
00239 
00244   virtual void SetHeatColorMethod (int base_temp) = 0;
00245 
00247   virtual void SetColorCallback (iParticlesColorCallback*) = 0;
00248 
00250   virtual iParticlesColorCallback* GetColorCallback () = 0;
00251 
00253   virtual void AddColor (csColor4 color) = 0;
00254 
00256   virtual void ClearColors () = 0;
00257 
00259   virtual csParticleColorMethod GetParticleColorMethod () = 0;
00260 
00262   virtual void GetConstantColor (csColor4& color) = 0;
00263 
00265   virtual const csArray<csColor4> &GetGradient () = 0;
00266 
00268   virtual float GetColorLoopTime () = 0;
00269 
00271   virtual float GetBaseHeat () = 0;
00272 
00274   virtual void SetParticleRadius (float radius) = 0;
00275 
00277   virtual float GetParticleRadius () = 0;
00278 
00280   virtual void SetDampener (float damp) = 0;
00281 
00283   virtual float GetDampener () = 0;
00284 
00286   virtual void SetMass(float mass) = 0;
00287 
00289   virtual void SetMassVariation (float variation) = 0;
00290 
00292   virtual float GetMass () = 0;
00293 
00295   virtual float GetMassVariation () = 0;
00296 
00298   virtual void SetTransformMode (bool transform) = 0;
00299 
00301   virtual bool GetTransformMode () = 0;
00302 };
00303 
00304 
00305 SCF_VERSION (iParticlesObjectState, 1, 0, 1);
00306 
00310 struct iParticlesObjectState : public iParticlesStateBase
00311 {
00313   virtual void GetEmitPosition (csVector3 &position) = 0;
00314 
00316   virtual const csMatrix3 &GetRotation () = 0;
00317 
00319   virtual csReversibleTransform GetObjectToCamera () = 0;
00320 
00325   virtual void ChangePhysicsPlugin (const char *plugin) = 0;
00326 
00332   virtual void Start () = 0;
00333 
00335   virtual void Stop () = 0;
00336 
00338   virtual bool IsRunning () = 0;
00339 
00341   virtual void SetMixMode (uint mode) = 0;
00343   virtual uint GetMixMode () const = 0;
00344 };
00345 
00346 SCF_VERSION (iParticlesFactoryState, 1, 0, 1);
00347 
00351 struct iParticlesFactoryState : public iParticlesStateBase
00352 {
00354   virtual void SetMaterial (iMaterialWrapper *material) = 0;
00355 
00357   virtual void SetAutoStart (bool autostart) = 0;
00358 
00363   virtual void SetPhysicsPlugin (const char *plugin) = 0;
00364 
00366   virtual void SetMixMode (uint mode) = 0;
00368   virtual uint GetMixMode () const = 0;
00369 };
00370 
00371 
00372 SCF_VERSION (iParticlesPhysics, 0, 1, 0);
00373 
00377 struct iParticlesPhysics : public iBase
00378 {
00382   virtual const csArray<csParticlesData> *RegisterParticles (iParticlesObjectState *particles) = 0;
00383 
00387   virtual void RemoveParticles (iParticlesObjectState *particles) = 0;
00388 
00390   virtual void Start (iParticlesObjectState *particles) = 0;
00391 
00393   virtual void Stop (iParticlesObjectState *particles) = 0;
00394 };
00395 
00398 #endif // __CS_IMESH_PARTICLES_H__

Generated for Crystal Space by doxygen 1.4.4