diff --git a/inferno/src/inferno/scene/entity.cpp b/inferno/src/inferno/scene/entity.cpp index 1122e8a..3a31130 100644 --- a/inferno/src/inferno/scene/entity.cpp +++ b/inferno/src/inferno/scene/entity.cpp @@ -5,12 +5,14 @@ namespace Inferno { Entity::Entity(const std::shared_ptr& registry) : m_registry(registry) { + expired(); m_entity = m_registry.lock()->create(); } Entity::Entity(const std::shared_ptr& registry, entt::entity handle) : m_registry(registry) { + expired(); ASSERT(m_registry.lock()->valid(handle), "Can't construct entity from invalid handle"); m_entity = handle; } @@ -18,10 +20,16 @@ namespace Inferno { Entity::Entity(const std::shared_ptr& registry, uint32_t handle) : m_registry(registry) { + expired(); ASSERT(m_registry.lock()->valid(entt::entity(handle)), "Can't construct entity from invalid handle"); m_entity = entt::entity(handle); } + void Entity::expired() const + { + ASSERT(!m_registry.expired(), "Entity registry expired"); + } + void Entity::valid() const { ASSERT(m_registry.lock()->valid(m_entity)); diff --git a/inferno/src/inferno/scene/entity.h b/inferno/src/inferno/scene/entity.h index c29064f..95daf3c 100644 --- a/inferno/src/inferno/scene/entity.h +++ b/inferno/src/inferno/scene/entity.h @@ -17,11 +17,13 @@ namespace Inferno { Entity(const std::shared_ptr& registry, entt::entity handle); Entity(const std::shared_ptr& registry, uint32_t handle); + void expired() const; void valid() const; template [[nodiscard]] bool has() const { + expired(); valid(); return m_registry.lock()->has(m_entity); } @@ -29,6 +31,7 @@ namespace Inferno { template [[nodiscard]] bool any() const { + expired(); valid(); return m_registry.lock()->any(m_entity); } @@ -36,6 +39,7 @@ namespace Inferno { template T& add(P&&... parameters) const { + expired(); valid(); return m_registry.lock()->emplace_or_replace(m_entity, std::forward

(parameters)...); }; @@ -43,6 +47,7 @@ namespace Inferno { template size_t remove() const { + expired(); valid(); return m_registry.lock()->remove_if_exists(m_entity); } @@ -50,6 +55,7 @@ namespace Inferno { template T& get(P&&... parameters) const { + expired(); valid(); return m_registry.lock()->get_or_emplace(m_entity, std::forward

(parameters)...); }