49 lines
1.3 KiB
C#
49 lines
1.3 KiB
C#
using NodeCanvas.Framework;
|
|
using ParadoxNotion.Design;
|
|
using UnityEngine;
|
|
|
|
|
|
namespace NodeCanvas.BehaviourTrees
|
|
{
|
|
|
|
[Category("Composites")]
|
|
[Description("Works like a normal Selector, but when a child returns Success, that child will be moved to the end.\nAs a result, previously Failed children will always be checked first and recently Successful children last.")]
|
|
[ParadoxNotion.Design.Icon("FlipSelector")]
|
|
[Color("b3ff7f")]
|
|
[System.Obsolete]
|
|
public class FlipSelector : BTComposite
|
|
{
|
|
|
|
private int current;
|
|
|
|
protected override Status OnExecute(Component agent, IBlackboard blackboard) {
|
|
|
|
for ( var i = current; i < outConnections.Count; i++ ) {
|
|
|
|
status = outConnections[i].Execute(agent, blackboard);
|
|
|
|
if ( status == Status.Running ) {
|
|
current = i;
|
|
return Status.Running;
|
|
}
|
|
|
|
if ( status == Status.Success ) {
|
|
SendToBack(i);
|
|
return Status.Success;
|
|
}
|
|
}
|
|
|
|
return Status.Failure;
|
|
}
|
|
|
|
void SendToBack(int i) {
|
|
var c = outConnections[i];
|
|
outConnections.RemoveAt(i);
|
|
outConnections.Add(c);
|
|
}
|
|
|
|
protected override void OnReset() {
|
|
current = 0;
|
|
}
|
|
}
|
|
} |