using Content.Shared.EntityTable.ValueSelector; using Robust.Shared.Prototypes; using Robust.Shared.Random; namespace Content.Shared.EntityTable.EntitySelectors; /// /// Gets the spawn for the entity prototype specified at whatever count specified. /// public sealed partial class EntSelector : EntityTableSelector { public const string IdDataFieldTag = "id"; /// /// The prototype this entry yields. /// [DataField(IdDataFieldTag, required: true)] public EntProtoId Id; /// /// The amount of entities this entry might yield. /// [DataField] public NumberSelector Amount = new ConstantNumberSelector(1); protected override IEnumerable GetSpawnsImplementation(IRobustRandom rand, IEntityManager entMan, IPrototypeManager proto, EntityTableContext ctx) { var num = Amount.Get(rand); for (var i = 0; i < num; i++) { yield return Id; } } protected override IEnumerable<(EntProtoId spawn, double)> ListSpawnsImplementation(IEntityManager entMan, IPrototypeManager proto, EntityTableContext ctx) { yield return (Id, 1f); } protected override IEnumerable<(EntProtoId spawn, double)> AverageSpawnsImplementation(IEntityManager entMan, IPrototypeManager proto, EntityTableContext ctx) { yield return (Id, Amount.Average()); } /// public override string ToString() { return $"{Id} x{Amount.Average()}"; } }