BsProjectResourceMetaRTTI.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsPrerequisites.h"
  5. #include "Reflection/BsRTTIType.h"
  6. #include "Reflection/BsRTTIPlain.h"
  7. #include "RTTI/BsUUIDRTTI.h"
  8. #include "RTTI/BsStringRTTI.h"
  9. #include "Library/BsProjectResourceMeta.h"
  10. #include "Resources/BsResourceMetaData.h"
  11. #include "Importer/BsImportOptions.h"
  12. #include "Resources/BsResources.h"
  13. #include "Image/BsTexture.h"
  14. namespace bs
  15. {
  16. /** @cond RTTI */
  17. /** @addtogroup RTTI-Impl-Editor
  18. * @{
  19. */
  20. class ProjectResourceMetaRTTI : public RTTIType<ProjectResourceMeta, IReflectable, ProjectResourceMetaRTTI>
  21. {
  22. private:
  23. BS_BEGIN_RTTI_MEMBERS
  24. BS_RTTI_MEMBER_PLAIN(mName, 0)
  25. BS_RTTI_MEMBER_PLAIN(mUUID, 1)
  26. BS_RTTI_MEMBER_PLAIN(mTypeId, 2)
  27. BS_RTTI_MEMBER_REFLPTR(mResourceMeta, 3)
  28. BS_RTTI_MEMBER_REFLPTR(mUserData, 4)
  29. BS_END_RTTI_MEMBERS
  30. // We want to store textures directly in this object rather than referencing them externally, so we need to strip
  31. // away resource handles before saving them, and restore afterwards
  32. #define GETTER_SETTER_ICON(icon) \
  33. SPtr<Texture> get##icon(ProjectResourceMeta* obj) \
  34. { \
  35. if(obj->mPreviewIcons.icon.isLoaded(false)) \
  36. return obj->mPreviewIcons.icon.getInternalPtr(); \
  37. \
  38. return nullptr; \
  39. } \
  40. \
  41. void set##icon(ProjectResourceMeta* obj, SPtr<Texture> data) \
  42. { \
  43. obj->mPreviewIcons.icon = static_resource_cast<Texture>(gResources()._createResourceHandle(data)); \
  44. } \
  45. GETTER_SETTER_ICON(icon16)
  46. GETTER_SETTER_ICON(icon32)
  47. GETTER_SETTER_ICON(icon48)
  48. GETTER_SETTER_ICON(icon64)
  49. GETTER_SETTER_ICON(icon96)
  50. GETTER_SETTER_ICON(icon128)
  51. GETTER_SETTER_ICON(icon192)
  52. GETTER_SETTER_ICON(icon256)
  53. public:
  54. ProjectResourceMetaRTTI()
  55. {
  56. addReflectablePtrField("mPreviewIcon16", 5,
  57. &ProjectResourceMetaRTTI::geticon16, &ProjectResourceMetaRTTI::seticon16,
  58. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  59. addReflectablePtrField("mPreviewIcon32", 6,
  60. &ProjectResourceMetaRTTI::geticon32, &ProjectResourceMetaRTTI::seticon32,
  61. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  62. addReflectablePtrField("mPreviewIcon48", 7,
  63. &ProjectResourceMetaRTTI::geticon48, &ProjectResourceMetaRTTI::seticon48,
  64. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  65. addReflectablePtrField("mPreviewIcon64", 8,
  66. &ProjectResourceMetaRTTI::geticon64, &ProjectResourceMetaRTTI::seticon64,
  67. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  68. addReflectablePtrField("mPreviewIcon96", 9,
  69. &ProjectResourceMetaRTTI::geticon96, &ProjectResourceMetaRTTI::seticon96,
  70. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  71. addReflectablePtrField("mPreviewIcon128", 10,
  72. &ProjectResourceMetaRTTI::geticon128, &ProjectResourceMetaRTTI::seticon128,
  73. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  74. addReflectablePtrField("mPreviewIcon192", 11,
  75. &ProjectResourceMetaRTTI::geticon192, &ProjectResourceMetaRTTI::seticon192,
  76. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  77. addReflectablePtrField("mPreviewIcon256", 12,
  78. &ProjectResourceMetaRTTI::geticon256, &ProjectResourceMetaRTTI::seticon256,
  79. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  80. }
  81. const String& getRTTIName() override
  82. {
  83. static String name = "ProjectResourceMeta";
  84. return name;
  85. }
  86. UINT32 getRTTIId() override
  87. {
  88. return TID_ProjectResourceMeta;
  89. }
  90. SPtr<IReflectable> newRTTIObject() override
  91. {
  92. return ProjectResourceMeta::createEmpty();
  93. }
  94. };
  95. class ProjectFileMetaRTTI : public RTTIType<ProjectFileMeta, IReflectable, ProjectFileMetaRTTI>
  96. {
  97. private:
  98. BS_BEGIN_RTTI_MEMBERS
  99. BS_RTTI_MEMBER_REFLPTR(mImportOptions, 1)
  100. BS_RTTI_MEMBER_PLAIN(mIncludeInBuild, 4)
  101. BS_RTTI_MEMBER_REFLPTR_ARRAY(mResourceMetaData, 5)
  102. BS_RTTI_MEMBER_REFLPTR_ARRAY(mInactiveResourceMetaData, 6)
  103. BS_END_RTTI_MEMBERS
  104. public:
  105. const String& getRTTIName() override
  106. {
  107. static String name = "ProjectFileMeta";
  108. return name;
  109. }
  110. UINT32 getRTTIId() override
  111. {
  112. return TID_ProjectFileMeta;
  113. }
  114. SPtr<IReflectable> newRTTIObject() override
  115. {
  116. return ProjectFileMeta::createEmpty();
  117. }
  118. };
  119. /** @} */
  120. /** @endcond */
  121. }