CmImporter.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "CmImporter.h"
  2. #include "CmPath.h"
  3. #include "CmResource.h"
  4. #include "CmFileSystem.h"
  5. #include "CmSpecificImporter.h"
  6. #include "CmDebug.h"
  7. #include "CmDataStream.h"
  8. #include "CmException.h"
  9. namespace CamelotEngine
  10. {
  11. Importer::Importer()
  12. { }
  13. Importer::~Importer()
  14. {
  15. for(auto i = mAssetImporters.begin(); i != mAssetImporters.end(); ++i)
  16. {
  17. if((*i) != nullptr)
  18. delete *i;
  19. }
  20. mAssetImporters.clear();
  21. }
  22. bool Importer::supportsFileType(const std::string& extension) const
  23. {
  24. for(auto iter = mAssetImporters.begin(); iter != mAssetImporters.end(); ++iter)
  25. {
  26. if(*iter != nullptr && (*iter)->isExtensionSupported(extension))
  27. return true;
  28. }
  29. return false;
  30. }
  31. bool Importer::supportsFileType(const UINT8* magicNumber, UINT32 magicNumSize) const
  32. {
  33. for(auto iter = mAssetImporters.begin(); iter != mAssetImporters.end(); ++iter)
  34. {
  35. if(*iter != nullptr && (*iter)->isMagicNumberSupported(magicNumber, magicNumSize))
  36. return true;
  37. }
  38. return false;
  39. }
  40. ResourcePtr Importer::import(const String& inputFilePath)
  41. {
  42. if(!Path::exists(inputFilePath))
  43. {
  44. LOGWRN("Trying to import asset that doesn't exists. Asset path: " + inputFilePath);
  45. return nullptr;
  46. }
  47. String ext = Path::getExtension(inputFilePath);
  48. ext = ext.substr(1, ext.size() - 1); // Remove the .
  49. if(!supportsFileType(ext))
  50. {
  51. LOGWRN("There is no importer for the provided file type. (" + inputFilePath + ")");
  52. return nullptr;
  53. }
  54. SpecificImporter* importer = nullptr;
  55. for(auto iter = mAssetImporters.begin(); iter != mAssetImporters.end(); ++iter)
  56. {
  57. if(*iter != nullptr && (*iter)->isExtensionSupported(ext))
  58. {
  59. importer = *iter;
  60. }
  61. }
  62. DataStreamPtr fileSteam = FileSystem::open(inputFilePath, true);
  63. ResourcePtr importedResource = importer->import(fileSteam);
  64. importedResource->load();
  65. return importedResource;
  66. }
  67. void Importer::registerAssetImporter(SpecificImporter* importer)
  68. {
  69. if(!importer)
  70. {
  71. LOGWRN("Trying to register a null asset importer!");
  72. return;
  73. }
  74. mAssetImporters.push_back(importer);
  75. }
  76. }