Files
MetalGear2D.Unity/Assets/Scripts/AI/BehaviorTree/AiParallel.cs
T
2025-05-13 05:19:58 +03:00

46 lines
1.3 KiB
C#

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;
}
}