private void PerformAttack(PlayerTroop playerTroop)
 {
     if (EnemiesManager.Instance != null && playerTroop.Attack.IsAttackPossible())
     {
         EnemyCreature enemy = EnemiesManager.Instance.GetNearestEnemy(playerTroop.GameObject.transform.position,
                                                                       playerTroop.Attack.Range);
         if (enemy != null)
         {
             playerTroop.PerformAttack(enemy.Health, enemy.Position);
         }
     }
 }
 public void KillTroopWithInfection(int troopIndex)
 {
     if (Troops != null)
     {
         PlayerTroop troopToKill = Troops.Find((t) => t.Index.Equals(troopIndex));
         if (troopToKill != null)
         {
             troopToKill.IsDead = true;
             troopToKill.Health.CurrentHealth = 0;
         }
     }
 }
 public void InfectRandomTroop()
 {
     if (Troops != null)
     {
         PlayerTroop troopToInfect = Troops.Find((t) => !t.IsInfected && !t.IsDead);
         if (troopToInfect != null)
         {
             troopToInfect.IsInfected = true;
             GameManager.Instance.ShowInfectedTroop(troopToInfect.Index);
             troopToInfect.ChangeColorToInfected();
         }
     }
 }
 private void PerformAttack(EnemyCreature enemyCreature)
 {
     if (GameManager.Instance != null && enemyCreature.GameObject != null &&
         enemyCreature.Attack.IsAttackPossible())
     {
         PlayerTroop troop = GameManager.Instance.GetNearestPlayerTroop(enemyCreature.GameObject.transform.position,
                                                                        enemyCreature.Attack.Range);
         if (troop != null)
         {
             enemyCreature.PerformAttack(troop.Health, troop.Position);
         }
     }
 }
    public PlayerTroop GetNearestTroop(Vector2 origin, float range)
    {
        PlayerTroop nearestTroop      = null;
        float       distanceToClosest = float.MaxValue;

        for (int i = 0; i < Troops.Count; i++)
        {
            float distanceToCurrent = Vector3.Distance(Troops[i].Position, origin);
            if (distanceToCurrent < distanceToClosest &&
                distanceToCurrent < range)
            {
                nearestTroop      = Troops[i];
                distanceToClosest = distanceToCurrent;
            }
        }
        return(nearestTroop);
    }