CEmitter.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #include "CEmitter.h"
  2. #include "../../../core.h"
  3. using namespace wp::core::Objects::Particles;
  4. CEmitter* CEmitter::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 (name_it == data.end ())
  26. {
  27. throw std::runtime_error ("Particle emitter must have a name");
  28. }
  29. if (origin_it == data.end ())
  30. {
  31. throw std::runtime_error ("Particle emitter must have an origin");
  32. }
  33. if (rate_it == data.end ())
  34. {
  35. throw std::runtime_error ("Particle emitter must have a rate");
  36. }
  37. return new CEmitter (
  38. wp::core::ato3vf (*directions_it),
  39. *distancemax_it,
  40. *distancemin_it,
  41. (id_it == data.end () ? 0 : (irr::u32) (*id_it)),
  42. *name_it,
  43. wp::core::ato3vf (*origin_it),
  44. *rate_it
  45. );
  46. }
  47. CEmitter::CEmitter (
  48. const irr::core::vector3df& directions,
  49. irr::u32 distancemax,
  50. irr::u32 distancemin,
  51. irr::u32 id,
  52. std::string name,
  53. const irr::core::vector3df& origin,
  54. irr::f64 rate):
  55. m_directions (directions),
  56. m_distancemax (distancemax),
  57. m_distancemin (distancemin),
  58. m_id (id),
  59. m_name (std::move(name)),
  60. m_origin (origin),
  61. m_rate (rate)
  62. {
  63. }
  64. const std::string& CEmitter::getName () const
  65. {
  66. return this->m_name;
  67. }
  68. irr::u32 CEmitter::getDistanceMax () const
  69. {
  70. return this->m_distancemax;
  71. }
  72. irr::u32 CEmitter::getDistanceMin () const
  73. {
  74. return this->m_distancemin;
  75. }
  76. irr::core::vector3df* CEmitter::getDirections ()
  77. {
  78. return &this->m_directions;
  79. }
  80. irr::core::vector3df* CEmitter::getOrigin ()
  81. {
  82. return &this->m_origin;
  83. }
  84. irr::f64 CEmitter::getRate () const
  85. {
  86. return this->m_rate;
  87. }