59 lines
		
	
	
	
		
			1,007 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
	
		
			1,007 B
		
	
	
	
		
			C++
		
	
	
	
	
	
#pragma once
 | 
						|
 | 
						|
#include <ecs/components/uuid.hpp>
 | 
						|
#include <ecs/scene.hpp>
 | 
						|
#include <entt/entt.hpp>
 | 
						|
 | 
						|
namespace lt {
 | 
						|
 | 
						|
class Entity
 | 
						|
{
 | 
						|
public:
 | 
						|
	Entity(entt::entity handle = entt::null, Scene *scene = nullptr);
 | 
						|
 | 
						|
	template<typename t, typename... Args>
 | 
						|
	auto add_component(Args &&...args) -> t &
 | 
						|
	{
 | 
						|
		return m_scene->m_registry.emplace<t>(m_handle, std::forward<Args>(args)...);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename t>
 | 
						|
	auto get_component() -> t &
 | 
						|
	{
 | 
						|
		return m_scene->m_registry.get<t>(m_handle);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename t>
 | 
						|
	auto has_component() -> bool
 | 
						|
	{
 | 
						|
		return m_scene->m_registry.any_of<t>(m_handle);
 | 
						|
	}
 | 
						|
 | 
						|
	template<typename t>
 | 
						|
	void remove_component()
 | 
						|
	{
 | 
						|
		m_scene->m_registry.remove<t>(m_handle);
 | 
						|
	}
 | 
						|
 | 
						|
	auto get_uuid() -> uint64_t
 | 
						|
	{
 | 
						|
		return get_component<UUIDComponent>().uuid;
 | 
						|
	}
 | 
						|
 | 
						|
	[[nodiscard]] auto is_valid() const -> bool
 | 
						|
	{
 | 
						|
		return m_handle != entt::null && m_scene != nullptr;
 | 
						|
	}
 | 
						|
 | 
						|
	operator uint32_t()
 | 
						|
	{
 | 
						|
		return (uint32_t)m_handle;
 | 
						|
	}
 | 
						|
 | 
						|
private:
 | 
						|
	entt::entity m_handle;
 | 
						|
 | 
						|
	Scene *m_scene;
 | 
						|
};
 | 
						|
 | 
						|
} // namespace lt
 |