| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- //
- // serial.cxx
- // engine
- //
- // Created by Sam Jaffe on 5/20/19.
- // Copyright © 2019 Sam Jaffe. All rights reserved.
- //
- #include "game/engine/serial.hpp"
- #include <json/json.h>
- #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<graphics::shader_program> 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<graphics::material> 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<graphics::material> 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}};
- }
- }
|