From 7c1386b62b5ca7c1aad362b98f8ff865f11007db Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 18 Mar 2015 20:12:44 +0100 Subject: [PATCH] Read BSA and data dirs from openmw.cfg --- apps/nifosgtest/test.cpp | 44 +++++++++++++++++++++++++++++++++++----- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/apps/nifosgtest/test.cpp b/apps/nifosgtest/test.cpp index 05ed2408e..7f9649e2e 100644 --- a/apps/nifosgtest/test.cpp +++ b/apps/nifosgtest/test.cpp @@ -8,6 +8,9 @@ #include #include +#include + +#include #include @@ -53,17 +56,48 @@ private: int main(int argc, char** argv) { - if (argc < 3) + if (argc < 2) { - std::cout << "Usage: " << argv[0] << " " << std::endl; + std::cout << "Usage: " << argv[0] << " " << std::endl; return 1; } - VFS::Manager resourceMgr (false); - resourceMgr.addArchive(new VFS::BsaArchive(argv[1])); + Files::ConfigurationManager cfgMgr; + boost::program_options::options_description desc(""); + desc.add_options() + ("data", boost::program_options::value()->default_value(Files::PathContainer(), "data")->multitoken()->composing()) + ("fs-strict", boost::program_options::value()->implicit_value(true)->default_value(false)) + ("fallback-archive", boost::program_options::value >()-> + default_value(std::vector(), "fallback-archive")->multitoken()); + + boost::program_options::variables_map variables; + cfgMgr.readConfiguration(variables, desc); + + std::vector archives = variables["fallback-archive"].as >(); + bool fsStrict = variables["fs-strict"].as(); + Files::PathContainer dataDirs; + if (!variables["data"].empty()) { + dataDirs = Files::PathContainer(variables["data"].as()); + } + + cfgMgr.processPaths(dataDirs); + + VFS::Manager resourceMgr (fsStrict); + Files::Collections collections (dataDirs, !fsStrict); + + for (std::vector::const_iterator it = archives.begin(); it != archives.end(); ++it) + { + std::string filepath = collections.getPath(*it).string(); + resourceMgr.addArchive(new VFS::BsaArchive(filepath)); + } + for (Files::PathContainer::const_iterator it = dataDirs.begin(); it != dataDirs.end(); ++it) + { + resourceMgr.addArchive(new VFS::FileSystemArchive(it->string())); + } + resourceMgr.buildIndex(); - Nif::NIFFilePtr nif(new Nif::NIFFile(resourceMgr.get(argv[2]), std::string(argv[2]))); + Nif::NIFFilePtr nif(new Nif::NIFFile(resourceMgr.get(argv[1]), std::string(argv[1]))); osgViewer::Viewer viewer;