Porytiles
Loading...
Searching...
No Matches
porytiles_tileset_component.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <map>
5#include <string>
6#include <vector>
7
18
19namespace porytiles {
20
31
33[[nodiscard]] inline std::string to_string(PriorPinColumnState state)
34{
35 switch (state) {
37 return "no_csv";
39 return "column_absent";
41 return "column_present";
42 }
43 panic("unhandled PriorPinColumnState value");
44}
45
47 public:
49
58 void insert_attribute(std::size_t metatile_id, MetatileAttribute attribute);
59
60 [[nodiscard]] std::optional<MetatileAttribute> get_attribute(std::size_t metatile_id) const;
61
67
73
74 void set_palette(std::size_t palette_index, Palette<Rgba32, palette::max_size> palette);
75
76 [[nodiscard]] const std::optional<Palette<Rgba32, palette::max_size>> &palette_at(std::size_t palette_index) const;
77
78 [[nodiscard]] bool is_empty() const;
79
80 [[nodiscard]] ChainableResult<LayerMode> detect_layer_mode(const Rgba32 &extrinsic) const;
81
82 void add_anim(Animation<Rgba32> anim);
83
84 [[nodiscard]] bool has_anim(const std::string &name) const
85 {
86 return anims_.contains(name);
87 }
88
89 [[nodiscard]] const Animation<Rgba32> &anim_for_name(const std::string &name) const
90 {
91 return anims_.at(name);
92 }
93
94 [[nodiscard]] const Image<Rgba32> &bottom() const
95 {
96 return bottom_;
97 }
98
100 {
101 bottom_ = bottom;
102 }
103
104 [[nodiscard]] const Image<Rgba32> &middle() const
105 {
106 return middle_;
107 }
108
110 {
111 middle_ = middle;
112 }
113
114 [[nodiscard]] const Image<Rgba32> &top() const
115 {
116 return top_;
117 }
118
119 void top(const Image<Rgba32> &top)
120 {
121 top_ = top;
122 }
123
124 [[nodiscard]] const std::map<std::size_t, MetatileAttribute> &metatile_attributes() const
125 {
126 return metatile_attributes_;
127 }
128
129 [[nodiscard]] const std::array<std::optional<Palette<Rgba32, palette::max_size>>, palette::num_palettes> &
130 palettes() const
131 {
132 return palettes_;
133 }
134
135 [[nodiscard]] const std::map<std::string, Animation<Rgba32>> &anims() const
136 {
137 return anims_;
138 }
139
140 [[nodiscard]] std::map<std::string, Animation<Rgba32>> &anims()
141 {
142 return anims_;
143 }
144
145 [[nodiscard]] const std::map<std::string, std::vector<AnimOverrideEntry>> &primary_anim_overrides() const
146 {
147 return primary_anim_overrides_;
148 }
149
150 void primary_anim_overrides(std::map<std::string, std::vector<AnimOverrideEntry>> overrides)
151 {
152 primary_anim_overrides_ = std::move(overrides);
153 }
154
155 private:
156 Image<Rgba32> bottom_;
157 Image<Rgba32> middle_;
158 Image<Rgba32> top_;
159 std::map<std::size_t, MetatileAttribute> metatile_attributes_;
160 std::map<FieldRole, PriorPinColumnState> prior_pin_column_states_;
161 std::array<std::optional<Palette<Rgba32, palette::max_size>>, palette::num_palettes> palettes_;
162 std::map<std::string, Animation<Rgba32>> anims_;
163 std::map<std::string, std::vector<AnimOverrideEntry>> primary_anim_overrides_;
164};
165
166} // namespace porytiles
A complete tileset animation with name, configuration, and frame data.
Definition animation.hpp:89
A result type that maintains a chainable sequence of errors for debugging and error reporting.
A template for two-dimensional images with arbitrarily typed pixel values.
Definition image.hpp:21
The attributes of a single metatile, modeled as a map of named field values.
A generic palette container for colors that support transparency checking.
Definition palette.hpp:45
std::map< std::string, Animation< Rgba32 > > & anims()
const std::optional< Palette< Rgba32, palette::max_size > > & palette_at(std::size_t palette_index) const
const Animation< Rgba32 > & anim_for_name(const std::string &name) const
void bottom(const Image< Rgba32 > &bottom)
void set_palette(std::size_t palette_index, Palette< Rgba32, palette::max_size > palette)
std::optional< MetatileAttribute > get_attribute(std::size_t metatile_id) const
PriorPinColumnState prior_pin_column_state(FieldRole role) const
Returns the recorded prior pin-column state for a role, or no_csv when none was recorded.
const std::map< std::string, Animation< Rgba32 > > & anims() const
const std::map< std::size_t, MetatileAttribute > & metatile_attributes() const
ChainableResult< LayerMode > detect_layer_mode(const Rgba32 &extrinsic) const
void middle(const Image< Rgba32 > &middle)
void primary_anim_overrides(std::map< std::string, std::vector< AnimOverrideEntry > > overrides)
void insert_attribute(std::size_t metatile_id, MetatileAttribute attribute)
Insert a MetatileAttribute to the end of the attribute vector.
bool has_anim(const std::string &name) const
const std::array< std::optional< Palette< Rgba32, palette::max_size > >, palette::num_palettes > & palettes() const
const std::map< std::string, std::vector< AnimOverrideEntry > > & primary_anim_overrides() const
Represents a 32-bit RGBA color.
Definition rgba32.hpp:21
std::string name
constexpr std::size_t num_palettes
Definition palette.hpp:21
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.
Definition panic.cpp:43
PriorPinColumnState
What an attributes.csv (if any) said about a role's pin column when this component was loaded.
FieldRole
Semantic roles a schema field can carry beyond holding a plain per-metatile value.
std::string to_string(const PrimaryPairingMode m)
Converts a PrimaryPairingMode to its canonical string representation.