using System; using System.Collections.Generic; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.Manager.Attributes; using Robust.Shared.ViewVariables; namespace Content.Shared.Roles { /// /// Describes information for a single job on the station. /// [Prototype("job")] public class JobPrototype : IPrototype { private string _name = string.Empty; [ViewVariables] [DataField("id", required: true)] public string ID { get; } = default!; [DataField("supervisors")] public string Supervisors { get; } = "nobody"; /// /// The name of this job as displayed to players. /// [DataField("name")] public string Name { get; } = string.Empty; [DataField("joinNotifyCrew")] public bool JoinNotifyCrew { get; } = false; [DataField("requireAdminNotify")] public bool RequireAdminNotify { get; } = false; [DataField("canBeAntag")] public bool CanBeAntag { get; } = true; /// /// Whether this job is a head. /// The job system will try to pick heads before other jobs on the same priority level. /// [DataField("head")] public bool IsHead { get; private set; } /// /// The total amount of people that can start with this job round-start. /// public int SpawnPositions => _spawnPositions ?? TotalPositions; [DataField("spawnPositions")] private int? _spawnPositions; /// /// The total amount of positions available. /// [DataField("positions")] public int TotalPositions { get; private set; } [DataField("startingGear")] public string? StartingGear { get; private set; } [DataField("icon")] public string Icon { get; } = string.Empty; [DataField("special", serverOnly:true)] public JobSpecial[] Special { get; private set; } = Array.Empty(); [DataField("departments")] public IReadOnlyCollection Departments { get; } = Array.Empty(); [DataField("access")] public IReadOnlyCollection Access { get; } = Array.Empty(); } }