using Robust.Shared.Audio;
using Robust.Shared.Prototypes;
using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.Array;
namespace Content.Shared.AlertLevel;
///
/// Prototype for a single alert level a station can be set to.
///
[Prototype]
public sealed partial class AlertLevelPrototype : IPrototype, IInheritingPrototype
{
[IdDataField]
public string ID { get; private set; } = default!;
[ParentDataField(typeof(AbstractPrototypeIdArraySerializer))]
public string[]? Parents { get; private set; }
[NeverPushInheritance]
[AbstractDataField]
public bool Abstract { get; private set; }
[DataField(required: true)]
private LocId Name { get; set; }
[ViewVariables(VVAccess.ReadOnly)]
public string LocalizedName => Loc.GetString(Name);
///
/// Whether this alert level is selectable from a communications console.
///
[DataField]
public bool Selectable = true;
///
/// If this alert level disables user selection while it is active. Beware -
/// setting this while something is selectable will disable selection permanently!
/// This should only apply to entities or gamemodes that auto-select an alert level,
/// such as a nuclear bomb being set to active.
///
[DataField]
public bool DisableSelection;
///
/// The text that is announced when this alert level is selected.
///
[DataField]
public LocId? Announcement;
///
/// The text that is announced when this alert level is selected.
///
[DataField]
public LocId? Instructions;
///
/// The sound that will played in-game when this alert level is selected.
///
[DataField]
public SoundSpecifier? Sound;
///
/// The color that this alert level will show in-game in chat.
///
[DataField]
public Color Color = Color.White;
///
/// The color to turn emergency lights on this station when they are active.
///
[DataField]
public Color EmergencyLightColor = Color.FromHex("#FF4020");
///
/// Will this alert level force emergency lights on for the station that's active?
///
[DataField]
public bool ForceEnableEmergencyLights = false;
///
/// How long it takes for the shuttle to arrive when called while this alert level is active.
///
[DataField]
public TimeSpan ShuttleTime = TimeSpan.FromMinutes(5);
}