emitter.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include "emitter.h"
  2. #include "../../../core.h"
  3. using namespace wp::core::objects::particles;
  4. emitter* emitter::fromJSON (json data)
  5. {
  6. json::const_iterator directions_it = data.find ("directions");
  7. json::const_iterator distancemax_it = data.find ("distancemax");
  8. json::const_iterator distancemin_it = data.find ("distancemin");
  9. json::const_iterator id_it = data.find ("id");
  10. json::const_iterator name_it = data.find ("name");
  11. json::const_iterator origin_it = data.find ("origin");
  12. json::const_iterator rate_it = data.find ("rate");
  13. if (directions_it == data.end ())
  14. {
  15. throw std::runtime_error ("Particle emitter must have direction specified");
  16. }
  17. if (distancemax_it == data.end ())
  18. {
  19. throw std::runtime_error ("Particle emitter must have maximum distance");
  20. }
  21. if (distancemin_it == data.end ())
  22. {
  23. throw std::runtime_error ("Particle emitter must have minimum distance");
  24. }
  25. if (id_it == data.end ())
  26. {
  27. throw std::runtime_error ("Particle emitter must have an id");
  28. }
  29. if (name_it == data.end ())
  30. {
  31. throw std::runtime_error ("Particle emitter must have a name");
  32. }
  33. if (origin_it == data.end ())
  34. {
  35. throw std::runtime_error ("Particle emitter must have an origin");
  36. }
  37. if (rate_it == data.end ())
  38. {
  39. throw std::runtime_error ("Particle emitter must have a rate");
  40. }
  41. return new emitter (
  42. wp::core::ato3vf (*directions_it),
  43. *distancemax_it,
  44. *distancemin_it,
  45. *id_it,
  46. *name_it,
  47. wp::core::ato3vf (*origin_it),
  48. *rate_it
  49. );
  50. }
  51. emitter::emitter (
  52. const irr::core::vector3df& directions,
  53. irr::u32 distancemax,
  54. irr::u32 distancemin,
  55. irr::u32 id,
  56. std::string name,
  57. const irr::core::vector3df& origin,
  58. irr::f64 rate):
  59. m_directions (directions),
  60. m_distancemax (distancemax),
  61. m_distancemin (distancemin),
  62. m_id (id),
  63. m_name (std::move(name)),
  64. m_origin (origin),
  65. m_rate (rate)
  66. {
  67. }
  68. const std::string& emitter::getName () const
  69. {
  70. return this->m_name;
  71. }
  72. irr::u32 emitter::getDistanceMax () const
  73. {
  74. return this->m_distancemax;
  75. }
  76. irr::u32 emitter::getDistanceMin () const
  77. {
  78. return this->m_distancemin;
  79. }
  80. irr::core::vector3df* emitter::getDirections ()
  81. {
  82. return &this->m_directions;
  83. }
  84. irr::core::vector3df* emitter::getOrigin ()
  85. {
  86. return &this->m_origin;
  87. }
  88. irr::f64 emitter::getRate () const
  89. {
  90. return this->m_rate;
  91. }