Files
vibe3_physics/source/resource_pack.hpp
Sergio 7af77fb3dd refactor: eliminar código muerto (constantes legacy y métodos sin usar)
- defines.hpp: eliminar WINDOW_ZOOM_MIN, WINDOW_ZOOM_MAX (legacy),
  ROTOBALL_TRANSITION_TIME y LOGO_MODE_MIN_BALLS (reemplazada por
  LOGO_MIN_SCENARIO_IDX)
- resource_pack: eliminar encryptData/decryptData (XOR preparado pero
  nunca integrado en el pipeline de carga/guardado)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-21 09:26:17 +01:00

64 lines
1.8 KiB
C++

#pragma once
#include <cstdint>
#include <fstream>
#include <map>
#include <string>
#include <vector>
/**
* ResourcePack - Sistema de empaquetado de recursos para ViBe3 Physics
*
* Permite empaquetar todos los recursos (imágenes, etc.) en un archivo binario
* único y ofuscado. Proporciona fallback automático a carpeta data/ si no existe pack.
*/
class ResourcePack {
public:
ResourcePack();
~ResourcePack();
// Empaquetado (usado por herramienta pack_resources)
bool addDirectory(const std::string& dirPath, const std::string& prefix = "");
bool savePack(const std::string& packFilePath);
// Desempaquetado (usado por el juego)
bool loadPack(const std::string& packFilePath);
// Carga de recursos individuales
struct ResourceData {
unsigned char* data;
size_t size;
};
ResourceData loadResource(const std::string& resourcePath);
// Utilidades
std::vector<std::string> getResourceList() const;
size_t getResourceCount() const;
void clear();
private:
// Header del pack (12 bytes)
struct PackHeader {
char magic[4]; // "VBE3"
uint32_t version; // Versión del formato (1)
uint32_t fileCount; // Número de archivos empaquetados
};
// Índice de un recurso (variable length)
struct ResourceEntry {
std::string path; // Ruta relativa del recurso
uint32_t offset; // Offset en el archivo pack
uint32_t size; // Tamaño en bytes
uint32_t checksum; // Checksum simple (XOR de bytes)
};
// Datos internos
std::map<std::string, ResourceEntry> resources_;
std::ifstream packFile_;
bool isLoaded_;
// Funciones auxiliares
uint32_t calculateChecksum(const unsigned char* data, size_t size);
std::string normalizePath(const std::string& path);
};