Porytiles
Loading...
Searching...
No Matches
packed_palette.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <array>
4#include <cstddef>
5#include <unordered_map>
6#include <vector>
7
11
12namespace porytiles {
13
25 public:
32 explicit PackedPalette(std::size_t hardware_index, std::size_t capacity = pal::max_size - 1);
33
34 [[nodiscard]] bool operator==(const PackedPalette &other) const
35 {
36 return hardware_index_ == other.hardware_index_;
37 }
38
39 [[nodiscard]] std::strong_ordering operator<=>(const PackedPalette &other) const
40 {
41 return hardware_index_ <=> other.hardware_index_;
42 }
43
44 [[nodiscard]] std::size_t hardware_index() const
45 {
46 return hardware_index_;
47 }
48
49 [[nodiscard]] const ColorSet &color_set() const
50 {
51 return color_set_;
52 }
53
54 [[nodiscard]] const std::vector<PackableTile::Id> &assigned_tile_ids() const
55 {
56 return assigned_tile_ids_;
57 }
58
59 [[nodiscard]] std::size_t color_count() const;
60
61 [[nodiscard]] std::size_t color_multiplicity(std::size_t color_idx) const
62 {
63 return cached_per_color_multiplicity_[color_idx];
64 }
65
66 [[nodiscard]] const std::array<std::size_t, num_colors> &color_counts() const
67 {
68 return cached_per_color_multiplicity_;
69 }
70
71 [[nodiscard]] std::size_t remaining_capacity() const;
72
83 [[nodiscard]] bool can_fit(const ColorSet &tile_colors) const;
84
94 [[nodiscard]] std::size_t union_size(const ColorSet &tile_colors) const;
95
105 void add_tile(const PackableTile &tile);
106
116 void remove_tile(const PackableTile &tile);
117
127 void remove_tile(const PackableTile::Id &tile_id);
128
129 private:
130 std::size_t hardware_index_;
131 std::size_t capacity_;
132 ColorSet color_set_;
133 std::vector<PackableTile::Id> assigned_tile_ids_;
134 std::unordered_map<PackableTile::Id, ColorSet> tile_colors_;
135 std::array<std::size_t, num_colors> cached_per_color_multiplicity_;
136};
137
138} // namespace porytiles
A set of colors represented as a bitset.
Definition color_set.hpp:26
Wraps a ColorSet with a tile ID for tracking during palette packing.
std::variant< HintId, PrefilledPaletteId, RegularId, AnimId, PrimaryTileId > Id
Variant type for tile identification.
Represents a hardware palette after packing with accumulated colors and assigned tiles.
const std::vector< PackableTile::Id > & assigned_tile_ids() const
std::size_t color_multiplicity(std::size_t color_idx) const
void remove_tile(const PackableTile &tile)
Removes a tile from this palette and recalculates the color set.
std::size_t union_size(const ColorSet &tile_colors) const
Computes the size of the union of this palette's colors with the given colors.
const std::array< std::size_t, num_colors > & color_counts() const
std::strong_ordering operator<=>(const PackedPalette &other) const
std::size_t hardware_index() const
bool operator==(const PackedPalette &other) const
bool can_fit(const ColorSet &tile_colors) const
Checks if a tile's colors can fit in this palette.
void add_tile(const PackableTile &tile)
Adds a tile to this palette.
std::size_t remaining_capacity() const
std::size_t color_count() const
const ColorSet & color_set() const
constexpr std::size_t max_size
Definition palette.hpp:19