2
0

BsScriptComponent.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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::_onManagedInstanceDeleted
  40. */
  41. void _onManagedInstanceDeleted() override;
  42. /**
  43. * @brief Checks if the provided game object is destroyed and logs
  44. * a warning if it is.
  45. */
  46. static bool checkIfDestroyed(const GameObjectHandleBase& handle);
  47. GameObjectHandle<ManagedComponent> mManagedComponent;
  48. String mNamespace;
  49. String mType;
  50. bool mTypeMissing;
  51. /************************************************************************/
  52. /* CLR HOOKS */
  53. /************************************************************************/
  54. static MonoObject* internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  55. static MonoObject* internal_getComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  56. static MonoArray* internal_getComponents(MonoObject* parentSceneObject);
  57. static void internal_removeComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  58. static MonoObject* internal_getSceneObject(ScriptComponent* nativeInstance);
  59. };
  60. }