public ITrackedStack GetOutput()
        {
            ITrackedStack overrideOutput = OverridingMachine.GetOutput();

            if (overrideOutput != null)
            {
                return(overrideOutput);
            }
            else
            {
                MassProductionMachineDefinition mpm = ModEntry.GetMPMMachine(OriginalMachineObject.name, OriginalMachineObject.GetMassProducerKey());

                if (mpm != null)
                {
                    // Check for special overriding logic, if any is required
                    string originalClassName = OriginalMachine.GetType().FullName;

                    if (VanillaOverrideList.GetFor(originalClassName) != null)
                    {
                        IVanillaOverride vanillaOverride = VanillaOverrideList.GetFor(originalClassName);
                        overrideOutput = vanillaOverride.Automate_GetOutput(mpm, OriginalMachine, OriginalMachineObject);

                        return(overrideOutput);
                    }
                    else
                    {
                        return(null);
                    }
                }
                else
                {
                    return(OriginalMachine.GetOutput());
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>Process a set of machines.</summary>
        /// <param name="machines">The machines to process.</param>
        private void ProcessMachines(IEnumerable <MachineMetadata> machines)
        {
            machines = machines.ToArray();

            this.VerboseLog($"Automating {machines.Count()} machines...");
            foreach (MachineMetadata metadata in machines)
            {
                IMachine machine = metadata.Machine;
                string   summary = $"Automating {metadata.Location.Name} > {machine.GetType().Name} ({metadata.Connected.Length} pipes)...";

                MachineState state = machine.GetState();
                switch (state)
                {
                case MachineState.Empty:
                    bool pulled = machine.Pull(metadata.Connected);
                    summary += pulled ? " accepted new input." : " no input found.";
                    break;

                case MachineState.Done:
                    bool pushed = metadata.Connected.TryPush(machine.GetOutput());
                    summary += pushed ? " pushed output." : " done, but no pipes can accept its output.";
                    break;

                default:
                    summary += $" machine is {state.ToString().ToLower()}.";
                    break;
                }

                this.VerboseLog($"   {summary}");
            }
        }
Exemplo n.º 3
0
 public bool IsSameMachine(IMachine machine)
 {
     //I have no experiance with overriting the equils method / operators
     if (this.GetType() != machine.GetType())
     {
         return(false);
     }
     foreach (Nozzle nozzle_ in equippedNozzles_)
     {
         //Comparing the array's doesn't work (even if the order matters)
         if (machine.GetNozzleNumber(nozzle_) == -1)
         {
             return(false);
         }
     }
     return(this.defaultSpeed_ == machine.DefaultSpeed); //last check, speeds are the same
 }