BsResourceHandleRTTI.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsResourceHandle.h"
  7. #include "BsResources.h"
  8. namespace BansheeEngine
  9. {
  10. /** @cond RTTI */
  11. /** @addtogroup RTTI-Impl-Core
  12. * @{
  13. */
  14. class BS_CORE_EXPORT ResourceHandleRTTI : public RTTIType<TResourceHandleBase<false>, IReflectable, ResourceHandleRTTI>
  15. {
  16. private:
  17. String& getUUID(TResourceHandleBase<false>* obj)
  18. {
  19. static String Blank = "";
  20. return obj->mData != nullptr ? obj->mData->mUUID : Blank;
  21. }
  22. void setUUID(TResourceHandleBase<false>* obj, String& uuid) { obj->mData->mUUID = uuid; }
  23. public:
  24. ResourceHandleRTTI()
  25. {
  26. addPlainField("mUUID", 0, &ResourceHandleRTTI::getUUID, &ResourceHandleRTTI::setUUID);
  27. }
  28. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  29. {
  30. TResourceHandleBase<false>* resourceHandle = static_cast<TResourceHandleBase<false>*>(obj);
  31. if(resourceHandle->mData && resourceHandle->mData->mUUID != "")
  32. {
  33. HResource loadedResource = gResources()._getResourceHandle(resourceHandle->mData->mUUID);
  34. resourceHandle->releaseRef();
  35. resourceHandle->mData = loadedResource.mData;
  36. resourceHandle->addRef();
  37. }
  38. }
  39. const String& getRTTIName() override
  40. {
  41. static String name = "ResourceHandleBase";
  42. return name;
  43. }
  44. UINT32 getRTTIId() override
  45. {
  46. return TID_ResourceHandle;
  47. }
  48. SPtr<IReflectable> newRTTIObject() override
  49. {
  50. SPtr<TResourceHandleBase<false>> obj = bs_shared_ptr<TResourceHandleBase<false>>
  51. (new (bs_alloc<TResourceHandleBase<false>>()) TResourceHandleBase<false>());
  52. obj->mData = bs_shared_ptr_new<ResourceHandleData>();
  53. obj->mData->mRefCount++;
  54. return obj;
  55. }
  56. };
  57. class BS_CORE_EXPORT WeakResourceHandleRTTI : public RTTIType<TResourceHandleBase<true>, IReflectable, WeakResourceHandleRTTI>
  58. {
  59. private:
  60. String& getUUID(TResourceHandleBase<true>* obj)
  61. {
  62. static String Blank = "";
  63. return obj->mData != nullptr ? obj->mData->mUUID : Blank;
  64. }
  65. void setUUID(TResourceHandleBase<true>* obj, String& uuid) { obj->mData->mUUID = uuid; }
  66. public:
  67. WeakResourceHandleRTTI()
  68. {
  69. addPlainField("mUUID", 0, &WeakResourceHandleRTTI::getUUID, &WeakResourceHandleRTTI::setUUID);
  70. }
  71. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  72. {
  73. TResourceHandleBase<true>* resourceHandle = static_cast<TResourceHandleBase<true>*>(obj);
  74. if (resourceHandle->mData && resourceHandle->mData->mUUID != "")
  75. {
  76. HResource loadedResource = gResources()._getResourceHandle(resourceHandle->mData->mUUID);
  77. resourceHandle->mData = loadedResource.mData;
  78. }
  79. }
  80. const String& getRTTIName() override
  81. {
  82. static String name = "WeakResourceHandleBase";
  83. return name;
  84. }
  85. UINT32 getRTTIId() override
  86. {
  87. return TID_WeakResourceHandle;
  88. }
  89. SPtr<IReflectable> newRTTIObject() override
  90. {
  91. SPtr<TResourceHandleBase<true>> obj = bs_shared_ptr<TResourceHandleBase<true>>
  92. (new (bs_alloc<TResourceHandleBase<true>>()) TResourceHandleBase<true>());
  93. obj->mData = bs_shared_ptr_new<ResourceHandleData>();
  94. return obj;
  95. }
  96. };
  97. /** @} */
  98. /** @endcond */
  99. }