Porytiles
Loading...
Searching...
No Matches
per_anim_overrides.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <format>
4#include <ostream>
5#include <string>
6#include <unordered_map>
7
9
10namespace porytiles {
11
20using PerAnimOverrides = std::unordered_map<std::string, PerAnimOverride>;
21
31[[nodiscard]] inline std::string to_string(const PerAnimOverrides &configs)
32{
33 if (configs.empty()) {
34 return "{}";
35 }
36 std::string result = "{";
37 bool first = true;
38 for (const auto &[key, value] : configs) {
39 if (!first) {
40 result += ", ";
41 }
42 result += key + "={linking=" + (value.linking.has_value() ? to_string(*value.linking) : "none") +
43 ", pal_strategy=" +
44 (value.pal_resolution_strategy.has_value() ? to_string(*value.pal_resolution_strategy) : "none") +
45 ", per_tile_strategies=" + std::to_string(value.per_tile_pal_resolution_strategies.size()) + "}";
46 first = false;
47 }
48 result += "}";
49 return result;
50}
51
59inline std::ostream &operator<<(std::ostream &os, const PerAnimOverrides &configs)
60{
61 return os << to_string(configs);
62}
63
64} // namespace porytiles
65
66template <>
67struct std::formatter<porytiles::PerAnimOverrides> {
68 constexpr auto parse(std::format_parse_context &ctx)
69 {
70 return ctx.begin();
71 }
72
73 auto format(const porytiles::PerAnimOverrides &value, auto &ctx) const
74 {
75 return std::format_to(ctx.out(), "{}", porytiles::to_string(value));
76 }
77};
std::ostream & operator<<(std::ostream &os, const PrimaryPairingMode m)
Stream insertion operator for PrimaryPairingMode.
std::unordered_map< std::string, PerAnimOverride > PerAnimOverrides
Per-animation configuration map.
std::string to_string(const PrimaryPairingMode m)
Converts a PrimaryPairingMode to its canonical string representation.
auto format(const porytiles::PerAnimOverrides &value, auto &ctx) const
constexpr auto parse(std::format_parse_context &ctx)