diff --git a/SDK/include/NDK/BaseComponent.hpp b/SDK/include/NDK/BaseComponent.hpp index fc1e88058..4e9b53328 100644 --- a/SDK/include/NDK/BaseComponent.hpp +++ b/SDK/include/NDK/BaseComponent.hpp @@ -43,8 +43,10 @@ namespace Ndk static ComponentIndex RegisterComponent(ComponentId id, Factory factoryFunc); private: + virtual void OnAttached(); virtual void OnComponentAttached(BaseComponent& component); virtual void OnComponentDetached(BaseComponent& component); + virtual void OnDetached(); void SetEntity(Entity* entity); static bool Initialize(); diff --git a/SDK/include/NDK/BaseComponent.inl b/SDK/include/NDK/BaseComponent.inl index 290a5de2d..b8637b457 100644 --- a/SDK/include/NDK/BaseComponent.inl +++ b/SDK/include/NDK/BaseComponent.inl @@ -38,7 +38,15 @@ namespace Ndk inline void BaseComponent::SetEntity(Entity* entity) { - m_entity = entity; + if (m_entity != entity) + { + if (m_entity) + OnDetached(); + + m_entity = entity; + if (m_entity) + OnAttached(); + } } inline bool BaseComponent::Initialize() diff --git a/SDK/src/NDK/BaseComponent.cpp b/SDK/src/NDK/BaseComponent.cpp index 6a54563df..1a0b85168 100644 --- a/SDK/src/NDK/BaseComponent.cpp +++ b/SDK/src/NDK/BaseComponent.cpp @@ -8,6 +8,10 @@ namespace Ndk { BaseComponent::~BaseComponent() = default; + void BaseComponent::OnAttached() + { + } + void BaseComponent::OnComponentAttached(BaseComponent& component) { NazaraUnused(component); @@ -18,6 +22,10 @@ namespace Ndk NazaraUnused(component); } + void BaseComponent::OnDetached() + { + } + std::vector BaseComponent::s_entries; std::unordered_map BaseComponent::s_idToIndex; }