BsScriptProjectLibrary.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #include "BsScriptProjectLibrary.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsProjectLibrary.h"
  8. #include "BsScriptResource.h"
  9. #include "BsResources.h"
  10. #include "BsResource.h"
  11. #include "BsProjectResourceMeta.h"
  12. #include "BsScriptResourceManager.h"
  13. #include "BsScriptTexture2D.h"
  14. #include "BsScriptSpriteTexture.h"
  15. #include "BsScriptFont.h"
  16. namespace BansheeEngine
  17. {
  18. ScriptProjectLibrary::ScriptProjectLibrary(MonoObject* instance)
  19. :ScriptObject(instance)
  20. { }
  21. void ScriptProjectLibrary::initRuntimeData()
  22. {
  23. metaData.scriptClass->addInternalCall("Internal_Create", &ScriptProjectLibrary::internal_Create);
  24. metaData.scriptClass->addInternalCall("Internal_Load", &ScriptProjectLibrary::internal_Load);
  25. metaData.scriptClass->addInternalCall("Internal_Save", &ScriptProjectLibrary::internal_Save);
  26. metaData.scriptClass->addInternalCall("Internal_GetRoot", &ScriptProjectLibrary::internal_GetRoot);
  27. metaData.scriptClass->addInternalCall("Internal_Reimport", &ScriptProjectLibrary::internal_Reimport);
  28. metaData.scriptClass->addInternalCall("Internal_GetEntry", &ScriptProjectLibrary::internal_GetEntry);
  29. metaData.scriptClass->addInternalCall("Internal_GetPath", &ScriptProjectLibrary::internal_GetPath);
  30. metaData.scriptClass->addInternalCall("Internal_Delete", &ScriptProjectLibrary::internal_Delete);
  31. metaData.scriptClass->addInternalCall("Internal_CreateFolder", &ScriptProjectLibrary::internal_CreateFolder);
  32. metaData.scriptClass->addInternalCall("Internal_Rename", &ScriptProjectLibrary::internal_Rename);
  33. metaData.scriptClass->addInternalCall("Internal_Move", &ScriptProjectLibrary::internal_Move);
  34. metaData.scriptClass->addInternalCall("Internal_Copy", &ScriptProjectLibrary::internal_Copy);
  35. }
  36. void ScriptProjectLibrary::internal_Create(MonoObject* resource, MonoString* path)
  37. {
  38. ScriptResource* scrResource = ScriptResource::toNative(resource);
  39. Path resourcePath = MonoUtil::monoToWString(path);
  40. ProjectLibrary::instance().createEntry(scrResource->getNativeHandle(), resourcePath);
  41. }
  42. MonoObject* ScriptProjectLibrary::internal_Load(MonoString* path)
  43. {
  44. Path resourcePath = MonoUtil::monoToWString(path);
  45. Path fullPath = ProjectLibrary::instance().getResourcesFolder();
  46. fullPath.append(resourcePath);
  47. ProjectLibrary::LibraryEntry* entry = ProjectLibrary::instance().findEntry(fullPath);
  48. if (entry == nullptr || entry->type == ProjectLibrary::LibraryEntryType::Directory)
  49. return nullptr;
  50. ProjectLibrary::ResourceEntry* resEntry = static_cast<ProjectLibrary::ResourceEntry*>(entry);
  51. String resUUID = resEntry->meta->getUUID();
  52. HResource resource = Resources::instance().loadFromUUID(resUUID);
  53. if (!resource)
  54. return nullptr;
  55. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(resUUID);
  56. if (scriptResource == nullptr)
  57. scriptResource = ScriptResourceManager::instance().createScriptResource(resource);
  58. return scriptResource->getManagedInstance();
  59. }
  60. void ScriptProjectLibrary::internal_Save(MonoObject* resource)
  61. {
  62. }
  63. MonoObject* ScriptProjectLibrary::internal_GetRoot()
  64. {
  65. // TODO
  66. }
  67. void ScriptProjectLibrary::internal_Reimport(MonoString* path, MonoObject* options, bool force)
  68. {
  69. // TODO
  70. }
  71. MonoObject* ScriptProjectLibrary::internal_GetEntry(MonoString* path)
  72. {
  73. // TODO
  74. }
  75. MonoString* ScriptProjectLibrary::internal_GetPath(MonoObject* resource)
  76. {
  77. }
  78. void ScriptProjectLibrary::internal_Delete(MonoString* path)
  79. {
  80. Path pathToDelete = MonoUtil::monoToWString(path);
  81. ProjectLibrary::instance().deleteEntry(pathToDelete);
  82. }
  83. void ScriptProjectLibrary::internal_CreateFolder(MonoString* path)
  84. {
  85. Path folderToCreate = MonoUtil::monoToWString(path);
  86. ProjectLibrary::instance().createFolderEntry(folderToCreate);
  87. }
  88. void ScriptProjectLibrary::internal_Rename(MonoString* path, MonoString* name)
  89. {
  90. Path oldPath = MonoUtil::monoToWString(path);
  91. Path newPath = oldPath.getParent().append(MonoUtil::monoToWString(name));
  92. ProjectLibrary::instance().moveEntry(oldPath, newPath, false);
  93. }
  94. void ScriptProjectLibrary::internal_Move(MonoString* oldPath, MonoString* newPath, bool overwrite)
  95. {
  96. Path oldPathNative = MonoUtil::monoToWString(oldPath);
  97. Path newPathNative = MonoUtil::monoToWString(newPath);
  98. ProjectLibrary::instance().moveEntry(oldPathNative, newPathNative, overwrite);
  99. }
  100. void ScriptProjectLibrary::internal_Copy(MonoString* source, MonoString* destination, bool overwrite)
  101. {
  102. Path oldPathNative = MonoUtil::monoToWString(source);
  103. Path newPathNative = MonoUtil::monoToWString(destination);
  104. ProjectLibrary::instance().copyEntry(oldPathNative, newPathNative, overwrite);
  105. }
  106. }