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;
}
}