BsResourceRTTI.h 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #pragma once
  2. #include "BsCorePrerequisites.h"
  3. #include "BsRTTIType.h"
  4. #include "BsResource.h"
  5. #include "BsResourceMetaData.h"
  6. namespace BansheeEngine
  7. {
  8. class BS_CORE_EXPORT ResourceRTTI : public RTTIType<Resource, IReflectable, ResourceRTTI>
  9. {
  10. private:
  11. UINT32& getSize(Resource* obj) { return obj->mSize; }
  12. void setSize(Resource* obj, UINT32& size) { obj->mSize = size; }
  13. ResourceMetaDataPtr getMetaData(Resource* obj) { return obj->mMetaData; }
  14. void setMetaData(Resource* obj, ResourceMetaDataPtr value) { obj->mMetaData = value; }
  15. public:
  16. ResourceRTTI()
  17. {
  18. addPlainField("mSize", 0, &ResourceRTTI::getSize, &ResourceRTTI::setSize);
  19. addReflectablePtrField("mMetaData", 1, &ResourceRTTI::getMetaData, &ResourceRTTI::setMetaData);
  20. }
  21. virtual const String& getRTTIName()
  22. {
  23. static String name = "Resource";
  24. return name;
  25. }
  26. virtual UINT32 getRTTIId()
  27. {
  28. return 100;
  29. }
  30. virtual std::shared_ptr<IReflectable> newRTTIObject()
  31. {
  32. BS_EXCEPT(InternalErrorException, "Cannot instantiate an abstract class.");
  33. }
  34. };
  35. }