BsResourceHandleRTTI.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. //__________________________ Banshee Project - A modern game development toolkit _________________________________//
  2. //_____________________________________ www.banshee-project.com __________________________________________________//
  3. //________________________ Copyright (c) 2014 Marko Pintera. All rights reserved. ________________________________//
  4. #pragma once
  5. #include "BsCorePrerequisites.h"
  6. #include "BsRTTIType.h"
  7. #include "BsResourceHandle.h"
  8. #include "BsResources.h"
  9. namespace BansheeEngine
  10. {
  11. class BS_CORE_EXPORT ResourceHandleRTTI : public RTTIType<ResourceHandleBase, IReflectable, ResourceHandleRTTI>
  12. {
  13. private:
  14. String& getUUID(ResourceHandleBase* obj)
  15. {
  16. static String Blank = "";
  17. return obj->mData != nullptr ? obj->mData->mUUID : Blank;
  18. }
  19. void setUUID(ResourceHandleBase* obj, String& uuid) { obj->mData->mUUID = uuid; }
  20. public:
  21. ResourceHandleRTTI()
  22. {
  23. addPlainField("mUUID", 0, &ResourceHandleRTTI::getUUID, &ResourceHandleRTTI::setUUID);
  24. }
  25. void onDeserializationEnded(IReflectable* obj)
  26. {
  27. ResourceHandleBase* resourceHandle = static_cast<ResourceHandleBase*>(obj);
  28. if(resourceHandle->mData && resourceHandle->mData->mUUID != "")
  29. {
  30. // NOTE: This will cause Resources::load to be called recursively with resources that contain other
  31. // resources. This might cause problems. Keep this note here as a warning until I prove otherwise.
  32. HResource loadedResource = gResources().loadFromUUID(resourceHandle->mData->mUUID);
  33. if(loadedResource)
  34. resourceHandle->_setHandleData(loadedResource.getInternalPtr(), resourceHandle->mData->mUUID);
  35. }
  36. }
  37. virtual const String& getRTTIName()
  38. {
  39. static String name = "ResourceHandleBase";
  40. return name;
  41. }
  42. virtual UINT32 getRTTIId()
  43. {
  44. return TID_ResourceHandle;
  45. }
  46. virtual std::shared_ptr<IReflectable> newRTTIObject()
  47. {
  48. std::shared_ptr<ResourceHandleBase> obj = bs_shared_ptr<ResourceHandleBase, PoolAlloc>(new (bs_alloc<ResourceHandleBase, PoolAlloc>()) ResourceHandleBase());
  49. obj->mData = bs_shared_ptr<ResourceHandleData>();
  50. return obj;
  51. }
  52. };
  53. }