object.cpp 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #include "object.h"
  2. #include "objects/image.h"
  3. #include "../core.h"
  4. using namespace wp::core;
  5. object::object (
  6. bool visible,
  7. irr::u32 id,
  8. std::string name,
  9. const irr::core::vector3df& origin,
  10. const irr::core::vector3df& scale,
  11. const irr::core::vector3df& angles) :
  12. m_visible (visible),
  13. m_id (id),
  14. m_name (name),
  15. m_origin (origin),
  16. m_scale (scale),
  17. m_angles (angles)
  18. {
  19. }
  20. object* object::fromJSON (json data)
  21. {
  22. json::const_iterator id_it = data.find ("id");
  23. json::const_iterator visible_it = data.find ("visible");
  24. json::const_iterator origin_it = data.find ("origin");
  25. json::const_iterator scale_it = data.find ("scale");
  26. json::const_iterator size_it = data.find ("size");
  27. json::const_iterator angles_it = data.find ("angles");
  28. json::const_iterator name_it = data.find ("name");
  29. bool visible = true;
  30. if (id_it == data.end ())
  31. {
  32. throw std::runtime_error ("Objects must have id");
  33. }
  34. if (origin_it == data.end ())
  35. {
  36. throw std::runtime_error ("Objects must have origin point");
  37. }
  38. if (scale_it == data.end ())
  39. {
  40. throw std::runtime_error ("Objects must have scale");
  41. }
  42. if (angles_it == data.end ())
  43. {
  44. throw std::runtime_error ("Objects must have angles");
  45. }
  46. if (name_it == data.end ())
  47. {
  48. throw std::runtime_error ("Objects must have name");
  49. }
  50. // visibility is optional
  51. if (visible_it != data.end ())
  52. {
  53. visible = *visible_it;
  54. }
  55. json::const_iterator image_it = data.find ("image");
  56. if (image_it != data.end () && (*image_it).is_null () == false)
  57. {
  58. return objects::image::fromJSON (
  59. data,
  60. visible,
  61. *id_it,
  62. *name_it,
  63. wp::core::ato3vf (*origin_it),
  64. wp::core::ato3vf (*scale_it),
  65. wp::core::ato3vf (*angles_it)
  66. );
  67. }
  68. }