// 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> (); * }*/ }