using Content.Server.Weapon.Ranged.Ammunition.Components; using Content.Shared.Sound; using Robust.Shared.Containers; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Server.Weapon.Ranged.Barrels.Components { [RegisterComponent, NetworkedComponent, ComponentReference(typeof(ServerRangedBarrelComponent))] public sealed class RevolverBarrelComponent : ServerRangedBarrelComponent, ISerializationHooks { [ViewVariables] [DataField("caliber")] public BallisticCaliber Caliber = BallisticCaliber.Unspecified; public Container AmmoContainer = default!; [ViewVariables] public int CurrentSlot; public override int Capacity => AmmoSlots.Length; [DataField("capacity")] private int _serializedCapacity = 6; [DataField("ammoSlots", readOnly: true)] public EntityUid?[] AmmoSlots = Array.Empty(); public override int ShotsLeft => AmmoContainer.ContainedEntities.Count; [ViewVariables] [DataField("fillPrototype", customTypeSerializer:typeof(PrototypeIdSerializer))] public string? FillPrototype; [ViewVariables] public int UnspawnedCount; // Sounds [DataField("soundEject")] public SoundSpecifier SoundEject = new SoundPathSpecifier("/Audio/Weapons/Guns/MagOut/revolver_magout.ogg"); [DataField("soundInsert")] public SoundSpecifier SoundInsert = new SoundPathSpecifier("/Audio/Weapons/Guns/MagIn/revolver_magin.ogg"); [DataField("soundSpin")] public SoundSpecifier SoundSpin = new SoundPathSpecifier("/Audio/Weapons/Guns/Misc/revolver_spin.ogg"); void ISerializationHooks.BeforeSerialization() { _serializedCapacity = AmmoSlots.Length; } void ISerializationHooks.AfterDeserialization() { AmmoSlots = new EntityUid?[_serializedCapacity]; } } }