EntitySpawnVariationPassSystem.cs 1.1 KB

1234567891011121314151617181920212223242526272829
  1. using Content.Server.GameTicking.Rules.VariationPass.Components;
  2. using Content.Shared.Storage;
  3. using Robust.Shared.Random;
  4. namespace Content.Server.GameTicking.Rules.VariationPass;
  5. /// <inheritdoc cref="EntitySpawnVariationPassComponent"/>
  6. public sealed class EntitySpawnVariationPassSystem : VariationPassSystem<EntitySpawnVariationPassComponent>
  7. {
  8. protected override void ApplyVariation(Entity<EntitySpawnVariationPassComponent> ent, ref StationVariationPassEvent args)
  9. {
  10. var totalTiles = Stations.GetTileCount(args.Station);
  11. var dirtyMod = Random.NextGaussian(ent.Comp.TilesPerEntityAverage, ent.Comp.TilesPerEntityStdDev);
  12. var trashTiles = Math.Max((int) (totalTiles * (1 / dirtyMod)), 0);
  13. for (var i = 0; i < trashTiles; i++)
  14. {
  15. if (!TryFindRandomTileOnStation(args.Station, out _, out _, out var coords))
  16. continue;
  17. var ents = EntitySpawnCollection.GetSpawns(ent.Comp.Entities, Random);
  18. foreach (var spawn in ents)
  19. {
  20. SpawnAtPosition(spawn, coords);
  21. }
  22. }
  23. }
  24. }