/// <summary> /// Provide the disposal outlet a container, from the disposal pipe network, /// from which its contents will be ejected into the world. The container object will be despawned. /// </summary> /// <param name="virtualContainer">The virtual container whose contents will be ejected.</param> public void ServerReceiveAndEjectContainer(DisposalVirtualContainer virtualContainer) { receivedContainers.Add(virtualContainer); virtualContainer.GetComponent <ObjectBehaviour>().parentContainer = objectBehaviour; if (!OutletOperating) { StartCoroutine(RunEjectionSequence()); } }
/// <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; }
IEnumerator RunFlushSequence() { // Bin orifice closes... SetBinState(BinState.Flushing); yield return(WaitFor.Seconds(ANIMATION_TIME)); // Bin orifice closed. Release the charge. chargePressure = 0; SoundManager.PlayNetworkedAtPos("DisposalMachineFlush", registerObject.WorldPositionServer, sourceObj: gameObject); if (virtualContainer != null) { virtualContainer.GetComponent <ObjectBehaviour>().parentContainer = null; DisposalsManager.Instance.NewDisposal(virtualContainer); virtualContainer = null; } // Restore charge. SetBinState(BinState.Recharging); StartCoroutine(Recharge()); }