private bool TryInsert(DisposalHolderComponent holder) { if (!Contents.Insert(holder.Owner)) { return(false); } holder.EnterTube(this); return(true); }
/// <summary> /// Ejects contents when they come from the same direction the entry is facing. /// </summary> public override Direction NextDirection(DisposalHolderComponent holder) { if (holder.PreviousTube != null && DirectionTo(holder.PreviousTube) == ConnectableDirections()[0]) { var invalidDirections = new[] { ConnectableDirections()[0], Direction.Invalid }; var directions = Enum.GetValues(typeof(Direction)) .Cast <Direction>().Except(invalidDirections).ToList(); return(_random.Pick(directions)); } return(ConnectableDirections()[0]); }
public override Direction NextDirection(DisposalHolderComponent holder) { var next = Owner.Transform.LocalRotation.GetDir(); var directions = ConnectableDirections().Skip(1).ToArray(); if (holder.PreviousTube == null || DirectionTo(holder.PreviousTube) == next) { return(_random.Pick(directions)); } return(next); }
public override Direction NextDirection(DisposalHolderComponent holder) { var directions = ConnectableDirections(); var previousTube = holder.PreviousTube; if (previousTube == null) { return(directions[0]); } var previousDirection = DirectionTo(previousTube); return(previousDirection == directions[0] ? directions[1] : directions[0]); }
public override Direction NextDirection(DisposalHolderComponent holder) { var directions = ConnectableDirections(); var previousTube = holder.PreviousTube; var forward = directions[0]; if (previousTube == null) { return(forward); } var backward = directions[1]; return(DirectionTo(previousTube) == forward ? backward : forward); }
public override Direction NextDirection(DisposalHolderComponent holder) { return(ConnectableDirections()[0]); }