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 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 00036 struct iMaterialWrapper; 00037 00038 class csColor; 00039 class csMatrix3; 00040 class csReversibleTransform; 00041 00043 enum csParticleFalloffType 00044 { 00045 CS_PART_FALLOFF_CONSTANT, 00046 CS_PART_FALLOFF_LINEAR, 00047 CS_PART_FALLOFF_PARABOLIC 00048 }; 00049 00051 enum csParticleColorMethod 00052 { 00053 CS_PART_COLOR_CONSTANT, 00054 CS_PART_COLOR_LINEAR, 00055 CS_PART_COLOR_LOOPING, 00056 CS_PART_COLOR_HEAT, 00057 CS_PART_COLOR_CALLBACK 00058 }; 00059 00061 enum csParticleEmitType 00062 { 00063 CS_PART_EMIT_SPHERE, 00064 CS_PART_EMIT_PLANE, 00065 CS_PART_EMIT_BOX, 00066 CS_PART_EMIT_CYLINDER 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 00095 struct iParticlesColorCallback : public iBase 00096 { 00102 virtual csColor GetColor (float time) = 0; 00103 }; 00104 00105 SCF_VERSION (iParticlesStateBase, 1, 1, 0); 00106 00110 struct iParticlesStateBase : 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 void SetCylinderEmitType (float radius, float height) = 0; 00138 00140 virtual float GetSphereEmitInnerRadius () = 0; 00141 00143 virtual float GetSphereEmitOuterRadius () = 0; 00144 00146 virtual float GetEmitXSize () = 0; 00147 00149 virtual float GetEmitYSize () = 0; 00150 00152 virtual float GetEmitZSize () = 0; 00153 00155 virtual csParticleEmitType GetEmitType () = 0; 00156 00158 virtual void SetRadialForceType (float range, csParticleFalloffType) = 0; 00159 00161 virtual void SetLinearForceType (const csVector3 &direction, 00162 const csVector3& direction_variation, float range, 00163 csParticleFalloffType falloff) = 0; 00164 00166 virtual void SetConeForceType (const csVector3 &direction, 00167 const csVector3& direction_variation, float range, 00168 csParticleFalloffType falloff, float radius, 00169 csParticleFalloffType radius_falloff) = 0; 00170 00172 virtual csParticleForceType GetForceType () = 0; 00173 00175 virtual float GetForceRange () = 0; 00176 00178 virtual void GetFalloffType (csParticleFalloffType &force, 00179 csParticleFalloffType &cone) = 0; 00180 00182 virtual void GetForceDirection (csVector3 &dir) = 0; 00183 00185 virtual void GetForceDirectionVariation (csVector3 &dirvar) = 0; 00186 00188 virtual float GetForceConeRadius () = 0; 00189 00191 virtual void SetForce (float force) = 0; 00192 00194 virtual float GetForce () = 0; 00195 00197 virtual void SetDiffusion (float size) = 0; 00198 00200 virtual float GetDiffusion () = 0; 00201 00203 virtual void SetGravity (const csVector3 &gravity) = 0; 00204 00206 virtual void GetGravity (csVector3 &gravity) = 0; 00207 00209 virtual void SetEmitTime (float time) = 0; 00210 00212 virtual float GetEmitTime () = 0; 00213 00215 virtual void SetTimeToLive (float time) = 0; 00216 00218 virtual float GetTimeToLive () = 0; 00219 00221 virtual void SetTimeVariation (float variation) = 0; 00222 00224 virtual float GetTimeVariation () = 0; 00225 00227 virtual void SetConstantColorMethod (csColor4 color) = 0; 00228 00234 virtual void SetLinearColorMethod () = 0; 00235 00240 virtual void SetLoopingColorMethod (float seconds) = 0; 00241 00246 virtual void SetHeatColorMethod (int base_temp) = 0; 00247 00249 virtual void SetColorCallback (iParticlesColorCallback*) = 0; 00250 00252 virtual iParticlesColorCallback* GetColorCallback () = 0; 00253 00255 virtual void AddColor (csColor4 color) = 0; 00256 00258 virtual void ClearColors () = 0; 00259 00261 virtual csParticleColorMethod GetParticleColorMethod () = 0; 00262 00264 virtual void GetConstantColor (csColor4& color) = 0; 00265 00267 virtual const csArray<csColor4> &GetGradient () = 0; 00268 00270 virtual float GetColorLoopTime () = 0; 00271 00273 virtual float GetBaseHeat () = 0; 00274 00276 virtual void SetParticleRadius (float radius) = 0; 00277 00279 virtual float GetParticleRadius () = 0; 00280 00282 virtual void SetDampener (float damp) = 0; 00283 00285 virtual float GetDampener () = 0; 00286 00288 virtual void SetMass(float mass) = 0; 00289 00291 virtual void SetMassVariation (float variation) = 0; 00292 00294 virtual float GetMass () = 0; 00295 00297 virtual float GetMassVariation () = 0; 00298 00300 virtual void SetTransformMode (bool transform) = 0; 00301 00303 virtual bool GetTransformMode () = 0; 00304 00306 virtual void SetMixMode (uint mode) = 0; 00308 virtual uint GetMixMode () const = 0; 00309 00316 virtual void EnableZSort (bool en) = 0; 00320 virtual bool IsZSortEnabled () const = 0; 00321 }; 00322 00323 00324 SCF_VERSION (iParticlesObjectState, 1, 0, 1); 00325 00329 struct iParticlesObjectState : public iParticlesStateBase 00330 { 00332 virtual void GetEmitPosition (csVector3 &position) = 0; 00333 00335 virtual const csMatrix3 &GetRotation () = 0; 00336 00338 virtual csReversibleTransform GetObjectToCamera () = 0; 00339 00344 virtual void ChangePhysicsPlugin (const char *plugin) = 0; 00345 00351 virtual void Start () = 0; 00352 00354 virtual void Stop () = 0; 00355 00357 virtual bool IsRunning () = 0; 00358 }; 00359 00360 SCF_VERSION (iParticlesFactoryState, 1, 0, 1); 00361 00365 struct iParticlesFactoryState : public iParticlesStateBase 00366 { 00368 virtual void SetMaterial (iMaterialWrapper *material) = 0; 00369 00371 virtual void SetAutoStart (bool autostart) = 0; 00372 00377 virtual void SetPhysicsPlugin (const char *plugin) = 0; 00378 }; 00379 00380 00381 SCF_VERSION (iParticlesPhysics, 0, 1, 0); 00382 00386 struct iParticlesPhysics : public iBase 00387 { 00391 virtual const csArray<csParticlesData> *RegisterParticles ( 00392 iParticlesObjectState *particles) = 0; 00393 00397 virtual void RemoveParticles (iParticlesObjectState *particles) = 0; 00398 00400 virtual void Start (iParticlesObjectState *particles) = 0; 00401 00403 virtual void Stop (iParticlesObjectState *particles) = 0; 00404 }; 00405 00408 #endif // __CS_IMESH_PARTICLES_H__
Generated for Crystal Space by doxygen 1.4.6