using Robust.Shared.Audio; using Robust.Shared.GameStates; using Robust.Shared.Serialization; using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom; namespace Content.Shared.CardboardBox.Components; /// /// Allows a user to control an EntityStorage entity while inside of it. /// Used for big cardboard box entities. /// [RegisterComponent, NetworkedComponent] public sealed partial class CardboardBoxComponent : Component { /// /// The person in control of this box /// [DataField("mover")] public EntityUid? Mover; /// /// The entity used for the box opening effect /// [ViewVariables(VVAccess.ReadWrite)] [DataField("effect")] public string Effect = "Exclamation"; /// /// Sound played upon effect creation /// [ViewVariables(VVAccess.ReadWrite)] [DataField("effectSound")] public SoundSpecifier? EffectSound; /// /// Whether to prevent the box from making the sound and effect /// [ViewVariables(VVAccess.ReadWrite)] [DataField("quiet")] public bool Quiet = false; /// /// How far should the box opening effect go? /// [ViewVariables(VVAccess.ReadWrite)] [DataField("distance")] public float Distance = 6f; /// /// Time at which the sound effect can next be played. /// [DataField("effectCooldown", customTypeSerializer: typeof(TimeOffsetSerializer))] public TimeSpan EffectCooldown; /// /// Time between sound effects. Prevents effect spam /// [DataField("cooldownDuration")] public TimeSpan CooldownDuration = TimeSpan.FromSeconds(5f); } [Serializable, NetSerializable] public sealed class PlayBoxEffectMessage : EntityEventArgs { public NetEntity Source; public NetEntity Mover; public PlayBoxEffectMessage(NetEntity source, NetEntity mover) { Source = source; Mover = mover; } }