| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- #pragma once
- #include "BsScriptEnginePrerequisites.h"
- #include "CmIReflectable.h"
- #include <mono/jit/jit.h>
- 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
- {
- public:
- virtual ~ScriptSerializableTypeInfo() {}
- virtual bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const = 0;
- virtual bool isTypeLoaded() const = 0;
- virtual ::MonoClass* getMonoClass() const = 0;
- /************************************************************************/
- /* 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;
- bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
- bool isTypeLoaded() const;
- ::MonoClass* getMonoClass() const;
- /************************************************************************/
- /* 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;
- bool mValueType;
- bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
- bool isTypeLoaded() const;
- ::MonoClass* getMonoClass() const;
- /************************************************************************/
- /* 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;
- bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
- bool isTypeLoaded() const;
- ::MonoClass* getMonoClass() const;
- /************************************************************************/
- /* RTTI */
- /************************************************************************/
- public:
- friend class ScriptSerializableTypeInfoArrayRTTI;
- static CM::RTTITypeBase* getRTTIStatic();
- virtual CM::RTTITypeBase* getRTTI() const;
- };
- class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoList : public ScriptSerializableTypeInfo
- {
- public:
- ScriptSerializableTypeInfoPtr mElementType;
- bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
- bool isTypeLoaded() const;
- ::MonoClass* getMonoClass() const;
- /************************************************************************/
- /* RTTI */
- /************************************************************************/
- public:
- friend class ScriptSerializableTypeInfoListRTTI;
- static CM::RTTITypeBase* getRTTIStatic();
- virtual CM::RTTITypeBase* getRTTI() const;
- };
- class BS_SCR_BE_EXPORT ScriptSerializableTypeInfoDictionary : public ScriptSerializableTypeInfo
- {
- public:
- ScriptSerializableTypeInfoPtr mKeyType;
- ScriptSerializableTypeInfoPtr mValueType;
- bool matches(const ScriptSerializableTypeInfoPtr& typeInfo) const;
- bool isTypeLoaded() const;
- ::MonoClass* getMonoClass() const;
- /************************************************************************/
- /* RTTI */
- /************************************************************************/
- public:
- friend class ScriptSerializableTypeInfoDictionaryRTTI;
- static CM::RTTITypeBase* getRTTIStatic();
- virtual CM::RTTITypeBase* getRTTI() const;
- };
- class BS_SCR_BE_EXPORT ScriptSerializableFieldInfo : public CM::IReflectable
- {
- public:
- ScriptSerializableFieldInfo();
- CM::String mName;
- CM::UINT32 mFieldId;
- ScriptSerializableTypeInfoPtr mTypeInfo;
- ScriptFieldFlags mFlags;
- MonoField* mMonoField;
- bool isSerializable() const { return ((CM::UINT32)mFlags & (CM::UINT32)ScriptFieldFlags::Serializable) != 0; }
- /************************************************************************/
- /* 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();
- ScriptSerializableTypeInfoObjectPtr mTypeInfo;
- CM::UINT32 mTypeId;
- MonoClass* mMonoClass;
- CM::UnorderedMap<CM::String, CM::UINT32>::type mFieldNameToId;
- CM::UnorderedMap<CM::UINT32, std::shared_ptr<ScriptSerializableFieldInfo>>::type mFields;
- std::shared_ptr<ScriptSerializableObjectInfo> mBaseClass;
- CM::Vector<std::weak_ptr<ScriptSerializableObjectInfo>>::type mDerivedClasses;
- CM::String getFullTypeName() const { return mTypeInfo->mTypeNamespace + "." + mTypeInfo->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<CM::String, CM::UINT32>::type mTypeNameToId;
- CM::UnorderedMap<CM::UINT32, std::shared_ptr<ScriptSerializableObjectInfo>>::type mObjectInfos;
- /************************************************************************/
- /* RTTI */
- /************************************************************************/
- public:
- friend class ScriptSerializableAssemblyInfoRTTI;
- static CM::RTTITypeBase* getRTTIStatic();
- virtual CM::RTTITypeBase* getRTTI() const;
- };
- }
|