Open Source Tomb Raider Engine
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Loader.cpp 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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/LoaderTR1.h"
  10. #include "loader/LoaderTR2.h"
  11. #include "loader/LoaderTR3.h"
  12. Loader::LoaderVersion Loader::checkFile(std::string f) {
  13. BinaryFile file;
  14. if (file.open(f.c_str()) != 0)
  15. return TR_UNKNOWN;
  16. uint32_t start = file.readU32();
  17. switch (start) {
  18. case 0x00000020:
  19. return TR_1;
  20. case 0x0000002D:
  21. return TR_2;
  22. case 0xFF080038:
  23. case 0xFF180038:
  24. return TR_3;
  25. case 0xFFFFFFF0: // bogus
  26. case 0x00345254: // "TR4\0"
  27. return TR_4;
  28. }
  29. return TR_UNKNOWN;
  30. }
  31. std::unique_ptr<Loader> Loader::createLoader(std::string f) {
  32. LoaderVersion v = checkFile(f);
  33. switch (v) {
  34. case TR_4:
  35. case TR_5:
  36. case TR_UNKNOWN:
  37. return nullptr;
  38. case TR_1:
  39. return std::unique_ptr<Loader>(new LoaderTR1());
  40. case TR_2:
  41. return std::unique_ptr<Loader>(new LoaderTR2());
  42. case TR_3:
  43. return std::unique_ptr<Loader>(new LoaderTR3());
  44. }
  45. }
  46. Loader::~Loader() { }