BsScriptResourceRef.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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 "BsMonoClass.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsResources.h"
  8. #include "BsScriptResource.h"
  9. #include "BsScriptResourceManager.h"
  10. #include "BsApplication.h"
  11. #include "BsScriptTexture.generated.h"
  12. namespace bs
  13. {
  14. ScriptResourceRef::ScriptResourceRef(MonoObject* instance, const WeakResourceHandle<Resource>& resource)
  15. :ScriptObject(instance), mResource(resource)
  16. { }
  17. void ScriptResourceRef::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_IsLoaded", &ScriptResourceRef::internal_IsLoaded);
  20. metaData.scriptClass->addInternalCall("Internal_GetResource", &ScriptResourceRef::internal_GetResource);
  21. metaData.scriptClass->addInternalCall("Internal_GetUUID", &ScriptResourceRef::internal_GetUUID);
  22. }
  23. MonoObject* ScriptResourceRef::createInternal(const WeakResourceHandle<Resource>& handle)
  24. {
  25. MonoObject* obj = metaData.scriptClass->createInstance();
  26. new (bs_alloc<ScriptResourceRef>()) ScriptResourceRef(obj, handle);
  27. return obj;
  28. }
  29. bool ScriptResourceRef::internal_IsLoaded(ScriptResourceRef* nativeInstance)
  30. {
  31. return nativeInstance->mResource.isLoaded(false);
  32. }
  33. MonoObject* ScriptResourceRef::internal_GetResource(ScriptResourceRef* nativeInstance)
  34. {
  35. ResourceLoadFlags loadFlags = ResourceLoadFlag::LoadDependencies | ResourceLoadFlag::KeepInternalRef;
  36. if (gApplication().isEditor())
  37. loadFlags |= ResourceLoadFlag::KeepSourceData;
  38. HResource resource = gResources().load(nativeInstance->mResource, loadFlags);
  39. ScriptResourceBase* scriptResource;
  40. ScriptResourceManager::instance().getScriptResource(resource, &scriptResource, true);
  41. return scriptResource->getManagedInstance();
  42. }
  43. MonoString* ScriptResourceRef::internal_GetUUID(ScriptResourceRef* thisPtr)
  44. {
  45. const String& uuid = thisPtr->getHandle().getUUID();
  46. return MonoUtil::stringToMono(uuid);
  47. }
  48. }