BsManagedComponent.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. ManagedSerializableObjectPtr mMissingTypeObjectData;
  35. OnInitializedThunkDef mOnInitializedThunk;
  36. UpdateThunkDef mUpdateThunk;
  37. OnResetThunkDef mOnResetThunk;
  38. OnDestroyedThunkDef mOnDestroyThunk;
  39. /************************************************************************/
  40. /* COMPONENT OVERRIDES */
  41. /************************************************************************/
  42. protected:
  43. friend class SceneObject;
  44. friend class ScriptComponent;
  45. /** Standard constructor.
  46. */
  47. ManagedComponent(const HSceneObject& parent, MonoReflectionType* runtimeType);
  48. void initialize(MonoObject* object);
  49. void onInitialized();
  50. void onDestroyed();
  51. public:
  52. virtual void update();
  53. /************************************************************************/
  54. /* RTTI */
  55. /************************************************************************/
  56. public:
  57. friend class ManagedComponentRTTI;
  58. static RTTITypeBase* getRTTIStatic();
  59. virtual RTTITypeBase* getRTTI() const;
  60. protected:
  61. ManagedComponent(); // Serialization only
  62. };
  63. struct ComponentBackupData
  64. {
  65. UINT8* data;
  66. UINT32 size;
  67. };
  68. }