void Evade() { if (!Human.humanRef.aggressiveMode) { // Si hay enemigos cercanos huimos de ellos if ((closestEnemyPosition - (Vector2)base.player.basicMovementServer.characterTransform.position).magnitude < 6) { repulsionVector = Vector2.zero; for (int i = 0; i < NetworkManager.networkManagerRef.listaJugadores.Length; i++) { if (NetworkManager.networkManagerRef.listaJugadores[i].enumPersonaje != EnumPersonaje.Humano && !NetworkManager.networkManagerRef.listaJugadores[i].player.isDead) { auxVector = ((Vector2)base.player.basicMovementServer.characterTransform.position - (Vector2)NetworkManager.networkManagerRef.listaJugadores[i].player.transform.position); repulsionVector += auxVector.normalized * (1 / auxVector.magnitude); } } if (base.pathCompleted || repulsionVector.sqrMagnitude > 1f) { evadeTarget = base.wlkToRandomPositionAround((Vector2)base.player.basicMovementServer.characterTransform.position + (repulsionVector.normalized * 6), 3); } } else { humanAIStatus = HumanAIStatus.Wander; } } else { humanAIStatus = HumanAIStatus.Attack; } }
void Attack() { // Mientras este en modo agresivo se movera hacia los enemigos if (Human.humanRef.aggressiveMode && GameManager.gameManager.robotsAlive > 0) { if (((Vector2)base.player.basicMovementServer.characterTransform.position - closestEnemyPosition).sqrMagnitude > 4) { // Si la posicion objetivo difiere de la anterior recalculamos el camino if ((closestEnemyPosition - oldTargetPosition).sqrMagnitude > 2f) { base.CalculatePathTo(closestEnemyPosition); oldTargetPosition = closestEnemyPosition; } } else { // Si la posicion objetivo difiere de la anterior recalculamos el camino if ((closestEnemyPosition - oldTargetPosition).sqrMagnitude > 0.5f) { base.CalculatePathTo(closestEnemyPosition); oldTargetPosition = closestEnemyPosition; } } } else { humanAIStatus = HumanAIStatus.Wander; } }
void Wander() { if (!Human.humanRef.aggressiveMode) { // Comprobar enemigos cercanos if (!AIBaseController.humanInSight) { if (base.pathCompleted) { wlkToRandomPositionAround(player.basicMovementServer.characterTransform.position, 8); } } else { humanAIStatus = HumanAIStatus.Evade; base.ClearPath(); } } else if (GameManager.gameManager.robotsAlive > 0) { humanAIStatus = HumanAIStatus.Attack; } }