using UnityEngine; using System.Collections; public enum AiParallelPolicy { Any, All } public class AiParallel : AiComposite { public AiParallelPolicy successPolicy = AiParallelPolicy.Any; public AiParallelPolicy failurePolicy = AiParallelPolicy.All; protected override BehaviorStatus OnExecute(AiBlackboard blackboard) { int failCount = 0; int successCount = 0; foreach (var behavior in children) { //if (behavior.Running) { behavior.Tick(blackboard); //} if (behavior.State == BehaviorStatus.Success) { ++successCount; if (successPolicy == AiParallelPolicy.Any) { return BehaviorStatus.Success; } } else if (behavior.State == BehaviorStatus.Fail) { ++failCount; if (failurePolicy == AiParallelPolicy.Any) { return BehaviorStatus.Fail; } } } if (failurePolicy == AiParallelPolicy.All && failCount == children.Length) { return BehaviorStatus.Fail; } if (successPolicy == AiParallelPolicy.All && successCount == children.Length) { return BehaviorStatus.Fail; } return BehaviorStatus.Running; } }