2
0

BsScriptComponent.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. /** @addtogroup ScriptInteropEngine
  11. * @{
  12. */
  13. /** Interop class between C++ & CLR for ManagedComponent. */
  14. class BS_SCR_BE_EXPORT ScriptComponent : public ScriptObject<ScriptComponent, ScriptGameObjectBase>
  15. {
  16. public:
  17. SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "Component")
  18. /** @copydoc ScriptGameObjectBase::getNativeHandle */
  19. HGameObject getNativeHandle() const override { return mManagedComponent; }
  20. /** @copydoc ScriptGameObjectBase::setNativeHandle */
  21. void setNativeHandle(const HGameObject& gameObject) override;
  22. /** Returns the managed component this object wraps. */
  23. HManagedComponent getHandle() const { return mManagedComponent; }
  24. private:
  25. friend class ScriptGameObjectManager;
  26. ScriptComponent(MonoObject* instance);
  27. /** @copydoc ScriptObjectBase::beginRefresh */
  28. ScriptObjectBackup beginRefresh() override;
  29. /** @copydoc ScriptObjectBase::endRefresh */
  30. void endRefresh(const ScriptObjectBackup& backupData) override;
  31. /** @copydoc ScriptObjectBase::_createManagedInstance */
  32. MonoObject* _createManagedInstance(bool construct) override;
  33. /** @copydoc ScriptObjectBase::_onManagedInstanceDeleted */
  34. void _onManagedInstanceDeleted() override;
  35. /** Checks if the provided game object is destroyed and logs a warning if it is. */
  36. static bool checkIfDestroyed(const GameObjectHandleBase& handle);
  37. HManagedComponent mManagedComponent;
  38. String mNamespace;
  39. String mType;
  40. bool mTypeMissing;
  41. /************************************************************************/
  42. /* CLR HOOKS */
  43. /************************************************************************/
  44. static MonoObject* internal_addComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  45. static MonoObject* internal_getComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  46. static MonoArray* internal_getComponents(MonoObject* parentSceneObject);
  47. static MonoArray* internal_getComponentsPerType(MonoObject* parentSceneObject, MonoReflectionType* type);
  48. static void internal_removeComponent(MonoObject* parentSceneObject, MonoReflectionType* type);
  49. static MonoObject* internal_getSceneObject(ScriptComponent* nativeInstance);
  50. static TransformChangedFlags internal_getNotifyFlags(ScriptComponent* nativeInstance);
  51. static void internal_setNotifyFlags(ScriptComponent* nativeInstance, TransformChangedFlags flags);
  52. static void internal_invoke(ScriptComponent* nativeInstance, MonoString* name);
  53. static void internal_destroy(ScriptComponent* nativeInstance, bool immediate);
  54. };
  55. /** @} */
  56. }