From: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Date: Mon, 21 Apr 2025 00:57:20 +0000 (-0400) Subject: Binomial Number Selector for EntityTables (#36783) X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=98511d1b21764e8393a7b615cabcac506dc9abc7;p=space-station-14.git Binomial Number Selector for EntityTables (#36783) * binomial dist * lol initialize the int tho idiot * xml docs my forgotten * ditto --- diff --git a/Content.Shared/EntityTable/ValueSelector/BinomialNumberSelector.cs b/Content.Shared/EntityTable/ValueSelector/BinomialNumberSelector.cs new file mode 100644 index 0000000000..b3ed076e70 --- /dev/null +++ b/Content.Shared/EntityTable/ValueSelector/BinomialNumberSelector.cs @@ -0,0 +1,38 @@ +using Robust.Shared.Random; + +namespace Content.Shared.EntityTable.ValueSelector; + +/// +/// Picks a value based on a Binomial Distribution of N Trials given P Chance +/// +public sealed partial class BinomialNumberSelector : NumberSelector +{ + /// + /// How many times to try including an entry. i.e. the Max. + /// + [DataField] + public int Trials = 1; + + /// + /// The odds a single trial succeeds + /// + /// + /// my preferred "Prob" was already used in other places for entity table stuff and I didnt want more confusing terminology + /// + [DataField] + public float Chance = .5f; + + public override int Get(System.Random rand) + { + var random = IoCManager.Resolve(); + int count = 0; + + for (int i = 0; i < Trials; i++) + { + if (random.Prob(Chance)) + count++; + } + return count; + // get binomialed motherfucker + } +}