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