private void ConstructBehahaviourTree() { IsCoverAvailableNode isCoverAvaliableNode = new IsCoverAvailableNode(avaliableCovers, playerTransform, this); GoToCoverNode goToCoverNode = new GoToCoverNode(agent, this); HealthNode healthNode = new HealthNode(this, lowHealthThreshold); IsCoveredNode isCoveredNode = new IsCoveredNode(playerTransform, transform); ChaseNode chaseNode = new ChaseNode(playerTransform, agent, this); RangeNode chasingRangeNode = new RangeNode(chasingRange, playerTransform, transform); RangeNode shootingRangeNode = new RangeNode(shootingRange, playerTransform, transform); ShootNode shootNode = new ShootNode(agent, this, playerTransform); Sequence chaseSequence = new Sequence(new List <Node> { chasingRangeNode, chaseNode }); Sequence shootSequence = new Sequence(new List <Node> { shootingRangeNode, shootNode }); Sequence goToCoverSequence = new Sequence(new List <Node> { isCoverAvaliableNode, goToCoverNode }); Selector findCoverSelector = new Selector(new List <Node> { goToCoverSequence, chaseSequence }); Selector tryToTakeCoverSelector = new Selector(new List <Node> { isCoveredNode, findCoverSelector }); Sequence mainCoverSequence = new Sequence(new List <Node> { healthNode, tryToTakeCoverSelector }); topNode = new Selector(new List <Node> { mainCoverSequence, shootSequence, chaseSequence }); }
//builds the characters behaviour tree private void constructBehaviourTree() { //health node checks if health is below threshold HealthNode healthNode = new HealthNode(this, m_lowHealthThreshold); //inverted health checks if health is above threshhold Inverter invertHealth = new Inverter(healthNode); //Cover GetCoverNode getCoverNode = new GetCoverNode(target.transform, this); GoToCoverNode goToCoverNode = new GoToCoverNode(this, m_speed); HealNode Heal = new HealNode(20, this, m_healthRegenRate); Sequence CoverSequence = new Sequence(new List <BNode> { healthNode, getCoverNode, goToCoverNode, Heal }); //chase Range = new RangeNode(m_detectionRange, target.transform, gameObject.transform, this); Chase = new ChaseNode(target.transform, this, m_speed); Sequence ChaseSequence = new Sequence(new List <BNode> { invertHealth, Range, Chase }); //wander RangeNode wanderRange = new RangeNode(m_detectionRange, target.transform, gameObject.transform, this); Inverter invertWanderRange = new Inverter(wanderRange); WanderNode wander = new WanderNode(this, m_speed); Sequence WanderSequence = new Sequence(new List <BNode> { invertWanderRange, wander }); //attack attackRange = new RangeNode(m_attackRange, target.transform, gameObject.transform, this); attack = new AttackNode(target.transform, this); Sequence AttackSequence = new Sequence(new List <BNode> { attackRange, attack }); //root node topNode = new Selector(new List <BNode> { CoverSequence, AttackSequence, ChaseSequence, WanderSequence }); }
//builds the characters behaviour tree private void constructBehaviourTree() { ////Cover GetCoverNode getCoverNode = new GetCoverNode(m_target.transform, this); GoToCoverNode goToCoverNode = new GoToCoverNode(this, m_speed); HealNode Heal = new HealNode(20, this, m_healthRegenRate); Sequence CoverSequence = new Sequence(new List <BNode> { getCoverNode, goToCoverNode, Heal }); coverTopNode = new Selector(new List <BNode> { CoverSequence }); ////chase m_chase = new ChaseNode(m_target.transform, this, m_speed); Sequence ChaseSequence = new Sequence(new List <BNode> { m_chase }); chaseTopNode = new Selector(new List <BNode> { ChaseSequence }); ////wander WanderNode wander = new WanderNode(this, m_speed); Sequence WanderSequence = new Sequence(new List <BNode> { wander }); WanderTopNode = new Selector(new List <BNode> { WanderSequence }); ////attack m_attack = new AttackNode(m_target.transform, this); Sequence AttackSequence = new Sequence(new List <BNode> { m_attack }); attackTopNode = new Selector(new List <BNode> { AttackSequence }); }
private void ConstructBehaviourTree() { // Nodes var wonderNode = new WonderNode(_navMeshAgent, gameObject); var coverAvailableNode = new IsCoverAvailableNode(availableCovers, player.transform, this); var goToCoverNode = new GoToCoverNode(this, _navMeshAgent); var healthNode = new HealthNode(GetComponent <EnemyController>(), GetComponent <EnemyController>().lowHealthThreshold); var isCoveredNode = new IsCoveredNode(player.transform, transform); var chaseNode = new ChaseNode(player.transform, _navMeshAgent); var wonderRangeNode = new NotInRangeNode(GetComponent <EnemyController>().chaseRange, player.transform, transform); var chasingRangeNode = new RangeNode(GetComponent <EnemyController>().chaseRange, player.transform, transform); var shootingRangeNode = new RangeNode(GetComponent <EnemyController>().shootRange, player.transform, transform); var shootNode = new ShootNode(_navMeshAgent, this); // Sequences var wonderSequence = new BTSequencer(new List <BTNode> { wonderRangeNode, wonderNode }); var chaseSequence = new BTSequencer(new List <BTNode> { chasingRangeNode, chaseNode }); var shootSequence = new BTSequencer(new List <BTNode> { shootingRangeNode, shootNode }); var goToCoverSequence = new BTSequencer(new List <BTNode> { coverAvailableNode, goToCoverNode }); var findCoverSelector = new BTSelector(new List <BTNode> { goToCoverSequence, chaseSequence }); var tryToTakeCoverSelector = new BTSelector(new List <BTNode> { isCoveredNode, findCoverSelector }); var mainCoverSequence = new BTSequencer(new List <BTNode> { healthNode, tryToTakeCoverSelector }); _rootNode = new BTSelector(new List <BTNode> { wonderSequence, mainCoverSequence, shootSequence, chaseSequence }); }