ModelImporter.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. #include <Atomic/IO/Log.h>
  2. #include "../Import/OpenAssetImporter.h"
  3. #include "Asset.h"
  4. #include "AssetDatabase.h"
  5. #include "ModelImporter.h"
  6. namespace ToolCore
  7. {
  8. /// Node + Model (static or animated)
  9. ModelImporter::ModelImporter(Context* context) : AssetImporter(context)
  10. {
  11. SetDefaults();
  12. }
  13. ModelImporter::~ModelImporter()
  14. {
  15. }
  16. void ModelImporter::SetDefaults()
  17. {
  18. AssetImporter::SetDefaults();
  19. scale_ = 1.0f;
  20. startTime_ = -1.0f;
  21. endTime_ = -1.0f;
  22. importAnimations_ = false;
  23. }
  24. bool ModelImporter::Import(const String& guid)
  25. {
  26. AssetDatabase* db = GetSubsystem<AssetDatabase>();
  27. Asset* asset = db->GetAssetByGUID(guid);
  28. if (!asset)
  29. return false;
  30. SharedPtr<OpenAssetImporter> importer(new OpenAssetImporter(context_));
  31. //importer->SetVerboseLog(true);
  32. bool animationsOnly = false;
  33. String modelAssetFilename = asset->GetPath();
  34. if (modelAssetFilename.Contains("@"))
  35. {
  36. animationsOnly = true;
  37. }
  38. importer->SetScale(scale_);
  39. importer->SetStartTime(startTime_);
  40. importer->SetEndTime(endTime_);
  41. importer->SetExportAnimations(importAnimations_);
  42. if (importer->Load(asset->GetPath()))
  43. {
  44. String cachePath = db->GetCachePath();
  45. cachePath += guid;
  46. importer->ExportModel(cachePath, animationsOnly);
  47. const Vector<OpenAssetImporter::AnimationInfo>& infos = importer->GetAnimationInfos();
  48. for (unsigned i = 0; i < infos.Size(); i++)
  49. {
  50. const OpenAssetImporter::AnimationInfo& info = infos.At(i);
  51. LOGINFOF("Import Info: %s : %s", info.name_.CString(), info.cacheFilename_.CString());
  52. }
  53. }
  54. else
  55. {
  56. return false;
  57. }
  58. return true;
  59. }
  60. bool ModelImporter::LoadSettingsInternal()
  61. {
  62. if (!AssetImporter::LoadSettingsInternal())
  63. return false;
  64. JSONValue import = jsonRoot_.GetChild("ModelImporter", JSON_OBJECT);
  65. SetDefaults();
  66. if (import.HasMember("scale"))
  67. scale_ = import.GetFloat("scale");
  68. if (import.HasMember("startTime"))
  69. startTime_ = import.GetFloat("startTime");
  70. if (import.HasMember("endTime"))
  71. endTime_ = import.GetFloat("endTime");
  72. if (import.HasMember("importAnimations"))
  73. importAnimations_ = import.GetBool("importAnimations");
  74. return true;
  75. }
  76. bool ModelImporter::SaveSettingsInternal()
  77. {
  78. if (!AssetImporter::SaveSettingsInternal())
  79. return false;
  80. JSONValue import = jsonRoot_.CreateChild("ModelImporter");
  81. import.SetFloat("scale", scale_);
  82. import.SetFloat("startTime", startTime_);
  83. import.SetFloat("endTime", endTime_);
  84. import.SetBool("importAnimations", importAnimations_);
  85. return true;
  86. }
  87. }