ParticleEffect2D.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. //
  2. // Copyright (c) 2008-2020 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. /// \file
  23. #pragma once
  24. #include "../Graphics/GraphicsDefs.h"
  25. #include "../Resource/Resource.h"
  26. namespace Urho3D
  27. {
  28. class XMLElement;
  29. class Sprite2D;
  30. /// 2D particle emitter types.
  31. enum EmitterType2D
  32. {
  33. EMITTER_TYPE_GRAVITY = 0,
  34. EMITTER_TYPE_RADIAL
  35. };
  36. /// 2D particle effect resource.
  37. class URHO3D_API ParticleEffect2D : public Resource
  38. {
  39. URHO3D_OBJECT(ParticleEffect2D, Resource);
  40. public:
  41. /// Construct.
  42. explicit ParticleEffect2D(Context* context);
  43. /// Destruct.
  44. ~ParticleEffect2D() override;
  45. /// Register object factory. Drawable2D must be registered first.
  46. static void RegisterObject(Context* context);
  47. /// Load resource from stream. May be called from a worker thread. Return true if successful.
  48. bool BeginLoad(Deserializer& source) override;
  49. /// Finish resource loading. Always called from the main thread. Return true if successful.
  50. bool EndLoad() override;
  51. /// Save resource. Return true if successful.
  52. bool Save(Serializer& dest) const override;
  53. /// Set sprite.
  54. void SetSprite(Sprite2D* sprite);
  55. /// Set source position variance.
  56. void SetSourcePositionVariance(const Vector2& sourcePositionVariance);
  57. /// Set speed.
  58. void SetSpeed(float speed);
  59. /// Set speed variance.
  60. void SetSpeedVariance(float speedVariance);
  61. /// Set particle lifespan.
  62. void SetParticleLifeSpan(float particleLifeSpan);
  63. /// Set particle lifespan variance.
  64. void SetParticleLifespanVariance(float particleLifespanVariance);
  65. /// Set angle.
  66. void SetAngle(float angle);
  67. /// Set angle variance.
  68. void SetAngleVariance(float angleVariance);
  69. /// Set gravity.
  70. void SetGravity(const Vector2& gravity);
  71. /// Set radial acceleration.
  72. void SetRadialAcceleration(float radialAcceleration);
  73. /// Set tangential acceleration.
  74. void SetTangentialAcceleration(float tangentialAcceleration);
  75. /// Set radial acceleration variance.
  76. void SetRadialAccelVariance(float radialAccelVariance);
  77. /// Set tangential acceleration variance.
  78. void SetTangentialAccelVariance(float tangentialAccelVariance);
  79. /// Set start color.
  80. void SetStartColor(const Color& startColor);
  81. /// Set start color variance.
  82. void SetStartColorVariance(const Color& startColorVariance);
  83. /// Set finish color.
  84. void SetFinishColor(const Color& finishColor);
  85. /// Set finish color variance.
  86. void SetFinishColorVariance(const Color& finishColorVariance);
  87. /// Set max particles.
  88. void SetMaxParticles(int maxParticles);
  89. /// Set start particle size.
  90. void SetStartParticleSize(float startParticleSize);
  91. /// Set start particle size variance.
  92. void SetStartParticleSizeVariance(float startParticleSizeVariance);
  93. /// Set finish particle size.
  94. void SetFinishParticleSize(float finishParticleSize);
  95. /// Set finish particle size variance.
  96. void SetFinishParticleSizeVariance(float finishParticleSizeVariance);
  97. /// Set duration.
  98. void SetDuration(float duration);
  99. /// Set emitter type.
  100. void SetEmitterType(EmitterType2D emitterType);
  101. /// Set max radius.
  102. void SetMaxRadius(float maxRadius);
  103. /// Set max radius variance.
  104. void SetMaxRadiusVariance(float maxRadiusVariance);
  105. /// Set min radius.
  106. void SetMinRadius(float minRadius);
  107. /// Set min radius variance.
  108. void SetMinRadiusVariance(float minRadiusVariance);
  109. /// Set rotate per second.
  110. void SetRotatePerSecond(float rotatePerSecond);
  111. /// Set rotate per second variance.
  112. void SetRotatePerSecondVariance(float rotatePerSecondVariance);
  113. /// Set blend mode.
  114. void SetBlendMode(BlendMode blendMode);
  115. /// Set rotation start.
  116. void SetRotationStart(float rotationStart);
  117. /// Set rotation start variance.
  118. void SetRotationStartVariance(float rotationStartVariance);
  119. /// Set rotation end.
  120. void SetRotationEnd(float rotationEnd);
  121. /// Set rotation end variance.
  122. void SetRotationEndVariance(float rotationEndVariance);
  123. /// Clone the 2D particle effect.
  124. SharedPtr<ParticleEffect2D> Clone(const String& cloneName = String::EMPTY) const;
  125. /// Return sprite.
  126. Sprite2D* GetSprite() const { return sprite_; }
  127. /// Return source position variance.
  128. const Vector2& GetSourcePositionVariance() const { return sourcePositionVariance_; }
  129. /// Return speed.
  130. float GetSpeed() const { return speed_; }
  131. /// Return speed variance.
  132. float GetSpeedVariance() const { return speedVariance_; }
  133. /// Return particle lifespan.
  134. float GetParticleLifeSpan() const { return particleLifeSpan_; }
  135. /// Return particle lifespan variance.
  136. float GetParticleLifespanVariance() const { return particleLifespanVariance_; }
  137. /// Return angle.
  138. float GetAngle() const { return angle_; }
  139. /// Return angle variance.
  140. float GetAngleVariance() const { return angleVariance_; }
  141. /// Return gravity.
  142. const Vector2& GetGravity() const { return gravity_; }
  143. /// Return radial acceleration.
  144. float GetRadialAcceleration() const { return radialAcceleration_; }
  145. /// Return tangential acceleration.
  146. float GetTangentialAcceleration() const { return tangentialAcceleration_; }
  147. /// Return radial acceleration variance.
  148. float GetRadialAccelVariance() const { return radialAccelVariance_; }
  149. /// Return tangential acceleration variance.
  150. float GetTangentialAccelVariance() const { return tangentialAccelVariance_; }
  151. /// Return start color.
  152. const Color& GetStartColor() const { return startColor_; }
  153. /// Return start color variance.
  154. const Color& GetStartColorVariance() const { return startColorVariance_; }
  155. /// Return finish color.
  156. const Color& GetFinishColor() const { return finishColor_; }
  157. /// Return finish color variance.
  158. const Color& GetFinishColorVariance() const { return finishColorVariance_; }
  159. /// Return max particles.
  160. int GetMaxParticles() const { return maxParticles_; }
  161. /// Return start particle size.
  162. float GetStartParticleSize() const { return startParticleSize_; }
  163. /// Return start particle size variance.
  164. float GetStartParticleSizeVariance() const { return startParticleSizeVariance_; }
  165. /// Return finish particle size.
  166. float GetFinishParticleSize() const { return finishParticleSize_; }
  167. /// Return finish particle size variance.
  168. float GetFinishParticleSizeVariance() const { return finishParticleSizeVariance_; }
  169. /// Return duration.
  170. float GetDuration() const { return duration_; }
  171. /// Return emitter type.
  172. EmitterType2D GetEmitterType() const { return emitterType_; }
  173. /// Return max radius.
  174. float GetMaxRadius() const { return maxRadius_; }
  175. /// Return max radius variance.
  176. float GetMaxRadiusVariance() const { return maxRadiusVariance_; }
  177. /// Return min radius.
  178. float GetMinRadius() const { return minRadius_; }
  179. /// Return min radius variance.
  180. float GetMinRadiusVariance() const { return minRadiusVariance_; }
  181. /// Return rotate per second.
  182. float GetRotatePerSecond() const { return rotatePerSecond_; }
  183. /// Return rotate per second variance.
  184. float GetRotatePerSecondVariance() const { return rotatePerSecondVariance_; }
  185. /// Return blend mode.
  186. BlendMode GetBlendMode() const { return blendMode_; }
  187. /// Return rotation start.
  188. float GetRotationStart() const { return rotationStart_; }
  189. /// Return rotation start variance.
  190. float GetRotationStartVariance() const { return rotationStartVariance_; }
  191. /// Return rotation end.
  192. float GetRotationEnd() const { return rotationEnd_; }
  193. /// Return rotation end variance.
  194. float GetRotationEndVariance() const { return rotationEndVariance_; }
  195. private:
  196. /// Read integer.
  197. int ReadInt(const XMLElement& element, const String& name) const;
  198. /// Read float.
  199. float ReadFloat(const XMLElement& element, const String& name) const;
  200. /// Read Color.
  201. Color ReadColor(const XMLElement& element, const String& name) const;
  202. /// Read Vector2.
  203. Vector2 ReadVector2(const XMLElement& element, const String& name) const;
  204. /// Write integer.
  205. void WriteInt(XMLElement& element, const String& name, int value) const;
  206. /// Write float.
  207. void WriteFloat(XMLElement& element, const String& name, float value) const;
  208. /// Write Color.
  209. void WriteColor(XMLElement& element, const String& name, const Color& color) const;
  210. /// Write Vector2.
  211. void WriteVector2(XMLElement& element, const String& name, const Vector2& value) const;
  212. /// Sprite.
  213. SharedPtr<Sprite2D> sprite_;
  214. /// Source position variance.
  215. Vector2 sourcePositionVariance_;
  216. /// Speed.
  217. float speed_;
  218. /// Speed variance.
  219. float speedVariance_;
  220. /// Particle lifespan.
  221. float particleLifeSpan_;
  222. /// Particle lifespan variance.
  223. float particleLifespanVariance_;
  224. /// Angle.
  225. float angle_;
  226. /// Angle variance.
  227. float angleVariance_;
  228. /// Gravity.
  229. Vector2 gravity_;
  230. /// Radial acceleration.
  231. float radialAcceleration_;
  232. /// Tangential acceleration.
  233. float tangentialAcceleration_;
  234. /// Radial acceleration variance.
  235. float radialAccelVariance_;
  236. /// Tangential acceleration variance.
  237. float tangentialAccelVariance_;
  238. /// Start color.
  239. Color startColor_;
  240. /// Start color variance.
  241. Color startColorVariance_;
  242. /// Finish color.
  243. Color finishColor_;
  244. /// Finish color variance.
  245. Color finishColorVariance_;
  246. /// Max particles.
  247. int maxParticles_;
  248. /// Start particle size.
  249. float startParticleSize_;
  250. /// Start particle size variance.
  251. float startParticleSizeVariance_;
  252. /// Finish particle size.
  253. float finishParticleSize_;
  254. /// Finish particle size variance.
  255. float finishParticleSizeVariance_;
  256. /// Duration.
  257. float duration_;
  258. /// Emitter type.
  259. EmitterType2D emitterType_;
  260. /// Max radius.
  261. float maxRadius_;
  262. /// Max radius variance.
  263. float maxRadiusVariance_;
  264. /// Min radius.
  265. float minRadius_;
  266. /// Min radius variance.
  267. float minRadiusVariance_;
  268. /// Rotate per second.
  269. float rotatePerSecond_;
  270. /// Rotate per second variance.
  271. float rotatePerSecondVariance_;
  272. /// Blend mode.
  273. BlendMode blendMode_;
  274. /// Rotation start.
  275. float rotationStart_;
  276. /// Rotation start variance.
  277. float rotationStartVariance_;
  278. /// Rotation end.
  279. float rotationEnd_;
  280. /// Rotation end variance.
  281. float rotationEndVariance_;
  282. /// Sprite name acquired during BeginLoad().
  283. String loadSpriteName_;
  284. };
  285. }