|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "components.hpp"
|
|
|
|
#include "dinkyecs.hpp"
|
|
|
|
#include "tser.hpp"
|
|
|
|
#include <filesystem>
|
|
|
|
#include <string>
|
|
|
|
#include <map>
|
|
|
|
|
|
|
|
namespace save {
|
|
|
|
namespace fs = std::filesystem;
|
|
|
|
|
|
|
|
struct MapData {
|
|
|
|
size_t width;
|
|
|
|
size_t height;
|
|
|
|
std::vector<Room> rooms;
|
|
|
|
Matrix walls;
|
|
|
|
|
|
|
|
DEFINE_SERIALIZABLE(MapData, width, height, rooms, walls);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Facts {
|
|
|
|
components::Player player;
|
|
|
|
|
|
|
|
DEFINE_SERIALIZABLE(Facts, player);
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SaveData {
|
|
|
|
Facts facts;
|
|
|
|
MapData map;
|
|
|
|
|
|
|
|
std::map<DinkyECS::Entity, components::Position> position;
|
|
|
|
std::map<DinkyECS::Entity, components::Motion> motion;
|
|
|
|
std::map<DinkyECS::Entity, components::Combat> combat;
|
|
|
|
std::map<DinkyECS::Entity, components::Tile> tile;
|
|
|
|
std::map<DinkyECS::Entity, components::Inventory> inventory;
|
|
|
|
|
|
|
|
DEFINE_SERIALIZABLE(SaveData, facts, map, position, motion, combat, tile, inventory);
|
|
|
|
};
|
|
|
|
|
|
|
|
void to_file(fs::path path, DinkyECS::World &world, Map &map);
|
|
|
|
void from_file(fs::path path, DinkyECS::World &world_out, Map &map);
|
|
|
|
void load_configs(DinkyECS::World &world);
|
|
|
|
}
|