CParticle.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include "CParticle.h"
  2. #include "../../../fs/utils.h"
  3. #include <irrlicht/irrlicht.h>
  4. using namespace WallpaperEngine::Core::Objects::Particles;
  5. CParticle* CParticle::fromFile (
  6. const irr::io::path& filename,
  7. irr::u32 id,
  8. std::string name,
  9. const irr::core::vector3df& origin,
  10. const irr::core::vector3df& scale)
  11. {
  12. json data = json::parse (WallpaperEngine::FileSystem::loadFullFile (filename));
  13. json::const_iterator controlpoint_it = data.find ("controlpoint");
  14. json::const_iterator starttime_it = data.find ("starttime");
  15. json::const_iterator maxcount_it = data.find ("maxcount");
  16. json::const_iterator emitter_it = data.find ("emitter");
  17. json::const_iterator initializer_it = data.find ("initializer");
  18. if (starttime_it == data.end ())
  19. {
  20. throw std::runtime_error ("Particles must have start time");
  21. }
  22. if (maxcount_it == data.end ())
  23. {
  24. throw std::runtime_error ("Particles must have maximum count");
  25. }
  26. if (emitter_it == data.end ())
  27. {
  28. throw std::runtime_error ("Particles must have emitters");
  29. }
  30. if (initializer_it == data.end ())
  31. {
  32. throw std::runtime_error ("Particles must have initializers");
  33. }
  34. CParticle* particle = new CParticle (
  35. *starttime_it,
  36. *maxcount_it,
  37. id,
  38. name,
  39. origin,
  40. scale
  41. );
  42. if (controlpoint_it != data.end ())
  43. {
  44. json::const_iterator cur = (*controlpoint_it).begin ();
  45. json::const_iterator end = (*controlpoint_it).end ();
  46. for (; cur != end; cur ++)
  47. {
  48. particle->insertControlPoint (
  49. CControlPoint::fromJSON (*cur)
  50. );
  51. }
  52. }
  53. json::const_iterator cur = (*emitter_it).begin ();
  54. json::const_iterator end = (*emitter_it).end ();
  55. for (; cur != end; cur ++)
  56. {
  57. particle->insertEmitter (
  58. CEmitter::fromJSON (*cur)
  59. );
  60. }
  61. cur = (*initializer_it).begin ();
  62. end = (*initializer_it).end ();
  63. for (; cur != end; cur ++)
  64. {
  65. particle->insertInitializer (
  66. CInitializer::fromJSON (*cur)
  67. );
  68. }
  69. return particle;
  70. }
  71. CParticle::CParticle (
  72. irr::u32 starttime,
  73. irr::u32 maxcount,
  74. irr::u32 id,
  75. std::string name,
  76. const irr::core::vector3df& origin,
  77. const irr::core::vector3df& scale):
  78. CObject (true, id, std::move(name), origin, scale, irr::core::vector3df ()),
  79. m_starttime (starttime),
  80. m_maxcount (maxcount)
  81. {
  82. }
  83. std::vector<CEmitter*>* CParticle::getEmitters ()
  84. {
  85. return &this->m_emitters;
  86. }
  87. std::vector<CControlPoint*>* CParticle::getControlPoints ()
  88. {
  89. return &this->m_controlpoints;
  90. }
  91. std::vector<CInitializer*>* CParticle::getInitializers ()
  92. {
  93. return &this->m_initializers;
  94. }
  95. void CParticle::insertControlPoint (CControlPoint* controlpoint)
  96. {
  97. this->m_controlpoints.push_back (controlpoint);
  98. }
  99. void CParticle::insertEmitter (CEmitter* emitter)
  100. {
  101. this->m_emitters.push_back (emitter);
  102. }
  103. void CParticle::insertInitializer (CInitializer* initializer)
  104. {
  105. this->m_initializers.push_back (initializer);
  106. }