using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; namespace Content.Shared._CP14.LockKey.Components; /// /// A component of a lock that stores its keyhole shape, complexity, and current state. /// [RegisterComponent, AutoGenerateComponentState(fieldDeltas: true), NetworkedComponent] public sealed partial class CP14LockComponent : Component { [DataField, AutoNetworkedField] public List? LockShape = null; /// /// On which element of the shape sequence the lock is now located. It's necessary for the mechanics of breaking and entering. /// [DataField, AutoNetworkedField] public int LockPickStatus = 0; /// /// If not null, automatically generates a lock for the specified category on initialization. This ensures that the lock will be opened with a key of the same category. /// [DataField] public ProtoId? AutoGenerateShape = null; /// /// If not null, the lock will automatically generate a random shape on initialization with selected numbers of elements. Useful for random dungeons doors or chests for example. /// [DataField] public int? AutoGenerateRandomShape = null; /// /// This component is used for two types of items: Entities themselves that are locked (doors, chests), /// and a portable lock item that can be built into other entities. This variable determines whether /// using this entity on another entity can overwrite the lock properties of the target entity. /// [DataField] public bool CanEmbedded = false; [DataField] public SoundSpecifier EmbedSound = new SoundPathSpecifier("/Audio/_CP14/Items/lockpick_use.ogg") { Params = AudioParams.Default .WithVariation(0.05f) .WithVolume(0.5f), }; }