BsManagedComponent.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. MonoObject* getManagedInstance() const { return mManagedInstance; }
  11. MonoReflectionType* getRuntimeType() const { return mRuntimeType; }
  12. const String& getManagedNamespace() const { return mNamespace; }
  13. const String& getManagedTypeName() const { return mTypeName; }
  14. const String& getManagedFullTypeName() const { return mFullTypeName; }
  15. private:
  16. typedef void(__stdcall *UpdateThunkDef) (MonoObject*, MonoException**);
  17. MonoObject* mManagedInstance;
  18. MonoReflectionType* mRuntimeType;
  19. uint32_t mManagedHandle;
  20. String mNamespace;
  21. String mTypeName;
  22. String mFullTypeName;
  23. UpdateThunkDef mUpdateThunk;
  24. /************************************************************************/
  25. /* COMPONENT OVERRIDES */
  26. /************************************************************************/
  27. protected:
  28. friend class SceneObject;
  29. /** Standard constructor.
  30. */
  31. ManagedComponent(const HSceneObject& parent, MonoReflectionType* runtimeType);
  32. void construct(MonoObject* object, MonoReflectionType* runtimeType, MonoClass* monoClass);
  33. void onDestroyed();
  34. public:
  35. virtual void update();
  36. /************************************************************************/
  37. /* RTTI */
  38. /************************************************************************/
  39. public:
  40. friend class ManagedComponentRTTI;
  41. static RTTITypeBase* getRTTIStatic();
  42. virtual RTTITypeBase* getRTTI() const;
  43. protected:
  44. ManagedComponent(); // Serialization only
  45. };
  46. }