//lo mismo pero ahora solo mira entre los que esten en el ultimo waypoint //Con mas waypoints deberia ir mejor //Hace where y solo usa el maxMy para coger el mayor protected GameObject Mejor5Punto1() { GameObject nearestEnemy = null; int maxWaypoint = enemiesNearTower.Max(x => x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex); nearestEnemy = OrderAux.MaxByGameObject(enemiesNearTower.Where(x => x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex == maxWaypoint), x => (Waypoints.waypoints[maxWaypoint] - x.transform.position).sqrMagnitude); return(nearestEnemy); }
/*Ademas ahora usa int para filtrar a ver si es mas rapido que con floats, la pega es que deja mas numeros en la lista*/ protected GameObject ChooseNearestEnemyNew3() { GameObject nearestEnemy = null; int minX = (int)(transform.position.x - range); int minZ = (int)(transform.position.z - range); int maxX = (int)(transform.position.x + range); int maxZ = (int)(transform.position.z + range); nearestEnemy = OrderAux.MaxByGameObject(enemiesSpawned.Where(x => x.transform.position.x > minX && x.transform.position.z > minZ && x.transform.position.x < maxX && x.transform.position.z < maxZ), x => (transform.position - x.transform.position).sqrMagnitude); return(nearestEnemy); }
//TriggerCollider por cada torre en la que se guardan los que entran y los que van saliendo //Al atacar buscar en esa lista el mas cercano al nexo protected GameObject Mejor4() { GameObject nearestEnemy = null; int maxWaypoint = enemiesNearTower.Max(x => x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex); nearestEnemy = OrderAux.MaxByGameObject(enemiesNearTower, x => (Waypoints.waypoints[maxWaypoint] - x.transform.position).sqrMagnitude); if (nearestEnemy) { return(nearestEnemy.gameObject); } else { return(null); } }
//Lo mismo pero sin hacer el cuadrado antes para sacar distancia de solo los que estan dentro protected GameObject ChooseNearestEnemyNew6() { GameObject nearestEnemy = null; float rangePow = range * range; int maxWaypoint = enemiesNearTower.Max(x => x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex); nearestEnemy = OrderAux.MaxByGameObject(enemiesSpawned.Where(x => maxWaypoint == x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex&& (transform.position - x.transform.position).sqrMagnitude < rangePow), x => (Waypoints.waypoints[maxWaypoint] - x.transform.position).sqrMagnitude); if (nearestEnemy) { return(nearestEnemy.gameObject); } else { return(null); } }
/*Ahora coge los que vayan por el waypoint mas lejano y saca la distancia con el siguiente waypoint */ protected GameObject Mejor1() { GameObject nearestEnemy = null; int minX = (int)(transform.position.x - range); int minZ = (int)(transform.position.z - range); int maxX = (int)(transform.position.x + range); int maxZ = (int)(transform.position.z + range); float rangePow = range * range; int maxWaypoint = enemiesNearTower.Max(x => x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex); nearestEnemy = OrderAux.MaxByGameObject(enemiesSpawned.Where(x => maxWaypoint == x.gameObject.GetComponent <EnemyFather>().nextWayPointIndex&& x.transform.position.x > minX && x.transform.position.z > minZ && x.transform.position.x < maxX && x.transform.position.z < maxZ && (transform.position - x.transform.position).sqrMagnitude < rangePow), x => (Waypoints.waypoints[maxWaypoint] - x.transform.position).sqrMagnitude); if (nearestEnemy) { return(nearestEnemy.gameObject); } else { return(null); } }