00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __CS_IMESH_EMIT_H__
00021 #define __CS_IMESH_EMIT_H__
00022
00023 #include "csutil/scf.h"
00024
00025 class csColor;
00026
00027 SCF_VERSION (iEmitGen3D, 0, 0, 1);
00028 SCF_VERSION (iEmitFixed, 0, 0, 1);
00029 SCF_VERSION (iEmitSphere, 0, 0, 1);
00030 SCF_VERSION (iEmitBox, 0, 0, 1);
00031 SCF_VERSION (iEmitCone, 0, 0, 1);
00032 SCF_VERSION (iEmitCylinder, 0, 0, 1);
00033 SCF_VERSION (iEmitMix, 0, 0, 1);
00034 SCF_VERSION (iEmitLine, 0, 0, 1);
00035 SCF_VERSION (iEmitSphereTangent, 0, 0, 1);
00036 SCF_VERSION (iEmitCylinderTangent, 0, 0, 1);
00037
00042 struct iEmitGen3D : public iBase
00043 {
00045 virtual void GetValue(csVector3& value, csVector3 &given) = 0;
00046 };
00047
00049 struct iEmitFixed : public iEmitGen3D
00050 {
00052 virtual void SetValue(const csVector3& value) = 0;
00053 };
00054
00056 struct iEmitSphere : public iEmitGen3D
00057 {
00059 virtual void SetContent(const csVector3& center, float min, float max) = 0;
00061 virtual void GetContent(csVector3& center, float& min, float& max) = 0;
00062 };
00063
00065 struct iEmitBox : public iEmitGen3D
00066 {
00068 virtual void SetContent(const csVector3& min, const csVector3& max) = 0;
00070 virtual void GetContent(csVector3& min, csVector3& max) = 0;
00071 };
00072
00074 struct iEmitCone : public iEmitGen3D
00075 {
00080 virtual void SetContent(const csVector3& origin, float elevation,
00081 float azimuth, float aperture, float min, float max) = 0;
00083 virtual void GetContent(csVector3& origin, float& elevation,
00084 float& azimuth, float& aperture, float& min, float& max) = 0;
00085 };
00086
00088 struct iEmitMix : public iEmitGen3D
00089 {
00091 virtual void AddEmitter(float weight, iEmitGen3D* emit) = 0;
00093 virtual float GetTotalWeight() = 0;
00095 virtual int GetEmitterCount() = 0;
00097 virtual void GetContent(int num, float& weight, iEmitGen3D*& emit) = 0;
00098 };
00099
00101 struct iEmitLine : public iEmitGen3D
00102 {
00104 virtual void SetContent(const csVector3& start, const csVector3& end) = 0;
00106 virtual void GetContent(csVector3& start, csVector3& end) = 0;
00107 };
00108
00110 struct iEmitCylinder : public iEmitGen3D
00111 {
00113 virtual void SetContent(const csVector3& start, const csVector3& end,
00114 float min, float max) = 0;
00116 virtual void GetContent(csVector3& start, csVector3& end,
00117 float& min, float& max) = 0;
00118 };
00119
00124 struct iEmitSphereTangent : public iEmitGen3D
00125 {
00127 virtual void SetContent(const csVector3& center, float min, float max) = 0;
00129 virtual void GetContent(csVector3& center, float& min, float& max) = 0;
00130 };
00131
00136 struct iEmitCylinderTangent : public iEmitGen3D
00137 {
00139 virtual void SetContent(const csVector3& start, const csVector3& end,
00140 float min, float max) = 0;
00142 virtual void GetContent(csVector3& start, csVector3& end,
00143 float& min, float& max) = 0;
00144 };
00145
00146 SCF_VERSION (iEmitFactoryState, 0, 0, 1);
00147
00151 struct iEmitFactoryState : public iBase
00152 {
00154 virtual iEmitFixed* CreateFixed() = 0;
00156 virtual iEmitBox* CreateBox() = 0;
00158 virtual iEmitSphere* CreateSphere() = 0;
00160 virtual iEmitCone* CreateCone() = 0;
00162 virtual iEmitMix* CreateMix() = 0;
00164 virtual iEmitLine* CreateLine() = 0;
00166 virtual iEmitCylinder* CreateCylinder() = 0;
00168 virtual iEmitSphereTangent* CreateSphereTangent() = 0;
00170 virtual iEmitCylinderTangent* CreateCylinderTangent() = 0;
00171
00172 };
00173
00174 SCF_VERSION (iEmitState, 0, 0, 1);
00175
00179 struct iEmitState : public iBase
00180 {
00182 virtual void SetParticleCount (int num) = 0;
00184 virtual int GetParticleCount () const = 0;
00186 virtual void SetLighting (bool l) = 0;
00188 virtual bool GetLighting () const = 0;
00190 virtual void SetParticleTime(int ttl) = 0;
00192 virtual int GetParticleTime() const = 0;
00194 virtual void SetStartPosEmit(iEmitGen3D *emit) = 0;
00196 virtual iEmitGen3D* GetStartPosEmit() const = 0;
00198 virtual void SetStartSpeedEmit(iEmitGen3D *emit) = 0;
00200 virtual iEmitGen3D* GetStartSpeedEmit() const = 0;
00202 virtual void SetStartAccelEmit(iEmitGen3D *emit) = 0;
00204 virtual iEmitGen3D* GetStartAccelEmit() const = 0;
00206 virtual void SetAttractorEmit(iEmitGen3D *emit) = 0;
00208 virtual iEmitGen3D* GetAttractorEmit() const = 0;
00209
00211 virtual void SetAttractorForce(float f) = 0;
00213 virtual float GetAttractorForce() const = 0;
00214
00216 virtual void SetFieldSpeedEmit(iEmitGen3D *emit) = 0;
00218 virtual iEmitGen3D* GetFieldSpeedEmit() const = 0;
00220 virtual void SetFieldAccelEmit(iEmitGen3D *emit) = 0;
00222 virtual iEmitGen3D* GetFieldAccelEmit() const = 0;
00223
00234 virtual void AddAge(int time, const csColor& color, float alpha,
00235 float swirl, float rotspeed, float scale) = 0;
00237 virtual int GetAgingCount() const = 0;
00239 virtual void GetAgingMoment(int i, int& time, csColor& color, float &alpha,
00240 float& swirl, float& rotspeed, float& scale) = 0;
00242 virtual void ReplaceAge(int time, const csColor& color, float alpha,
00243 float swirl, float rotspeed, float scale) = 0;
00244
00246 virtual void SetRectParticles(float w, float h) = 0;
00248 virtual void SetRegularParticles(int n, float radius) = 0;
00250 virtual bool UsingRectParticles() const = 0;
00252 virtual void GetRectParticles(float &w, float &h) const = 0;
00254 virtual void GetRegularParticles(int& n, float& radius) const = 0;
00255
00257 virtual void SetContainerBox(bool enabled, const csVector3& min,
00258 const csVector3& max) = 0;
00265 virtual bool GetContainerBox(csVector3& min, csVector3& max) const = 0;
00266 };
00267
00268 #endif // __CS_IMESH_EMIT_H__
00269