light/modules/ecs/public/entity.hpp

51 lines
945 B
C++
Raw Normal View History

2022-03-08 21:19:19 +03:30
#pragma once
2025-09-22 18:50:59 +03:30
#include <ecs/registry.hpp>
#include <memory/reference.hpp>
2022-03-08 21:19:19 +03:30
2025-09-22 18:50:59 +03:30
namespace lt::ecs {
/** High-level entity convenience wrapper */
class Entity
{
public:
Entity(memory::Ref<Registry> registry, EntityId identifier)
2025-09-22 18:50:59 +03:30
: m_registry(std::move(registry))
, m_identifier(identifier)
{
ensure(m_registry, "Failed to create Entity ({}): null registry", m_identifier);
}
template<typename Component_T>
auto add(Component_T component) -> Component_T &
{
m_registry->add(m_identifier, component);
}
2025-09-22 18:50:59 +03:30
template<typename Component_T>
auto get() -> Component_T &
{
return m_registry->get<Component_T>(m_identifier);
}
template<typename Component_T>
auto get() const -> const Component_T &
{
return m_registry->get<Component_T>(m_identifier);
}
auto get_registry() -> memory::Ref<Registry>
2025-09-22 18:50:59 +03:30
{
return m_registry;
}
private:
memory::Ref<Registry> m_registry;
2025-09-22 18:50:59 +03:30
EntityId m_identifier;
};
} // namespace lt::ecs