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

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

        timerS.setStateStartTime();

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

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

                    //set traffic
                    trafficM.ClearItems();
                    trafficM.ActivateTraffic(false, false);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);

                    //reset and lock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = false;
                    characterM.allowRealWalk    = false;

                    //tutorial
                    visualM.tutorialSetNo = 0;
                    visualM.ActivateTutorial(true);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);

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

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

                    break;

                case 1:
                    //START GAME
                    trafficM.CreateTargetAt(tutorialTargetPos.position, false);

                    //unlock user
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.PlayVoice(6);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

                    //reset and unlock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;

                    //visuals
                    visualM.ActivateTutorial(false);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);
                    visualM.PlayVoice(9);

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

                    //start save session
                    randomInstanceCount = Random.Range(3, 5);
                    //randomInstanceCount = Random.Range(4, 5);
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //reset game
                    trafficM.ClearItems();

                    //START GAME
                    trafficM.ActivateTraffic(false, false);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);
                    trafficM.CreateTargets(randomInstanceCount, false);
                    //visuals
                    visualM.ActivateInfo(true);
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.PlayVoice(11);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

                    //reset and unlock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;

                    //visuals
                    visualM.ActivateTutorial(false);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);
                    visualM.PlayVoice(9);

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

                    //start save session
                    if (randomInstanceCount == 0)
                    {
                        randomInstanceCount = Random.Range(3, 5);
                    }
                    //if (randomInstanceCount == 0) randomInstanceCount = Random.Range(4, 5);
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //reset game
                    trafficM.ClearItems();

                    //START GAME
                    trafficM.ActivateTraffic(false, false);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);
                    trafficM.CreateTargets(randomInstanceCount, false);
                    //visuals
                    visualM.ActivateInfo(true);
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

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

                    //set traffic
                    trafficM.ClearItems();
                    trafficM.ActivateTraffic(true, false);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);

                    //reset and lock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = false;
                    characterM.allowRealWalk    = false;

                    //tutorial
                    visualM.tutorialSetNo = 1;
                    visualM.ActivateTutorial(true);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);

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

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

                    break;

                case 1:
                    //START GAME
                    trafficM.CreateTargetAt(tutorialTargetPos.position, false);

                    //unlock user
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.PlayVoice(7);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

                    //reset and unlock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;

                    //visuals
                    visualM.ActivateTutorial(false);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);
                    visualM.PlayVoice(12);

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

                    //start save session
                    randomInstanceCount = Random.Range(3, 5);
                    //randomInstanceCount = Random.Range(4, 5);
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //reset game
                    trafficM.ClearItems();

                    //START GAME
                    trafficM.ActivateTraffic(true, false);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);
                    trafficM.CreateTargets(randomInstanceCount, false);

                    //visuals
                    visualM.ActivateInfo(true);
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.PlayVoice(14);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

                    //reset and unlock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;

                    //visuals
                    visualM.ActivateTutorial(false);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);
                    visualM.PlayVoice(12);

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

                    //start save session
                    if (randomInstanceCount == 0)
                    {
                        randomInstanceCount = Random.Range(3, 5);
                    }
                    //if (randomInstanceCount == 0) randomInstanceCount = Random.Range(4, 5);
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //reset game
                    trafficM.ClearItems();

                    //START GAME
                    trafficM.ActivateTraffic(true, false);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);
                    trafficM.CreateTargets(randomInstanceCount, false);

                    //visuals
                    visualM.ActivateInfo(true);
                    break;

                case 100:                                               //WIN
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

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

                    //set traffic
                    trafficM.ClearItems();
                    trafficM.ActivateTraffic(true, true);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);

                    //reset and lock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = false;
                    characterM.allowRealWalk    = false;

                    //tutorial
                    visualM.tutorialSetNo = 2;
                    visualM.ActivateTutorial(true);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);

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

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

                    break;

                case 1:
                    //START GAME
                    trafficM.CreateTargetAt(tutorialTargetPos.position, true);

                    //unlock user
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.PlayVoice(8);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

                    //reset and unlock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;

                    //visuals
                    visualM.ActivateTutorial(false);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);
                    visualM.PlayVoice(15);

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

                    //start save session
                    randomInstanceCount = Random.Range(3, 5);
                    //randomInstanceCount = Random.Range(4, 5);
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //reset game
                    trafficM.ClearItems();

                    //START GAME
                    trafficM.ActivateTraffic(true, true);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);
                    trafficM.CreateTargets(randomInstanceCount, true);
                    //visuals
                    visualM.ActivateInfo(true);
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.PlayVoice(17);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

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

                    //reset and unlock the user
                    characterM.transform.GetChild(0).position = Vector3.zero;
                    characterM.allowWalkInPlace = true;
                    characterM.allowRealWalk    = false;

                    //visuals
                    visualM.ActivateTutorial(false);
                    visualM.ActivatePictographs(false);
                    visualM.ActivateVisuals(false);
                    visualM.ActivateInfo(false);
                    visualM.PlayVoice(15);

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

                    //start save session
                    if (randomInstanceCount == 0)
                    {
                        randomInstanceCount = Random.Range(3, 5);
                    }
                    //if (randomInstanceCount == 0) randomInstanceCount = Random.Range(4, 5);
                    saverS.StartSaveSession();
                    saverS.instanceCount = randomInstanceCount;
                    timerS.setLevelStartTime();

                    //reset game
                    trafficM.ClearItems();

                    //START GAME
                    trafficM.ActivateTraffic(true, true);
                    trafficM.PlaceLowLevelObstacles();
                    trafficM.PlaceParkingCars(0.2f);
                    trafficM.CreateTargets(randomInstanceCount, true);
                    //visuals
                    visualM.ActivateInfo(true);
                    break;

                case 100:                                               //WIN
                    //forman voice and visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 0;
                    visualM.ActivateVisuals(true);

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

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

                case 200:                                               //FAIL
                    //visual
                    visualM.ActivatePictographs(false);
                    visualM.visualNo = 1;
                    visualM.ActivateVisuals(true);

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

                    //save session
                    saverS.result = 2;
                    saverS.SaveDataBase();
                    break;
                }
                break;
            }
            break;
            #endregion
        }
        //PHOTON CODE
        generalManagerS.PhotonUpdate();
        //PHOTON CODE
    }