BsScriptSerializableObject.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. static ScriptSerializableObjectPtr create(MonoObject* managedInstance);
  16. protected:
  17. ScriptSerializableObjectInfoPtr mObjInfo;
  18. MonoObject* mManagedInstance;
  19. CM::Vector<ScriptSerializableFieldDataEntryPtr>::type mFieldEntries;
  20. /**
  21. * @brief Populates internal field data based on currently active managed instance.
  22. */
  23. void serializeManagedInstance();
  24. /**
  25. * @brief Creates a new managed instance and populates it with stored field data.
  26. */
  27. void deserializeManagedInstance();
  28. void setFieldData(const ScriptSerializableFieldInfoPtr& fieldInfo, const ScriptSerializableFieldDataPtr& val);
  29. ScriptSerializableFieldDataPtr getFieldData(const ScriptSerializableFieldInfoPtr& fieldInfo);
  30. /************************************************************************/
  31. /* RTTI */
  32. /************************************************************************/
  33. static ScriptSerializableObjectPtr createEmpty();
  34. public:
  35. friend class ScriptSerializableObjectRTTI;
  36. static CM::RTTITypeBase* getRTTIStatic();
  37. virtual CM::RTTITypeBase* getRTTI() const;
  38. };
  39. }