/// <summary>
    /// This is the main loop and where the system detect the presed keys and send them to the controller.
    /// </summary>
    void Update()
    {
        if (HOTween.GetAllPlayingTweens().Any())
        {
            return;
        }
        else if (currentState == EnumBattleState.SelectingTarget)
        {
            //Detecting if the player clicked on the left mouse button and also if there is no animation playing
            if (Input.GetButtonDown("Fire1"))
            {
                //The 3 following lines is to get the clicked GameObject and getting the RaycastHit2D that will help us know the clicked object
                RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
                if (hit.transform != null)
                {
                    //TODO: Add tweening condition
                    bool foundEnemy = false;
                    foreach (var x in generatedEnemyList)
                    {
                        if (x.GetInstanceID() == hit.transform.gameObject.GetInstanceID())
                        {
                            foundEnemy    = true;
                            selectedEnemy = hit.transform.gameObject;
                            PositionTargetSelector(selectedEnemy);
                            break;
                        }
                    }
                    if (!foundEnemy)
                    {
                        return;
                    }
                }
            }
        }
        else if (currentState == EnumBattleState.EnemyTurn)
        {
            Log(GameTexts.EnemyTurn);
            var z = turnByTurnSequenceList.Where(w => w.First == EnumPlayerOrEnemy.Player);
            var playerTargetedByEnemy      = z.ElementAt(UnityEngine.Random.Range(0, z.Count() - 1));
            var playerTargetedByEnemyDatas = GetCharacterDatas(playerTargetedByEnemy.Second.name);

            PositionTargetSelector(playerTargetedByEnemy.Second);
            EnemyAttack(playerTargetedByEnemy.Second, playerTargetedByEnemyDatas);
            NextBattleSequence();
        }
        else if (currentState == EnumBattleState.PlayerTurn)
        {
            Log(GameTexts.PlayerTurn);
            HideTargetSelector();
            ShowMenu();
            currentState = EnumBattleState.None;
        }
        else if (currentState == EnumBattleState.PlayerWon)
        {
            Log(GameTexts.PlayerWon);
            HideTargetSelector();
            HideMenu();
            int totalXP = 0;
            foreach (var x in generatedEnemyList)
            {
                totalXP += x.GetComponent <EnemyCharacterDatas> ().XP;
            }

            foreach (var x in turnByTurnSequenceList)
            {
                var characterdatas = GetCharacterDatas(x.Second.name);
                characterdatas.XP += totalXP;
                var calculatedXP = Math.Floor(Math.Sqrt(625 + 100 * characterdatas.XP) - 25) / 50;
                characterdatas.Level = (int)calculatedXP;
            }
            var textTodisplay = GameTexts.EndOfTheBattle + "\n\n" + GameTexts.PlayerXP + totalXP;
            ShowDropMenu(textTodisplay);
            currentState = EnumBattleState.EndBattle;
            var go = GameObject.FindGameObjectsWithTag(Settings.Music).FirstOrDefault();
            if (go)
            {
                go.GetComponent <AudioSource>().Stop();
            }
            SoundManager.WinningMusic();
        }
        else if (currentState == EnumBattleState.EnemyWon)
        {
            Log(GameTexts.EnemyWon);
            HideTargetSelector();
            HideMenu();

            var textTodisplay = GameTexts.EndOfTheBattle + "\n\n" + GameTexts.YouLost;
            ShowDropMenu(textTodisplay);

            currentState = EnumBattleState.None;
            var go = GameObject.FindGameObjectsWithTag(Settings.Music).FirstOrDefault();
            if (go)
            {
                go.GetComponent <AudioSource>().Stop();
            }
            SoundManager.GameOverMusic();
        }
    }