BsScriptComponent.h 2.5 KB

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