/// <summary> /// Advances the disposal traversal by one tile. /// </summary> public void Traverse() { ReadyToTraverse = false; // Check if just started so we don't end the traversal at the disposal machine we started from. if (justStarted == false && currentPipe.PipeType == DisposalPipeType.Terminal) { EjectViaDisposalPipeTerminal(); return; } // Advance to next pipe justStarted = false; OrientationEnum nextPipeRequiredSide = GetConnectedSide(currentPipeOutputSide).AsEnum(); DisposalPipe nextPipe = GetPipeAt(NextPipeLocalPosition, requiredSide: nextPipeRequiredSide); if (nextPipe == null) { EjectViaPipeEnd(); return; } TransferContainerToVector(NextPipeVector); currentPipeLocalPos = NextPipeLocalPosition; currentPipeOutputSide = Orientation.FromEnum(GetPipeLeavingSide(nextPipe, nextPipeRequiredSide)); currentPipe = nextPipe; ReadyToTraverse = true; }
/// <summary> /// Create a new disposal instance. /// Note: start a disposal instance by using DisposalsManager.Instance.NewDisposal(), /// as it will handle instance updates. /// </summary> /// <param name="container">The virtual container holding the entities to be disposed of.</param> public DisposalTraversal(DisposalVirtualContainer container) { RegisterTile registerTile = container.GetComponent <RegisterTile>(); matrix = registerTile.Matrix; currentPipeLocalPos = registerTile.LocalPositionServer; virtualContainer = container; containerTransform = container.GetComponent <CustomNetTransform>(); currentPipe = GetPipeAt(currentPipeLocalPos, DisposalPipeType.Terminal); if (currentPipe == null) { virtualContainer.EjectContents(); DespawnContainerAndFinish(); return; } // First() assumes initial pipe is of type: Terminal (as it has just one connectable side) // Not an issue unless new traversals do not start from disposal machines. // Consider refactoring and using GetPipeLeavingSide(currentPipe, someSide); if this becomes an issue. currentPipeOutputSide = Orientation.FromEnum(currentPipe.ConnectablePoints.First().Key); justStarted = true; ReadyToTraverse = true; }
public void Initialise(DisposalPipe TileToTake, Vector3Int position) { DisposalPipeTile = TileToTake; NodeLocation = position; }