Open Source Tomb Raider Engine
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Loader.cpp 1.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. Loader::LoaderVersion Loader::checkFile(std::string f) {
  11. BinaryFile file;
  12. if (file.open(f.c_str()) != 0)
  13. return TR_UNKNOWN;
  14. uint32_t start = file.readU32();
  15. switch (start) {
  16. case 0x00000020:
  17. return TR_1;
  18. case 0x0000002D:
  19. return TR_2;
  20. case 0xFF080038:
  21. case 0xFF180038:
  22. return TR_3;
  23. case 0xFFFFFFF0: // bogus
  24. case 0x00345254: // "TR4\0"
  25. return TR_4;
  26. }
  27. return TR_UNKNOWN;
  28. }
  29. std::unique_ptr<Loader> Loader::createLoader(std::string f) {
  30. LoaderVersion v = checkFile(f);
  31. switch (v) {
  32. case TR_1:
  33. case TR_3:
  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. }
  41. }
  42. Loader::~Loader() {
  43. }