Porytiles
Loading...
Searching...
No Matches
porymap_tileset_component.cpp
Go to the documentation of this file.
1
#include "
porytiles2/domain/models/porymap_tileset_component.hpp
"
2
3
#include <utility>
4
5
#include "fmt/format.h"
6
7
#include "
porytiles2/domain/models/metatile.hpp
"
8
#include "
porytiles2/domain/models/metatile_attribute.hpp
"
9
#include "
porytiles2/domain/models/palette.hpp
"
10
#include "
porytiles2/domain/models/rgba32.hpp
"
11
#include "
porytiles2/domain/models/tilemap_entry.hpp
"
12
#include "
porytiles2/domain/services/tile_printer.hpp
"
13
#include "
porytiles2/xcut/diagnostics/user_diagnostics.hpp
"
14
#include "
porytiles2/xcut/panic/panic.hpp
"
15
#include "
porytiles2/xcut/result/chainable_result.hpp
"
16
17
namespace
porytiles2
{
18
19
void
PorymapTilesetComponent::push_back_tilemap_entry
(
TilemapEntry
entry)
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
25
void
PorymapTilesetComponent::push_back_attribute
(
MetatileAttribute
attribute)
26
{
27
metatile_attributes_.push_back(std::move(attribute));
28
}
29
30
void
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
38
const
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
46
bool
PorymapTilesetComponent::is_empty
()
const
47
{
48
return
metatiles_bin_.empty();
49
}
50
51
ChainableResult<tileset::LayerMode>
PorymapTilesetComponent::detect_layer_mode
()
const
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) {
59
return
tileset::LayerMode::triple
;
60
}
61
if
(entries.size() %
metatile::entries_per_metatile_dual
== 0 &&
62
entries.size() /
metatile::entries_per_metatile_dual
== metatile_count) {
63
return
tileset::LayerMode::dual
;
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
}},
76
{
FormatParam
{metatile_count *
metatile::entries_per_metatile_dual
,
Style::bold
},
77
metatile::entries_per_metatile_dual
},
78
{
FormatParam
{metatile_count *
metatile::entries_per_metatile_triple
,
Style::bold
},
79
metatile::entries_per_metatile_triple
}}};
80
}
81
82
}
// namespace porytiles2
chainable_result.hpp
porytiles2::ChainableResult
A result type that maintains a chainable sequence of errors for debugging and error reporting.
Definition
chainable_result.hpp:31
porytiles2::FormatParam
A text parameter with associated styling for formatted output.
Definition
text_formatter.hpp:132
porytiles2::FormattableError
General-purpose error implementation with formatted message support.
Definition
error.hpp:117
porytiles2::MetatileAttribute
Definition
metatile_attribute.hpp:27
porytiles2::Palette
A palette container for colors that support transparency checking.
Definition
palette.hpp:34
porytiles2::PorymapTilesetComponent::push_back_tilemap_entry
void push_back_tilemap_entry(TilemapEntry entry)
Add a TilemapEntry to the end of the entry vector.
Definition
porymap_tileset_component.cpp:19
porytiles2::PorymapTilesetComponent::set_pal
void set_pal(Palette< Rgba32 > pal, unsigned int pal_index)
Definition
porymap_tileset_component.cpp:30
porytiles2::PorymapTilesetComponent::metatiles_bin
const std::vector< TilemapEntry > & metatiles_bin() const
Definition
porymap_tileset_component.hpp:64
porytiles2::PorymapTilesetComponent::detect_layer_mode
ChainableResult< tileset::LayerMode > detect_layer_mode() const
Definition
porymap_tileset_component.cpp:51
porytiles2::PorymapTilesetComponent::is_empty
bool is_empty() const
Definition
porymap_tileset_component.cpp:46
porytiles2::PorymapTilesetComponent::push_back_attribute
void push_back_attribute(MetatileAttribute attribute)
Add a MetatileAttribute to the end of the attribute vector.
Definition
porymap_tileset_component.cpp:25
porytiles2::PorymapTilesetComponent::pal_at
const Palette< Rgba32 > & pal_at(unsigned int pal_index) const
Definition
porymap_tileset_component.cpp:38
porytiles2::PorymapTilesetComponent::metatile_attributes_bin
const std::vector< MetatileAttribute > & metatile_attributes_bin() const
Definition
porymap_tileset_component.hpp:69
porytiles2::TilemapEntry
Represents a tilemap entry referencing a tile with palette and flip attributes.
Definition
tilemap_entry.hpp:17
metatile.hpp
metatile_attribute.hpp
porytiles2::metatile::entries_per_metatile_dual
constexpr std::size_t entries_per_metatile_dual
Definition
metatile.hpp:17
porytiles2::metatile::entries_per_metatile_triple
constexpr std::size_t entries_per_metatile_triple
Definition
metatile.hpp:18
porytiles2::pal::num_pals
constexpr std::size_t num_pals
Definition
palette.hpp:16
porytiles2::tileset::LayerMode::dual
@ dual
porytiles2::tileset::LayerMode::triple
@ triple
porytiles2
Definition
app_config.hpp:10
porytiles2::panic
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.
Definition
panic.hpp:53
porytiles2::Style::bold
@ bold
Bold text formatting.
palette.hpp
panic.hpp
porymap_tileset_component.hpp
rgba32.hpp
tile_printer.hpp
tilemap_entry.hpp
user_diagnostics.hpp
Porytiles2
lib
domain
models
porymap_tileset_component.cpp
Generated by
1.9.8