BsManagedComponent.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsComponent.h"
  4. #include <mono/jit/jit.h>
  5. namespace BansheeEngine
  6. {
  7. class BS_SCR_BE_EXPORT ManagedComponent : public Component
  8. {
  9. public:
  10. ~ManagedComponent();
  11. MonoObject* getManagedInstance() const { return mManagedInstance; }
  12. MonoReflectionType* getRuntimeType() const { return mRuntimeType; }
  13. const String& getManagedNamespace() const { return mNamespace; }
  14. const String& getManagedTypeName() const { return mTypeName; }
  15. const String& getManagedFullTypeName() const { return mFullTypeName; }
  16. private:
  17. typedef void(__stdcall *OnInitializedThunkDef) (MonoObject*, MonoException**);
  18. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  19. typedef void(__stdcall *OnDestroyedThunkDef) (MonoObject*, MonoException**);
  20. MonoObject* mManagedInstance;
  21. MonoReflectionType* mRuntimeType;
  22. uint32_t mManagedHandle;
  23. String mNamespace;
  24. String mTypeName;
  25. String mFullTypeName;
  26. OnInitializedThunkDef mOnInitializedThunk;
  27. UpdateThunkDef mUpdateThunk;
  28. OnDestroyedThunkDef mOnDestroyThunk;
  29. /************************************************************************/
  30. /* COMPONENT OVERRIDES */
  31. /************************************************************************/
  32. protected:
  33. friend class SceneObject;
  34. friend class ScriptComponent;
  35. /** Standard constructor.
  36. */
  37. ManagedComponent(const HSceneObject& parent, MonoReflectionType* runtimeType);
  38. void initialize(MonoObject* object, MonoReflectionType* runtimeType, MonoClass* monoClass);
  39. void onInitialized();
  40. void onDestroyed();
  41. public:
  42. virtual void update();
  43. /************************************************************************/
  44. /* RTTI */
  45. /************************************************************************/
  46. public:
  47. friend class ManagedComponentRTTI;
  48. static RTTITypeBase* getRTTIStatic();
  49. virtual RTTITypeBase* getRTTI() const;
  50. protected:
  51. ManagedComponent(); // Serialization only
  52. };
  53. }