fish-station/Content.Shared/_Sunrise/Helpers/SharedSunriseHelpersSystem.cs
ThereDrD f23628a833
Новые смешные эффекты для артефактов с Fire Station (#2135)
Co-authored-by: Vigers Ray <60344369+VigersRay@users.noreply.github.com>
2025-05-27 01:10:10 +03:00

104 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace Content.Shared._Sunrise.Helpers;
public abstract partial class SharedSunriseHelpersSystem : EntitySystem
{
#region Percente
/// <summary>
/// Возвращает список с данным процентным соотношением
/// </summary>
/// <param name="sourceList">Исходный список</param>
/// <param name="percentage">Процент от 0 до 100</param>
/// <typeparam name="T">Компонент</typeparam>
[Obsolete]
public IEnumerable<T> GetPercentageOfHashSet<T>(IReadOnlyCollection<T> 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();
}
/// <summary>
/// Возвращает список с данным процентным соотношением
/// </summary>
/// <param name="sourceList">Исходный список</param>
/// <param name="percentage">Процент от 0 до 100</param>
/// <typeparam name="T">Ентити с компонентом</typeparam>
public IEnumerable<Entity<T>> GetPercentageOfHashSet<T>(IReadOnlyCollection<Entity<T>> 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();
}
/// <summary>
/// Возвращает список с данным процентным соотношением
/// </summary>
/// <param name="sourceList">Исходный список</param>
/// <param name="percentage">Процент от 0 до 100</param>
public IEnumerable<EntityUid> GetPercentageOfHashSet(IReadOnlyCollection<EntityUid> 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
/// <summary>
/// Получает все список всех ентити с компонентами и возвращает.
/// Удобно для использования, так как не требует засорять код лишним циклом
/// </summary>
/// <typeparam name="T1">Компонент 1</typeparam>
/// <typeparam name="T2">Компонент 2</typeparam>
/// <remarks>Список может быть пустым, если ничего не найдено</remarks>
/// <returns>Полный список всех ентити в игре с данными компонентами</returns>
public IEnumerable<Entity<T1, T2>> GetAll<T1, T2>() where T1 : IComponent where T2 : IComponent
{
var query = EntityManager.AllEntityQueryEnumerator<T1, T2>();
while (query.MoveNext(out var uid, out var component1, out var component2))
{
yield return (uid, component1, component2);
}
}
/// <summary>
/// Получает все список всех ентити с компонентом и возвращает.
/// Удобно для использования, так как не требует засорять код лишним циклом
/// </summary>
/// <typeparam name="T">Компонент</typeparam>
/// <remarks>Список может быть пустым, если ничего не найдено</remarks>
/// <returns>Полный список всех ентити в игре с данным компонентом</returns>
public IEnumerable<Entity<T>> GetAll<T>() where T : IComponent
{
var query = EntityManager.AllEntityQueryEnumerator<T>();
while (query.MoveNext(out var uid, out var component))
{
yield return (uid, component);
}
}
/// <summary>
/// Возвращает первый попавшийся ентити с данным компонентом
/// </summary>
/// <param name="entity">Возвращаемый ентити</param>
/// <typeparam name="T">Компонент</typeparam>
/// <returns>Первый попавшийся ентити с данным компонентом</returns>
public bool TryGetFirst<T>([NotNullWhen(true)] out Entity<T>? entity) where T : IComponent
{
entity = null;
var query = EntityManager.AllEntityQueryEnumerator<T>();
while (query.MoveNext(out var uid, out var component))
{
entity = (uid, component);
return true;
}
return false;
}
#endregion
}