Пример #1
0
 /// <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());
     }
 }
Пример #2
0
        void StorePlayer(MouseDrop interaction)
        {
            if (virtualContainer == null)
            {
                virtualContainer = SpawnNewContainer();
            }
            virtualContainer.AddPlayer(interaction.DroppedObject.GetComponent <ObjectBehaviour>());

            this.RestartCoroutine(AutoFlush(), ref autoFlushCoroutine);
        }
Пример #3
0
        void StoreItem()
        {
            if (virtualContainer == null)
            {
                virtualContainer = SpawnNewContainer();
            }
            Inventory.ServerDrop(currentInteraction.HandSlot, currentInteraction.TargetVector);
            virtualContainer.AddItem(currentInteraction.HandObject.GetComponent <ObjectBehaviour>());

            this.RestartCoroutine(AutoFlush(), ref autoFlushCoroutine);
        }
Пример #4
0
        public void EjectContents()
        {
            if (autoFlushCoroutine != null)
            {
                StopCoroutine(autoFlushCoroutine);
            }
            if (BinFlushing)
            {
                return;
            }
            if (virtualContainer == null)
            {
                return;
            }

            Despawn.ServerSingle(virtualContainer.gameObject);
            virtualContainer = null;
        }
Пример #5
0
        IEnumerator RunIntakeSequence()
        {
            // Intake orifice closes...
            SetIntakeOperating(true);
            DenyEntry();
            virtualContainer = SpawnNewContainer();
            yield return(WaitFor.Seconds(FLUSH_DELAY));

            // Intake orifice closed. Release the charge.
            SoundManager.PlayNetworkedAtPos("DisposalMachineFlush", registerObject.WorldPositionServer, sourceObj: gameObject);
            DisposalsManager.Instance.NewDisposal(virtualContainer);

            // Restore charge, open orifice.
            yield return(WaitFor.Seconds(ANIMATION_TIME - FLUSH_DELAY));

            virtualContainer = null;
            AllowEntry();
            SetIntakeOperating(false);
        }
Пример #6
0
        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());
        }
Пример #7
0
        /// <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;
        }