Ejemplo n.º 1
0
 // Start is called before the first frame update
 void Start()
 {
     badGuyStates = BadGuyStates.Idle;
     lastPosition = transform.position;
     coolTimer    = 0;
     followTimer  = 0;
 }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        switch (badGuyStates)
        {
        case BadGuyStates.Idle:
            if (BadGuy.LineToPlayer(eyeSight.position))
            {
                badGuyStates = BadGuyStates.SeekingPlayer;
                lastPosition = transform.position;
            }
            break;

        case BadGuyStates.SeekingPlayer:

            if (Time.time - followTimer > followPrecision)
            {
                followTimer = Time.time;
                BadGuy.FollowPlayerShell(navMeshAgent, 3, Random.Range(0, 360));
            }
            if (Time.time - fireRateTimer > fireRateTimer)
            {
                if (BadGuy.LineToPlayer(eyeSight.position, 10))
                {
                    navMeshAgent.isStopped = true;
                    badGuyStates           = BadGuyStates.ShotPlayer;
                    coolTimer = Time.time;
                    BadGuy.LaunchProjectile2D(prefab_projectile, eyeSight.position);
                    fireRateTimer = Time.time;
                }
            }
            break;

        case BadGuyStates.ShotPlayer:
            if (Time.time - coolTimer < coolDown)
            {
                navMeshAgent.isStopped = false;

                navMeshAgent.SetDestination(lastPosition + Vector3.right * Random.Range(-3, 3));
            }
            else
            {
                badGuyStates = BadGuyStates.Idle;
            }
            break;
        }
    }