This commit is contained in:
2025-11-03 09:52:54 +01:00
parent 1409ab5bff
commit 3f1c737247
32 changed files with 254 additions and 243 deletions

View File

@@ -21,41 +21,96 @@ void printUsage(const char* program_name) {
std::cout << " --list List contents of a pack file\n";
}
int main(int argc, char* argv[]) {
auto handleDefaultPack() -> int {
std::string input_dir = "data";
std::string output_file = "resources.pack";
std::cout << "Using defaults:\n";
std::cout << " Input: " << input_dir << "/\n";
std::cout << " Output: " << output_file << "\n\n";
Jdd::ResourcePack pack;
if (!pack.addDirectory(input_dir)) {
std::cerr << "Error: Failed to add directory: " << input_dir << '\n';
return 1;
}
// Add config/assets.txt to pack (required for release builds)
std::cout << "\nAdding config files...\n";
if (!pack.addFile("config/assets.txt", "config/assets.txt")) {
std::cerr << "Warning: Failed to add config/assets.txt (optional)\n";
}
if (!pack.savePack(output_file)) {
std::cerr << "Error: Failed to save pack file: " << output_file << '\n';
return 1;
}
std::cout << "\nSuccess! Pack created: " << output_file << '\n';
return 0;
}
auto handleListContents(const std::string& pack_file) -> int {
std::cout << "Loading pack: " << pack_file << "\n\n";
Jdd::ResourcePack pack;
if (!pack.loadPack(pack_file)) {
std::cerr << "Error: Failed to load pack file: " << pack_file << '\n';
return 1;
}
std::cout << "\nPack Contents:\n";
std::cout << "==============\n";
auto resources = pack.getResourceList();
size_t total_size = 0;
for (const auto& resource : resources) {
auto data = pack.getResource(resource);
total_size += data.size();
std::cout << " " << resource << " (" << data.size() << " bytes)\n";
}
std::cout << "\nTotal Resources: " << resources.size() << '\n';
std::cout << "Total Size: " << total_size << " bytes\n";
return 0;
}
auto handlePackDirectory(const std::string& input_dir, const std::string& output_file) -> int {
std::cout << "Input: " << input_dir << "/\n";
std::cout << "Output: " << output_file << "\n\n";
Jdd::ResourcePack pack;
if (!pack.addDirectory(input_dir)) {
std::cerr << "Error: Failed to add directory: " << input_dir << '\n';
return 1;
}
// Add config/assets.txt to pack (required for release builds)
std::cout << "\nAdding config files...\n";
if (!pack.addFile("config/assets.txt", "config/assets.txt")) {
std::cerr << "Warning: Failed to add config/assets.txt (optional)\n";
}
if (!pack.savePack(output_file)) {
std::cerr << "Error: Failed to save pack file: " << output_file << '\n';
return 1;
}
std::cout << "\nSuccess! Pack created: " << output_file << '\n';
return 0;
}
auto main(int argc, char* argv[]) -> int {
std::cout << "JailDoctor's Dilemma - Resource Packer\n";
std::cout << "======================================\n\n";
// Parse command line arguments
// Default behavior: pack data/ into resources.pack
if (argc == 1) {
// Default behavior: pack data/ into resources.pack
std::string input_dir = "data";
std::string output_file = "resources.pack";
std::cout << "Using defaults:\n";
std::cout << " Input: " << input_dir << "/\n";
std::cout << " Output: " << output_file << "\n\n";
jdd::ResourcePack pack;
if (!pack.addDirectory(input_dir)) {
std::cerr << "Error: Failed to add directory: " << input_dir << '\n';
return 1;
}
// Add config/assets.txt to pack (required for release builds)
std::cout << "\nAdding config files...\n";
if (!pack.addFile("config/assets.txt", "config/assets.txt")) {
std::cerr << "Warning: Failed to add config/assets.txt (optional)\n";
}
if (!pack.savePack(output_file)) {
std::cerr << "Error: Failed to save pack file: " << output_file << '\n';
return 1;
}
std::cout << "\nSuccess! Pack created: " << output_file << '\n';
return 0;
return handleDefaultPack();
}
// Help command
if (argc == 2) {
std::string arg = argv[1];
if (arg == "--help" || arg == "-h") {
@@ -64,63 +119,16 @@ int main(int argc, char* argv[]) {
}
}
// List contents or pack directory
if (argc == 3) {
std::string arg1 = argv[1];
std::string arg2 = argv[2];
// List contents
if (arg1 == "--list" || arg1 == "-l") {
std::cout << "Loading pack: " << arg2 << "\n\n";
jdd::ResourcePack pack;
if (!pack.loadPack(arg2)) {
std::cerr << "Error: Failed to load pack file: " << arg2 << '\n';
return 1;
}
std::cout << "\nPack Contents:\n";
std::cout << "==============\n";
auto resources = pack.getResourceList();
size_t total_size = 0;
for (const auto& resource : resources) {
auto data = pack.getResource(resource);
total_size += data.size();
std::cout << " " << resource << " (" << data.size() << " bytes)\n";
}
std::cout << "\nTotal Resources: " << resources.size() << '\n';
std::cout << "Total Size: " << total_size << " bytes\n";
return 0;
return handleListContents(arg2);
}
// Pack directory
std::string input_dir = arg1;
std::string output_file = arg2;
std::cout << "Input: " << input_dir << "/\n";
std::cout << "Output: " << output_file << "\n\n";
jdd::ResourcePack pack;
if (!pack.addDirectory(input_dir)) {
std::cerr << "Error: Failed to add directory: " << input_dir << '\n';
return 1;
}
// Add config/assets.txt to pack (required for release builds)
std::cout << "\nAdding config files...\n";
if (!pack.addFile("config/assets.txt", "config/assets.txt")) {
std::cerr << "Warning: Failed to add config/assets.txt (optional)\n";
}
if (!pack.savePack(output_file)) {
std::cerr << "Error: Failed to save pack file: " << output_file << '\n';
return 1;
}
std::cout << "\nSuccess! Pack created: " << output_file << '\n';
return 0;
return handlePackDirectory(arg1, arg2);
}
// Invalid arguments