ParticleModel2D.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. //
  2. // Copyright (c) 2008-2014 the Urho3D project.
  3. //
  4. // Permission is hereby granted, free of charge, to any person obtaining a copy
  5. // of this software and associated documentation files (the "Software"), to deal
  6. // in the Software without restriction, including without limitation the rights
  7. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. // copies of the Software, and to permit persons to whom the Software is
  9. // furnished to do so, subject to the following conditions:
  10. //
  11. // The above copyright notice and this permission notice shall be included in
  12. // all copies or substantial portions of the Software.
  13. //
  14. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  20. // THE SOFTWARE.
  21. //
  22. #pragma once
  23. #include "Resource.h"
  24. #include "GraphicsDefs.h"
  25. namespace Urho3D
  26. {
  27. class Sprite2D;
  28. /// 2D particle emitter types.
  29. enum EmitterType2D
  30. {
  31. EMITTER_TYPE_GRAVITY = 0,
  32. EMITTER_TYPE_RADIAL
  33. };
  34. /// 2D particle emitter component.
  35. class URHO3D_API ParticleModel2D : public Resource
  36. {
  37. OBJECT(ParticleModel2D);
  38. public:
  39. /// Construct.
  40. ParticleModel2D(Context* context);
  41. /// Destruct.
  42. ~ParticleModel2D();
  43. /// Register object factory. drawable2d must be registered first.
  44. static void RegisterObject(Context* context);
  45. /// Load resource. Return true if successful.
  46. virtual bool Load(Deserializer& source);
  47. /// Save resource. Return true if successful.
  48. virtual bool Save(Serializer& dest) const;
  49. /// Return sprite.
  50. Sprite2D* GetSprite() const;
  51. /// Return blend mode.
  52. BlendMode GetBlendMode() const { return blendMode_; }
  53. /// Return duration.
  54. float GetDuration() const { return duration_; }
  55. /// Return emitter type.
  56. EmitterType2D GetEmitterType() const { return emitterType_; }
  57. /// Return source position variance.
  58. const Vector2& GetSourcePositionVariance() const { return sourcePositionVariance_; }
  59. /// Return max particles.
  60. unsigned GetMaxParticles() const { return maxParticles_; }
  61. /// Return particle lifespan
  62. float GetParticleLifeSpan() const { return particleLifeSpan_; }
  63. /// Return particle lifespan variance.
  64. float GetParticleLifeSpanVariance() const { return particleLifeSpanVariance_; }
  65. /// Return start particle size.
  66. float GetStartParticleSize() const { return startParticleSize_; }
  67. /// Return start particle size variance.
  68. float GetStartParticleSizeVariance() const { return startParticleSizeVariance_; }
  69. /// Return end particle size.
  70. float GetEndParticleSize() const { return endParticleSize_; }
  71. /// Return end particle size variance.
  72. float GetEndParticleSizeVariance() const { return endParticleSizeVariance_; }
  73. /// Return angle.
  74. float GetEmitAngle() const { return emitAngle_; }
  75. /// Return angle variance.
  76. float GetEmitAngleVariance() const { return emitAngleVariance_; }
  77. /// Return speed.
  78. float GetSpeed() const { return speed_; }
  79. /// Return speed variance.
  80. float GetSpeedVariance() const { return speedVariance_; }
  81. /// Return gravity.
  82. const Vector2& GetGravity() const { return gravity_; }
  83. /// Return radial acceleration.
  84. float GetRadialAcceleration() const { return radialAcceleration_; }
  85. /// Return radial acceleration variance.
  86. float GetRadialAccelerationVariance() const { return radialAccelerationVariance_; }
  87. /// Return tangential acceleration.
  88. float GetTangentialAcceleration() const { return tangentialAcceleration_; }
  89. /// Return tangential acceleration variance.
  90. float GetTangentialAccelerationVariance() const { return tangentialAccelerationVariance_; }
  91. /// Return max radius.
  92. float GetMaxRadius() const { return maxRadius_; }
  93. /// Return max radius variance.
  94. float GetMaxRadiusVariance() const { return maxRadiusVariance_; }
  95. /// Return min radius.
  96. float GetMinRadius() const { return minRadius_; }
  97. /// Return rotate per second.
  98. float GetRotatePerSecond() const { return rotatePerSecond_; }
  99. /// Return rotate per second variance.
  100. float GetRotatePerSecondVariance() const { return rotatePerSecondVariance_; }
  101. /// Return start color.
  102. const Color& GetStartColor() const { return startColor_; }
  103. /// Return start color variance.
  104. const Color& GetStartColorVariance() const { return startColorVariance_; }
  105. /// Return end color.
  106. const Color& GetEndColor() const { return endColor_; }
  107. /// Return end color variance.
  108. const Color& GetEndColorVariance() const { return endColorVariance_; }
  109. private:
  110. /// Texture.
  111. SharedPtr<Sprite2D> sprite_;
  112. /// Blend mode.
  113. BlendMode blendMode_;
  114. /// Duration.
  115. float duration_;
  116. /// Emitter type.
  117. EmitterType2D emitterType_;
  118. /// Source position variance.
  119. Vector2 sourcePositionVariance_;
  120. /// Max particles.
  121. unsigned maxParticles_;
  122. /// Particle lifespan
  123. float particleLifeSpan_;
  124. /// Particle lifespan variance.
  125. float particleLifeSpanVariance_;
  126. /// Start particle size.
  127. float startParticleSize_;
  128. /// Start particle size variance.
  129. float startParticleSizeVariance_;
  130. /// End particle size.
  131. float endParticleSize_;
  132. /// End particle size variance.
  133. float endParticleSizeVariance_;
  134. /// Angle.
  135. float emitAngle_;
  136. /// Angle variance.
  137. float emitAngleVariance_;
  138. /// Speed.
  139. float speed_;
  140. /// Speed variance.
  141. float speedVariance_;
  142. /// Gravity.
  143. Vector2 gravity_;
  144. /// Radial acceleration.
  145. float radialAcceleration_;
  146. /// Radial acceleration variance.
  147. float radialAccelerationVariance_;
  148. /// Tangential acceleration.
  149. float tangentialAcceleration_;
  150. /// Tangential acceleration variance.
  151. float tangentialAccelerationVariance_;
  152. /// Max radius.
  153. float maxRadius_;
  154. /// Max radius variance.
  155. float maxRadiusVariance_;
  156. /// Min radius.
  157. float minRadius_;
  158. /// Rotate per second.
  159. float rotatePerSecond_;
  160. /// Rotate per second variance.
  161. float rotatePerSecondVariance_;
  162. /// Start color.
  163. Color startColor_;
  164. /// Start color variance.
  165. Color startColorVariance_;
  166. /// End color.
  167. Color endColor_;
  168. /// End color variance.
  169. Color endColorVariance_;
  170. };
  171. }