BsScriptProjectLibrary.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. ProjectLibrary::LibraryEntry* entry = ProjectLibrary::instance().findEntry(resourcePath);
  36. if (entry == nullptr || entry->type == ProjectLibrary::LibraryEntryType::Directory)
  37. return nullptr;
  38. ProjectLibrary::ResourceEntry* resEntry = static_cast<ProjectLibrary::ResourceEntry*>(entry);
  39. String resUUID = resEntry->meta->getUUID();
  40. HResource resource = Resources::instance().loadFromUUID(resUUID);
  41. if (!resource)
  42. return nullptr;
  43. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(resUUID);
  44. if (scriptResource == nullptr)
  45. scriptResource = ScriptResourceManager::instance().createScriptResource(resource);
  46. return scriptResource->getManagedInstance();
  47. }
  48. }