IEnumerator CreateStateWithFade(LoadingSubTask _subTask, Level _level, int _state)
    {
        visualM.FadeOut();
        for (;;)
        {
            if (visualM.faded)
            {
                break;
            }
            yield return(null);
        }

        CreateState(_subTask, _level, _state);
        visualM.FadeIn();
    }
    void CreateState(LoadingSubTask _subTask, Level _level, int _state)
    {
        generalManagerS.ActiveSubTask = (int)_subTask;
        generalManagerS.ActiveLevel   = _level;
        state = _state;

        //GameObject tempObj = null;
        timerS.setStateStartTime();

        Debug.Log(_subTask + ", " + _level + ", " + _state);

        switch (_subTask)
        {
            #region CREATE_Identical_Boxes
        case LoadingSubTask.Identical_Boxes:
            switch (_level)
            {
            case Level.Tutorial:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, 300.0f);

                    //clear items
                    boxM.ClearAll();

                    //tutorial
                    visualM.tutorialSetNo = 0;
                    visualM.tutorialOn    = true;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = 1;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 1:
                    //create one box
                    boxM.CreateTutorial(false);

                    //info on
                    visualM.infoOn = true;

                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.PlayVoice(6);
                    visualM.visualNo = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;

            case Level.Train_without_Distracters:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, 300.0f);

                    //visuals
                    visualM.tutorialOn    = false;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;
                    visualM.PlayVoice(9);

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //create boxes
                    boxM.ClearAll();
                    randomInstanceCount = Random.Range(5, 8);
                    boxM.DivideArea(randomInstanceCount, 0.0f, false);

                    //info on
                    visualM.infoOn = true;

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.PlayVoice(11);
                    visualM.visualNo = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;

            case Level.Train_with_Distracters:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, 300.0f);

                    //visuals
                    visualM.tutorialOn    = false;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;
                    visualM.PlayVoice(9);

                    //distracters on
                    //generalManagerS.DistracterM.SetActiveDistracters(992);
                    generalManagerS.DistracterM.SetDistracterTiming(30.0f, 5.0f);
                    generalManagerS.DistracterM.ActiveteDistracters(true);

                    //create boxes
                    boxM.ClearAll();
                    if (randomInstanceCount == 0)
                    {
                        randomInstanceCount = Random.Range(5, 8);
                    }
                    boxM.DivideArea(randomInstanceCount, 0.0f, false);

                    //info on
                    visualM.infoOn = true;

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;
            }
            break;

            #endregion
            #region CREATE_Labeled_Boxes
        case LoadingSubTask.Labeled_Boxes:
            switch (_level)
            {
            case Level.Tutorial:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, 300.0f);

                    //clear items
                    boxM.ClearAll();

                    //tutorial
                    visualM.tutorialSetNo = 1;
                    visualM.tutorialOn    = true;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = 1;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 1:
                    //create one box
                    boxM.ClearAll();
                    boxM.CreateTutorial(true);

                    //info on
                    visualM.infoOn = true;

                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.PlayVoice(7);
                    visualM.visualNo = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;

            case Level.Train_without_Distracters:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, 300.0f);

                    //visuals
                    visualM.tutorialOn    = false;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;
                    visualM.PlayVoice(12);

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //create boxes
                    boxM.ClearAll();
                    randomInstanceCount = Random.Range(5, 8);
                    boxM.DivideArea(randomInstanceCount, 0.15f, true);

                    //info on
                    visualM.infoOn = true;

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.PlayVoice(14);
                    visualM.visualNo = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;

            case Level.Train_with_Distracters:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, 300.0f);

                    //visuals
                    visualM.tutorialOn    = false;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;
                    visualM.PlayVoice(12);

                    //distracters on
                    //generalManagerS.DistracterM.SetActiveDistracters(992);
                    generalManagerS.DistracterM.SetDistracterTiming(30.0f, 5.0f);
                    generalManagerS.DistracterM.ActiveteDistracters(true);

                    //create boxes
                    boxM.ClearAll();
                    if (randomInstanceCount == 0)
                    {
                        randomInstanceCount = Random.Range(5, 8);
                    }
                    boxM.DivideArea(randomInstanceCount, 0.15f, true);

                    //info on
                    visualM.infoOn = true;

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 100:                       //WIN
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;
            }
            break;

            #endregion
            #region CREATE_Timed_Boxes
        case LoadingSubTask.Timer:
            switch (_level)
            {
            case Level.Tutorial:
                switch (_state)
                {
                case 0:
                    //timing set
                    timerS.initializeTimes(0.0f, tutorialTime, tutorialTime * 5.95f);

                    //clear items
                    boxM.ClearAll();

                    //tutorial
                    visualM.tutorialSetNo = 2;
                    visualM.tutorialOn    = true;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = 1;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 1:
                    //create one box
                    boxM.ClearAll();
                    boxM.CreateTutorial(true);
                    startTime = Time.timeSinceLevelLoad;

                    //info on();
                    visualM.infoOn = true;

                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.PlayVoice(8);
                    visualM.visualNo = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;

            case Level.Train_without_Distracters:
                switch (_state)
                {
                case 0:
                    //visuals
                    visualM.tutorialOn    = false;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;
                    visualM.PlayVoice(15);

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //create boxes
                    boxM.ClearAll();
                    randomInstanceCount = Random.Range(5, 8);
                    boxM.DivideArea(randomInstanceCount, 0.15f, true);
                    startTime   = Time.timeSinceLevelLoad;
                    subTaskTime = randomInstanceCount * (20.0f + Random.Range(0.0f, 5.0f));

                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, subTaskTime);

                    //info on
                    visualM.infoOn = true;

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.PlayVoice(17);
                    visualM.visualNo = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;

            case Level.Train_with_Distracters:
                switch (_state)
                {
                case 0:
                    //visuals
                    visualM.tutorialOn    = false;
                    visualM.pictographsOn = false;
                    visualM.visualOn      = false;
                    visualM.infoOn        = false;
                    visualM.PlayVoice(15);

                    //distracters on
                    //generalManagerS.DistracterM.SetActiveDistracters(992);
                    generalManagerS.DistracterM.SetDistracterTiming(30.0f, 5.0f);
                    generalManagerS.DistracterM.ActiveteDistracters(true);

                    //create boxes
                    boxM.ClearAll();
                    if (randomInstanceCount == 0)
                    {
                        randomInstanceCount = Random.Range(5, 8);
                    }
                    boxM.DivideArea(randomInstanceCount, 0.15f, true);
                    startTime   = Time.timeSinceLevelLoad;
                    subTaskTime = randomInstanceCount * (20.0f + Random.Range(0.0f, 5.0f));

                    //timing set
                    timerS.initializeTimes(0.0f, 60.0f, subTaskTime);

                    //info on
                    visualM.infoOn = true;

                    //start save session
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //resume Omni
                    boxM.ResumeHepticDevice();
                    break;

                case 100:                       //WIN
                    //forman voice and visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 0;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //save session
                    saverS.result = 1;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;

                case 200:                       //FAIL
                    //visual
                    visualM.pictographsOn = false;
                    visualM.visualNo      = 1;
                    if (visualM.visualOn)
                    {
                        visualM.visualStartTime = Time.timeSinceLevelLoad;
                    }
                    visualM.visualOn = true;

                    //distracters off
                    generalManagerS.DistracterM.ActiveteDistracters(false);

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();

                    //pause Omni
                    boxM.PauseHepticDevice();
                    break;
                }
                break;
            }
            break;
            #endregion
        }

        //PHOTON CODE
        //generalManagerS.PhotonUpdate();
        //PHOTON CODE
    }