using Robust.Shared.Prototypes; namespace Content.Shared.Roles; [Prototype] public sealed partial class DepartmentPrototype : IPrototype { [IdDataField] public string ID { get; private set; } = string.Empty; /// /// The name LocId of the department that will be displayed in the various menus. /// [DataField(required: true)] public LocId Name = string.Empty; /// /// A description LocId to display in the character menu as an explanation of the department's function. /// [DataField(required: true)] public LocId Description = string.Empty; /// /// A color representing this department to use for text. /// [DataField(required: true)] public Color Color; [DataField, ViewVariables(VVAccess.ReadWrite)] public List> Roles = new(); /// /// Whether this is a primary department or not. /// For example, CE's primary department is engineering since Command has primary: false. /// [DataField, ViewVariables(VVAccess.ReadWrite)] public bool Primary = true; /// /// Departments with a higher weight sorted before other departments in UI. /// [DataField] public int Weight { get; private set; } /// /// Toggles the display of the department in the priority setting menu in the character editor. /// [DataField] public bool EditorHidden; } /// /// Sorts appropriately for display in the UI, /// respecting their . /// public sealed class DepartmentUIComparer : IComparer { public static readonly DepartmentUIComparer Instance = new(); public int Compare(DepartmentPrototype? x, DepartmentPrototype? y) { if (ReferenceEquals(x, y)) return 0; if (ReferenceEquals(null, y)) return 1; if (ReferenceEquals(null, x)) return -1; var cmp = -x.Weight.CompareTo(y.Weight); return cmp != 0 ? cmp : string.Compare(x.ID, y.ID, StringComparison.Ordinal); } }