示例#1
0
		protected override bool CheckAllocatedCapability(Capability capability)
		{
			if (!Robot.CanSwitch())
				return false;

			var processCapability = capability as ProcessCapability;
			return processCapability == null || Robot.CanApply(processCapability);
		}
示例#2
0
		public override bool IsEquivalentTo(Capability capability)
		{
			var produce = capability as ProduceCapability;
			if (produce == null)
				return false;

			return Tasks.SequenceEqual(produce.Tasks);
		}
示例#3
0
		public override void OnReconfigured()
		{
			_currentCapability = null;
			base.OnReconfigured();

			// For now, the resource disappears magically...
			Robot.DiscardWorkpiece();
		}
示例#4
0
		public override bool IsEquivalentTo(Capability capability)
		{
			var process = capability as ProcessCapability;
			return ProductionAction == process?.ProductionAction;
		}
示例#5
0
		public RobotAgent(Capability[] capabilities, Robot robot)
			: base(capabilities)
		{
			Robot = robot;
		}
示例#6
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();
			}
		}
示例#7
0
		protected virtual bool CheckAllocatedCapability(Capability capability)
		{
			return true;
		}
示例#8
0
		public override bool IsEquivalentTo(Capability capability)
		{
			return capability is ConsumeCapability;
		}
 private bool ContainsCapability(IEnumerable<Capability> capabilities, Capability capability)
 {
     return capabilities.Any(c => c.IsEquivalentTo(capability));
 }