PolyParticleEmitter.h 2.5 KB

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