CCampaignHandler.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #define VCMI_DLL
  2. #include "CCampaignHandler.h"
  3. #include <boost/filesystem.hpp>
  4. #include <stdio.h>
  5. #include <boost/algorithm/string/predicate.hpp>
  6. #include "CLodHandler.h"
  7. namespace fs = boost::filesystem;
  8. /*
  9. * CCampaignHandler.cpp, part of VCMI engine
  10. *
  11. * Authors: listed in file AUTHORS in main folder
  12. *
  13. * License: GNU General Public License v2.0 or later
  14. * Full text of license available in license.txt file, in main folder
  15. *
  16. */
  17. std::vector<CCampaignHeader> CCampaignHandler::getCampaignHeaders()
  18. {
  19. std::vector<CCampaignHeader> ret;
  20. std::string dirname = DATA_DIR "/Maps";
  21. std::string ext = ".h3c";
  22. if(!boost::filesystem::exists(dirname))
  23. {
  24. tlog1 << "Cannot find " << dirname << " directory!\n";
  25. }
  26. fs::path tie(dirname);
  27. fs::directory_iterator end_iter;
  28. for ( fs::directory_iterator file (tie); file!=end_iter; ++file )
  29. {
  30. if(fs::is_regular_file(file->status())
  31. && boost::ends_with(file->path().filename(), ext))
  32. {
  33. ret.push_back( getHeader( file->path().string(), fs::file_size( file->path() ) ) );
  34. }
  35. }
  36. return ret;
  37. }
  38. CCampaignHeader CCampaignHandler::getHeader( const std::string & name, int size )
  39. {
  40. int realSize;
  41. unsigned char * cmpgn = CLodHandler::getUnpackedFile(name, &realSize);
  42. CCampaignHeader ret;
  43. int it = 0;//iterator for reading
  44. ret.version = readNormalNr(cmpgn, it); it+=4;
  45. ret.mapVersion = readChar(cmpgn, it);
  46. ret.name = readString(cmpgn, it);
  47. ret.description = readString(cmpgn, it);
  48. ret.difficultyChoosenByPlayer = readChar(cmpgn, it);
  49. ret.music = readChar(cmpgn, it);
  50. delete [] cmpgn;
  51. return ret;
  52. }