Exemple #1
0
 protected override void Start()
 {
     base.Start();
     enemyState = botStates.waiting;
     Nav        = GetComponent <NavMeshAgent>();
     Nav.speed  = Speed;
 }
 protected override void Start()
 {
     base.Start();
     Nav              = GetComponent <NavMeshAgent>();
     Nav.speed        = Speed;
     Nav.angularSpeed = 360;
     EnemyState       = botStates.waiting;
     RespawnPlace     = transform.position;
 }
    protected override IEnumerator attack(float animationTime)
    {
        isAttacking = true;

        Anim.SetTrigger("attack");

        yield return(new WaitForSeconds(animationTime / 2));

        //Desplega el damageBox
        Aud.PlayOneShot(audioAttack);
        damageBox.localPosition = new Vector3(0, 0, 0);
        damageBox.localScale    = Vector3.one;


        yield return(new WaitForSeconds(animationTime / 2));

        //reset damagebox
        damageBox.localScale = Vector3.zero;

        isAttacking = false;

        EnemyState = botStates.chase;
    }
    private IEnumerator DespawnNWait(float RespawnTime)
    {
        //WaitForDie
        yield return(new WaitForSeconds(audioDeath.length));

        //Deactive
        gameObject.SetActive(false);
        if (RespawnTime <= 0)
        {
            yield break;
        }

        yield return(new WaitForSeconds(RespawnTime));

        //Reset
        transform.position = RespawnPlace;
        invulnerable       = false;
        isAttacking        = false;
        Anim.SetTrigger("respawn");
        EnemyState = botStates.waiting;
        Health     = maxHealth;

        gameObject.SetActive(true);
    }
 protected override void GetHurt(int inDamageValue)
 {
     if (!invulnerable)
     {
         Health -= (inDamageValue - defense);
         if (Health > 0)
         {
             Aud.PlayOneShot(audioDamage);
             Anim.SetTrigger("damage");
         }
         else
         {
             Aud.PlayOneShot(audioDeath);
             EnemyState = botStates.dying;
             Anim.SetTrigger("death");
             gameManager.instance.StartCoroutine(DespawnNWait(RespawnTime));
         }
         invulnerable = true;
         if (Health > 0)
         {
             StartCoroutine(ModifierCountDown(1, (x) => invulnerable = x));
         }
     }
 }
    private void Update()
    {
        //pausa
        if (gameManager.instance.IsPaused)
        {
            return;
        }

        //IA
        switch (EnemyState)
        {
        case botStates.waiting:
            //inicia patrullaje en caso de no haberse activado ya
            if (!isPatrolling)
            {
                StartCoroutine(patrol(patrolTime));
            }
            //revisa constamente en busqueda del objetivo a atacar
            if (Vector3.Distance(gameManager.instance.player.position, transform.position) <= visionDistance)
            {
                if (Vector3.Angle(gameManager.instance.player.position, transform.position) <= visionRange)
                {
                    EnemyState = botStates.chase;
                }
            }
            break;

        case botStates.chase:
            if (!Aud.isPlaying)
            {
                Aud.Play();
            }
            if (Axis != Vector2.zero)
            {
                Axis = Vector2.zero;
            }
            if (Vector3.Distance(gameManager.instance.player.position, transform.position) <= chaseDistance)
            {
                if (Vector3.Distance(gameManager.instance.player.position, transform.position) <= attackDistance)
                {
                    Anim.SetFloat("speed", 0f);
                    EnemyState = botStates.attack;
                }
                else
                {
                    Nav.SetDestination(gameManager.instance.player.position);
                    Anim.SetFloat("speed", 1f);
                }
            }
            else
            {
                EnemyState = botStates.waiting;
            }
            break;

        case botStates.attack:
            Aud.Stop();
            if (!isAttacking)
            {
                transform.LookAt(gameManager.instance.player);
                StartCoroutine(attack(attackTime));
            }
            break;

        case botStates.dying:
            //Deja de realizar acciones
            break;

        default:
            Debug.Log("Error en update del objeto" + transform.name);
            break;
        }
    }