public override BehaviourTreeStatus Tick(GameTime gameTime) { if (condition(gameTime)) { if (ifFalse != null) { ifFalse.Reset(); } var status = ifTrue.Tick(gameTime); if (ifTrue is LongRunningActionNode && ((LongRunningActionNode)ifTrue).IsBlocking && status == BehaviourTreeStatus.Running) { rootNode.AddBlockingNode((LongRunningActionNode)ifTrue); } return(status); } else { ifTrue.Reset(); var status = ifFalse != null?ifFalse.Tick(gameTime) : BehaviourTreeStatus.Failure; if (ifFalse != null && ifFalse is LongRunningActionNode && ((LongRunningActionNode)ifFalse).IsBlocking && status == BehaviourTreeStatus.Running) { rootNode.AddBlockingNode((LongRunningActionNode)ifFalse); } return(status); } }
public BehaviourTreeStatus Tick(GameTime gameTime) { elapsedTime += gameTime.ElapsedGameTime; if (forceTreeTick || elapsedTime >= TickFrequency) { forceTreeTick = false; if (blockingRunningNodes.Count > 0) { for (int i = 0; i < blockingRunningNodes.Count; i++) { var status = blockingRunningNodes[i].Tick(new GameTime(gameTime.TotalGameTime, elapsedTime)); if (status != BehaviourTreeStatus.Running) { blockingRunningNodes.RemoveAt(i); i--; } } elapsedTime = TimeSpan.Zero; return(BehaviourTreeStatus.Running); } else { var outcome = childNode.Tick(new GameTime(gameTime.TotalGameTime, elapsedTime)); elapsedTime = TimeSpan.Zero; if (outcome != BehaviourTreeStatus.Running) { Reset(); } return(outcome); } } return(BehaviourTreeStatus.Success); }
private void Update() { tree.Tick(new TimeData(Time.deltaTime)); }
public virtual void Update(GameTime gameTime) { Debug.Assert(behaviorTree != null, "BehaviorTree is null, did you forget to call createBehaviorTree in the constructor?"); behaviorTree.Tick(gameTime); }