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; }
///
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 class DungeonSpawnGroup : IGridSpawnGroup
{
///
/// Prototypes we can choose from to spawn.
///
public List> Protos = new();
///
public float MinimumDistance { 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 class GridSpawnGroup : IGridSpawnGroup
{
public List Paths = new();
public float MinimumDistance { 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;
}