#pragma once #include #include #include #include "ContentPack.hpp" namespace fs = std::filesystem; class PacksManager { std::unordered_map packs; std::vector sources; public: PacksManager(); /// @brief Set content packs sources (search folders) void setSources(std::vector sources); /// @brief Scan sources and collect all found packs excluding duplication. /// Scanning order depends on sources order void scan(); /// @brief Remove pack from manager to make it invisible for assembly(...) void exclude(const std::string& id); /// @brief Get all found packs std::vector getAllNames() const; /// @brief Get packs by names (id) /// @param names pack names /// @throws contentpack_error if pack not found std::vector getAll(const std::vector& names ) const; /// @brief Resolve all dependencies and fix packs order /// @param names required packs (method can add extra packs) /// @return resulting ordered vector of pack names /// @throws contentpack_error if required dependency not found or /// circular dependency detected std::vector assembly(const std::vector& names ) const; /// @brief Collect all pack names (identifiers) into a new vector static std::vector getNames( const std::vector& packs ); };