2022-03-08 21:19:19 +03:30
|
|
|
#pragma once
|
|
|
|
|
|
2025-09-22 18:50:59 +03:30
|
|
|
#include <ecs/registry.hpp>
|
2025-10-05 10:07:36 +03:30
|
|
|
#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:
|
2025-10-05 10:07:36 +03:30
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-25 22:23:32 +03:30
|
|
|
template<typename Component_T>
|
|
|
|
|
auto add(Component_T component) -> Component_T &
|
|
|
|
|
{
|
2025-10-06 11:59:57 +03:30
|
|
|
return m_registry->add(m_identifier, component);
|
2025-09-25 22:23:32 +03:30
|
|
|
}
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
2025-10-05 10:07:36 +03:30
|
|
|
auto get_registry() -> memory::Ref<Registry>
|
2025-09-22 18:50:59 +03:30
|
|
|
{
|
|
|
|
|
return m_registry;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private:
|
2025-10-05 10:07:36 +03:30
|
|
|
memory::Ref<Registry> m_registry;
|
|
|
|
|
|
2025-09-22 18:50:59 +03:30
|
|
|
EntityId m_identifier;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace lt::ecs
|