BsScriptResourceRef.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptResourceRef.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoManager.h"
  8. #include "BsMonoUtil.h"
  9. #include "BsResources.h"
  10. #include "BsScriptResource.h"
  11. #include "BsScriptTexture2D.h"
  12. #include "BsScriptTexture3D.h"
  13. #include "BsScriptTextureCube.h"
  14. #include "BsScriptResourceManager.h"
  15. namespace BansheeEngine
  16. {
  17. ScriptResourceRef::ScriptResourceRef(MonoObject* instance, const WeakResourceHandle<Resource>& resource)
  18. :ScriptObject(instance), mResource(resource)
  19. { }
  20. void ScriptResourceRef::initRuntimeData()
  21. {
  22. metaData.scriptClass->addInternalCall("Internal_IsLoaded", &ScriptResourceRef::internal_IsLoaded);
  23. metaData.scriptClass->addInternalCall("Internal_GetResource", &ScriptResourceRef::internal_GetResource);
  24. metaData.scriptClass->addInternalCall("Internal_GetUUID", &ScriptResourceRef::internal_GetUUID);
  25. }
  26. MonoObject* ScriptResourceRef::createInternal(const WeakResourceHandle<Resource>& handle)
  27. {
  28. MonoObject* obj = metaData.scriptClass->createInstance();
  29. ScriptResourceRef* scriptResourceRef = new (bs_alloc<ScriptResourceRef>()) ScriptResourceRef(obj, handle);
  30. return obj;
  31. }
  32. MonoObject* ScriptResourceRef::create(const WeakResourceHandle<Texture>& handle, TextureType type)
  33. {
  34. switch (type)
  35. {
  36. case TEX_TYPE_2D:
  37. return createInternal(handle);
  38. case TEX_TYPE_3D:
  39. return createInternal(handle);
  40. case TEX_TYPE_CUBE_MAP:
  41. return createInternal(handle);
  42. }
  43. return nullptr;
  44. }
  45. bool ScriptResourceRef::internal_IsLoaded(ScriptResourceRef* nativeInstance)
  46. {
  47. return nativeInstance->mResource.isLoaded(false);
  48. }
  49. MonoObject* ScriptResourceRef::internal_GetResource(ScriptResourceRef* nativeInstance)
  50. {
  51. HResource resource = gResources().load(nativeInstance->mResource);
  52. ScriptResourceBase* scriptResource;
  53. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  54. return scriptResource->getManagedInstance();
  55. }
  56. MonoString* ScriptResourceRef::internal_GetUUID(ScriptResourceRef* thisPtr)
  57. {
  58. const String& uuid = thisPtr->getHandle().getUUID();
  59. return MonoUtil::stringToMono(uuid);
  60. }
  61. }