BsScriptResourceRef.cpp 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "BsScriptResourceRef.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsResources.h"
  8. #include "BsScriptResource.h"
  9. #include "BsScriptResourceManager.h"
  10. namespace BansheeEngine
  11. {
  12. ScriptResourceRef::ScriptResourceRef(MonoObject* instance, const WeakResourceHandle<Resource>& resource)
  13. :ScriptObject(instance), mResource(resource)
  14. { }
  15. void ScriptResourceRef::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_IsLoaded", &ScriptResourceRef::internal_IsLoaded);
  18. metaData.scriptClass->addInternalCall("Internal_GetResource", &ScriptResourceRef::internal_GetResource);
  19. }
  20. MonoObject* ScriptResourceRef::create(UINT32 typeId)
  21. {
  22. MonoClass* resourceClass = ScriptResource::getClassFromTypeId(typeId);
  23. if (resourceClass == nullptr)
  24. return nullptr;
  25. MonoType* genParams[1] = { mono_class_get_type(resourceClass->_getInternalClass()) };
  26. ::MonoClass* resourceRefClass = mono_class_bind_generic_parameters(metaData.scriptClass->_getInternalClass(), 1, genParams, false);
  27. MonoObject* obj = mono_object_new(MonoManager::instance().getDomain(), resourceRefClass);
  28. mono_runtime_object_init(obj);
  29. WeakResourceHandle<Resource> emptyHandle;
  30. ScriptResourceRef* scriptResourceRef = new (bs_alloc<ScriptResourceRef>()) ScriptResourceRef(obj, emptyHandle);
  31. return obj;
  32. }
  33. bool ScriptResourceRef::internal_IsLoaded(ScriptResourceRef* nativeInstance)
  34. {
  35. return nativeInstance->mResource.isLoaded(false);
  36. }
  37. MonoObject* ScriptResourceRef::internal_GetResource(ScriptResourceRef* nativeInstance)
  38. {
  39. HResource resource = gResources().load(nativeInstance->mResource);
  40. ScriptResourceBase* scriptResource;
  41. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  42. return scriptResource->getManagedInstance();
  43. }
  44. }