#pragma once #include "BsScriptEnginePrerequisites.h" #include "CmIReflectable.h" #include namespace BansheeEngine { enum class ScriptPrimitiveType { Bool, Char, I8, U8, I16, U16, I32, U32, I64, U64, Float, Double, String, TextureRef, SpriteTextureRef, SceneObjectRef, ComponentRef }; enum class ScriptFieldFlags { Serializable = 0x01, Inspectable = 0x02 }; class BS_SCR_BE_EXPORT ScriptSerializableTypeInfo : public CM::IReflectable { /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableTypeInfoRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoPrimitive : public ScriptSerializableTypeInfo { public: ScriptPrimitiveType mType; /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableTypeInfoPrimitiveRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoObject : public ScriptSerializableTypeInfo { public: CM::String mTypeNamespace; CM::String mTypeName; /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableTypeInfoObjectRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoArray : public ScriptSerializableTypeInfo { public: ScriptSerializableTypeInfoPtr mElementType; CM::UINT32 mRank; /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableTypeInfoArrayRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; class BS_SCR_BE_EXPORT ScriptSerializableFieldInfo : public ScriptSerializableTypeInfo { public: ScriptSerializableFieldInfo(); virtual ~ScriptSerializableFieldInfo() { } CM::String mName; CM::UINT32 mFieldId; ScriptSerializableTypeInfoPtr mTypeInfo; ScriptFieldFlags mFlags; MonoField* mMonoField; /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableFieldInfoRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; class BS_SCR_BE_EXPORT ScriptSerializableObjectInfo : public CM::IReflectable { public: ScriptSerializableObjectInfo(); CM::String mNamespace; CM::String mTypeName; CM::UINT32 mTypeId; MonoClass* mMonoClass; CM::UnorderedMap::type mFieldNameToId; CM::UnorderedMap>::type mFields; std::weak_ptr mBaseClass; CM::Vector>::type mDerivedClasses; CM::String getFullTypeName() const { return mNamespace + "." + mTypeName; } /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableObjectInfoRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; class BS_SCR_BE_EXPORT ScriptSerializableAssemblyInfo : public CM::IReflectable { public: CM::String mName; CM::UnorderedMap::type mTypeNameToId; CM::UnorderedMap>::type mObjectInfos; /************************************************************************/ /* RTTI */ /************************************************************************/ public: friend class ScriptSerializableAssemblyInfoRTTI; static CM::RTTITypeBase* getRTTIStatic(); virtual CM::RTTITypeBase* getRTTI() const; }; }