light/modules/ecs/entity.cppm

56 lines
1 KiB
Text
Raw Normal View History

export module ecs.entity;
import debug.assertions;
import memory.reference;
import ecs.registry;
import std;
2022-03-08 21:19:19 +03:30
2025-09-22 18:50:59 +03:30
namespace lt::ecs {
/** High-level entity convenience wrapper */
export class Entity
2025-09-22 18:50:59 +03:30
{
public:
Entity(memory::Ref<Registry> registry, EntityId identifier)
2025-09-22 18:50:59 +03:30
: m_registry(std::move(registry))
, m_identifier(identifier)
{
debug::ensure(m_registry, "Failed to create Entity ({}): null registry", m_identifier);
2025-09-22 18:50:59 +03:30
}
template<typename Component_T>
auto add(Component_T component) -> Component_T &
{
return 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;
}
[[nodiscard]] auto id() const -> EntityId
{
return m_identifier;
}
2025-09-22 18:50:59 +03:30
private:
memory::Ref<Registry> m_registry;
2025-09-22 18:50:59 +03:30
EntityId m_identifier;
};
} // namespace lt::ecs