Ejemplo n.º 1
0
        public override void Consume(ConsumeCapability capability)
        {
            if (Resource == null)
            {
                return;
            }

            Resource.OnCapabilityApplied();
            Robot.ConsumeWorkpiece();
            Resource.Task.IsResourceInProduction = false;
            Resource = null;
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
            }
        }