BsScriptProjectLibrary.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. }
  26. void ScriptProjectLibrary::internal_Create(MonoObject* resource, MonoString* path)
  27. {
  28. ScriptResource* scrResource = ScriptResource::toNative(resource);
  29. Path resourcePath = MonoUtil::monoToWString(path);
  30. ProjectLibrary::instance().createEntry(scrResource->getNativeHandle(), resourcePath);
  31. }
  32. MonoObject* ScriptProjectLibrary::internal_Load(MonoString* path)
  33. {
  34. Path resourcePath = MonoUtil::monoToWString(path);
  35. Path fullPath = ProjectLibrary::instance().getResourcesFolder();
  36. fullPath.append(resourcePath);
  37. ProjectLibrary::LibraryEntry* entry = ProjectLibrary::instance().findEntry(fullPath);
  38. if (entry == nullptr || entry->type == ProjectLibrary::LibraryEntryType::Directory)
  39. return nullptr;
  40. ProjectLibrary::ResourceEntry* resEntry = static_cast<ProjectLibrary::ResourceEntry*>(entry);
  41. String resUUID = resEntry->meta->getUUID();
  42. HResource resource = Resources::instance().loadFromUUID(resUUID);
  43. if (!resource)
  44. return nullptr;
  45. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(resUUID);
  46. if (scriptResource == nullptr)
  47. scriptResource = ScriptResourceManager::instance().createScriptResource(resource);
  48. return scriptResource->getManagedInstance();
  49. }
  50. }