BsResourceHandleRTTI.h 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsResourceHandle.h"
  5. #include "BsResources.h"
  6. namespace BansheeEngine
  7. {
  8. class BS_CORE_EXPORT ResourceHandleRTTI : public RTTIType<ResourceHandleBase, IReflectable, ResourceHandleRTTI>
  9. {
  10. private:
  11. String& getUUID(ResourceHandleBase* obj)
  12. {
  13. static String Blank = "";
  14. return obj->mData != nullptr ? obj->mData->mUUID : Blank;
  15. }
  16. void setUUID(ResourceHandleBase* obj, String& uuid) { obj->mData->mUUID = uuid; }
  17. public:
  18. ResourceHandleRTTI()
  19. {
  20. addPlainField("mUUID", 0, &ResourceHandleRTTI::getUUID, &ResourceHandleRTTI::setUUID);
  21. }
  22. void onDeserializationEnded(IReflectable* obj) override
  23. {
  24. ResourceHandleBase* resourceHandle = static_cast<ResourceHandleBase*>(obj);
  25. if(resourceHandle->mData && resourceHandle->mData->mUUID != "")
  26. {
  27. // Note: Resource system needs to be aware of this handle before this point is reached so it
  28. // can queue the load. This is handled automatically by Resources but is something to be aware of
  29. // if you are loading resources in some other way.
  30. HResource loadedResource = gResources()._getResourceHandle(resourceHandle->mData->mUUID);
  31. if(loadedResource)
  32. resourceHandle->_setHandleData(loadedResource.getHandleData());
  33. }
  34. }
  35. virtual const String& getRTTIName() override
  36. {
  37. static String name = "ResourceHandleBase";
  38. return name;
  39. }
  40. virtual UINT32 getRTTIId() override
  41. {
  42. return TID_ResourceHandle;
  43. }
  44. virtual std::shared_ptr<IReflectable> newRTTIObject() override
  45. {
  46. std::shared_ptr<ResourceHandleBase> obj = bs_shared_ptr<ResourceHandleBase>(new (bs_alloc<ResourceHandleBase>()) ResourceHandleBase());
  47. obj->mData = bs_shared_ptr_new<ResourceHandleData>();
  48. return obj;
  49. }
  50. };
  51. }