BsScriptResources.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptResources.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsResources.h"
  9. #include "BsGameResourceManager.h"
  10. #include "BsScriptResourceManager.h"
  11. #include "BsScriptResource.h"
  12. #include "BsScriptResourceRef.h"
  13. namespace BansheeEngine
  14. {
  15. ScriptResources::ScriptResources(MonoObject* instance)
  16. :ScriptObject(instance)
  17. { }
  18. void ScriptResources::initRuntimeData()
  19. {
  20. metaData.scriptClass->addInternalCall("Internal_Load", &ScriptResources::internal_Load);
  21. metaData.scriptClass->addInternalCall("Internal_LoadRef", &ScriptResources::internal_LoadRef);
  22. metaData.scriptClass->addInternalCall("Internal_UnloadUnused", &ScriptResources::internal_UnloadUnused);
  23. metaData.scriptClass->addInternalCall("Internal_Release", &ScriptResources::internal_Release);
  24. metaData.scriptClass->addInternalCall("Internal_ReleaseRef", &ScriptResources::internal_ReleaseRef);
  25. }
  26. MonoObject* ScriptResources::internal_Load(MonoString* path, bool keepLoaded)
  27. {
  28. Path nativePath = MonoUtil::monoToWString(path);
  29. HResource resource = GameResourceManager::instance().load(nativePath, keepLoaded);
  30. if (resource == nullptr)
  31. return nullptr;
  32. ScriptResourceBase* scriptResource;
  33. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  34. return scriptResource->getManagedInstance();
  35. }
  36. MonoObject* ScriptResources::internal_LoadRef(MonoObject* reference, bool keepLoaded)
  37. {
  38. ScriptResourceRef* scriptRef = ScriptResourceRef::toNative(reference);
  39. if (scriptRef == nullptr)
  40. return nullptr;
  41. HResource resource = gResources().load(scriptRef->getHandle(), true, keepLoaded);
  42. if (resource == nullptr)
  43. return nullptr;
  44. ScriptResourceBase* scriptResource;
  45. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  46. return scriptResource->getManagedInstance();
  47. }
  48. void ScriptResources::internal_Release(ScriptResourceBase* resource)
  49. {
  50. resource->getGenericHandle().release();
  51. }
  52. void ScriptResources::internal_ReleaseRef(ScriptResourceRef* resourceRef)
  53. {
  54. resourceRef->getHandle().release();
  55. }
  56. void ScriptResources::internal_UnloadUnused()
  57. {
  58. gResources().unloadAllUnused();
  59. }
  60. }