using System.Linq; using Content.Server.Disposal.Unit.Components; using Robust.Shared.Random; namespace Content.Server.Disposal.Tube.Components { [Virtual] [RegisterComponent] [ComponentReference(typeof(IDisposalTubeComponent))] [ComponentReference(typeof(DisposalTubeComponent))] public class DisposalJunctionComponent : DisposalTubeComponent { [Dependency] private readonly IEntityManager _entMan = default!; [Dependency] private readonly IRobustRandom _random = default!; /// /// The angles to connect to. /// [ViewVariables] [DataField("degrees")] private List _degrees = new(); protected override Direction[] ConnectableDirections() { var direction = _entMan.GetComponent(Owner).LocalRotation; return _degrees.Select(degree => new Angle(degree.Theta + direction.Theta).GetDir()).ToArray(); } public override Direction NextDirection(DisposalHolderComponent holder) { var next = _entMan.GetComponent(Owner).LocalRotation.GetDir(); var directions = ConnectableDirections().Skip(1).ToArray(); if (holder.PreviousDirectionFrom == Direction.Invalid || holder.PreviousDirectionFrom == next) { return _random.Pick(directions); } return next; } } }