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