BsProjectResourceMetaRTTI.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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,
  55. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  56. addReflectablePtrField("mPreviewIcon32", 6,
  57. &ProjectResourceMetaRTTI::geticon32, &ProjectResourceMetaRTTI::seticon32,
  58. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  59. addReflectablePtrField("mPreviewIcon48", 7,
  60. &ProjectResourceMetaRTTI::geticon48, &ProjectResourceMetaRTTI::seticon48,
  61. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  62. addReflectablePtrField("mPreviewIcon64", 8,
  63. &ProjectResourceMetaRTTI::geticon64, &ProjectResourceMetaRTTI::seticon64,
  64. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  65. addReflectablePtrField("mPreviewIcon96", 9,
  66. &ProjectResourceMetaRTTI::geticon96, &ProjectResourceMetaRTTI::seticon96,
  67. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  68. addReflectablePtrField("mPreviewIcon128", 10,
  69. &ProjectResourceMetaRTTI::geticon128, &ProjectResourceMetaRTTI::seticon128,
  70. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  71. addReflectablePtrField("mPreviewIcon192", 11,
  72. &ProjectResourceMetaRTTI::geticon192, &ProjectResourceMetaRTTI::seticon192,
  73. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  74. addReflectablePtrField("mPreviewIcon256", 12,
  75. &ProjectResourceMetaRTTI::geticon256, &ProjectResourceMetaRTTI::seticon256,
  76. RTTIFieldInfo(RTTIFieldFlag::SkipInReferenceSearch));
  77. }
  78. const String& getRTTIName() override
  79. {
  80. static String name = "ProjectResourceMeta";
  81. return name;
  82. }
  83. UINT32 getRTTIId() override
  84. {
  85. return TID_ProjectResourceMeta;
  86. }
  87. SPtr<IReflectable> newRTTIObject() override
  88. {
  89. return ProjectResourceMeta::createEmpty();
  90. }
  91. };
  92. class ProjectFileMetaRTTI : public RTTIType<ProjectFileMeta, IReflectable, ProjectFileMetaRTTI>
  93. {
  94. private:
  95. BS_BEGIN_RTTI_MEMBERS
  96. BS_RTTI_MEMBER_REFLPTR(mImportOptions, 1)
  97. BS_RTTI_MEMBER_PLAIN(mIncludeInBuild, 4)
  98. BS_RTTI_MEMBER_REFLPTR_ARRAY(mResourceMetaData, 5)
  99. BS_RTTI_MEMBER_REFLPTR_ARRAY(mInactiveResourceMetaData, 6)
  100. BS_END_RTTI_MEMBERS
  101. public:
  102. const String& getRTTIName() override
  103. {
  104. static String name = "ProjectFileMeta";
  105. return name;
  106. }
  107. UINT32 getRTTIId() override
  108. {
  109. return TID_ProjectFileMeta;
  110. }
  111. SPtr<IReflectable> newRTTIObject() override
  112. {
  113. return ProjectFileMeta::createEmpty();
  114. }
  115. };
  116. /** @} */
  117. /** @endcond */
  118. }