using Content.Shared.Access.Systems; using Content.Shared.Containers.ItemSlots; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Access.Components; [RegisterComponent, NetworkedComponent, AutoGenerateComponentState] [Access(typeof(SharedIdCardConsoleSystem))] public sealed partial class IdCardConsoleComponent : Component { public const int MaxFullNameLength = 30; public const int MaxJobTitleLength = 30; public static string PrivilegedIdCardSlotId = "IdCardConsole-privilegedId"; public static string TargetIdCardSlotId = "IdCardConsole-targetId"; [DataField] public ItemSlot PrivilegedIdSlot = new(); [DataField] public ItemSlot TargetIdSlot = new(); [Serializable, NetSerializable] public sealed class WriteToTargetIdMessage : BoundUserInterfaceMessage { public readonly string FullName; public readonly string JobTitle; public readonly List AccessList; public readonly string JobPrototype; public WriteToTargetIdMessage(string fullName, string jobTitle, List accessList, string jobPrototype) { FullName = fullName; JobTitle = jobTitle; AccessList = accessList; JobPrototype = jobPrototype; } } // Put this on shared so we just send the state once in PVS range rather than every time the UI updates. [DataField, AutoNetworkedField] public List> AccessLevels = new() { "Armory", "Atmospherics", "Bar", "Brig", "Detective", "Captain", "Cargo", "Chapel", "Chemistry", "ChiefEngineer", "ChiefMedicalOfficer", "Command", "Engineering", "External", "HeadOfPersonnel", "HeadOfSecurity", "Hydroponics", "Janitor", "Kitchen", "Lawyer", "Maintenance", "Medical", "Quartermaster", "Research", "ResearchDirector", "Salvage", "Security", "Service", "Theatre", }; [Serializable, NetSerializable] public sealed class IdCardConsoleBoundUserInterfaceState : BoundUserInterfaceState { public readonly string PrivilegedIdName; public readonly bool IsPrivilegedIdPresent; public readonly bool IsPrivilegedIdAuthorized; public readonly bool IsTargetIdPresent; public readonly string TargetIdName; public readonly string? TargetIdFullName; public readonly string? TargetIdJobTitle; public readonly string[]? TargetIdAccessList; public readonly string[]? AllowedModifyAccessList; public readonly string TargetIdJobPrototype; public IdCardConsoleBoundUserInterfaceState(bool isPrivilegedIdPresent, bool isPrivilegedIdAuthorized, bool isTargetIdPresent, string? targetIdFullName, string? targetIdJobTitle, string[]? targetIdAccessList, string[]? allowedModifyAccessList, string targetIdJobPrototype, string privilegedIdName, string targetIdName) { IsPrivilegedIdPresent = isPrivilegedIdPresent; IsPrivilegedIdAuthorized = isPrivilegedIdAuthorized; IsTargetIdPresent = isTargetIdPresent; TargetIdFullName = targetIdFullName; TargetIdJobTitle = targetIdJobTitle; TargetIdAccessList = targetIdAccessList; AllowedModifyAccessList = allowedModifyAccessList; TargetIdJobPrototype = targetIdJobPrototype; PrivilegedIdName = privilegedIdName; TargetIdName = targetIdName; } } [Serializable, NetSerializable] public enum IdCardConsoleUiKey : byte { Key, } }