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
23 public:
28 explicit PackedPalette(std::size_t hardware_index, std::size_t capacity = palette::max_size - 1);
29
30 [[nodiscard]] bool operator==(const PackedPalette &other) const
31 {
32 return hardware_index_ == other.hardware_index_;
33 }
34
35 [[nodiscard]] std::strong_ordering operator<=>(const PackedPalette &other) const
36 {
37 return hardware_index_ <=> other.hardware_index_;
38 }
39
40 [[nodiscard]] std::size_t hardware_index() const
41 {
42 return hardware_index_;
43 }
44
45 [[nodiscard]] const ColorSet &color_set() const
46 {
47 return color_set_;
48 }
49
50 [[nodiscard]] const std::vector<PackableTile::Id> &assigned_tile_ids() const
51 {
52 return assigned_tile_ids_;
53 }
54
55 [[nodiscard]] std::size_t color_count() const;
56
57 [[nodiscard]] std::size_t color_multiplicity(std::size_t color_idx) const
58 {
59 return cached_per_color_multiplicity_[color_idx];
60 }
61
62 [[nodiscard]] const std::array<std::size_t, num_colors> &color_counts() const
63 {
64 return cached_per_color_multiplicity_;
65 }
66
67 [[nodiscard]] std::size_t remaining_capacity() const;
68
77 [[nodiscard]] bool can_fit(const ColorSet &tile_colors) const;
78
86 [[nodiscard]] std::size_t union_size(const ColorSet &tile_colors) const;
87
95 void add_tile(const PackableTile &tile);
96
104 void remove_tile(const PackableTile &tile);
105
113 void remove_tile(const PackableTile::Id &tile_id);
114
115 private:
116 std::size_t hardware_index_;
117 std::size_t capacity_;
118 ColorSet color_set_;
119 std::vector<PackableTile::Id> assigned_tile_ids_;
120 std::unordered_map<PackableTile::Id, ColorSet> tile_colors_;
121 std::array<std::size_t, num_colors> cached_per_color_multiplicity_;
122};
123
124} // namespace porytiles
A set of colors represented as a bitset.
Definition color_set.hpp:22
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