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 }