BsManagedComponent.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsComponent.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. struct ComponentBackupData;
  8. class BS_SCR_BE_EXPORT ManagedComponent : public Component
  9. {
  10. public:
  11. ~ManagedComponent();
  12. MonoObject* getManagedInstance() const { return mManagedInstance; }
  13. MonoReflectionType* getRuntimeType() const { return mRuntimeType; }
  14. const String& getManagedNamespace() const { return mNamespace; }
  15. const String& getManagedTypeName() const { return mTypeName; }
  16. const String& getManagedFullTypeName() const { return mFullTypeName; }
  17. ComponentBackupData backup(bool clearExisting = true);
  18. void restore(MonoObject* instance, const ComponentBackupData& data, bool missingType);
  19. void triggerOnReset();
  20. private:
  21. typedef void(__stdcall *OnInitializedThunkDef) (MonoObject*, MonoException**);
  22. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  23. typedef void(__stdcall *OnDestroyedThunkDef) (MonoObject*, MonoException**);
  24. typedef void(__stdcall *OnResetThunkDef) (MonoObject*, MonoException**);
  25. MonoObject* mManagedInstance;
  26. MonoReflectionType* mRuntimeType;
  27. uint32_t mManagedHandle;
  28. String mNamespace;
  29. String mTypeName;
  30. String mFullTypeName;
  31. bool mRequiresReset;
  32. // We store data of a missing component type in hope it will be restored later
  33. bool mMissingType;
  34. ManagedSerializableObjectInfoPtr mMissingTypeObjectInfo;
  35. ManagedSerializableObjectDataPtr mMissingTypeObjectData;
  36. OnInitializedThunkDef mOnInitializedThunk;
  37. UpdateThunkDef mUpdateThunk;
  38. OnResetThunkDef mOnResetThunk;
  39. OnDestroyedThunkDef mOnDestroyThunk;
  40. /************************************************************************/
  41. /* COMPONENT OVERRIDES */
  42. /************************************************************************/
  43. protected:
  44. friend class SceneObject;
  45. friend class ScriptComponent;
  46. /** Standard constructor.
  47. */
  48. ManagedComponent(const HSceneObject& parent, MonoReflectionType* runtimeType);
  49. void initialize(MonoObject* object);
  50. void onInitialized();
  51. void onDestroyed();
  52. public:
  53. virtual void update();
  54. /************************************************************************/
  55. /* RTTI */
  56. /************************************************************************/
  57. public:
  58. friend class ManagedComponentRTTI;
  59. static RTTITypeBase* getRTTIStatic();
  60. virtual RTTITypeBase* getRTTI() const;
  61. protected:
  62. ManagedComponent(); // Serialization only
  63. };
  64. struct ComponentBackupData
  65. {
  66. struct DataBlock
  67. {
  68. UINT8* data;
  69. UINT32 size;
  70. };
  71. DataBlock mTypeInfo;
  72. DataBlock mObjectData;
  73. };
  74. }