BsManagedComponent.h 2.5 KB

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