private void ProcessMachines(MachineMetadata[] machines) { foreach (MachineMetadata metadata in machines) { IMachine machine = metadata.Machine; switch (machine.GetState()) { case MachineState.Empty: machine.Pull(metadata.Connected); break; case MachineState.Done: if (TryPush(metadata.Connected, machine.GetOutput())) { machine.Reset(true); } break; } } }
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()); } } }
/// <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}"); } }
/// <inheritdoc/> public ITrackedStack Automate_GetOutput(MassProductionMachineDefinition mpm, IMachine originalMachine, SObject originalMachineObject) { if (mpm != null) { int baitID = 685; int quantityProduced = mpm.Settings.CalculateOutputProduced(Game1.random.Next(2, 6)); int timeRequired = mpm.Settings.CalculateTimeRequired(2600 - Game1.timeOfDay); return(new TrackedItem(originalMachineObject.heldObject.Value, item => { originalMachineObject.heldObject.Value = new SObject(baitID, quantityProduced); originalMachineObject.MinutesUntilReady = timeRequired; originalMachineObject.readyForHarvest.Value = false; originalMachineObject.showNextIndex.Value = false; })); } return(originalMachine.GetOutput()); }