BsScriptResources.cpp 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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_UnloadUnused", &ScriptResources::internal_UnloadUnused);
  20. }
  21. MonoObject* ScriptResources::internal_Load(MonoString* path)
  22. {
  23. Path nativePath = MonoUtil::monoToWString(path);
  24. HResource resource = GameResourceManager::instance().load(nativePath);
  25. if (resource == nullptr)
  26. return nullptr;
  27. ScriptResourceBase* scriptResource;
  28. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  29. return scriptResource->getManagedInstance();
  30. }
  31. MonoObject* ScriptResources::internal_LoadRef(MonoObject* reference)
  32. {
  33. ScriptResourceRef* scriptRef = ScriptResourceRef::toNative(reference);
  34. if (scriptRef == nullptr)
  35. return nullptr;
  36. return scriptRef->getManagedInstance();
  37. }
  38. void ScriptResources::internal_UnloadUnused()
  39. {
  40. gResources().unloadAllUnused();
  41. }
  42. }