*
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user