BsProjectResourceMetaRTTI.h 4.3 KB

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