using Content.Server.Shuttles.Systems; using Content.Shared.Dataset; using Content.Shared.Procedural; using Robust.Shared.Prototypes; using Robust.Shared.Utility; namespace Content.Server.Shuttles.Components; /// /// Similar to except spawns the grid near to the station. /// [RegisterComponent, Access(typeof(ShuttleSystem))] public sealed partial class GridSpawnComponent : Component { /// /// Dictionary of groups where each group will have entries selected. /// String is just an identifier to make yaml easier. /// [DataField(required: true)] public Dictionary Groups = new(); } public interface IGridSpawnGroup { /// /// Minimum distance to spawn away from the station. /// public float MinimumDistance { get; } /// /// Maximum distance to spawn away from the station. /// public float MaximumDistance { get; } /// public ProtoId? NameDataset { get; } /// int MinCount { get; set; } /// int MaxCount { get; set; } /// /// Components to be added to any spawned grids. /// public ComponentRegistry AddComponents { get; set; } /// /// Hide the IFF label of the grid. /// public bool Hide { get; set; } /// /// Should we set the metadata name of a grid. Useful for admin purposes. /// public bool NameGrid { get; set; } /// /// Should we add this to the station's grids (if possible / relevant). /// public bool StationGrid { get; set; } } [DataRecord] public sealed partial class DungeonSpawnGroup : IGridSpawnGroup { /// /// Prototypes we can choose from to spawn. /// public List> Protos = new(); /// public float MinimumDistance { get; } public float MaximumDistance { get; } /// public ProtoId? NameDataset { get; } /// public int MinCount { get; set; } = 1; /// public int MaxCount { get; set; } = 1; /// public ComponentRegistry AddComponents { get; set; } = new(); /// public bool Hide { get; set; } = false; /// public bool NameGrid { get; set; } = false; /// public bool StationGrid { get; set; } = false; } [DataRecord] public sealed partial class GridSpawnGroup : IGridSpawnGroup { public List Paths = new(); /// public float MinimumDistance { get; } /// public float MaximumDistance { get; } public ProtoId? NameDataset { get; } public int MinCount { get; set; } = 1; public int MaxCount { get; set; } = 1; public ComponentRegistry AddComponents { get; set; } = new(); public bool Hide { get; set; } = false; public bool NameGrid { get; set; } = true; public bool StationGrid { get; set; } = true; }