using System.Numerics; using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Prototypes; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype; namespace Content.Shared.Vehicle.Components; /// /// This is particularly for vehicles that use /// buckle. Stuff like clown cars may need a different /// component at some point. /// All vehicles should have Physics, Strap, and SharedPlayerInputMover components. /// [AutoGenerateComponentState] [RegisterComponent, NetworkedComponent] [Access(typeof(SharedVehicleSystem))] public sealed partial class VehicleComponent : Component { /// /// The entity currently riding the vehicle. /// [ViewVariables] [AutoNetworkedField] public EntityUid? Rider; [ViewVariables] [AutoNetworkedField] public EntityUid? LastRider; /// /// The base offset for the vehicle (when facing east) /// [ViewVariables] public Vector2 BaseBuckleOffset = Vector2.Zero; /// /// The sound that the horn makes /// [DataField("hornSound")] [ViewVariables(VVAccess.ReadWrite)] public SoundSpecifier? HornSound = new SoundPathSpecifier("/Audio/Effects/Vehicle/carhorn.ogg") { Params = AudioParams.Default.WithVolume(-3f) }; [ViewVariables] public EntityUid? HonkPlayingStream; /// Use ambient sound component for the idle sound. [DataField("hornAction", customTypeSerializer: typeof(PrototypeIdSerializer))] public string? HornAction = "ActionVehicleHorn"; /// /// The action for the horn (if any) /// [DataField("hornActionEntity")] [ViewVariables(VVAccess.ReadWrite)] public EntityUid? HornActionEntity; /// /// Whether the vehicle has a key currently inside it or not. /// [DataField("hasKey")] [ViewVariables(VVAccess.ReadWrite)] public bool HasKey; /// /// Determines from which side the vehicle will be displayed on top of the player. /// [DataField("southOver")] [ViewVariables(VVAccess.ReadWrite)] public bool SouthOver; [DataField("northOver")] [ViewVariables(VVAccess.ReadWrite)] public bool NorthOver; [DataField("westOver")] [ViewVariables(VVAccess.ReadWrite)] public bool WestOver; [DataField("eastOver")] [ViewVariables(VVAccess.ReadWrite)] public bool EastOver; /// /// What the y buckle offset should be in north / south /// [DataField("northOverride")] [ViewVariables(VVAccess.ReadWrite)] public float NorthOverride; /// /// What the y buckle offset should be in north / south /// [DataField("southOverride")] [ViewVariables(VVAccess.ReadWrite)] public float SouthOverride; [DataField("autoAnimate")] [ViewVariables(VVAccess.ReadWrite)] public bool AutoAnimate = true; [DataField("useHand")] [ViewVariables(VVAccess.ReadWrite)] public bool UseHand = true; [DataField("hideRider")] [ViewVariables(VVAccess.ReadWrite)] public bool HideRider; }