Files
tbd-station-14/Content.Server/Weapon/Ranged/Barrels/Components/RevolverBarrelComponent.cs
2022-05-13 17:59:03 +10:00

61 lines
2.1 KiB
C#

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<EntityUid?>();
public override int ShotsLeft => AmmoContainer.ContainedEntities.Count;
[ViewVariables]
[DataField("fillPrototype", customTypeSerializer:typeof(PrototypeIdSerializer<EntityPrototype>))]
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];
}
}
}