BsScriptManagedResource.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "BsScriptManagedResource.h"
  2. #include "BsScriptResourceManager.h"
  3. #include "BsScriptMeta.h"
  4. #include "BsMonoField.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoManager.h"
  7. #include "BsManagedResource.h"
  8. #include "BsResources.h"
  9. #include "BsException.h"
  10. namespace BansheeEngine
  11. {
  12. ScriptManagedResource::ScriptManagedResource(MonoObject* instance, const HManagedResource& resource)
  13. :ScriptObject(instance), mResource(resource)
  14. {
  15. }
  16. void ScriptManagedResource::initRuntimeData()
  17. {
  18. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptManagedResource::internal_createInstance);
  19. }
  20. void ScriptManagedResource::internal_createInstance(MonoObject* instance)
  21. {
  22. HManagedResource resource = ManagedResource::create(instance);
  23. ScriptResourceManager::instance().createManagedResource(instance, resource);
  24. }
  25. void ScriptManagedResource::_onManagedInstanceDeleted()
  26. {
  27. mManagedInstance = nullptr;
  28. if (mResource != nullptr && mResource.isLoaded())
  29. {
  30. mResource->mManagedInstance = nullptr;
  31. gResources().unload(mResource);
  32. }
  33. ScriptResourceManager::instance().destroyScriptResource(this);
  34. }
  35. void ScriptManagedResource::setNativeHandle(const HResource& resource)
  36. {
  37. mResource = static_resource_cast<ManagedResource>(resource);
  38. }
  39. }