2
0

BsScriptResources.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptResources.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "Resources/BsGameResourceManager.h"
  9. #include "BsScriptResourceManager.h"
  10. #include "Wrappers/BsScriptResource.h"
  11. #include "BsApplication.h"
  12. namespace bs
  13. {
  14. ScriptResources::ScriptResources(MonoObject* instance)
  15. :ScriptObject(instance)
  16. { }
  17. void ScriptResources::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_Load", (void*)&ScriptResources::internal_Load);
  20. metaData.scriptClass->addInternalCall("Internal_LoadFromUUID", (void*)&ScriptResources::internal_LoadFromUUID);
  21. metaData.scriptClass->addInternalCall("Internal_LoadAsync", (void*)&ScriptResources::internal_LoadAsync);
  22. metaData.scriptClass->addInternalCall("Internal_LoadAsyncFromUUID", (void*)&ScriptResources::internal_LoadAsyncFromUUID);
  23. metaData.scriptClass->addInternalCall("Internal_UnloadUnused", (void*)&ScriptResources::internal_UnloadUnused);
  24. metaData.scriptClass->addInternalCall("Internal_Release", (void*)&ScriptResources::internal_Release);
  25. metaData.scriptClass->addInternalCall("Internal_ReleaseRef", (void*)&ScriptResources::internal_ReleaseRef);
  26. metaData.scriptClass->addInternalCall("Internal_GetLoadProgress", (void*)&ScriptResources::internal_GetLoadProgress);
  27. }
  28. MonoObject* ScriptResources::internal_Load(MonoString* path, ResourceLoadFlag flags)
  29. {
  30. Path nativePath = MonoUtil::monoToString(path);
  31. HResource resource = GameResourceManager::instance().load(nativePath, flags, false);
  32. if (resource == nullptr)
  33. return nullptr;
  34. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(resource, true);
  35. return scriptResource->getManagedInstance();
  36. }
  37. MonoObject* ScriptResources::internal_LoadFromUUID(UUID* uuid, ResourceLoadFlag flags)
  38. {
  39. ResourceLoadFlags loadFlags = flags;
  40. if (gApplication().isEditor())
  41. loadFlags |= ResourceLoadFlag::KeepSourceData;
  42. HResource resource = gResources().loadFromUUID(*uuid, loadFlags);
  43. if (resource == nullptr)
  44. return nullptr;
  45. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(resource, true);
  46. return scriptResource->getManagedInstance();
  47. }
  48. MonoObject* ScriptResources::internal_LoadAsync(MonoString* path, ResourceLoadFlag flags)
  49. {
  50. Path nativePath = MonoUtil::monoToString(path);
  51. HResource resource = GameResourceManager::instance().load(nativePath, flags, true);
  52. if (resource == nullptr)
  53. return nullptr;
  54. ScriptRRefBase* scriptResource = ScriptResourceManager::instance().getScriptRRef(resource);
  55. if(scriptResource != nullptr)
  56. return scriptResource->getManagedInstance();
  57. return nullptr;
  58. }
  59. MonoObject* ScriptResources::internal_LoadAsyncFromUUID(UUID* uuid, ResourceLoadFlag flags)
  60. {
  61. ResourceLoadFlags loadFlags = flags;
  62. if (gApplication().isEditor())
  63. loadFlags |= ResourceLoadFlag::KeepSourceData;
  64. HResource resource = gResources().loadFromUUID(*uuid, loadFlags);
  65. if (resource == nullptr)
  66. return nullptr;
  67. ScriptRRefBase* scriptResource = ScriptResourceManager::instance().getScriptRRef(resource);
  68. if(scriptResource != nullptr)
  69. return scriptResource->getManagedInstance();
  70. return nullptr;
  71. }
  72. float ScriptResources::internal_GetLoadProgress(ScriptRRefBase* resource, bool loadDependencies)
  73. {
  74. return gResources().getLoadProgress(resource->getHandle(), loadDependencies);
  75. }
  76. void ScriptResources::internal_Release(ScriptResourceBase* resource)
  77. {
  78. resource->getGenericHandle().release();
  79. }
  80. void ScriptResources::internal_ReleaseRef(ScriptRRefBase* resourceRef)
  81. {
  82. resourceRef->getHandle().release();
  83. }
  84. void ScriptResources::internal_UnloadUnused()
  85. {
  86. gResources().unloadAllUnused();
  87. }
  88. }