46 lines
1.3 KiB
C#
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;
|
||
|
|
}
|
||
|
|
}
|