BsScriptSerializableObjectInfo.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "CmIReflectable.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. enum class ScriptPrimitiveType
  8. {
  9. Bool,
  10. Char,
  11. I8,
  12. U8,
  13. I16,
  14. U16,
  15. I32,
  16. U32,
  17. I64,
  18. U64,
  19. Float,
  20. Double,
  21. String,
  22. TextureRef,
  23. SpriteTextureRef,
  24. SceneObjectRef,
  25. ComponentRef
  26. };
  27. enum class ScriptFieldFlags
  28. {
  29. Serializable = 0x01,
  30. Inspectable = 0x02
  31. };
  32. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfo : public CM::IReflectable
  33. {
  34. /************************************************************************/
  35. /* RTTI */
  36. /************************************************************************/
  37. public:
  38. friend class ScriptSerializableTypeInfoRTTI;
  39. static CM::RTTITypeBase* getRTTIStatic();
  40. virtual CM::RTTITypeBase* getRTTI() const;
  41. };
  42. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoPrimitive : public ScriptSerializableTypeInfo
  43. {
  44. public:
  45. ScriptPrimitiveType mType;
  46. /************************************************************************/
  47. /* RTTI */
  48. /************************************************************************/
  49. public:
  50. friend class ScriptSerializableTypeInfoPrimitiveRTTI;
  51. static CM::RTTITypeBase* getRTTIStatic();
  52. virtual CM::RTTITypeBase* getRTTI() const;
  53. };
  54. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoObject : public ScriptSerializableTypeInfo
  55. {
  56. public:
  57. CM::String mTypeNamespace;
  58. CM::String mTypeName;
  59. /************************************************************************/
  60. /* RTTI */
  61. /************************************************************************/
  62. public:
  63. friend class ScriptSerializableTypeInfoObjectRTTI;
  64. static CM::RTTITypeBase* getRTTIStatic();
  65. virtual CM::RTTITypeBase* getRTTI() const;
  66. };
  67. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoArray : public ScriptSerializableTypeInfo
  68. {
  69. public:
  70. ScriptSerializableTypeInfoPtr mElementType;
  71. CM::UINT32 mRank;
  72. /************************************************************************/
  73. /* RTTI */
  74. /************************************************************************/
  75. public:
  76. friend class ScriptSerializableTypeInfoArrayRTTI;
  77. static CM::RTTITypeBase* getRTTIStatic();
  78. virtual CM::RTTITypeBase* getRTTI() const;
  79. };
  80. class BS_SCR_BE_EXPORT ScriptSerializableFieldInfo : public ScriptSerializableTypeInfo
  81. {
  82. public:
  83. ScriptSerializableFieldInfo();
  84. virtual ~ScriptSerializableFieldInfo() { }
  85. CM::String mName;
  86. CM::UINT32 mFieldId;
  87. ScriptSerializableTypeInfoPtr mTypeInfo;
  88. ScriptFieldFlags mFlags;
  89. MonoField* mMonoField;
  90. /************************************************************************/
  91. /* RTTI */
  92. /************************************************************************/
  93. public:
  94. friend class ScriptSerializableFieldInfoRTTI;
  95. static CM::RTTITypeBase* getRTTIStatic();
  96. virtual CM::RTTITypeBase* getRTTI() const;
  97. };
  98. class BS_SCR_BE_EXPORT ScriptSerializableObjectInfo : public CM::IReflectable
  99. {
  100. public:
  101. ScriptSerializableObjectInfo();
  102. CM::String mNamespace;
  103. CM::String mTypeName;
  104. CM::UINT32 mTypeId;
  105. MonoClass* mMonoClass;
  106. CM::UnorderedMap<CM::String, CM::UINT32>::type mFieldNameToId;
  107. CM::UnorderedMap<CM::UINT32, std::shared_ptr<ScriptSerializableFieldInfo>>::type mFields;
  108. std::weak_ptr<ScriptSerializableObjectInfo> mBaseClass;
  109. CM::Vector<std::weak_ptr<ScriptSerializableObjectInfo>>::type mDerivedClasses;
  110. CM::String getFullTypeName() const { return mNamespace + "." + mTypeName; }
  111. /************************************************************************/
  112. /* RTTI */
  113. /************************************************************************/
  114. public:
  115. friend class ScriptSerializableObjectInfoRTTI;
  116. static CM::RTTITypeBase* getRTTIStatic();
  117. virtual CM::RTTITypeBase* getRTTI() const;
  118. };
  119. class BS_SCR_BE_EXPORT ScriptSerializableAssemblyInfo : public CM::IReflectable
  120. {
  121. public:
  122. CM::String mName;
  123. CM::UnorderedMap<CM::String, CM::UINT32>::type mTypeNameToId;
  124. CM::UnorderedMap<CM::UINT32, std::shared_ptr<ScriptSerializableObjectInfo>>::type mObjectInfos;
  125. /************************************************************************/
  126. /* RTTI */
  127. /************************************************************************/
  128. public:
  129. friend class ScriptSerializableAssemblyInfoRTTI;
  130. static CM::RTTITypeBase* getRTTIStatic();
  131. virtual CM::RTTITypeBase* getRTTI() const;
  132. };
  133. }