using Content.Shared.Interaction; using Robust.Shared.GameStates; using Robust.Shared.Serialization; namespace Content.Shared.Buckle.Components; [RegisterComponent, NetworkedComponent] public sealed class BuckleComponent : Component { /// /// The range from which this entity can buckle to a . /// [DataField("range")] public float Range = SharedInteractionSystem.InteractionRange / 1.4f; /// /// True if the entity is buckled, false otherwise. /// public bool Buckled { get; set; } public EntityUid? LastEntityBuckledTo { get; set; } public bool DontCollide { get; set; } /// /// The amount of time that must pass for this entity to /// be able to unbuckle after recently buckling. /// [DataField("delay")] public TimeSpan UnbuckleDelay = TimeSpan.FromSeconds(0.25f); /// /// The time that this entity buckled at. /// [ViewVariables] public TimeSpan BuckleTime; /// /// The strap that this component is buckled to. /// [ViewVariables] public StrapComponent? BuckledTo { get; set; } /// /// The amount of space that this entity occupies in a /// . /// [DataField("size")] public int Size = 100; /// /// Used for client rendering /// public int? OriginalDrawDepth { get; set; } } [Serializable, NetSerializable] public sealed class BuckleComponentState : ComponentState { public BuckleComponentState(bool buckled, EntityUid? lastEntityBuckledTo, bool dontCollide) { Buckled = buckled; LastEntityBuckledTo = lastEntityBuckledTo; DontCollide = dontCollide; } public bool Buckled { get; } public EntityUid? LastEntityBuckledTo { get; } public bool DontCollide { get; } } public sealed class BuckleChangeEvent : EntityEventArgs { public EntityUid Strap; public EntityUid BuckledEntity; public bool Buckling; } [Serializable, NetSerializable] public enum BuckleVisuals { Buckled }