// resource_pack.hpp - Sistema d'empaquetament de recursos // © 2025 Port a C++20 amb SDL3 // Basat en el sistema de "pollo" amb adaptacions per Orni Attack #pragma once #include #include #include #include namespace Resource { // Capçalera del fitxer de paquet struct PackHeader { char magic[4]; // "ORNI" uint32_t version; // Versió del format (1) }; // Entrada de recurs dins el paquet struct ResourceEntry { std::string filename; // Nom del recurs (amb barres normals) uint64_t offset; // Posició dins el bloc de dades uint64_t size; // Mida en bytes uint32_t checksum; // Checksum CRC32 per verificació }; // Classe principal per gestionar paquets de recursos class Pack { public: Pack() = default; ~Pack() = default; // Afegir fitxers al paquet bool addFile(const std::string& filepath, const std::string& pack_name); bool addDirectory(const std::string& dir_path, const std::string& base_path = ""); // Guardar i carregar paquets bool savePack(const std::string& pack_file); bool loadPack(const std::string& pack_file); // Accés a recursos std::vector getResource(const std::string& filename); bool hasResource(const std::string& filename) const; std::vector getResourceList() const; // Validació bool validatePack() const; private: // Constants static constexpr const char* MAGIC_HEADER = "ORNI"; static constexpr uint32_t VERSION = 1; static constexpr const char* DEFAULT_ENCRYPT_KEY = "ORNI_RESOURCES_2025"; // Dades del paquet std::unordered_map resources_; std::vector data_; // Funcions auxiliars std::vector readFile(const std::string& filepath); uint32_t calculateChecksum(const std::vector& data) const; void encryptData(std::vector& data, const std::string& key); void decryptData(std::vector& data, const std::string& key); }; } // namespace Resource