BsScriptComponent.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. /**
  27. * @copydoc ScriptObjectBase::beginRefresh
  28. */
  29. virtual ScriptObjectBackup beginRefresh() override;
  30. /**
  31. * @copydoc ScriptObjectBase::endRefresh
  32. */
  33. virtual void endRefresh(const ScriptObjectBackup& backupData) override;
  34. /**
  35. * @copydoc ScriptObjectBase::_createManagedInstance
  36. */
  37. virtual MonoObject* _createManagedInstance(bool construct) override;
  38. /**
  39. * @copydoc ScriptObjectBase::_onManagedInstanceFinalized
  40. */
  41. void _onManagedInstanceFinalized() override;
  42. /**
  43. * @copydoc ScriptObjectBase::_onManagedInstanceDeleted
  44. */
  45. void _onManagedInstanceDeleted() override;
  46. /**
  47. * @brief Checks if the provided game object is destroyed and logs
  48. * a warning if it is.
  49. */
  50. static bool checkIfDestroyed(const GameObjectHandleBase& handle);
  51. GameObjectHandle<ManagedComponent> mManagedComponent;
  52. String mNamespace;
  53. String mType;
  54. bool mTypeMissing;
  55. /************************************************************************/
  56. /* CLR HOOKS */
  57. /************************************************************************/
  58. static MonoObject* internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  59. static MonoObject* internal_getComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  60. static MonoArray* internal_getComponents(MonoObject* parentSceneObject);
  61. static void internal_removeComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  62. static MonoObject* internal_getSceneObject(ScriptComponent* nativeInstance);
  63. };
  64. }