/// <summary>
    /// Completes this QTEvent either partically or totally
    /// </summary>
    /// <returns></returns>
    private IEnumerator CompleteQTEvent()
    {
        FMODUnity.RuntimeManager.PlayOneShot(qTSuccess, transform.position);

        eventsDone++;
        generatorState.setParameterByName("GenProgress", eventsDone);

        currentPlayerUI.ChangeInstructions("COMPLETE");
        quickTimeStatus = QTStatus.Completed;

        yield return(new WaitForSeconds(2f));

        currentPlayerUI.ResetTextLayers();

        closedList.Add(openList[0]);
        openList.RemoveAt(0);


        if (openList.Count == 0)
        {
            generatorState.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
            FMODUnity.RuntimeManager.PlayOneShot(genFinished, transform.position);

            SetUpQuickTimeEvent(true);
            objectiveInfo.CompleteObjective();
        }
        else
        {
            BeginQTEvent();
        }
    }
    /// <summary>
    /// Starts this QuickTimeEvent
    /// </summary>
    public void BeginQTEvent()
    {
        // Play generator audio
        generatorState.setParameterByName("GenProgress", eventsDone);
        generatorState.start();

        //GameVars.instance.audioManager.PlaySFX(ObjectiveManager.instance.generatorInteract, 0.5f, playerSide.transform.position);
        ResetQTEvent(true);
        PlayerSideStatusToggle(PlayerCamera.PlayerSideStatus.Paused);
        quickTimeStatus = QTStatus.Active;
        if (openList[0].quickTimeType == QTEvent.QTType.KeyCombo)
        {
            //Debug.Log("Starting KeyCombo...");
            StartCoroutine(QuickTimeEventKeyCombo());
            StartCoroutine(QTEventTimer(openList[0].DELAY_BEFORE_QT_FAIL, true));
        }
        else if (openList[0].quickTimeType == QTEvent.QTType.Mash)
        {
            //Debug.Log("Starting Mash...");
            StartCoroutine(QuickTimeEventMash());
            StartCoroutine(QTEventTimer(openList[0].DELAY_BEFORE_QT_FAIL, true));
        }
        else if (openList[0].quickTimeType == QTEvent.QTType.Rhythm)
        {
            //Debug.Log("Starting Rhythm...");
            StartCoroutine(QuickTimeEventRhythm());
        }
    }
    /// <summary>
    /// Sets up the needed values for a QuickTimeEvent
    /// </summary>
    public void SetUpQuickTimeEvent(bool hardReset)
    {
        quickTimeStatus = QTStatus.Nonactive;

        if (hardReset)
        {
            openList   = new List <QTEvent>();
            closedList = new List <QTEvent>();

            if (randomNumberOfEvents)
            {
                qtEventsTobeDone = Random.Range(1, quickTimeEvents.Count);
            }

            //Setup openlist
            for (int i = 0; i <= qtEventsTobeDone; i++)
            {
                openList.Add(quickTimeEvents[Random.Range(0, quickTimeEvents.Count)]);
            }
        }

        if (openList[0].quickTimeType == QTEvent.QTType.KeyCombo || openList[0].quickTimeType == QTEvent.QTType.Rhythm)
        {
            totalInputs       = Random.Range(openList[0].MIN_TOTAL_INPUTS, openList[0].MAX_TOTAL_INPUTS + 1);
            inputListPosition = new int[totalInputs];

            for (int i = 0; i < inputListPosition.Length; i++)
            {
                inputListPosition[i] = Random.Range(0, openList[0].quickTimePossibleKeys.Count);
            }
        }
        else if (openList[0].quickTimeType == QTEvent.QTType.Mash)
        {
            totalInputsNeeded = Random.Range(openList[0].MIN_POSSIBLE_NEEDED_KEYHITS, openList[0].MAX_POSSIBLE_NEEDED_KEYHITS + 1);
            mashKey           = openList[0].quickTimePossibleKeys[Random.Range(0, openList[0].quickTimePossibleKeys.Count)];
        }
    }
    /// <summary>
    /// Used to fail a QuickTimeEvent
    /// </summary>
    public IEnumerator FailedQTEvent()
    {
        if (quickTimeStatus != QTStatus.Completed)
        {
            quickTimeStatus = QTStatus.Failed;
            currentPlayerUI.ChangeInstructions("Objective Failed\nTry Again");

            FMODUnity.RuntimeManager.PlayOneShot(qTFail, transform.position);
            generatorState.stop(FMOD.Studio.STOP_MODE.ALLOWFADEOUT);
            eventsDone = 0;
            generatorState.setParameterByName("GenProgress", eventsDone);

            //GameVars.instance.audioManager.PlaySFX(ObjectiveManager.instance.generatorFailed, 0.5f, playerSide.transform.position);

            yield return(new WaitForSeconds(2f));

            currentPlayerUI.ResetTextLayers();
            PlayerSideStatusToggle(PlayerCamera.PlayerSideStatus.Active);
            ResetQTEvent(true);

            objectiveInfo.isTriggered = false;
            quickTimeStatus           = QTStatus.Nonactive;
        }
    }