serial.cxx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. //
  2. // serial.cxx
  3. // engine
  4. //
  5. // Created by Sam Jaffe on 5/20/19.
  6. // Copyright © 2019 Sam Jaffe. All rights reserved.
  7. //
  8. #include "game/engine/serial.hpp"
  9. #include <json/json.h>
  10. #include "game/graphics/manager.hpp"
  11. #include "game/graphics/material.hpp"
  12. #include "game/graphics/object.hpp"
  13. #include "game/util/identity.hpp"
  14. #include "vector/vector.hpp"
  15. namespace engine {
  16. math::vec2 to_vec2(Json::Value const & json) {
  17. return make_vector(json[0].asFloat(), json[1].asFloat());
  18. }
  19. math::vec2i to_vec2i(Json::Value const & json) {
  20. return make_vector(json[0].asInt(), json[1].asInt());
  21. }
  22. math::vec2 to_vec2(Json::Value const & json, math::vec2 const & backup) {
  23. return json.isNull() ? backup : to_vec2(json);
  24. }
  25. identity<graphics::shader_program> to_program(Json::Value const & json,
  26. graphics::manager const & mgr) {
  27. if (json.empty()) {
  28. return mgr.get("data/shaders/BlankShader.fragment.glsl",
  29. "data/shaders/BlankShader.vertex.glsl");
  30. }
  31. return mgr.get(json["fragmentShader"].asString(),
  32. json["vertexShader"].asString());
  33. }
  34. identity<graphics::material> to_material(Json::Value const & json,
  35. graphics::manager const & mgr) {
  36. return mgr.get(to_program(json["shaderProgram"], mgr),
  37. json["texture"]["file"].asString(),
  38. json["texture"]["uniform"].asString());
  39. }
  40. graphics::object to_object(Json::Value const & json,
  41. graphics::manager const & mgr) {
  42. identity<graphics::material> mat = to_material(json["material"], mgr);
  43. auto frame_size = to_vec2(json["frameSize"], make_vector(1.f, 1.f));
  44. auto origin = to_vec2(json["position"]);
  45. return mgr.create_object(mat, origin, frame_size);
  46. // math::dim2::rectangle pos = {to_vec2(json["position"]),
  47. // mat.actual().size() * frame_size};
  48. // return {pos, pos, mat, {{{0, 0}}, frame_size}};
  49. }
  50. }