Code/k/ECS/Extensions/Utils/EntityExtensions.cs
using Sandbox.k.ECS.Core;

namespace Sandbox.k.ECS.Extensions.Utils;

public static class EntityExtensions
{
	public static void AddComponent<T>( this int entity ) where T : struct
	{
		World.Default.AddComponent<T>( entity, default );
	}

	public static void SetComponent<T>( this int entity, T component ) where T : struct
	{
		var world = World.Default;
		if ( world.HasComponent<T>( entity ) )
		{
			world.RemoveComponent<T>( entity );
		}

		world.AddComponent( entity, component );
	}

	public static void RemoveComponent<T>( this int entity ) where T : struct
	{
		World.Default.RemoveComponent<T>( entity );
	}

	public static ref T GetComponent<T>( this int entity ) where T : struct
	{
		return ref World.Default.GetComponentRef<T>( entity );
	}

	public static bool HasComponent<T>( this int entity ) where T : struct
	{
		return World.Default.HasComponent<T>( entity );
	}

	public static bool TryGetComponent<T>( this int entity, out T component ) where T : struct
	{
		if ( World.Default.HasComponent<T>( entity ) )
		{
			component = World.Default.GetComponentRef<T>( entity );
			return true;
		}

		component = default;
		return false;
	}
}