Beispiel #1
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        //REFERENCIAS
        enemy        = animator.gameObject.GetComponentInParent <RANGED_enemy>();
        target       = enemy.target;
        forceApplier = animator.gameObject.GetComponentInParent <ForceApplier>();

        enemy.transform.LookAt(target.transform.position);
        enemy.isVulnerable = false;

        //-ATTACK SETUP-
        //Ignora la colisión entre el enemigo y el objetivo del ataque para que no obstaculice la embestida
        Physics.IgnoreCollision(target.GetComponent <CharacterController>(), enemy.GetComponent <CharacterController>(), true);
        //Acto seguido, activa el trigger que es el que se encargará de gestionar si el ataque ha golpeado, su daño, knockback, etc.
        //enemy.attackCollider.enabled = true;
        //Y finalmente reemplazamos el daño 'default' por el daño de este ataque en concreto.
        enemy.damage = attackDamage;

        //-ATTACK ACTION-
        Instantiate(enemy.projectile, new Vector3(enemy.transform.position.x, enemy.transform.position.y + 1.2f, enemy.transform.position.z), enemy.transform.rotation);
        //Una vez se han establecido las condiciones para el ataque, se impulsa al enemigo en dirección a su objetivo, con una fuerza igual a 'attackImpulse'
        Vector3 attackDir = (target.transform.position - enemy.transform.position).normalized;

        forceApplier.AddImpact(new Vector3(-attackDir.x, 0, -attackDir.z), recoilImpulse);
    }
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        //REFERENCIAS
        enemy        = animator.gameObject.GetComponentInParent <MELEE_enemy>();
        target       = enemy.target;
        forceApplier = animator.gameObject.GetComponentInParent <ForceApplier>();

        //-ATTACK SETUP-
        enemy.transform.LookAt(target.transform.position);
        //Ignora la colisión entre el enemigo y el objetivo del ataque para que no obstaculice la embestida
        Physics.IgnoreCollision(target.GetComponent <CharacterController>(), enemy.GetComponent <CharacterController>(), true);
        //Acto seguido, activa el trigger que es el que se encargará de gestionar si el ataque ha golpeado, su daño, knockback, etc.
        enemy.attackCollider.enabled = true;
        //Y finalmente reemplazamos el daño 'default' por el daño de este ataque en concreto.
        enemy.damage       = attackDamage;
        enemy.isVulnerable = false;


        //-ATTACK ACTION-
        //Una vez se han establecido las condiciones para el ataque, se impulsa al enemigo en dirección a su objetivo, con una fuerza igual a 'attackImpulse'
        forceApplier.AddImpact(new Vector3(enemy.transform.forward.x, 0, enemy.transform.forward.z), attackImpulse);

        if (enemy.weapon != null)
        {
            enemy.weapon.GetComponentInChildren <EnemyMeleeWeapon>().damage = attackDamage;
            enemy.weapon.transform.LookAt(target.transform.position);
            enemy.weapon.GetComponentInChildren <Animator>().SetTrigger("Attack"); //ESTO ESTA FEO Y HAY QUE HACERLO MAS BONITO
        }
    }
Beispiel #3
0
    public void OnAttack()
    {
        print("evento recibido");
        print(canAttack);
        if (canAttack)
        {
            //AUDIO
            AudioManager.engine.OnAttack();
            //
            noOfTaps++; //En cada paso del combo, si se puede atacar, acumula un "tap"
            print("aumentando noOfTaps");

            //Hacemos que el jugador se oriente hacia su enemigo fijado, para que los combos sean fluidos y comodos de ejecutar.
            if (lockedEnemy != null)
            {
                transform.LookAt(new Vector3(lockedEnemy.transform.position.x, transform.position.y, lockedEnemy.transform.position.z));
            }

            //if (playerInput.currentControlScheme == "Keyboard + mouse") //Si se está usando ratón y teclado, apunta el ataque en la dirección del ratón.
            //    playerTransform.LookAt(new Vector3(attackPointer.position.x, playerTransform.position.y, attackPointer.position.z));
        }

        if (noOfTaps == 1) //Si el número de  taps es exactamente 1, PRIMER GOLPE DEL COMBO
        {
            //Activa el trigger del animador para que reproduzca la animación correspondiente.
            animator.SetTrigger("Attack");
            //Al comenzar el combo, bloqueamos el movimiento y el dash del jugador, que no podrá volver a moverse libremente hasta que decida terminar el combo.
            movementController.canMove = false;
            movementController.canDash = false;
            weaponAnimator.SetInteger("Animation", 1);
            forceApplier.AddImpact(playerTransform.forward, attackImpulse);//AÑADIR IMPULSO
        }
    }
Beispiel #4
0
    // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state
    override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        //REFERENCIAS
        enemy        = animator.gameObject.GetComponentInParent <RANGED_enemy>();
        target       = enemy.target;
        forceApplier = animator.gameObject.GetComponentInParent <ForceApplier>();

        enemy.transform.LookAt(target.transform.position); //Mira a su objetivo

        //-ATTACK ACTION-
        GameObject animaKiller = Instantiate(animaKillerPrefab, new Vector3(enemy.transform.position.x, enemy.transform.position.y + 1.2f, enemy.transform.position.z), enemy.transform.rotation);

        animaKiller.GetComponent <ProjectileController>().target = target.transform;
        //Una vez se han establecido las condiciones para el ataque, se impulsa al enemigo en dirección a su objetivo, con una fuerza igual a 'attackImpulse'
        Vector3 attackDir = (target.transform.position - enemy.transform.position).normalized;

        forceApplier.AddImpact(new Vector3(-attackDir.x, 0, -attackDir.z), recoilImpulse);
    }
Beispiel #5
0
    public void takeDamage(int damage, float knockbackForce, Vector3 knockbackDir, GameObject other)
    {
        if (isVulnerable) //Si el enemigo es vulnerable,
        {
            currentHealth -= damage;

            //Play hurt animation
            animator.SetTrigger("Hurt");

            //Look at the one who attacked
            transform.LookAt(new Vector3(other.transform.position.x, transform.position.y, other.transform.position.z));

            //Apply knockback received from the 'other' who attacks
            if (knockbackForce != 0)
            {
                forceApplier.AddImpact(new Vector3(knockbackDir.x, 0, knockbackDir.z), knockbackForce);
            }

            if (currentHealth <= 0)
            {
                Die(); //Si el HP se reduce por debajo de 0, el enemigo muere.
            }
        }
    }