BsScriptSerializableObject.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "CmIReflectable.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BE_EXPORT ScriptSerializableObject : public CM::IReflectable
  8. {
  9. private:
  10. struct ConstructPrivately {};
  11. public:
  12. ScriptSerializableObject(const ConstructPrivately& dummy, ScriptSerializableObjectInfoPtr objInfo, MonoObject* managedInstance);
  13. ScriptSerializableObject(const ConstructPrivately& dummy);
  14. MonoObject* getManagedInstance() const { return mManagedInstance; }
  15. ScriptSerializableObjectInfoPtr getObjectInfo() const { return mObjInfo; }
  16. static ScriptSerializableObjectPtr create(MonoObject* managedInstance);
  17. protected:
  18. ScriptSerializableObjectInfoPtr mObjInfo;
  19. MonoObject* mManagedInstance;
  20. CM::Vector<ScriptSerializableFieldDataEntryPtr>::type mFieldEntries;
  21. void setFieldData(const ScriptSerializableFieldInfoPtr& fieldInfo, const ScriptSerializableFieldDataPtr& val);
  22. ScriptSerializableFieldDataPtr getFieldData(const ScriptSerializableFieldInfoPtr& fieldInfo);
  23. void setValue(const ScriptSerializableFieldInfoPtr& fieldInfo, void* val);
  24. void* getValue(const ScriptSerializableFieldInfoPtr& fieldInfo);
  25. /************************************************************************/
  26. /* RTTI */
  27. /************************************************************************/
  28. static ScriptSerializableObjectPtr createEmpty();
  29. public:
  30. friend class ScriptSerializableObjectRTTI;
  31. static CM::RTTITypeBase* getRTTIStatic();
  32. virtual CM::RTTITypeBase* getRTTI() const;
  33. };
  34. }