コード例 #1
0
        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;
                }
            }
        }
コード例 #2
0
        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());
                }
            }
        }
コード例 #3
0
ファイル: AutomateMod.cs プロジェクト: camper6/StardewMods
        /// <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}");
            }
        }
コード例 #4
0
        /// <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());
        }