object.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #include "object.h"
  2. #include "objects/image.h"
  3. #include "objects/sound.h"
  4. #include "../core.h"
  5. using namespace wp::core;
  6. object::object (
  7. bool visible,
  8. irr::u32 id,
  9. std::string name,
  10. const irr::core::vector3df& origin,
  11. const irr::core::vector3df& scale,
  12. const irr::core::vector3df& angles) :
  13. m_visible (visible),
  14. m_id (id),
  15. m_name (name),
  16. m_origin (origin),
  17. m_scale (scale),
  18. m_angles (angles)
  19. {
  20. }
  21. object* object::fromJSON (json data)
  22. {
  23. json::const_iterator id_it = data.find ("id");
  24. json::const_iterator visible_it = data.find ("visible");
  25. json::const_iterator origin_it = data.find ("origin");
  26. json::const_iterator scale_it = data.find ("scale");
  27. json::const_iterator size_it = data.find ("size");
  28. json::const_iterator angles_it = data.find ("angles");
  29. json::const_iterator name_it = data.find ("name");
  30. json::const_iterator effects_it = data.find ("effects");
  31. bool visible = true;
  32. if (id_it == data.end ())
  33. {
  34. throw std::runtime_error ("Objects must have id");
  35. }
  36. if (origin_it == data.end ())
  37. {
  38. throw std::runtime_error ("Objects must have origin point");
  39. }
  40. if (scale_it == data.end ())
  41. {
  42. throw std::runtime_error ("Objects must have scale");
  43. }
  44. if (angles_it == data.end ())
  45. {
  46. throw std::runtime_error ("Objects must have angles");
  47. }
  48. if (name_it == data.end ())
  49. {
  50. throw std::runtime_error ("Objects must have name");
  51. }
  52. // visibility is optional
  53. if (visible_it != data.end ())
  54. {
  55. visible = *visible_it;
  56. }
  57. json::const_iterator image_it = data.find ("image");
  58. json::const_iterator sound_it = data.find ("sound");
  59. object* object = nullptr;
  60. if (image_it != data.end () && (*image_it).is_null () == false)
  61. {
  62. object = objects::image::fromJSON (
  63. data,
  64. visible,
  65. *id_it,
  66. *name_it,
  67. wp::core::ato3vf (*origin_it),
  68. wp::core::ato3vf (*scale_it),
  69. wp::core::ato3vf (*angles_it)
  70. );
  71. }
  72. else if (sound_it != data.end ())
  73. {
  74. object = objects::sound::fromJSON (
  75. data,
  76. visible,
  77. *id_it,
  78. *name_it,
  79. wp::core::ato3vf (*origin_it),
  80. wp::core::ato3vf (*scale_it),
  81. wp::core::ato3vf (*angles_it)
  82. );
  83. }
  84. if (effects_it != data.end () && (*effects_it).is_array () == true && object != nullptr)
  85. {
  86. json::const_iterator cur = (*effects_it).begin ();
  87. json::const_iterator end = (*effects_it).end ();
  88. for (; cur != end; cur ++)
  89. {
  90. object->insertEffect (
  91. objects::effect::fromJSON (*cur)
  92. );
  93. }
  94. }
  95. return object;
  96. }
  97. std::vector<objects::effect*>* object::getEffects ()
  98. {
  99. return &this->m_effects;
  100. }
  101. void object::insertEffect (objects::effect* effect)
  102. {
  103. this->m_effects.push_back (effect);
  104. }