// // 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/manager.hpp" #include "game/graphics/material.hpp" #include "game/graphics/object.hpp" #include "game/util/identity.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::vec2i to_vec2i(Json::Value const & json) { return make_vector(json[0].asInt(), json[1].asInt()); } math::vec2 to_vec2(Json::Value const & json, math::vec2 const & backup) { return json.isNull() ? backup : to_vec2(json); } identity to_program(Json::Value const & json, graphics::manager const & mgr) { if (json.empty()) { return mgr.get("data/shaders/BlankShader.fragment.glsl", "data/shaders/BlankShader.vertex.glsl"); } return mgr.get(json["fragmentShader"].asString(), json["vertexShader"].asString()); } identity to_material(Json::Value const & json, graphics::manager const & mgr) { return mgr.get(to_program(json["shaderProgram"], mgr), json["texture"]["file"].asString(), json["texture"]["uniform"].asString()); } graphics::object to_object(Json::Value const & json, graphics::manager const & mgr) { identity mat = to_material(json["material"], mgr); auto frame_size = to_vec2(json["frameSize"], make_vector(1.f, 1.f)); auto origin = to_vec2(json["position"]); return mgr.create_object(mat, origin, frame_size); // math::dim2::rectangle pos = {to_vec2(json["position"]), // mat.actual().size() * frame_size}; // return {pos, pos, mat, {{{0, 0}}, frame_size}}; } }