public IEnumerator walkToClosestEnemy() { if (!walkingToClosestEnemy) { walkingToClosestEnemy = true; EnemyAttributes enemy = getClosestEnemyInRange(); while (walkingToClosestEnemy) { enemy = getClosestEnemyInRange(); if (enemy == null || !enemiesInRange.Contains(enemy)) { //Debug.Log("No enemy found"); stopMovement(); break; } if (Vector3.Distance(this.getPosition(), enemy.getPosition()) < attackRange) { //Debug.Log("clsoe enough"); setCurrentTarget(enemy); StartCoroutine(attackEnemy(enemy)); break; } else { agent.SetDestination(enemy.getPosition()); } yield return(null); } stopMovement(); walkingToClosestEnemy = false; } }
// THIS ONE IS FOR PLAYER public IEnumerator walkToEnemy(EnemyAttributes enemy) { bool walkingToEnemy = true; EnemyAttributes player = this; Vector3 hitGroundPosition = gameManager.getPlayerBehavior().getHitGround(); while (walkingToEnemy) { enemy.setMobIndicator(true); enemy.setAllIndicatorsFallsAndActivate("yellow"); //Debug.Log("player WALKINMG to enemy"); if (hitGroundPosition != gameManager.getPlayerBehavior().getHitGround()) { //Debug.Log("new walking position"); enemy.setMobIndicator(false); enemy.setAllIndicatorsFallsAndActivate("red"); break; } if (Vector3.Distance(gameManager.getPlayerBehavior().getPlayerPosition(), enemy.getPosition()) < player.getAttackRange()) { //Debug.Log("clsoe enough"); stopMovement(); player.setCurrentTarget(enemy); StartCoroutine(attackEnemy(enemy, true)); break; } else { player.getNavMeshAgent().SetDestination(enemy.getPosition()); } yield return(null); } }
public IEnumerator attackEnemy(EnemyAttributes enemy) { if (!attackingEnemy) { attackingEnemy = true; lookAtTargetEnemy(enemy); while (attackingEnemy) { //Debug.Log("attacking enemy running"); if (Vector3.Distance(this.transform.position, enemy.getPosition()) > attackRange) { //Debug.Log("Lost target, or distance to high to attack"); //enemy.setHealthbar(false); break; } if (enemy == null) { stopMovement(); //Debug.Log("Current target is null"); setHealthbar(false); break; } else { //enemy.setHealthbar(true); } this.dealDamage(enemy); yield return(null); } attackingEnemy = false; } }