// Use this for initialization void Start() { eventManager = FindObjectOfType <EventManager>(); navAgent = GetComponent <NavMeshAgent>(); player = FindObjectOfType <Player>(); body = GetComponent <Rigidbody>(); triggerTag = "Player"; m_waypoints.TrimExcess(); Debug.Log("Start target tag: " + triggerTag); animator = GetComponent <Animator>(); // Detects if eye location is set if (!m_eyeLocation) { Debug.Log("Eye Location is not set"); } // Detects if waypoints are set if (m_waypoints.Count < 1) { Debug.Log("Waypoints are not set"); } //---------------------------------------------------- // The Attack Sequence // Set triggers to turn off List <string> offTriggers = new List <string>(); offTriggers.Add("Search"); offTriggers.Add("Chase"); // Set up the attack behaviour PlayAnimation attackAnimation = new PlayAnimation(); attackAnimation.SetParameters(animator, "DeathSequence", offTriggers); // Set up condition for the attack sequence Triggered attackCondition = new Triggered(); // Set up attack sequence Sequence attackSequence = new Sequence(); attackSequence.addBehaviour(attackCondition); attackSequence.addBehaviour(attackAnimation); // --------------------------------------------------- // The Drill Sequence // Set up the drill condition DrillBehaviour drillBehaviour = new DrillBehaviour(); drillBehaviour.SetParameters(false); // Set up drill animation PlayAnimation drillAnimation = new PlayAnimation(); drillAnimation.SetParameters(animator, "DrillSequence", null, onDoorDrilling); // Set up drill sequence Sequence drillSequence = new Sequence(); drillSequence.addBehaviour(drillBehaviour); //drillSequence.addBehaviour(seekPanel); drillSequence.addBehaviour(drillAnimation); // --------------------------------------------------- // The Rage Sequence // Set up the rage condition DrillBehaviour rageBehaviour = new DrillBehaviour(); rageBehaviour.SetParameters(true); // Set up rage animation PlayAnimation rageAnimation = new PlayAnimation(); rageAnimation.SetParameters(animator, "RageSequence"); // Set up rage sequence Sequence rageSequence = new Sequence(); rageSequence.addBehaviour(rageBehaviour); rageSequence.addBehaviour(rageAnimation); //---------------------------------------------------- // The Proximity Sequence // Set up within range condition for search sequence WithinRange withinSearch = new WithinRange(); withinSearch.SetParameters(player.gameObject, m_searchRange); // Set up line of sight condition for search sequence LineOfSight inSight = new LineOfSight(); inSight.SetParameters(player.gameObject, m_sightRange, m_eyeLocation); // Set up the close chase behaviour SetTargetBehaviour closeChase = new SetTargetBehaviour(); closeChase.SetParameters(player.gameObject, m_searchSpeed, "CloseChase", onProximityDetection); // Set up arm extended animation PlayAnimation armExtended = new PlayAnimation(); armExtended.SetParameters(animator, "ArmExtended"); // Set up chase sequence Sequence closeChaseSequence = new Sequence(); closeChaseSequence.addBehaviour(withinSearch); closeChaseSequence.addBehaviour(inSight); closeChaseSequence.addBehaviour(closeChase); closeChaseSequence.addBehaviour(armExtended); //---------------------------------------------------- // The Search Sequence // Turn towards the player FaceTarget facePlayer = new FaceTarget(); facePlayer.SetParameters(player.gameObject, m_rotationSpeed); // Set up arm extended animation PlayAnimation searchAnimation = new PlayAnimation(); searchAnimation.SetParameters(animator, "Search", null, searching); // Set up search sequence Sequence searchSequence = new Sequence(); searchSequence.addBehaviour(withinSearch); searchSequence.addBehaviour(facePlayer); searchSequence.addBehaviour(searchAnimation); //---------------------------------------------------- // The Chase Sequence // Set up the chase behaviour SetTargetBehaviour chasePlayer = new SetTargetBehaviour(); chasePlayer.SetParameters(player.gameObject, m_chaseSpeed, "Chase", chasing); // Set up within range condition for chase sequence WithinRange withinChase = new WithinRange(); withinChase.SetParameters(player.gameObject, m_sightRange); // Set up chase sequence Sequence chaseSequence = new Sequence(); chaseSequence.addBehaviour(withinChase); chaseSequence.addBehaviour(inSight); chaseSequence.addBehaviour(chasePlayer); //---------------------------------------------------- // The Investigate Sequence // Set up alert condition AlertCondition alertCondition = new AlertCondition(); // Set up investigate sequence Sequence investigateSequence = new Sequence(); investigateSequence.addBehaviour(alertCondition); investigateSequence.addBehaviour(m_investigateArea); //---------------------------------------------------- // The Patrol Sequence // Set up the patrol targets Patrol patrolDestination = new Patrol(); patrolDestination.SetParameters(m_waypoints); // Set up the patrol behaviour SetTargetBehaviour patrolBehaviour = new SetTargetBehaviour(); patrolBehaviour.SetParameters(patrolDestination, m_patrolSpeed, "Patrol", patrolling); // Look for nearest waypoint then continue with the patrol from there //---------------------------------------------------- // The Main Selector // Set up main selector Selector mainSelector = new Selector(); mainSelector.addBehaviour(attackSequence); mainSelector.addBehaviour(drillSequence); mainSelector.addBehaviour(rageSequence); mainSelector.addBehaviour(closeChaseSequence); mainSelector.addBehaviour(searchSequence); mainSelector.addBehaviour(chaseSequence); mainSelector.addBehaviour(investigateSequence); mainSelector.addBehaviour(patrolBehaviour); // Add all sequences to the behaviour list m_behaviours.Add(mainSelector); }
// Use this for initialization void Start() { gameObject.tag = "Scarab"; scarabAudio = GetComponent <AudioSource> (); eventManager = FindObjectOfType <EventManager>(); navAgent = GetComponent <NavMeshAgent>(); player = FindObjectOfType <Player>(); body = GetComponent <Rigidbody>(); triggerTag = "Player"; m_sphereCollider = GetComponent <SphereCollider>(); if (!animator) { animator = GetComponentInChildren <Animator>(); } //m_animator = GetComponent<Animator>(); //// Setting layers for Dr Leben's parts //foreach (Transform child in transform) // child.gameObject.layer = gameObject.layer; // --------------------------------------------------- // The Death Sequence // Set up the IsScarabAttacked deathCheck = new IsScarabAttacked(); Sequence deathSequence = new Sequence(); deathSequence.addBehaviour(deathCheck); //---------------------------------------------------- // The Attack Sequence //// Set up condition for the attack sequence //Triggered attackCondition = new Triggered(); // Set up within range condition for chase sequence WithinRange withinAttack = new WithinRange(); withinAttack.SetParameters(player.gameObject, m_attackRange); // Set Up Continue attack condition ContinueAttack continueAttackCondition = new ContinueAttack(); // Set up the attack behaviour ScarabAttack attackBehaviour = new ScarabAttack(); attackBehaviour.SetParameters(player, m_damage, m_attackTimer, m_rotationSpeed, onAttack); // Set up line of sight condition for chase sequence LineOfSight inSight = new LineOfSight(); inSight.SetParameters(player.gameObject, m_sightRange, m_eyeLocation); //// Set up component check enabled //ComponentEnabled navAgentCheck = new ComponentEnabled(); //navAgentCheck.SetParameters(navMesh); // Set up attack sequence Sequence attackSequence = new Sequence(); attackSequence.addBehaviour(continueAttackCondition); //attackSequence.addBehaviour(navAgentCheck); //attackSequence.addBehaviour(attackCondition); attackSequence.addBehaviour(withinAttack); attackSequence.addBehaviour(inSight); //attackSequence.addBehaviour(facePlayer); attackSequence.addBehaviour(attackBehaviour); //---------------------------------------------------- // The Face Target Sequence // Set up face target behaviour FaceTarget facePlayer = new FaceTarget(); facePlayer.SetParameters(player.gameObject, m_rotationSpeed); // Set up attack sequence Sequence faceTargetSequence = new Sequence(); faceTargetSequence.addBehaviour(continueAttackCondition); faceTargetSequence.addBehaviour(withinAttack); faceTargetSequence.addBehaviour(facePlayer); //---------------------------------------------------- // The Chase Sequence // Set up the chase behaviour SetTargetBehaviour chasePlayer = new SetTargetBehaviour(); chasePlayer.SetParameters(player.gameObject, m_chaseSpeed, "", chasing); // Set up within range condition for chase sequence WithinRange withinChase = new WithinRange(); withinChase.SetParameters(player.gameObject, m_chaseRange); // Set up chase sequence Sequence chaseSequence = new Sequence(); chaseSequence.addBehaviour(continueAttackCondition); //chaseSequence.addBehaviour(navAgentCheck); chaseSequence.addBehaviour(withinChase); chaseSequence.addBehaviour(chasePlayer); //---------------------------------------------------- // The Wander Sequence WanderTarget wanderSetter = new WanderTarget(); SetTargetBehaviour wanderBehaviour = new SetTargetBehaviour(); wanderBehaviour.SetParameters(wanderSetter, m_wanderSpeed, "", wandering); // Set up wander sequence Sequence wanderSequence = new Sequence(); //wanderSequence.addBehaviour(navAgentCheck); wanderSequence.addBehaviour(wanderBehaviour); ////---------------------------------------------------- //// The Attack Selector //// Set up main selector //Selector attackSelector = new Selector(); //attackSelector.addBehaviour(attackSequence); //attackSelector.addBehaviour(chaseSequence); //---------------------------------------------------- // The Sequence Selector // Set up main sequence Selector mainSelector = new Selector(); mainSelector.addBehaviour(deathSequence); mainSelector.addBehaviour(attackSequence); mainSelector.addBehaviour(chaseSequence); mainSelector.addBehaviour(wanderSequence); // Add all sequences to the behaviour list m_behaviours.Add(mainSelector); // correct position so it always sits on navmesh NavMeshHit closestHit; if (NavMesh.SamplePosition(gameObject.transform.position, out closestHit, 500f, NavMesh.AllAreas)) { gameObject.transform.position = closestHit.position; } else { Debug.LogError("Could not find position on NavMesh!"); } }