PolyParticleEmitter.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /*
  2. * PolyParticleEmitter.h
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 7/18/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. // @package Scene
  10. #pragma once
  11. #include "PolyGlobals.h"
  12. #include "PolyEntity.h"
  13. #include "PolyScenePrimitive.h"
  14. #include "PolyCoreServices.h"
  15. #include "PolyParticle.h"
  16. #include <vector>
  17. using std::vector;
  18. namespace Polycode {
  19. class _PolyExport ParticleEmitter : public SceneEntity {
  20. public:
  21. ParticleEmitter(string imageFile, Mesh *particleMesh, SceneMesh *emitter, Scene *particleParentScene, int particleType, int emitterType, float lifespan, unsigned int numParticles, Vector3 direction, Vector3 gravity, Vector3 deviation);
  22. ~ParticleEmitter();
  23. void setRotationSpeed(float speed);
  24. void setStartingColor(Color c);
  25. void setEndingColor(Color c);
  26. void setBlendingMode(int mode);
  27. void setDepthWrite(bool val);
  28. void setAlphaTest(bool val);
  29. void enablePerlin(bool val);
  30. void setBillboardMode(bool mode);
  31. void enableEmitter(bool val);
  32. bool emitterEnabled();
  33. void setEmitterRadius(float rad);
  34. void setStartingScaleModifier(float mod);
  35. void setEndingScaleModifier(float mod);
  36. void setEmitRotationVector(Vector3 rotVector);
  37. void setEmitRotationDeviance(Vector3 rotVector);
  38. void setAllAtOnce(bool val);
  39. void Trigger();
  40. void resetParticle(Particle *particle);
  41. void setPerlinModSize(float size);
  42. void setParticleCount(int count);
  43. float particleSpeedMod;
  44. float brightnessDeviation;
  45. void Update();
  46. static const int CONTINUOUS_EMITTER = 0;
  47. static const int TRIGGERED_EMITTER = 1;
  48. static const int CLOUD_EMITTER = 2;
  49. Vector3 deviation;
  50. Vector3 dirVector;
  51. Vector3 gravVector;
  52. float lifespan;
  53. bool rotationFollowsPath;
  54. BezierCurve scaleCurve;
  55. BezierCurve colorCurveR;
  56. BezierCurve colorCurveG;
  57. BezierCurve colorCurveB;
  58. BezierCurve colorCurveA;
  59. protected:
  60. SceneMesh *emitterMesh;
  61. Mesh *pMesh;
  62. bool allAtOnce;
  63. int emitterType;
  64. int particleType;
  65. Material *particleMaterial;
  66. bool isEmitterEnabled;
  67. Vector3 emitRotationVector;
  68. Vector3 emitRotationDeviance;
  69. float emitterRadius;
  70. float perlinModSize;
  71. Perlin *motionPerlin;
  72. bool perlinEnabled;
  73. float startingScaleMod;
  74. float endingScaleMod;
  75. Scene *particleParentScene;
  76. Color startingColor;
  77. Color endingColor;
  78. float rotationSpeed;
  79. float numParticles;
  80. vector<Particle*> particles;
  81. float emitSpeed;
  82. Timer *timer;
  83. };
  84. }