using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; namespace Content.Shared.Light.Components; [RegisterComponent, NetworkedComponent, Access(typeof(SharedHandheldLightSystem))] public sealed partial class HandheldLightComponent : Component { public byte? Level; [DataField] public bool Activated; [DataField] public float Wattage { get; set; } = .8f; [DataField] public SoundSpecifier TurnOnSound = new SoundPathSpecifier("/Audio/Items/flashlight_on.ogg"); [DataField] public SoundSpecifier TurnOnFailSound = new SoundPathSpecifier("/Audio/Machines/button.ogg"); [DataField] public SoundSpecifier TurnOffSound = new SoundPathSpecifier("/Audio/Items/flashlight_off.ogg"); /// /// Whether to automatically set item-prefixes when toggling the flashlight. /// /// /// Flashlights should probably be using explicit unshaded sprite, in-hand and clothing layers, this is /// mostly here for backwards compatibility. /// [DataField] public bool AddPrefix = false; [DataField] public EntProtoId ToggleAction = "ActionToggleLight"; /// /// Whether or not the light can be toggled via standard interactions /// (alt verbs, using in hand, etc) /// [DataField] public bool ToggleOnInteract = true; [DataField] public EntityUid? ToggleActionEntity; [DataField] public EntityUid? SelfToggleActionEntity; public const int StatusLevels = 6; /// /// Specify the ID of the light behaviour to use when the state of the light is Dying /// [DataField] public string BlinkingBehaviourId { get; set; } = string.Empty; /// /// Specify the ID of the light behaviour to use when the state of the light is LowPower /// [DataField] public string RadiatingBehaviourId { get; set; } = string.Empty; [Serializable, NetSerializable] public sealed class HandheldLightComponentState : ComponentState { public byte? Charge { get; } public bool Activated { get; } public HandheldLightComponentState(bool activated, byte? charge) { Activated = activated; Charge = charge; } } } [Serializable, NetSerializable] public enum HandheldLightVisuals { Power } [Serializable, NetSerializable] public enum HandheldLightPowerStates { FullPower, LowPower, Dying, }