2
0

BsScriptResources.cpp 2.2 KB

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