using Content.Shared.Atmos; using Robust.Shared.GameStates; namespace Content.Shared._DV.NodeCrawl; /// /// Handles node-confined movement for an entity. /// [RegisterComponent, NetworkedComponent, AutoGenerateComponentState(true)] [Access(typeof(NodeCrawlerMovementSystem))] public sealed partial class NodeCrawlerMovementComponent : Component { /// /// The current node. /// [DataField, AutoNetworkedField] public EntityUid? Node; /// /// The target node being moved to. /// [DataField, AutoNetworkedField] public EntityUid? TargetNode; /// /// The crawler being carried by this entity. /// [DataField, AutoNetworkedField] public EntityUid? HeldCrawler; /// /// The required angle to be within for deciding which node to move from the target direction /// [DataField] public double RequiredAngle = Math.PI / 4f; /// /// The contained gas mixture to expose the contained entities' atmos to, if any. /// [DataField] [Access(typeof(SharedNodeCrawlSystem))] public GasMixture? Air; /// /// The amount of air to draw into the mover, in liters. /// [DataField] public float AirVolume = 100f; } /// /// Event raised when a node crawler arrives at a node entity. /// /// The arrived-at node. [ByRefEvent] public readonly record struct NodeCrawlerArrivedAtNodeEvent(EntityUid Node);