BsScriptResource.cpp 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptResource.h"
  4. #include "BsScriptResourceManager.h"
  5. #include "Resources/BsResource.h"
  6. #include "BsMonoUtil.h"
  7. namespace bs
  8. {
  9. ScriptResourceBase::ScriptResourceBase(MonoObject* instance)
  10. :PersistentScriptObjectBase(instance), mRefreshInProgress(false)
  11. { }
  12. ScriptObjectBackup ScriptResourceBase::beginRefresh()
  13. {
  14. mRefreshInProgress = true;
  15. return PersistentScriptObjectBase::beginRefresh();
  16. }
  17. void ScriptResourceBase::endRefresh(const ScriptObjectBackup& backupData)
  18. {
  19. mRefreshInProgress = false;
  20. PersistentScriptObjectBase::endRefresh(backupData);
  21. }
  22. void ScriptResourceBase::destroy()
  23. {
  24. mManagedInstance = nullptr;
  25. if (!mRefreshInProgress)
  26. ScriptResourceManager::instance().destroyScriptResource(this);
  27. }
  28. void ScriptResource::initRuntimeData()
  29. {
  30. metaData.scriptClass->addInternalCall("Internal_GetName", (void*)&ScriptResource::internal_getName);
  31. metaData.scriptClass->addInternalCall("Internal_GetUUID", (void*)&ScriptResource::internal_getUUID);
  32. metaData.scriptClass->addInternalCall("Internal_Release", (void*)&ScriptResource::internal_release);
  33. }
  34. MonoString* ScriptResource::internal_getName(ScriptResourceBase* nativeInstance)
  35. {
  36. return MonoUtil::wstringToMono(nativeInstance->getGenericHandle()->getName());
  37. }
  38. void ScriptResource::internal_getUUID(ScriptResourceBase* nativeInstance, UUID* uuid)
  39. {
  40. *uuid = nativeInstance->getGenericHandle().getUUID();
  41. }
  42. void ScriptResource::internal_release(ScriptResourceBase* nativeInstance)
  43. {
  44. nativeInstance->getGenericHandle().release();
  45. }
  46. ScriptUUID::ScriptUUID(MonoObject* instance)
  47. :ScriptObject(instance)
  48. { }
  49. void ScriptUUID::initRuntimeData()
  50. { }
  51. MonoObject* ScriptUUID::box(const UUID& value)
  52. {
  53. // We're casting away const but it's fine since structs are passed by value anyway
  54. return MonoUtil::box(metaData.scriptClass->_getInternalClass(), (void*)&value);
  55. }
  56. UUID ScriptUUID::unbox(MonoObject* obj)
  57. {
  58. return *(UUID*)MonoUtil::unbox(obj);
  59. }
  60. }