You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
| using System.Collections.Generic;
 | |
| using CleverCrow.Fluid.BTs.Tasks;
 | |
| 
 | |
| namespace CleverCrow.Fluid.BTs.TaskParents.Composites {
 | |
|     public class Parallel : CompositeBase {
 | |
|         private readonly Dictionary<ITask, TaskStatus> _childStatus = new Dictionary<ITask, TaskStatus>();
 | |
| 
 | |
|         public override string IconPath { get; } = $"{PACKAGE_ROOT}/CompareArrows.png";
 | |
| 
 | |
|         protected override TaskStatus OnUpdate () {
 | |
|             var successCount = 0;
 | |
|             var failureCount = 0;
 | |
| 
 | |
|             foreach (var child in Children) {
 | |
|                 TaskStatus prevStatus;
 | |
|                 if (_childStatus.TryGetValue(child, out prevStatus) && prevStatus == TaskStatus.Success) {
 | |
|                     successCount++;
 | |
|                     continue;
 | |
|                 }
 | |
| 
 | |
|                 var status = child.Update();
 | |
|                 _childStatus[child] = status;
 | |
| 
 | |
|                 switch (status) {
 | |
|                     case TaskStatus.Failure:
 | |
|                         failureCount++;
 | |
|                         break;
 | |
|                     case TaskStatus.Success:
 | |
|                         successCount++;
 | |
|                         break;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             if (successCount == Children.Count) {
 | |
|                 End();
 | |
|                 return TaskStatus.Success;
 | |
|             }
 | |
| 
 | |
|             if (failureCount > 0) {
 | |
|                 End();
 | |
|                 return TaskStatus.Failure;
 | |
|             }
 | |
| 
 | |
|             return TaskStatus.Continue;
 | |
|         }
 | |
| 
 | |
|         public override void Reset () {
 | |
|             _childStatus.Clear();
 | |
| 
 | |
|             base.Reset();
 | |
|         }
 | |
| 
 | |
|         public override void End () {
 | |
|             foreach (var child in Children) {
 | |
|                 child.End();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |