BsScriptResourceRef.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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 "BsScriptTexture2D.h"
  10. #include "BsScriptTexture3D.h"
  11. #include "BsScriptTextureCube.h"
  12. #include "BsScriptResourceManager.h"
  13. namespace BansheeEngine
  14. {
  15. ScriptResourceRefBase::ScriptResourceRefBase(MonoObject* instance, const WeakResourceHandle<Resource>& resource)
  16. :ScriptObject(instance), mResource(resource)
  17. { }
  18. void ScriptResourceRefBase::initRuntimeData()
  19. {
  20. metaData.scriptClass->addInternalCall("Internal_IsLoaded", &ScriptResourceRefBase::internal_IsLoaded);
  21. metaData.scriptClass->addInternalCall("Internal_GetResource", &ScriptResourceRefBase::internal_GetResource);
  22. metaData.scriptClass->addInternalCall("Internal_GetUUID", &ScriptResourceRefBase::internal_GetUUID);
  23. }
  24. bool ScriptResourceRefBase::internal_IsLoaded(ScriptResourceRefBase* nativeInstance)
  25. {
  26. return nativeInstance->mResource.isLoaded(false);
  27. }
  28. MonoObject* ScriptResourceRefBase::internal_GetResource(ScriptResourceRefBase* nativeInstance)
  29. {
  30. HResource resource = gResources().load(nativeInstance->mResource);
  31. ScriptResourceBase* scriptResource;
  32. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  33. return scriptResource->getManagedInstance();
  34. }
  35. MonoString* ScriptResourceRefBase::internal_GetUUID(ScriptResourceRefBase* thisPtr)
  36. {
  37. const String& uuid = thisPtr->getHandle().getUUID();
  38. return MonoUtil::stringToMono(uuid);
  39. }
  40. ScriptResourceRef::ScriptResourceRef(MonoObject* instance)
  41. :ScriptObject(instance)
  42. { }
  43. void ScriptResourceRef::initRuntimeData()
  44. { }
  45. MonoObject* ScriptResourceRef::create(::MonoClass* resourceClass, const WeakResourceHandle<Resource>& handle)
  46. {
  47. MonoType* genParams[1] = { mono_class_get_type(resourceClass) };
  48. ::MonoClass* resourceRefClass = mono_class_bind_generic_parameters(metaData.scriptClass->_getInternalClass(), 1, genParams, false);
  49. MonoObject* obj = mono_object_new(MonoManager::instance().getDomain(), resourceRefClass);
  50. mono_runtime_object_init(obj);
  51. ScriptResourceRefBase* scriptResourceRef = new (bs_alloc<ScriptResourceRefBase>()) ScriptResourceRefBase(obj, handle);
  52. return obj;
  53. }
  54. MonoObject* ScriptResourceRef::create(const WeakResourceHandle<Texture>& handle, TextureType type)
  55. {
  56. switch (type)
  57. {
  58. case TEX_TYPE_2D:
  59. return create(ScriptTexture2D::getMetaData()->scriptClass->_getInternalClass(), handle);
  60. case TEX_TYPE_3D:
  61. return create(ScriptTexture3D::getMetaData()->scriptClass->_getInternalClass(), handle);
  62. case TEX_TYPE_CUBE_MAP:
  63. return create(ScriptTextureCube::getMetaData()->scriptClass->_getInternalClass(), handle);
  64. }
  65. return nullptr;
  66. }
  67. }