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