2
0

BsScriptResources.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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/BsResources.h"
  9. #include "Resources/BsGameResourceManager.h"
  10. #include "BsScriptResourceManager.h"
  11. #include "Wrappers/BsScriptResource.h"
  12. #include "BsApplication.h"
  13. namespace bs
  14. {
  15. ScriptResources::ScriptResources(MonoObject* instance)
  16. :ScriptObject(instance)
  17. { }
  18. void ScriptResources::initRuntimeData()
  19. {
  20. metaData.scriptClass->addInternalCall("Internal_Load", (void*)&ScriptResources::internal_Load);
  21. metaData.scriptClass->addInternalCall("Internal_LoadFromUUID", (void*)&ScriptResources::internal_LoadFromUUID);
  22. metaData.scriptClass->addInternalCall("Internal_UnloadUnused", (void*)&ScriptResources::internal_UnloadUnused);
  23. metaData.scriptClass->addInternalCall("Internal_Release", (void*)&ScriptResources::internal_Release);
  24. metaData.scriptClass->addInternalCall("Internal_ReleaseRef", (void*)&ScriptResources::internal_ReleaseRef);
  25. }
  26. MonoObject* ScriptResources::internal_Load(MonoString* path, bool keepLoaded)
  27. {
  28. Path nativePath = MonoUtil::monoToString(path);
  29. HResource resource = GameResourceManager::instance().load(nativePath, keepLoaded);
  30. if (resource == nullptr)
  31. return nullptr;
  32. ScriptResourceBase* scriptResource = ScriptResourceManager::instance().getScriptResource(resource, true);
  33. return scriptResource->getManagedInstance();
  34. }
  35. MonoObject* ScriptResources::internal_LoadFromUUID(UUID* uuid, bool keepLoaded)
  36. {
  37. ResourceLoadFlags loadFlags = ResourceLoadFlag::LoadDependencies;
  38. if (keepLoaded)
  39. loadFlags |= ResourceLoadFlag::KeepInternalRef;
  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. void ScriptResources::internal_Release(ScriptResourceBase* resource)
  49. {
  50. resource->getGenericHandle().release();
  51. }
  52. void ScriptResources::internal_ReleaseRef(ScriptRRefBase* resourceRef)
  53. {
  54. resourceRef->getHandle().release();
  55. }
  56. void ScriptResources::internal_UnloadUnused()
  57. {
  58. gResources().unloadAllUnused();
  59. }
  60. }