using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace Content.Shared._Sunrise.Helpers;
public abstract partial class SharedSunriseHelpersSystem : EntitySystem
{
#region Percente
///
/// Возвращает список с данным процентным соотношением
///
/// Исходный список
/// Процент от 0 до 100
/// Компонент
[Obsolete]
public IEnumerable GetPercentageOfHashSet(IReadOnlyCollection sourceList, float percentage) where T : IComponent
{
var countToAdd = (int) Math.Round((double) sourceList.Count * percentage / 100);
return sourceList.Where(t => !Transform(t.Owner).Anchored).Take(countToAdd).ToHashSet();
}
///
/// Возвращает список с данным процентным соотношением
///
/// Исходный список
/// Процент от 0 до 100
/// Ентити с компонентом
public IEnumerable> GetPercentageOfHashSet(IReadOnlyCollection> sourceList, float percentage) where T : IComponent
{
var countToAdd = (int) Math.Round((double) sourceList.Count * percentage / 100);
return sourceList.Where(e => !Transform(e).Anchored).Take(countToAdd).ToHashSet();
}
///
/// Возвращает список с данным процентным соотношением
///
/// Исходный список
/// Процент от 0 до 100
public IEnumerable GetPercentageOfHashSet(IReadOnlyCollection sourceList, float percentage)
{
var countToAdd = (int) Math.Round((double) sourceList.Count * percentage / 100);
return sourceList.Where(e => !Transform(e).Anchored).Take(countToAdd).ToHashSet();
}
#endregion
#region Get All/First entity
///
/// Получает все список всех ентити с компонентами и возвращает.
/// Удобно для использования, так как не требует засорять код лишним циклом
///
/// Компонент 1
/// Компонент 2
/// Список может быть пустым, если ничего не найдено
/// Полный список всех ентити в игре с данными компонентами
public IEnumerable> GetAll() where T1 : IComponent where T2 : IComponent
{
var query = EntityManager.AllEntityQueryEnumerator();
while (query.MoveNext(out var uid, out var component1, out var component2))
{
yield return (uid, component1, component2);
}
}
///
/// Получает все список всех ентити с компонентом и возвращает.
/// Удобно для использования, так как не требует засорять код лишним циклом
///
/// Компонент
/// Список может быть пустым, если ничего не найдено
/// Полный список всех ентити в игре с данным компонентом
public IEnumerable> GetAll() where T : IComponent
{
var query = EntityManager.AllEntityQueryEnumerator();
while (query.MoveNext(out var uid, out var component))
{
yield return (uid, component);
}
}
///
/// Возвращает первый попавшийся ентити с данным компонентом
///
/// Возвращаемый ентити
/// Компонент
/// Первый попавшийся ентити с данным компонентом
public bool TryGetFirst([NotNullWhen(true)] out Entity? entity) where T : IComponent
{
entity = null;
var query = EntityManager.AllEntityQueryEnumerator();
while (query.MoveNext(out var uid, out var component))
{
entity = (uid, component);
return true;
}
return false;
}
#endregion
}