Open Source Tomb Raider Engine
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

Loader.cpp 1.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. /*!
  2. * \file src/loader/Loader.cpp
  3. * \brief Level file loader
  4. *
  5. * \author xythobuz
  6. */
  7. #include "global.h"
  8. #include "loader/Loader.h"
  9. #include "loader/LoaderTR2.h"
  10. #include "loader/LoaderTR3.h"
  11. Loader::LoaderVersion Loader::checkFile(std::string f) {
  12. BinaryFile file;
  13. if (file.open(f.c_str()) != 0)
  14. return TR_UNKNOWN;
  15. uint32_t start = file.readU32();
  16. switch (start) {
  17. case 0x00000020:
  18. return TR_1;
  19. case 0x0000002D:
  20. return TR_2;
  21. case 0xFF080038:
  22. case 0xFF180038:
  23. return TR_3;
  24. case 0xFFFFFFF0: // bogus
  25. case 0x00345254: // "TR4\0"
  26. return TR_4;
  27. }
  28. return TR_UNKNOWN;
  29. }
  30. std::unique_ptr<Loader> Loader::createLoader(std::string f) {
  31. LoaderVersion v = checkFile(f);
  32. switch (v) {
  33. case TR_1:
  34. case TR_4:
  35. case TR_5:
  36. case TR_UNKNOWN:
  37. return nullptr;
  38. case TR_2:
  39. return std::unique_ptr<Loader>(new LoaderTR2());
  40. case TR_3:
  41. return std::unique_ptr<Loader>(new LoaderTR3());
  42. }
  43. }