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]; } }