ParticleEffect2D.h 11 KB

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