// Update is called once per frame
    void Update()
    {
        if (!inFinisherMode)
        {
            if (FinisherModeCooldownCount >= FinisherModeCooldownTime && CanFinish)
            {
                if (PillarFinisherNearby && PillarTarget != null)//TutorialPillarComment
                {
                    FinisherIcon.SetActivated(true);
                    FinisherIcon.transform.position  = PillarTarget.transform.position;
                    FinisherIcon.transform.position += Vector3.up * 2f;
                    if (TryFinisher && !GameStatus.GamePaused)
                    {
                        PillarFinisherUsed = true;
                        currentTarget      = PillarTarget;
                        PillarTutorial     = PillarTarget.GetComponent <TutorialPillar>();
                        switch (PillarTutorial.FinisherUnlock)
                        {
                        case Finishers.Siphoning:
                            GetComponent <Siphoncut>().enabled = true;
                            break;

                        case Finishers.FlameSword:
                            GetComponent <RunicFireSword>().enabled = true;
                            break;

                        case Finishers.Flamethrower:
                            GetComponent <RunicFlamethrower>().enabled = true;
                            break;

                        case Finishers.FlameAOE:
                            GetComponent <RunicFireCircle>().enabled = true;
                            break;

                        case Finishers.FrostAOE:
                            GetComponent <RunicFrostCircle>().enabled = true;
                            break;
                        }
                        StartCoroutine(EnterFinisherMode(false));
                    }
                }
                else if (finisherSlider.value >= 100)
                {
                    currentTarget = GetClosestEnemy();
                    FinisherFullImage.SetActive(true);
                    if (TryFinisher && !GameStatus.GamePaused) //Input.GetButtonDown("FinishMode")
                    {
                        if (currentTarget != null)
                        {
                            finisherSlider.value = 25;
                            FinisherFullImage.SetActive(false);
                            StartCoroutine(EnterFinisherMode(usedSwordGrapple));
                        }
                        else
                        {
                            print("No nearby enemy");
                        }
                    }
                }
                else
                {
                    FinisherFullImage.SetActive(false);
                }
            }
            else
            {
                FinisherModeCooldownCount += Time.deltaTime;
                FinisherIcon.SetActivated(false);
            }

            //Increase UI slider for Finisher && temp cheat
            if (Input.GetKeyDown(KeyCode.G))
            {
                IncreaseFinisherMeter(100);
            }
            if (Input.GetKeyDown(KeyCode.H))
            {
                IncreaseGodModeMeter(100);
            }
        }
        else
        {
            CameraBase.rotation = PlayerRotWrapper.rotation;

            if (PerformingFinisher && !ExecutingFinisher && !GameStatus.GamePaused) //MARK: Unsure of how we will do the full finisher carves
            {
                if (!PillarFinisherUsed)
                {
                    currentTarget.transform.position = EnemyFinisherPlacement.position;
                    currentTarget.transform.rotation = EnemyFinisherPlacement.rotation;
                    if (!PillarFinisherUsed)
                    {
                        currentTarget.transform.Rotate(new Vector3(0, -40, 0));
                    }
                }
                if (Input.GetButtonDown("QuickFinish"))
                {
                    FailFinisherMode();
                    return;
                }
                ProcessPlayerInput();

                bool goodSoFar = false;
                foreach (FinisherAbstract RCombo in FinisherMoves)
                {
                    goodSoFar = RCombo.checkSoFar(RunicQue);
                    if (goodSoFar)
                    {
                        if (RCombo.check(RunicQue))
                        {
                            PrimaryAttackPopUp.SetActive(true);
                            if (PillarFinisherUsed)
                            {
                                if (PillarTutorial)
                                {
                                    PillarTutorial.PlayFinalHit();
                                }
                            }
                        }
                        break;
                    }
                }
                if (!goodSoFar)
                {
                    FailFinisherMode();
                    return;
                }

                //inside the primary attack check, see if they did a correct sequence, and succeed or fail
                if (Input.GetButtonDown("Execute"))
                {
                    bool             goodCombo         = false;
                    FinisherAbstract FinisherToPerform = null;
                    foreach (FinisherAbstract f in FinisherMoves)
                    {
                        //goodCombo = f.startfinisher(this, RunicQue);
                        goodCombo         = f.check(RunicQue);
                        FinisherToPerform = f;
                        if (goodCombo)
                        {
                            break;
                        }
                    }
                    if (!goodCombo)
                    {
                        FailFinisherMode();
                    }
                    else
                    {
                        StartCoroutine(ExecuteFinisher(FinisherToPerform));
                    }
                }

                if (FinisherCount <= 0 && !ExecutingFinisher && !PillarFinisherUsed)
                {
                    FailFinisherMode();
                }
                else
                {
                    FinisherCount -= Time.unscaledDeltaTime;
                }
            }
        }
        //print(NearbyEnemies);
        TryFinisher = false;
    }
    public void LoadGame()
    {
        if (!LoadGameBool)
        {
            LoadGameBool = true;
            int index = SceneManager.GetActiveScene().buildIndex;//reload scene
            SceneManager.LoadScene(index);
            return;
        }
        // 1
        if (File.Exists(Application.persistentDataPath + "/gamesave.save"))
        {
            // 2
            BinaryFormatter bf   = new BinaryFormatter();
            FileStream      file = File.Open(Application.persistentDataPath + "/gamesave.save", FileMode.Open);
            Save            save = (Save)bf.Deserialize(file);
            file.Close();

            // 3
            foreach (int index in save.DeadGroups)
            {
                Groups[index].SetActive(false);
            }

            List <FinisherAbstract> FinishersUnlocked = new List <FinisherAbstract>();
            foreach (int index in save.FinishedPillars)
            {
                TutorialPillar pillarTutorial = Pillars[index].GetComponent <TutorialPillar>();
                switch (pillarTutorial.FinisherUnlock)
                {
                case Finishers.Siphoning:
                    fm.GetComponent <Siphoncut>().enabled = true;
                    break;

                case Finishers.FlameSword:
                    fm.GetComponent <RunicFireSword>().enabled = true;
                    break;

                case Finishers.Flamethrower:
                    fm.GetComponent <RunicFlamethrower>().enabled = true;
                    break;

                case Finishers.FlameAOE:
                    fm.GetComponent <RunicFireCircle>().enabled = true;
                    break;

                case Finishers.FrostAOE:
                    fm.GetComponent <RunicFrostCircle>().enabled = true;
                    break;
                }
                Pillars[index].SetActive(false);
            }

            // 4
            HealthSlider.value   = save.healthMeter;
            FinisherSlider.value = save.finisherMeter;
            GroupsDefeated       = save.DeadGroups.Count;

            playerT.position = new Vector3(save.playerX, save.playerY + .5f, save.playerZ);
            playerT.GetComponent <Rigidbody>().velocity = Vector3.zero;

            Debug.Log("Game Loaded");

            GetComponent <UIManager>().ResumeGame();
        }
        else
        {
            Debug.Log("No game saved!");
        }
        LoadGameBool = false;
    }