#pragma once #include #include #include #include class Surface; class PaletteManager { public: using OnChangeCallback = std::function; PaletteManager( std::vector raw_paths, const std::string& initial_name, std::shared_ptr game_surface, std::shared_ptr border_surface, OnChangeCallback on_change = nullptr); void next(); // Avanza a la siguiente paleta void previous(); // Retrocede a la paleta anterior auto setByName(const std::string& name) -> bool; // Cambia a paleta por nombre; false si no existe [[nodiscard]] auto getNames() const -> std::vector; // Nombres disponibles (minĂºsculas, sin .pal) [[nodiscard]] auto getCurrentName() const -> std::string; // Nombre de la paleta actual (minĂºsculas, sin .pal) [[nodiscard]] auto getPrettyName() const -> std::string; // Nombre actual con guiones sustituidos por espacios private: void apply(); // Aplica la paleta actual a ambas surfaces [[nodiscard]] auto findIndex(const std::string& name) const -> size_t; // Localiza paleta por nombre en el vector void processPathList(); // Extrae nombres de archivo de las rutas completas std::vector palettes_; size_t current_{0}; std::shared_ptr game_surface_; std::shared_ptr border_surface_; OnChangeCallback on_change_; };