diff --git a/source/core/resources/resource_pack.cpp b/source/core/resources/resource_pack.cpp index 5c70feb..013c31f 100644 --- a/source/core/resources/resource_pack.cpp +++ b/source/core/resources/resource_pack.cpp @@ -73,8 +73,6 @@ namespace Resource { data_.insert(data_.end(), file_data.begin(), file_data.end()); resources_[pack_name] = entry; - - std::cout << "Added: " << pack_name << " (" << file_data.size() << " bytes)\n"; return true; } @@ -104,7 +102,6 @@ namespace Resource { // Skip development files if (relative_path.find(".world") != std::string::npos || relative_path.find(".tsx") != std::string::npos) { - std::cout << "Skipping development file: " << relative_path << '\n'; continue; } @@ -153,10 +150,6 @@ namespace Resource { file.write(reinterpret_cast(&data_size), sizeof(data_size)); file.write(reinterpret_cast(encrypted_data.data()), data_size); - std::cout << "\nPack saved successfully: " << pack_file << '\n'; - std::cout << "Resources: " << resource_count << '\n'; - std::cout << "Total size: " << data_size << " bytes\n"; - return true; } diff --git a/tools/pack_resources/pack_resources.cpp b/tools/pack_resources/pack_resources.cpp index 8ad6fd9..406e667 100644 --- a/tools/pack_resources/pack_resources.cpp +++ b/tools/pack_resources/pack_resources.cpp @@ -1,138 +1,103 @@ -// pack_resources.cpp -// Tool to pack game resources into a single encrypted file - +#include #include #include -#include -// Include the ResourcePack class #include "../../source/core/resources/resource_pack.hpp" -void printUsage(const char* program_name) { - std::cout << "Usage:\n"; - std::cout << " " << program_name << " [input_dir] [output_file]\n"; - std::cout << " " << program_name << " --list \n"; - std::cout << "\n"; - std::cout << "Examples:\n"; - std::cout << " " << program_name << " data resources.pack\n"; - std::cout << " " << program_name << " --list resources.pack\n"; - std::cout << "\n"; - std::cout << "Options:\n"; - std::cout << " --list List contents of a pack file\n"; -} +namespace { -auto handleDefaultPack() -> int { - std::string input_dir = "data"; + constexpr const char* APP_NAME = "JailDoctor's Dilemma"; + + void showHelp() { + std::cout << APP_NAME << " - Resource Packer\n"; + std::cout << "======================================\n"; + std::cout << "Usage: pack_resources [options] [input_dir] [output_file]\n\n"; + std::cout << "Options:\n"; + std::cout << " --help Show this help message\n"; + std::cout << " --list List contents of an existing pack file\n\n"; + std::cout << "Arguments:\n"; + std::cout << " input_dir Directory to pack (default: data)\n"; + std::cout << " output_file Pack file name (default: resources.pack)\n"; + } + + void listPackContents(const std::string& pack_file) { + Resource::Pack pack; + if (!pack.loadPack(pack_file)) { + std::cerr << "Error: cannot open pack file: " << pack_file << '\n'; + return; + } + auto resources = pack.getResourceList(); + std::cout << "Pack file: " << pack_file << '\n'; + std::cout << "Resources: " << resources.size() << '\n'; + for (const auto& r : resources) { std::cout << " " << r << '\n'; } + } + +} // namespace + +int main(int argc, char* argv[]) { + std::string data_dir = "data"; std::string output_file = "resources.pack"; + bool list_mode = false; + bool data_dir_set = false; - std::cout << "Using defaults:\n"; - std::cout << " Input: " << input_dir << "/\n"; - std::cout << " Output: " << output_file << "\n\n"; - - Resource::Pack pack; - if (!pack.addDirectory(input_dir)) { - std::cerr << "Error: Failed to add directory: " << input_dir << '\n'; - return 1; - } - - // Add config/assets.yaml to pack (required for release builds) - std::cout << "\nAdding config files...\n"; - if (!pack.addFile("config/assets.yaml", "config/assets.yaml")) { - std::cerr << "Warning: Failed to add config/assets.yaml (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"; - - Resource::Pack 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"; - - Resource::Pack pack; - if (!pack.addDirectory(input_dir)) { - std::cerr << "Error: Failed to add directory: " << input_dir << '\n'; - return 1; - } - - // Add config/assets.yaml to pack (required for release builds) - std::cout << "\nAdding config files...\n"; - if (!pack.addFile("config/assets.yaml", "config/assets.yaml")) { - std::cerr << "Warning: Failed to add config/assets.yaml (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"; - - // Default behavior: pack data/ into resources.pack - if (argc == 1) { - return handleDefaultPack(); - } - - // Help command - if (argc == 2) { - std::string arg = argv[1]; + for (int i = 1; i < argc; ++i) { + std::string arg = argv[i]; if (arg == "--help" || arg == "-h") { - printUsage(argv[0]); + showHelp(); return 0; } - } - - // List contents or pack directory - if (argc == 3) { - std::string arg1 = argv[1]; - std::string arg2 = argv[2]; - - if (arg1 == "--list" || arg1 == "-l") { - return handleListContents(arg2); + if (arg == "--list") { + list_mode = true; + if (i + 1 < argc) { output_file = argv[++i]; } + continue; + } + if (!arg.empty() && arg[0] != '-') { + if (!data_dir_set) { + data_dir = arg; + data_dir_set = true; + } else { + output_file = arg; + } } - - return handlePackDirectory(arg1, arg2); } - // Invalid arguments - std::cerr << "Error: Invalid arguments\n\n"; - printUsage(argv[0]); - return 1; + if (list_mode) { + listPackContents(output_file); + return 0; + } + + std::cout << APP_NAME << " - Resource Packer\n"; + std::cout << "======================================\n"; + std::cout << "Input directory: " << data_dir << '\n'; + std::cout << "Output file: " << output_file << '\n'; + + if (!std::filesystem::exists(data_dir)) { + std::cerr << "Error: input directory does not exist: " << data_dir << '\n'; + return 1; + } + + Resource::Pack pack; + std::cout << "Scanning and packing resources...\n"; + if (!pack.addDirectory(data_dir)) { + std::cerr << "Error: failed to add directory to pack\n"; + return 1; + } + + // config/assets.yaml is required for release builds; tolerate absence. + if (!pack.addFile("config/assets.yaml", "config/assets.yaml")) { + std::cerr << "Warning: failed to add config/assets.yaml (optional)\n"; + } + + std::cout << "Found " << pack.getResourceCount() << " resources\n"; + + std::cout << "Saving pack file...\n"; + if (!pack.savePack(output_file)) { + std::cerr << "Error: failed to save pack file\n"; + return 1; + } + + auto file_size = std::filesystem::file_size(std::filesystem::path(output_file)); + std::cout << "Pack file created: " << output_file << " (" + << (static_cast(file_size) / 1024.0 / 1024.0) << " MB)\n"; + return 0; }