public override void Consume(ConsumeCapability capability) { if (Resource == null) { return; } Resource.OnCapabilityApplied(); Robot.ConsumeWorkpiece(); Resource.Task.IsResourceInProduction = false; Resource = null; }
public override void Produce(ProduceCapability capability) { if (Resource != null || capability.Resources.Count == 0 || capability.Tasks.Any(task => task.IsResourceInProduction)) { return; } Resource = capability.Resources[0]; capability.Resources.RemoveAt(0); Resource.Task.IsResourceInProduction = true; Robot.ProduceWorkpiece(Resource.Workpiece); Resource.OnCapabilityApplied(); }
public override void Process(ProcessCapability capability) { if (Resource == null) { return; } if (_currentCapability != capability) { // Switch the capability; if we fail to do so, remove all other capabilities from the available ones and // trigger a reconfiguration if (Robot.SwitchCapability(capability)) { _currentCapability = capability; } else { AvailableCapabilities.RemoveAll(c => c != _currentCapability); CheckConstraints(); return; } } // Apply the capability; if we fail to do so, remove it from the available ones and trigger a reconfiguration if (!Robot.ApplyCapability()) { AvailableCapabilities.Remove(capability); CheckConstraints(); } else { if (Resource.State.Count() == Resource.Task.Capabilities.Length) { throw new InvalidOperationException(); } Resource.OnCapabilityApplied(); } }