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()}";
}
}