using Content.Shared.DeviceLinking; using Content.Shared.Light.EntitySystems; using Robust.Shared.Audio; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared.Light.Components { /// /// Component that represents a wall light. It has a light bulb that can be replaced when broken. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState, AutoGenerateComponentPause, Access(typeof(SharedPoweredLightSystem))] public sealed partial class PoweredLightComponent : Component { /* * Stop adding more fields, use components or I will shed you. */ [DataField] public SoundSpecifier BurnHandSound = new SoundPathSpecifier("/Audio/Effects/lightburn.ogg"); [DataField] public SoundSpecifier TurnOnSound = new SoundPathSpecifier("/Audio/Machines/light_tube_on.ogg"); // Should be using containerfill? [DataField] public EntProtoId? HasLampOnSpawn = null; [DataField("bulb")] public LightBulbType BulbType; [DataField, AutoNetworkedField] public bool On = true; [DataField] public bool IgnoreGhostsBoo; [DataField] public TimeSpan GhostBlinkingTime = TimeSpan.FromSeconds(10); [DataField] public TimeSpan GhostBlinkingCooldown = TimeSpan.FromSeconds(60); [ViewVariables] public ContainerSlot LightBulbContainer = default!; [AutoNetworkedField] public bool CurrentLit; [DataField, AutoNetworkedField] public bool IsBlinking; [DataField, AutoNetworkedField, AutoPausedField] public TimeSpan LastThunk; [DataField, AutoPausedField] public TimeSpan? LastGhostBlink; [DataField] public ProtoId OnPort = "On"; [DataField] public ProtoId OffPort = "Off"; [DataField] public ProtoId TogglePort = "Toggle"; /// /// How long it takes to eject a bulb from this /// [DataField] public float EjectBulbDelay = 2; /// /// Shock damage done to a mob that hits the light with an unarmed attack /// [DataField] public int UnarmedHitShock = 20; /// /// Stun duration applied to a mob that hits the light with an unarmed attack /// [DataField] public TimeSpan UnarmedHitStun = TimeSpan.FromSeconds(5); } }