BsResourceHandleRTTI.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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)
  23. {
  24. ResourceHandleBase* resourceHandle = static_cast<ResourceHandleBase*>(obj);
  25. if(resourceHandle->mData && resourceHandle->mData->mUUID != "")
  26. {
  27. // NOTE: This will cause Resources::load to be called recursively with resources that contain other
  28. // resources. This might cause problems. Keep this note here as a warning until I prove otherwise.
  29. HResource loadedResource = gResources().loadFromUUID(resourceHandle->mData->mUUID);
  30. if(loadedResource)
  31. resourceHandle->_setHandleData(loadedResource.getInternalPtr(), resourceHandle->mData->mUUID);
  32. }
  33. }
  34. virtual const String& getRTTIName()
  35. {
  36. static String name = "ResourceHandleBase";
  37. return name;
  38. }
  39. virtual UINT32 getRTTIId()
  40. {
  41. return TID_ResourceHandle;
  42. }
  43. virtual std::shared_ptr<IReflectable> newRTTIObject()
  44. {
  45. std::shared_ptr<ResourceHandleBase> obj = bs_shared_ptr<ResourceHandleBase, PoolAlloc>(new (bs_alloc<ResourceHandleBase, PoolAlloc>()) ResourceHandleBase());
  46. obj->mData = bs_shared_ptr<ResourceHandleData>();
  47. return obj;
  48. }
  49. };
  50. }