Porytiles
Loading...
Searching...
No Matches
yaml_file_provider.cpp
Go to the documentation of this file.
2
3#include <cstdint>
4#include <filesystem>
5#include <fstream>
6#include <map>
7#include <sstream>
8
9#include "yaml-cpp/yaml.h"
10
14
15#define YAML_FILE_PROVIDER_CPP_COMPILING
17#undef YAML_FILE_PROVIDER_CPP_COMPILING
18
19namespace porytiles2 {
20
21/*
22 * NOTE: DO NOT EDIT THIS FILE DIRECTLY. It is AUTO-GENERATED from config_schema.yaml.
23 * To add new config values or make other changes, edit config_schema.yaml and regenerate using
24 * Scripts/generate_config.py.
25 */
26
28 gsl::not_null<TextFormatter *> format,
29 const std::filesystem::path &project_root,
30 const TilesetArtifactKeyProvider &tileset_key_provider)
31 : format_{format}, project_root_{project_root}, tileset_key_provider_{&tileset_key_provider}
32{
33 // Config files are loaded lazily when first accessed via the anonymous namespace functions
34}
35
37 const std::filesystem::path &project_root, const TilesetArtifactKeyProvider &tileset_key_provider)
38 : owned_format_{std::make_unique<PlainTextFormatter>()}, format_{owned_format_.get()}, project_root_{project_root},
39 tileset_key_provider_{&tileset_key_provider}
40{
41 // Config files are loaded lazily when first accessed via the anonymous namespace functions
42}
43
44std::string YamlFileProvider::name() const
45{
46 return "YamlFileProvider";
47}
48
50{
51 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
52 return search_config_files<std::size_t>(
53 format_,
54 paths,
55 load_yaml_file,
56 [](const YAML::Node &doc) { return doc["fieldmap"]["num_tiles_primary"]; },
57 parse_size_t,
58 "num_tiles_primary");
59}
60
62{
63 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
64 return search_config_files<std::size_t>(
65 format_,
66 paths,
67 load_yaml_file,
68 [](const YAML::Node &doc) { return doc["fieldmap"]["num_tiles_total"]; },
69 parse_size_t,
70 "num_tiles_total");
71}
72
74{
75 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
76 return search_config_files<std::size_t>(
77 format_,
78 paths,
79 load_yaml_file,
80 [](const YAML::Node &doc) { return doc["fieldmap"]["num_metatiles_primary"]; },
81 parse_size_t,
82 "num_metatiles_primary");
83}
84
86{
87 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
88 return search_config_files<std::size_t>(
89 format_,
90 paths,
91 load_yaml_file,
92 [](const YAML::Node &doc) { return doc["fieldmap"]["num_metatiles_total"]; },
93 parse_size_t,
94 "num_metatiles_total");
95}
96
98{
99 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
100 return search_config_files<std::size_t>(
101 format_,
102 paths,
103 load_yaml_file,
104 [](const YAML::Node &doc) { return doc["fieldmap"]["num_pals_primary"]; },
105 parse_size_t,
106 "num_pals_primary");
107}
108
110{
111 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
112 return search_config_files<std::size_t>(
113 format_,
114 paths,
115 load_yaml_file,
116 [](const YAML::Node &doc) { return doc["fieldmap"]["num_pals_total"]; },
117 parse_size_t,
118 "num_pals_total");
119}
120
122{
123 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
124 return search_config_files<std::size_t>(
125 format_,
126 paths,
127 load_yaml_file,
128 [](const YAML::Node &doc) { return doc["fieldmap"]["max_map_data_size"]; },
129 parse_size_t,
130 "max_map_data_size");
131}
132
134{
135 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
136 return search_config_files<std::size_t>(
137 format_,
138 paths,
139 load_yaml_file,
140 [](const YAML::Node &doc) { return doc["fieldmap"]["num_tiles_per_metatile"]; },
141 parse_size_t,
142 "num_tiles_per_metatile");
143}
144
146{
147 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
148 return search_config_files<Rgba32>(
149 format_,
150 paths,
151 load_yaml_file,
152 [](const YAML::Node &doc) { return doc["extrinsic_transparency"]; },
153 parse_rgba32,
154 "extrinsic_transparency");
155}
156
158{
159 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
160 return search_config_files<bool>(
161 format_,
162 paths,
163 load_yaml_file,
164 [](const YAML::Node &doc) { return doc["patch"]["enabled"]; },
165 parse_bool,
166 "patch_build_enabled");
167}
168
170{
171 const auto paths = get_tileset_config_path_chain(project_root_, tileset_key_provider_, tileset);
172 return search_config_files<TilesPalMode>(
173 format_,
174 paths,
175 load_yaml_file,
176 [](const YAML::Node &doc) { return doc["tiles_pal_mode"]; },
177 parse_tiles_pal_mode,
178 "tiles_pal_mode");
179}
180
181} // namespace porytiles2
TextFormatter implementation that strips all styling from text.
Abstract interface for generating keys and discovering tileset artifacts in a backing store.
LayerValue< std::size_t > num_metatiles_primary(const std::string &tileset) const override
LayerValue< std::size_t > num_metatiles_total(const std::string &tileset) const override
LayerValue< std::size_t > max_map_data_size(const std::string &tileset) const override
LayerValue< std::size_t > num_tiles_total(const std::string &tileset) const override
YamlFileProvider(gsl::not_null< TextFormatter * > format, const std::filesystem::path &project_root, const TilesetArtifactKeyProvider &tileset_key_provider)
Constructs a YamlFileProvider that searches for configuration across multiple YAML files.
LayerValue< TilesPalMode > tiles_pal_mode(const std::string &tileset) const override
LayerValue< bool > patch_build_enabled(const std::string &tileset) const override
LayerValue< std::size_t > num_tiles_primary(const std::string &tileset) const override
LayerValue< std::size_t > num_pals_total(const std::string &tileset) const override
std::string name() const override
Gets the name of this config layer.
LayerValue< std::size_t > num_pals_primary(const std::string &tileset) const override
LayerValue< std::size_t > num_tiles_per_metatile(const std::string &tileset) const override
LayerValue< Rgba32 > extrinsic_transparency(const std::string &tileset) const override
A small container that holds an optional-wrapped value, validation state, and metadata about the valu...