| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using Content.Shared.Guidebook;
- using Robust.Shared.GameStates;
- namespace Content.Shared.Doors.Components
- {
- /// <summary>
- /// Companion component to <see cref="DoorComponent"/> that handles firelock-specific behavior, including
- /// auto-closing on depressurization, air/fire alarm interactions, and preventing normal door functions when
- /// retaining pressure..
- /// </summary>
- [RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
- public sealed partial class FirelockComponent : Component
- {
- #region Settings
- /// <summary>
- /// Pry time modifier to be used when the firelock is currently closed due to fire or pressure.
- /// </summary>
- /// <returns></returns>
- [DataField("lockedPryTimeModifier"), ViewVariables(VVAccess.ReadWrite)]
- public float LockedPryTimeModifier = 1.5f;
- /// <summary>
- /// Maximum pressure difference before the firelock will refuse to open, in kPa.
- /// </summary>
- [DataField("pressureThreshold"), ViewVariables(VVAccess.ReadWrite)]
- [GuidebookData]
- public float PressureThreshold = 20;
- /// <summary>
- /// Maximum temperature difference before the firelock will refuse to open, in k.
- /// </summary>
- [DataField("temperatureThreshold"), ViewVariables(VVAccess.ReadWrite)]
- [GuidebookData]
- public float TemperatureThreshold = 330;
- // this used to check for hot-spots, but because accessing that data is a a mess this now just checks
- // temperature. This does mean a cold room will trigger hot-air pop-ups
- /// <summary>
- /// If true, and if this door has an <see cref="AtmosAlarmableComponent"/>, then it will only auto-close if the
- /// alarm is set to danger.
- /// </summary>
- [DataField("alarmAutoClose"), ViewVariables(VVAccess.ReadWrite)]
- public bool AlarmAutoClose = true;
- /// <summary>
- /// The cooldown duration before a firelock can automatically close due to a hazardous environment after it has
- /// been pried open. Measured in seconds.
- /// </summary>
- [DataField]
- public TimeSpan EmergencyCloseCooldownDuration = TimeSpan.FromSeconds(2);
- #endregion
- #region Set by system
- /// <summary>
- /// When the firelock will be allowed to automatically close again due to a hazardous environment.
- /// </summary>
- [DataField]
- public TimeSpan? EmergencyCloseCooldown;
- /// <summary>
- /// Whether the firelock can open, or is locked due to its environment.
- /// </summary>
- public bool IsLocked => Pressure || Temperature;
- /// <summary>
- /// Whether the firelock is holding back a hazardous pressure.
- /// </summary>
- [DataField, AutoNetworkedField]
- public bool Pressure;
- /// <summary>
- /// Whether the firelock is holding back extreme temperatures.
- /// </summary>
- [DataField, AutoNetworkedField]
- public bool Temperature;
- /// <summary>
- /// Whether the airlock is powered.
- /// </summary>
- [DataField, AutoNetworkedField]
- public bool Powered;
- #endregion
- }
- }
|