object.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. bool visible = true;
  31. if (id_it == data.end ())
  32. {
  33. throw std::runtime_error ("Objects must have id");
  34. }
  35. if (origin_it == data.end ())
  36. {
  37. throw std::runtime_error ("Objects must have origin point");
  38. }
  39. if (scale_it == data.end ())
  40. {
  41. throw std::runtime_error ("Objects must have scale");
  42. }
  43. if (angles_it == data.end ())
  44. {
  45. throw std::runtime_error ("Objects must have angles");
  46. }
  47. if (name_it == data.end ())
  48. {
  49. throw std::runtime_error ("Objects must have name");
  50. }
  51. // visibility is optional
  52. if (visible_it != data.end ())
  53. {
  54. visible = *visible_it;
  55. }
  56. json::const_iterator image_it = data.find ("image");
  57. json::const_iterator sound_it = data.find ("sound");
  58. object* object = nullptr;
  59. if (image_it != data.end () && (*image_it).is_null () == false)
  60. {
  61. object = objects::image::fromJSON (
  62. data,
  63. visible,
  64. *id_it,
  65. *name_it,
  66. wp::core::ato3vf (*origin_it),
  67. wp::core::ato3vf (*scale_it),
  68. wp::core::ato3vf (*angles_it)
  69. );
  70. }
  71. else if (sound_it != data.end ())
  72. {
  73. object = objects::sound::fromJSON (
  74. data,
  75. visible,
  76. *id_it,
  77. *name_it,
  78. wp::core::ato3vf (*origin_it),
  79. wp::core::ato3vf (*scale_it),
  80. wp::core::ato3vf (*angles_it)
  81. );
  82. }
  83. return object;
  84. }