BsScriptSerializableObjectInfo.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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. public:
  35. virtual bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const = 0;
  36. /************************************************************************/
  37. /* RTTI */
  38. /************************************************************************/
  39. public:
  40. friend class ScriptSerializableTypeInfoRTTI;
  41. static CM::RTTITypeBase* getRTTIStatic();
  42. virtual CM::RTTITypeBase* getRTTI() const;
  43. };
  44. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoPrimitive : public ScriptSerializableTypeInfo
  45. {
  46. public:
  47. ScriptPrimitiveType mType;
  48. bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
  49. /************************************************************************/
  50. /* RTTI */
  51. /************************************************************************/
  52. public:
  53. friend class ScriptSerializableTypeInfoPrimitiveRTTI;
  54. static CM::RTTITypeBase* getRTTIStatic();
  55. virtual CM::RTTITypeBase* getRTTI() const;
  56. };
  57. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoObject : public ScriptSerializableTypeInfo
  58. {
  59. public:
  60. CM::String mTypeNamespace;
  61. CM::String mTypeName;
  62. bool mValueType;
  63. bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
  64. /************************************************************************/
  65. /* RTTI */
  66. /************************************************************************/
  67. public:
  68. friend class ScriptSerializableTypeInfoObjectRTTI;
  69. static CM::RTTITypeBase* getRTTIStatic();
  70. virtual CM::RTTITypeBase* getRTTI() const;
  71. };
  72. class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoArray : public ScriptSerializableTypeInfo
  73. {
  74. public:
  75. ScriptSerializableTypeInfoPtr mElementType;
  76. CM::UINT32 mRank;
  77. bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
  78. /************************************************************************/
  79. /* RTTI */
  80. /************************************************************************/
  81. public:
  82. friend class ScriptSerializableTypeInfoArrayRTTI;
  83. static CM::RTTITypeBase* getRTTIStatic();
  84. virtual CM::RTTITypeBase* getRTTI() const;
  85. };
  86. class BS_SCR_BE_EXPORT ScriptSerializableFieldInfo : public CM::IReflectable
  87. {
  88. public:
  89. ScriptSerializableFieldInfo();
  90. virtual ~ScriptSerializableFieldInfo() { }
  91. CM::String mName;
  92. CM::UINT32 mFieldId;
  93. ScriptSerializableTypeInfoPtr mTypeInfo;
  94. ScriptFieldFlags mFlags;
  95. MonoField* mMonoField;
  96. bool isSerializable() const { return ((CM::UINT32)mFlags & (CM::UINT32)ScriptFieldFlags::Serializable) != 0; }
  97. /************************************************************************/
  98. /* RTTI */
  99. /************************************************************************/
  100. public:
  101. friend class ScriptSerializableFieldInfoRTTI;
  102. static CM::RTTITypeBase* getRTTIStatic();
  103. virtual CM::RTTITypeBase* getRTTI() const;
  104. };
  105. class BS_SCR_BE_EXPORT ScriptSerializableObjectInfo : public CM::IReflectable
  106. {
  107. public:
  108. ScriptSerializableObjectInfo();
  109. ScriptSerializableTypeInfoObjectPtr mTypeInfo;
  110. CM::UINT32 mTypeId;
  111. MonoClass* mMonoClass;
  112. CM::UnorderedMap<CM::String, CM::UINT32>::type mFieldNameToId;
  113. CM::UnorderedMap<CM::UINT32, std::shared_ptr<ScriptSerializableFieldInfo>>::type mFields;
  114. std::shared_ptr<ScriptSerializableObjectInfo> mBaseClass;
  115. CM::Vector<std::weak_ptr<ScriptSerializableObjectInfo>>::type mDerivedClasses;
  116. CM::String getFullTypeName() const { return mTypeInfo->mTypeNamespace + "." + mTypeInfo->mTypeName; }
  117. /************************************************************************/
  118. /* RTTI */
  119. /************************************************************************/
  120. public:
  121. friend class ScriptSerializableObjectInfoRTTI;
  122. static CM::RTTITypeBase* getRTTIStatic();
  123. virtual CM::RTTITypeBase* getRTTI() const;
  124. };
  125. class BS_SCR_BE_EXPORT ScriptSerializableAssemblyInfo : public CM::IReflectable
  126. {
  127. public:
  128. CM::String mName;
  129. CM::UnorderedMap<CM::String, CM::UINT32>::type mTypeNameToId;
  130. CM::UnorderedMap<CM::UINT32, std::shared_ptr<ScriptSerializableObjectInfo>>::type mObjectInfos;
  131. /************************************************************************/
  132. /* RTTI */
  133. /************************************************************************/
  134. public:
  135. friend class ScriptSerializableAssemblyInfoRTTI;
  136. static CM::RTTITypeBase* getRTTIStatic();
  137. virtual CM::RTTITypeBase* getRTTI() const;
  138. };
  139. }