Porytiles
Loading...
Searching...
No Matches
porymap_tileset_component.cpp
Go to the documentation of this file.
2
3#include <utility>
4
5#include "fmt/format.h"
6
16
17namespace porytiles2 {
18
20{
21 // std::move here even though TilemapEntry is trivially-copyable, in case it changes later
22 metatiles_bin_.push_back(std::move(entry));
23}
24
26{
27 metatile_attributes_.push_back(std::move(attribute));
28}
29
30void PorymapTilesetComponent::set_pal(Palette<Rgba32> pal, unsigned int pal_index)
31{
32 if (pal_index >= pal::num_pals) {
33 panic(fmt::format("invalid pal index {}: out of range", pal_index));
34 }
35 pals_[pal_index] = std::move(pal);
36}
37
38const Palette<Rgba32> &PorymapTilesetComponent::pal_at(unsigned int pal_index) const
39{
40 if (pal_index >= pal::num_pals) {
41 panic(fmt::format("invalid pal index {}: out of range", pal_index));
42 }
43 return pals_[pal_index];
44}
45
47{
48 return metatiles_bin_.empty();
49}
50
52{
53 const auto &entries = metatiles_bin();
54 const auto &attributes = metatile_attributes_bin();
55 const std::size_t metatile_count = attributes.size();
56
57 if (entries.size() % metatile::entries_per_metatile_triple == 0 &&
58 entries.size() / metatile::entries_per_metatile_triple == metatile_count) {
60 }
61 if (entries.size() % metatile::entries_per_metatile_dual == 0 &&
62 entries.size() / metatile::entries_per_metatile_dual == metatile_count) {
64 }
65
66 // TODO: only expectation message associated with configured layer type?
67 return FormattableError{
68 std::vector<std::string>{
69 "unexpected tilemap entry count in metatiles.bin",
70 "found {} tilemap entries for {} metatile attributes",
71 "for dual layer metatiles, expected {} entries ({} per metatile)",
72 "for triple layer metatiles, expected {} entries ({} per metatile)"},
73 std::vector<std::vector<FormatParam>>{
74 {},
75 {FormatParam{entries.size(), Style::bold}, FormatParam{metatile_count, Style::bold}},
80}
81
82} // namespace porytiles2
A result type that maintains a chainable sequence of errors for debugging and error reporting.
A text parameter with associated styling for formatted output.
General-purpose error implementation with formatted message support.
Definition error.hpp:117
A palette container for colors that support transparency checking.
Definition palette.hpp:34
void push_back_tilemap_entry(TilemapEntry entry)
Add a TilemapEntry to the end of the entry vector.
void set_pal(Palette< Rgba32 > pal, unsigned int pal_index)
const std::vector< TilemapEntry > & metatiles_bin() const
ChainableResult< tileset::LayerMode > detect_layer_mode() const
void push_back_attribute(MetatileAttribute attribute)
Add a MetatileAttribute to the end of the attribute vector.
const Palette< Rgba32 > & pal_at(unsigned int pal_index) const
const std::vector< MetatileAttribute > & metatile_attributes_bin() const
Represents a tilemap entry referencing a tile with palette and flip attributes.
constexpr std::size_t entries_per_metatile_dual
Definition metatile.hpp:17
constexpr std::size_t entries_per_metatile_triple
Definition metatile.hpp:18
constexpr std::size_t num_pals
Definition palette.hpp:16
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.
Definition panic.hpp:53
@ bold
Bold text formatting.