protected override BTRunningStatus DoTick(BTInput input, ref BTOutput output) { base.DoTick(input, ref output); var runningStatus = BTRunningStatus.Finish; if (_lastSelectIndex != -1 && _lastSelectIndex != _currentSelectIndex) { var node = _childNodes[_lastSelectIndex]; node.Transition(input); _lastSelectIndex = _currentSelectIndex; } if (_lastSelectIndex != -1) { var node = _childNodes[_lastSelectIndex]; runningStatus = node.Tick(input, ref output); if (runningStatus == BTRunningStatus.Finish) { _lastSelectIndex = -1; } } return(runningStatus); }
protected override BTRunningStatus DoTick(BTInput input, ref BTOutput output) { base.DoTick(input, ref output); var runningStatus = BTRunningStatus.Finish; if (_currentNodeIndex == -1) { _currentNodeIndex = 0; } var node = _childNodes[_currentNodeIndex]; runningStatus = node.Tick(input, ref output); if (runningStatus == BTRunningStatus.Finish) { _currentNodeIndex++; if (_currentNodeIndex == _childNodes.Count) { _currentNodeIndex = -1; } else { runningStatus = BTRunningStatus.Executing; } } else if (runningStatus == BTRunningStatus.Error) { _currentNodeIndex = -1; } return(runningStatus); }
protected override BTRunningStatus DoTick(BTInput input, ref BTOutput output) { BTRunningStatus runningStatus = base.DoTick(input, ref output); switch (_status) { case BTNodeStatus.Ready: DoEnter(input); _needExit = true; _status = BTNodeStatus.Running; SetActiveNode(this); break; case BTNodeStatus.Running: runningStatus = DoExecute(input, ref output); SetActiveNode(this); if (runningStatus == BTRunningStatus.Finish || runningStatus == BTRunningStatus.Error) { _status = BTNodeStatus.Finish; } break; case BTNodeStatus.Finish: if (_needExit) { DoExit(input, runningStatus); } _status = BTNodeStatus.Ready; _needExit = false; SetActiveNode(null); break; } return(runningStatus); }
public override void Visit(BTInput input, BTOutput output) { //Debug.Log(string.Format("ActionEventNode status={0}", status)); if (status == BehaviourStatus.Ready) { status = BehaviourStatus.Running; output.leafNode = this; action(input, output); } }
public void Tick(BTInput input, ref BTOutput output) { if (_root.Check(input)) { _root.Tick(input, ref output); } else { _root.Transition(input); } }
protected override BTRunningStatus DoTick(BTInput input, ref BTOutput output) { base.DoTick(input, ref output); var finishChildCount = 0; var childCount = _childNodes.Count; for (int i = 0; i < childCount; i++) { var node = _childNodes[i]; if (_finishCondition == BTParallelFinishCondition.OR) { if (_childNodesStatus[i] == BTRunningStatus.Executing) { _childNodesStatus[i] = node.Tick(input, ref output); } else { RestChildNodeStatus(); return(BTRunningStatus.Finish); } } else /* if (_finishCondition == BTParallelFinishCondition.AND)*/ { if (_childNodesStatus[i] == BTRunningStatus.Executing) { _childNodesStatus[i] = node.Tick(input, ref output); } else { finishChildCount++; } } } if (finishChildCount == _childNodes.Count) { RestChildNodeStatus(); return(BTRunningStatus.Finish); } return(BTRunningStatus.Executing); }
public override void Visit(BTInput input, BTOutput output) { float currTime = Time.unscaledTime; if (status != BehaviourStatus.Running) { wakeTime = currTime + duration+Random.Range(0,variation); status = BehaviourStatus.Running; } if (status == BehaviourStatus.Running) { if (currTime >= wakeTime) status = BehaviourStatus.Success; } }
public override void Visit(BTInput input, BTOutput output) { if (children.Count >= 1) { var child = children[0]; child.Visit(input, output); if (child.status != BehaviourStatus.Failed) { status = child.status; } else { status = BehaviourStatus.Success; } } else { status = BehaviourStatus.Success; } }
public override void Visit(BTInput input, BTOutput output) { if (status != BehaviourStatus.Running) { this.currIndex = 0; } int len = this.children.Count; while (this.currIndex < len) { IBehaviourNode child = children[this.currIndex]; child.Visit(input, output); if (child.status == BehaviourStatus.Running) { this.status = child.status; return; } else if (child.status == BehaviourStatus.Failed) { this.status = BehaviourStatus.Success; return; } this.currIndex++; } this.status = BehaviourStatus.Success; }
public override void Visit(BTInput input, BTOutput output) { if (status == BehaviourStatus.Ready) { int len = this.children.Count - 1; this.currIndex = Random.Range(0, len); int start = this.currIndex; while (true) { IBehaviourNode child = children[this.currIndex]; child.Visit(input, output); if (child.status != BehaviourStatus.Failed) { this.status = child.status; return; } this.currIndex++; if (this.currIndex == len) this.currIndex = 0; if (this.currIndex == start) { this.status = BehaviourStatus.Failed; return; } } } else { IBehaviourNode child = children[this.currIndex]; child.Visit(input, output); this.status = child.status; } }
public override void Visit(BTInput input, BTOutput output) { bool done = true; foreach (IBehaviourNode child in children) { if (children is ConditionNode) { child.Reset(); } child.Visit(input, output); if (child.status == BehaviourStatus.Running) done = false; else if (child.status == BehaviourStatus.Success) { status = child.status; return; } } if (!done) this.status = BehaviourStatus.Running; else this.status = BehaviourStatus.Failed; }
public override void Visit(BTInput input, BTOutput output) { this.status = BehaviourStatus.Success; output.leafNode = this; action(input, output); }
protected virtual BTRunningStatus DoExecute(BTInput _input, ref BTOutput _output) { return(BTRunningStatus.Finish); }
public override void Visit(BTInput input, BTOutput output) { Actor actor = input.actor; object data = output.eventData; if (data != null) { //Debug.Log("触发事件" + actor + "=>" + (BrainEventEnum)eventType + " data= " + data); //actor.brain.DispatchEvent(eventType, data); status = BehaviourStatus.Success; } else { status = BehaviourStatus.Failed; } }
public override void Visit(BTInput input, BTOutput output) { if (status == BehaviourStatus.Ready && !isInit) { isInit = true; //Debug.Log(string.Format("AddEventHandler {0} status ={1} ,actor ={2} ", this.name + (BrainEventEnum)eventType, status, input.actor)); //input.actor.brain.AddEventHandler(eventType, OnEvent); } if (status == BehaviourStatus.Ready && triggered) { triggered = false; status = BehaviourStatus.Running; //Debug.Log(string.Format("BeginRunning EventNode {0} data {1} status ={2}", this.name + (BrainEventEnum)eventType, data, status)); } //Debug.Log(string.Format("Visit EventNode {0} data {1} status ={2} triggered ={3}", this.name + (BrainEventEnum)eventType, data, status, triggered)); if (status == BehaviourStatus.Running) { if (children.Count >= 1) { BTOutput oup = output; oup.eventData = data; var child = children[0]; child.Visit(input, output); status = child.status; oup.eventData = null; //if (status != BehaviourStatus.Running) //{ //Debug.Log(string.Format(" EventNode {0} Complete {1} ", this.name, status)); //MyDebug.StackTrace(); //} } else { status = BehaviourStatus.Failed; } } }
public override void Visit(BTInput input, BTOutput output) { output.leafNode = this; if (_condition != null) { if (_condition(input, output)) { this._status = BehaviourStatus.Success; } else { this._status = BehaviourStatus.Running; } } else if (_fn != null) { object[] res = (object[])_fn.call(input, output); if (res!=null && res.Length > 0 && res[0].Equals(true)) { this._status = BehaviourStatus.Success; } else { this._status = BehaviourStatus.Running; } } else { this._status = BehaviourStatus.Failed; } }
public override void Visit(BTInput input, BTOutput output) { float dt = Time.unscaledTime - lastTime; //Debug.Log(string.Format("DeltaConditionNode doit={0} ,dt={1}", dt > delta, dt)); if (dt > delta) { output.leafNode = this; base.Visit(input, output); lastTime = Time.unscaledTime; } else { this.status = BehaviourStatus.Failed; } }
public override void Visit(BTInput input, BTOutput output) { var child = this.children[0]; child.Visit(input, output); if (child.status == BehaviourStatus.Success) status = BehaviourStatus.Failed; else if (child.status == BehaviourStatus.Failed) status = BehaviourStatus.Success; else status = child.status; }
/// <summary> /// 开始 /// </summary> internal void Start() { OnStart(); isInit = true; _input = actor.input; _output = actor.output; }
public override void Visit(BTInput input, BTOutput output) { float dt = Time.unscaledTime - lastTime; if (dt > delta) { base.Visit(input, output); lastTime = Time.unscaledTime; } else { this.status = BehaviourStatus.Success; } }
void Awake() { this.input = new BTInput(this); this.output = new BTOutput(this); }
public override void Visit(BTInput input, BTOutput output) { if (status != BehaviourStatus.Running) { this.currIndex = 0; this.rep = 0; } int len = this.children.Count; while (this.currIndex < len) { IBehaviourNode child = children[this.currIndex]; child.Visit(input, output); //Debug.Log(string.Format("LoopNode {0},count ={1}rep={2} status={3} child.name ={4} child.status={5}", name, count, rep, status, child.name, child.status)); if (child.status == BehaviourStatus.Running || child.status == BehaviourStatus.Failed) { this.status = child.status; return; } else { this.status = BehaviourStatus.Running; } this.currIndex++; } if (currIndex >= len) //从头开始 { currIndex = 0;//从头开始 rep++; } if (rep > count && count>0) { this.status = BehaviourStatus.Success; } //else //{ // foreach (var child in children) // child.Reset(); //} }
public override void Visit(BTInput input, BTOutput output) { bool done = true; bool any_done = false; foreach (IBehaviourNode child in children) { if (children is ConditionNode) { child.Reset(); } if (child.status != BehaviourStatus.Success) { child.Visit(input, output); if (child.status == BehaviourStatus.Failed) { this.status = BehaviourStatus.Failed; return; } } if (child.status == BehaviourStatus.Running) done = false; else any_done = true; } if (done || (stopOnAnyComplete && any_done)) this.status = BehaviourStatus.Success; else this.status = BehaviourStatus.Running; }