59 "PrefilledPaletteId index out of range: " + std::to_string(
index) +
" > " +
64 [[nodiscard]] std::size_t
index()
const
115 using Id = std::variant<HintId, PrefilledPaletteId, RegularId, AnimId, PrimaryTileId>;
169 [[nodiscard]]
const Id &
id()
const
175 [[nodiscard]]
const std::string &
hint_name()
const;
185 return std::holds_alternative<HintId>(id_);
190 return std::holds_alternative<PrefilledPaletteId>(id_);
195 return std::holds_alternative<RegularId>(id_);
217 return id_ <=> other.id_;
228 return id_ == other.id_;
239 []<
typename IdVariant>(
const IdVariant &value) -> std::string {
240 using T = std::decay_t<IdVariant>;
241 if constexpr (std::is_same_v<T, PackableTile::HintId>) {
242 return "Hint(" + value.name +
")";
244 else if constexpr (std::is_same_v<T, PackableTile::PrefilledPaletteId>) {
245 return "Prefilled(" + std::to_string(value.index()) +
")";
247 else if constexpr (std::is_same_v<T, PackableTile::RegularId>) {
248 return "Regular(" + std::to_string(value.index) +
")";
250 else if constexpr (std::is_same_v<T, PackableTile::AnimId>) {
251 return "Anim(" + value.name +
", " + std::to_string(value.subtile_index) +
")";
253 else if constexpr (std::is_same_v<T, PackableTile::PrimaryTileId>) {
254 return "Primary(tile=" + std::to_string(value.tile_index) +
", pal=" + std::to_string(value.pal_index) +
258 static_assert(
sizeof(T) == 0,
"Unhandled PackableTile::Id variant alternative");
259 panic(
"Unhandled PackableTile::Id variant alternative");
272 return std::hash<std::string>{}(
id.name);
277struct std::hash<
porytiles::PackableTile::PrefilledPaletteId> {
280 return std::hash<std::size_t>{}(
id.index());
288 return std::hash<std::size_t>{}(
id.index);
298 std::size_t seed = std::hash<std::string>{}(
id.name);
299 seed ^= std::hash<std::size_t>{}(
id.subtile_index) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
305struct std::hash<
porytiles::PackableTile::PrimaryTileId> {
308 std::size_t seed = std::hash<std::size_t>{}(
id.tile_index);
309 seed ^= std::hash<std::size_t>{}(
id.pal_index) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
A set of colors represented as a bitset.
Identifies a tile created from a prefilled palette.
bool operator==(const PrefilledPaletteId &) const =default
std::size_t index() const
auto operator<=>(const PrefilledPaletteId &) const =default
static constexpr std::size_t max_index
PrefilledPaletteId(std::size_t index)
Wraps a ColorSet with a tile ID for tracking during palette packing.
auto operator<=>(const PackableTile &other) const
Three-way comparison operator.
std::size_t color_count() const
bool operator==(const PackableTile &other) const
Equality comparison operator.
bool is_prefilled_palette() const
std::size_t prefilled_index() const
std::size_t regular_index() const
const ColorSet & color_set() const
std::variant< HintId, PrefilledPaletteId, RegularId, AnimId, PrimaryTileId > Id
Variant type for tile identification.
const std::string & hint_name() const
void panic(const StringViewSourceLoc &s)
Unconditionally terminates the program with a panic message.
std::string to_string(const PrimaryPairingMode m)
Converts a PrimaryPairingMode to its canonical string representation.
Identifies a tile created from an animation.
auto operator<=>(const AnimId &) const =default
std::size_t subtile_index
bool operator==(const AnimId &) const =default
Identifies a tile created from a palette hint.
bool operator==(const HintId &) const =default
auto operator<=>(const HintId &) const =default
Identifies a tile reconstructed from a compiled primary tileset.
auto operator<=>(const PrimaryTileId &) const =default
bool operator==(const PrimaryTileId &) const =default
Identifies a regular input tile.
bool operator==(const RegularId &) const =default
auto operator<=>(const RegularId &) const =default
std::size_t operator()(const porytiles::PackableTile::AnimId &id) const noexcept
std::size_t operator()(const porytiles::PackableTile::HintId &id) const noexcept
std::size_t operator()(const porytiles::PackableTile::PrefilledPaletteId &id) const noexcept
std::size_t operator()(const porytiles::PackableTile::PrimaryTileId &id) const noexcept
std::size_t operator()(const porytiles::PackableTile::RegularId &id) const noexcept