Exemplo n.º 1
0
    // Se llama X veces por segundo
    private void FixedUpdate()
    {
        if (status == "noCombat")
        {
            if (this.transform.position.x + safetyDistance > maxX)
            {
                horizontalMove = -1;
            }
            else if (this.transform.position.x - safetyDistance < minX)
            {
                horizontalMove = +1;
            }
        }
        if (status == "combat")
        {
            if (Mathf.Abs(Vector3.Distance(this.transform.position, player.transform.position)) > attackRange && this.transform.position.x - safetyDistance > minX && this.transform.position.x + safetyDistance < maxX)
            {
                //Debug.Log("entra");
                if (this.transform.position.x + 0.2 - player.transform.position.x < 0)
                {
                    horizontalMove = +1;
                }
                else if (this.transform.position.x - 0.2 - player.transform.position.x > 0)
                {
                    horizontalMove = -1;
                }
                else
                {
                    horizontalMove = 0;
                }
            }
            else if (Mathf.Abs(Vector3.Distance(this.transform.position, player.transform.position)) > attackRange && this.transform.position.x + safetyDistance > maxX && transform.position.x > player.transform.position.x)
            {
                horizontalMove = -1;
            }
            else if (Mathf.Abs(Vector3.Distance(this.transform.position, player.transform.position)) > attackRange && this.transform.position.x - safetyDistance < minX && transform.position.x < player.transform.position.x)
            {
                horizontalMove = +1;
            }
            else
            {
                //RANGO DE ESPERA O ATAQUE -> SE QUEDA QUIETO
                horizontalMove = 0;
                //MIRA HACIA EL PLAYER
                controller.LookPlayer(this.transform.position.x, player.transform.position.x, attacking && !cancelAttack);
                //HAY CONTACTO VISUAL ENTRE EL ARQUERO Y EL JUGADOR
                linecast = Physics2D.Linecast(this.transform.position, player.transform.position, ~(1 << 9 | 1 << 11 | 1 << 12));
                if (linecast.collider.gameObject.tag == "Player")
                {
                    if (!attacking && Mathf.Abs(Vector3.Distance(this.transform.position, player.transform.position)) < attackRange)
                    {
                        attacker.Attack(transform.position.x, transform.position.y, transform.rotation.y);
                        //Debug.Log(transform.rotation);
                        attacking = true;
                        animator.SetBool("Attack", attacking && timer > attack_cooldown - attack_lenght && !cancelAttack);
                    }
                    else if (this.gameObject.GetComponent <NPCGiantAttack>() != null && !attacking && Mathf.Abs(Vector3.Distance(this.transform.position + new Vector3(0, this.GetComponent <CircleCollider2D>().radius, 0), player.transform.position)) < attackRange)
                    {
                        attacker.Attack(transform.position.x, transform.position.y, transform.rotation.y);
                        //Debug.Log(transform.rotation);
                        attacking = true;
                        animator.SetBool("Attack", attacking && timer > attack_cooldown - attack_lenght && !cancelAttack);
                    }
                }
            }
        }

        if (attacking)
        {
            horizontalMove = 0;
            timer         -= Time.fixedDeltaTime;
            animator.SetBool("Attack", attacking && timer > attack_cooldown - attack_lenght && !cancelAttack);
            //this.GetComponent<Enemy>().CalculateImpact();
            if (timer <= 0)
            {
                attacking = false;
                animator.SetBool("Attack", attacking && !cancelAttack);
                timer = attack_cooldown;
            }
        }
        controller.Move(horizontalMove * Time.fixedDeltaTime * runSpeed);

        /*if (horizontalMove != 0 && this.name == "Heavy")
         * {
         *  SpriteMeshType head = this.transform.GetChild(0).gameObject.GetComponent<SpriteMeshType> ();
         * }*/
    }