using JetBrains.Annotations;
using Robust.Shared.Random;
namespace Content.Shared._Sunrise.Random;
public sealed partial class RandomPredictedSystem
{
/*
* Часть системы, отвечающая за рандом на основе EntityUid сущности и текущего тика.
* Более надежда в использовании.
*/
///
/// Возвращает случайное целое число для указанной сущности.
///
/// Случайно число типа в заданном диапазоне
[PublicAPI]
public int NextForEntity(EntityUid ent, int minValue = 0, int maxValue = int.MaxValue)
{
var random = GetOrCreateEntityRandom(ent);
return random.Next(minValue, maxValue);
}
///
///
///
[PublicAPI]
public int NextForEntity(List entities, int minValue = 0, int maxValue = int.MaxValue)
{
var random = GetOrCreateEntityRandom(entities);
return random.Next(minValue, maxValue);
}
///
/// Возвращает случайное число с плавающей запятой для указанной сущности.
///
/// Случайно число типа в заданном диапазоне
[PublicAPI]
public float NextFloatForEntity(EntityUid ent, float minValue = 0f, float maxValue = 1f)
{
var random = GetOrCreateEntityRandom(ent);
return random.NextFloat(minValue, maxValue);
}
///
///
///
[PublicAPI]
public float NextFloatForEntity(List entities, float minValue = 0f, float maxValue = 1f)
{
var random = GetOrCreateEntityRandom(entities);
return random.NextFloat(minValue, maxValue);
}
///
/// Возвращает случайное число двойной точности для указанной сущности.
///
/// Случайно число типа в диапазоне [0, 1)
[PublicAPI]
public double NextDoubleForEntity(EntityUid ent)
{
var random = GetOrCreateEntityRandom(ent);
return random.NextDouble();
}
///
///
///
[PublicAPI]
public double NextDoubleForEntity(List entities)
{
var random = GetOrCreateEntityRandom(entities);
return random.NextDouble();
}
///
/// Возвращает true с заданной вероятностью для указанной сущности.
///
///
/// Шанс обязан быть в диапазоне [0, 1]!
///
/// Прокнули ли переданный шанс
[PublicAPI]
public bool ProbForEntity(EntityUid ent, float chance = 0.5f)
{
var random = GetOrCreateEntityRandom(ent);
return random.NextDouble() < chance;
}
///
///
///
[PublicAPI]
public bool ProbForEntity(List entities, float chance = 0.5f)
{
var random = GetOrCreateEntityRandom(entities);
return random.NextDouble() < chance;
}
///
/// Выбирает случайный элемент из списка для указанной сущности.
///
/// Случайный элемент из списка
/// TODO: Здесь кажется скрывается миспредикт, но я его не вижу. Почините, если это так или уберите эту плашку.
[PublicAPI]
public T PickForEntity(EntityUid ent, IReadOnlyList list)
{
var random = GetOrCreateEntityRandom(ent);
var index = random.Next(list.Count);
return list[index];
}
///
///
///
/// TODO: Здесь кажется скрывается миспредикт, но я его не вижу. Почините, если это так или уберите эту плашку.
[PublicAPI]
public T PickForEntity(List entities, IReadOnlyList list)
{
var random = GetOrCreateEntityRandom(entities);
var index = random.Next(list.Count);
return list[index];
}
}