public void can_create_selector() { Init(); var invokeCount = 0; var parallel = testObject .Selector("some-selector") .Do("some-action-1", t => { ++invokeCount; return(Status.Failure); }) .Do("some-action-2", t => { ++invokeCount; return(Status.Success); }) .End() .Build(); Assert.IsType <SelectorNode <TimeData> >(parallel); Assert.Equal(Status.Success, parallel.Tick(new TimeData(0))); Assert.Equal(2, invokeCount); }
void Start() { Debug.Log("ZombieBT start"); var builder = new BehaviourTreeBuilder(); // var targetPosition = GameObject.Find("Player").transform.position; targetPosition = GameObject.Find("Player").transform.position; this.tree = builder .Selector("ChooseAction") .Sequence("tryToGoToPlayer") // If player is alive and close then go to it .Condition("isPlayerClose", t => (BlackboardZombie.Instance.getIsPlayerAlive() == true && Vector3.Distance(transform.position, targetPosition) < 8 && Vector3.Distance(transform.position, targetPosition) > 2)) .Do("GoToPlayer", t => { GetComponent <Animator>().SetBool("bool_walk", true); GetComponent <Animator>().SetBool("bool_attack", false); Debug.Log("~~~ GoToPlayer"); BehaviourTreeStatus bts; bts = GoToTarget("target1", targetPosition); BlackboardZombie.Instance.setTarget1(bts == BehaviourTreeStatus.Success); return(bts); }) .End() .Sequence("tryToAttackPlayer") // If player is alive and in range then attack him .Condition("isPlayerInRange", t => (BlackboardZombie.Instance.getIsPlayerAlive() == true && Vector3.Distance(transform.position, targetPosition) <= 2)) .Do("AttackPlayer", t => { GetComponent <Animator>().SetBool("bool_walk", false); GetComponent <Animator>().SetBool("bool_attack", true); Debug.Log("~~~ AttackPlayer"); return(AttackPlayer()); }) .End() .Do("Wander", t => { GetComponent <Animator>().SetBool("bool_walk", true); GetComponent <Animator>().SetBool("bool_attack", false); GetComponent <SteerForWander>().enabled = true; Debug.Log("~~~ Wander"); return(Wander()); }) .End() .Build(); }
public CrocoBehaviour(CrocoLoco _crocoLoco) { crocoLoco = _crocoLoco; var builder = new BehaviourTreeBuilder(); tree = builder .Selector("Watch players") .Condition("Is any player visible", IsAnyPlayerVisible) .End() .Build(); timeData = new TimeData(); properties = new CrocoProperties(); properties.watchLength = 300; }
protected override void Start() { BehaviourTreeBuilder treeBuilder = new BehaviourTreeBuilder(); this.rootNode = treeBuilder.Selector("SomeSelector", true) .Do("some-action-1", t => { return(BehaviourTreeStatus.Success); }) .Do("some-action-2", t => { return(BehaviourTreeStatus.Success); }) .End() .Build(); this.rootNode = this.BuildSimpleAI(); base.Start(); }
public void disabled_parent_nodes_is_ignored() { TimeData data = new TimeData(0); var invokeCount = 0; var builder = new BehaviourTreeBuilder <TimeData>(new List <int> { 0, 2, 4 }); builder .Sequence("seq1") .Do("do1", t => { ++invokeCount; throw new Exception("do1 invoked."); }) .End() .Build() .Tick(data); builder .Selector("sel1") .Do("do2", t => { ++invokeCount; throw new Exception("do2 invoked."); }) .End() .Build() .Tick(data); builder .Parallel("para1", 0, 0) .Do("do3", t => { ++invokeCount; throw new Exception("do3 invoked."); }) .End() .Build() .Tick(data); }
void Awake() { BehaviourTreeBuilder treeBuilder = new BehaviourTreeBuilder(); this.rootNode = treeBuilder.Selector("SomeSelector", true) .Do("some-action-1", t => { if (this.IsTrue) { ++invokeCount; } return(this.IsTrue ? BehaviourTreeStatus.Success : BehaviourTreeStatus.Failure); }) .Do("some-action-2", t => { if (!this.IsTrue) { --invokeCount; } return(this.IsTrue ? BehaviourTreeStatus.Failure : BehaviourTreeStatus.Success); }) .End() .Build(); }
private void Awake() { base.Awake(); PathWalker = gameObject.GetComponent <PathWalker>(); var _builder = new BehaviourTreeBuilder(); _builder = _builder.Selector(); // MainNode _builder = _builder.StateFulSequence("Patrol") .Inverter("!").Condition("HayEnemigo", () => enemyTransform != null).End() .Condition("EndPath", () => PathWalker.Ended) .Do("FindPath", () => { _ = PathWalker.WalkTo(PathFinderManager.Instance.RandomWalkablePosition); PathWalker.WALK_SPEED = 5; return(BehaviorReturnCode.Success); }) .End(); _builder = _builder.StateFulSequence("FindEnemy") .Inverter("!").Condition("HayEnemigo", () => enemyTransform != null).End() .Inverter("!").Do("BuscarEnemigo", FindEnemy).End() .End(); _builder = _builder.StateFulSequence("Follow") .Condition("HayEnemigo", () => enemyTransform != null) .Inverter("!").Condition("EstaCerca", () => (enemyTransform.position - transform.position).magnitude < attack_range).End() .Condition("EndPath", () => PathWalker.Ended) .Do("FindPath", () => { _ = PathWalker.WalkTo(enemyTransform.position + ((transform.position - enemyTransform.position).normalized * 1.5f)); return(BehaviorReturnCode.Success); }) .End(); _builder = _builder.StateFulSequence("Attack") .Condition("HayEnemigo", () => enemyTransform != null) .Condition("EstaCerca", () => (enemyTransform.position - transform.position).magnitude < attack_range) .Do("AttackEnemy", AttackEnemy) .End(); _builder = _builder.End(); // End MainNode _root = _builder.Build(); }