BsScriptComponent.h 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #pragma once
  2. #include "BsScriptEnginePrerequisites.h"
  3. #include "BsScriptGameObject.h"
  4. #include "BsScriptObject.h"
  5. #include "BsFont.h"
  6. namespace BansheeEngine
  7. {
  8. /**
  9. * @brief Interop class between C++ & CLR for ManagedComponent.
  10. */
  11. class BS_SCR_BE_EXPORT ScriptComponent : public ScriptObject<ScriptComponent, ScriptGameObjectBase>
  12. {
  13. public:
  14. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Component")
  15. /**
  16. * @copydoc ScriptGameObjectBase::getNativeHandle
  17. */
  18. virtual HGameObject getNativeHandle() const override { return mManagedComponent; }
  19. /**
  20. * @copydoc ScriptGameObjectBase::setNativeHandle
  21. */
  22. virtual void setNativeHandle(const HGameObject& gameObject) override;
  23. private:
  24. friend class ScriptGameObjectManager;
  25. ScriptComponent(MonoObject* instance);
  26. ~ScriptComponent() {}
  27. /**
  28. * @copydoc ScriptObjectBase::beginRefresh
  29. */
  30. virtual ScriptObjectBackup beginRefresh() override;
  31. /**
  32. * @copydoc ScriptObjectBase::endRefresh
  33. */
  34. virtual void endRefresh(const ScriptObjectBackup& backupData) override;
  35. /**
  36. * @copydoc ScriptObjectBase::_createManagedInstance
  37. */
  38. virtual MonoObject* _createManagedInstance(bool construct) override;
  39. /**
  40. * @copydoc ScriptObjectBase::_onManagedInstanceDeleted
  41. */
  42. void _onManagedInstanceDeleted() override;
  43. /**
  44. * @brief Checks if the provided game object is destroyed and logs
  45. * a warning if it is.
  46. */
  47. static bool checkIfDestroyed(const GameObjectHandleBase& handle);
  48. GameObjectHandle<ManagedComponent> mManagedComponent;
  49. String mNamespace;
  50. String mType;
  51. bool mTypeMissing;
  52. /************************************************************************/
  53. /* CLR HOOKS */
  54. /************************************************************************/
  55. static MonoObject* internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  56. static MonoObject* internal_getComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  57. static MonoArray* internal_getComponents(MonoObject* parentSceneObject);
  58. static void internal_removeComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  59. static MonoObject* internal_getSceneObject(ScriptComponent* nativeInstance);
  60. };
  61. }