using System.Threading; using Robust.Shared.Audio; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Forensics { [RegisterComponent] public sealed partial class ForensicScannerComponent : Component { public CancellationTokenSource? CancelToken; /// /// A list of fingerprint GUIDs that the forensic scanner found from the on an entity. /// [ViewVariables(VVAccess.ReadOnly), DataField("fingerprints")] public List Fingerprints = new(); /// /// A list of glove fibers that the forensic scanner found from the on an entity. /// [ViewVariables(VVAccess.ReadOnly), DataField("fibers")] public List Fibers = new(); /// /// DNA that the forensic scanner found from the on an entity. /// [ViewVariables(VVAccess.ReadOnly), DataField("dnas")] public List TouchDNAs = new(); /// /// DNA that the forensic scanner found from the solution containers in an entity. /// [ViewVariables(VVAccess.ReadOnly), DataField] public List SolutionDNAs = new(); /// /// Residue that the forensic scanner found from the on an entity. /// [ViewVariables(VVAccess.ReadOnly), DataField("residues")] public List Residues = new(); /// /// What is the name of the entity that was scanned last? /// /// /// This will be used for the title of the printout and displayed to players. /// [ViewVariables(VVAccess.ReadOnly)] public string LastScannedName = string.Empty; /// /// When will the scanner be ready to print again? /// [ViewVariables(VVAccess.ReadOnly)] public TimeSpan PrintReadyAt = TimeSpan.Zero; /// /// The time (in seconds) that it takes to scan an entity. /// [DataField("scanDelay")] public float ScanDelay = 3.0f; /// /// How often can the scanner print out reports? /// [DataField("printCooldown")] public TimeSpan PrintCooldown = TimeSpan.FromSeconds(5); /// /// The sound that's played when there's a match between a scan and an /// inserted forensic pad. /// [DataField("soundMatch")] public SoundSpecifier SoundMatch = new SoundPathSpecifier("/Audio/Machines/Nuke/angry_beep.ogg"); /// /// The sound that's played when there's no match between a scan and an /// inserted forensic pad. /// [DataField("soundNoMatch")] public SoundSpecifier SoundNoMatch = new SoundPathSpecifier("/Audio/Machines/airlock_deny.ogg"); /// /// The sound that's played when the scanner prints off a report. /// [DataField("soundPrint")] public SoundSpecifier SoundPrint = new SoundPathSpecifier("/Audio/Machines/short_print_and_rip.ogg"); /// /// What the machine will print /// [DataField("machineOutput", customTypeSerializer: typeof(PrototypeIdSerializer))] public string MachineOutput = "ForensicReportPaper"; } }