using System.Threading; using Robust.Shared.Audio; namespace Content.Server.Forensics { [RegisterComponent] public sealed class ForensicScannerComponent : Component { public CancellationTokenSource? CancelToken; /// /// A list of fingerprint GUIDs that the forensic scanner found from the on an entity. /// [ViewVariables(VVAccess.ReadOnly)] public List Fingerprints = new(); /// /// A list of glove fibers that the forensic scanner found from the on an entity. /// [ViewVariables(VVAccess.ReadOnly)] public List Fibers = 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"); } }