// // serial.cxx // engine // // Created by Sam Jaffe on 5/20/19. // Copyright © 2019 Sam Jaffe. All rights reserved. // #include "game/engine/serial.hpp" #include #include "game/graphics/material.hpp" #include "game/graphics/object.hpp" #include "game/util/flyweight.hpp" #include "vector/vector.hpp" namespace engine { math::vec2 to_vec2(Json::Value const & json) { return make_vector(json[0].asFloat(), json[1].asFloat()); } math::vec2 to_vec2(Json::Value const & json, math::vec2 const & backup) { return json.isNull() ? backup : to_vec2(json); } flyweight to_program(Json::Value const & json) { using graphics::shader_program; if (json.empty()) { return shader_program::create("data/shaders/BlankShader.fragment.glsl", "data/shaders/BlankShader.vertex.glsl"); } return shader_program::create(json["fragmentShader"].asString(), json["vertexShader"].asString()); } flyweight to_material(Json::Value const & json) { auto & prog = to_program(json["shaderProgram"]).actual(); return graphics::material::create(prog, json["texture"]["file"].asString(), json["texture"]["uniform"].asString()); } graphics::object to_object(Json::Value const & json) { flyweight mat = to_material(json["material"]); auto frame_size = to_vec2(json["frameSize"], make_vector(1.f, 1.f)); math::dim2::rectangle pos = {to_vec2(json["position"]), mat.actual().size() * frame_size}; return {pos, pos, mat, {{{0, 0}}, frame_size}}; } }