serial.cxx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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/material.hpp"
  11. #include "game/graphics/object.hpp"
  12. #include "game/util/flyweight.hpp"
  13. #include "vector/vector.hpp"
  14. namespace engine {
  15. math::vec2 to_vec2(Json::Value const & json) {
  16. return make_vector(json[0].asFloat(), json[1].asFloat());
  17. }
  18. math::vec2 to_vec2(Json::Value const & json, math::vec2 const & backup) {
  19. return json.isNull() ? backup : to_vec2(json);
  20. }
  21. flyweight<graphics::shader_program> to_program(Json::Value const & json) {
  22. using graphics::shader_program;
  23. if (json.empty()) {
  24. return shader_program::create("data/shaders/BlankShader.fragment.glsl",
  25. "data/shaders/BlankShader.vertex.glsl");
  26. }
  27. return shader_program::create(json["fragmentShader"].asString(),
  28. json["vertexShader"].asString());
  29. }
  30. flyweight<graphics::material> to_material(Json::Value const & json) {
  31. auto & prog = to_program(json["shaderProgram"]).actual();
  32. return graphics::material::create(prog, json["texture"]["file"].asString(),
  33. json["texture"]["uniform"].asString());
  34. }
  35. graphics::object to_object(Json::Value const & json) {
  36. flyweight<graphics::material> mat = to_material(json["material"]);
  37. auto frame_size = to_vec2(json["frameSize"], make_vector(1.f, 1.f));
  38. math::dim2::rectangle pos = {to_vec2(json["position"]),
  39. mat.actual().size() * frame_size};
  40. return {pos, pos, mat, {{{0, 0}}, frame_size}};
  41. }
  42. }