//
        public void launch()
        {
            MainMenu.Instance.init();

            _popup = MainMenu.Instance.popup;

            //goPlayer.transform.position = new Vector3(0, 0.6f, -0.75f);
            //goPlayerCameraRig.transform.position = goPlayer.transform.position;
            Vector3 savedPos = Vector3.zero;
            Vector3 savedRot = Vector2.zero;

            savedPos.x = (VoxelUtils.MAX_CHUNK_UNITS * VoxelUtils.CHUNK_SIZE * .5f);
            savedPos.y = (VoxelUtils.MAX_CHUNK_UNITS * VoxelUtils.CHUNK_SIZE * .5f);
            savedPos.z = (VoxelUtils.MAX_CHUNK_UNITS * VoxelUtils.CHUNK_SIZE * .5f) - 1.0f;
            FlyCam.Instance.setNewInitialPosition(savedPos, savedRot);
            resetCamToStartPos();

            _aEditorTools = new List <EditorTool> ((int)Globals.TOOL.NUM_TOOLS);
            _aEditorTools.Add(new EditorToolLook());
            _aEditorTools.Add(new EditorToolDig());
            _aEditorTools.Add(new EditorToolPaint());
            _aEditorTools.Add(new EditorToolBuild());
            _aEditorTools.Add(new EditorToolProp());
            _aEditorTools.Add(new EditorToolRailgun());

            _curEditorTool = null;

            if (!AppController.Instance.editorIsInOfflineMode)
            {
                int firstLevelId = LevelManager.Instance.getLevelIdByIndex(0);
                teleportToLevelWithId(firstLevelId);
            }

            SceneManager.UnloadSceneAsync(BuildSettings.VWE_SplashScreenScene);
            setMode(AppState.Null, true);

            if (!_popup.isVisible())
            {
                showHelpPopup();
            }
        }
        //
        public void setMode(AppState mode, bool forceMode = false)
        {
            if (mode == AppController.Instance.appState && !forceMode)
            {
                return;
            }

            AppController.Instance.setAppState(mode);

            //goLights.SetActive (mode != AppState.Play);

            MainMenu.Instance.setModeButtons(mode);
            MainMenu.Instance.setMenuPanels(mode);

            if (_curEditorTool != null)
            {
                _curEditorTool.setSingleMaterial(laserAim, laserAimMaterial, false);
                _curEditorTool.resetMaterial();
                _curEditorTool.resetAim();
                _curEditorTool.resetProp();
                _curEditorTool.deactivate();
            }
            _curEditorTool = null;

            MainMenu.Instance.showTransformBox(false);
            MainMenu.Instance.showDigButtons(false);
            MainMenu.Instance.showMaterialBox(false);
            MainMenu.Instance.showRailgunBox(false);
            MainMenu.Instance.showItemsBox(false);

            laserAim.SetActive(false);
            propAim.SetActive(false);

            editCam.enabled = true;
            itemCam.enabled = false;
            _activeCam      = editCam;

            EditorObjectSelection.Instance.ClearSelection(false);

            setSelectedObjects();

            SceneGizmo.Instance.editorCameraTransform = EditorCamera.Instance.transform;

            Cursor.lockState = CursorLockMode.None;
            Cursor.visible   = true;

            if (mode != AppState.Play)
            {
                activateCorrectPlayer();
            }

            if (_goLevelMeshContainer.activeSelf)
            {
                _curVoxelsLevelChunk.trfmProps.SetParent(_curVoxelsLevelChunk.trfmVoxels.parent);
            }

            _goLevelContainer.SetActive(mode != AppState.Play);
            _goLevelMeshContainer.SetActive(!_goLevelContainer.activeSelf);

            if (mode == AppState.ExperimentalRailgun)
            {
                MainMenu.Instance.showRailgunBox(true);
                laserAim.SetActive(true);
                _curEditorTool = _aEditorTools [(int)Globals.TOOL.RAILGUN];
                newRailgunSelected(MainMenu.Instance.iSelectedRailgunMaterialIndex);
            }
            else if (mode == AppState.Play)
            {
                //resetCamToStartPos (false); // don't go back to starting pos

                _createLevelMeshesRunning  = false;
                _createLevelMeshesComplete = false;

                AppController.Instance.showPopup(PopupMode.Overlay, null, "Creating level meshes\n0%");
            }
            else if (mode == AppState.Select)
            {
                MainMenu.Instance.showTransformBox(true);
                _curEditorTool             = _aEditorTools [(int)Globals.TOOL.SELECT];
                itemCam.enabled            = true;
                itemCam.transform.position = editCam.transform.position;
                _activeCam      = itemCam;
                editCam.enabled = false;
            }
            else if (mode == AppState.Dig)
            {
                MainMenu.Instance.showDigButtons(true);
                laserAim.SetActive(true);
                _curEditorTool = _aEditorTools [(int)Globals.TOOL.DIG];
            }
            else if (mode == AppState.Paint)
            {
                MainMenu.Instance.showMaterialBox(true);
                MainMenu.Instance.showDigButtons(true);
                laserAim.SetActive(true);
                _curEditorTool = _aEditorTools [(int)Globals.TOOL.PAINT];
                _curEditorTool.setCurAimMaterial();
            }
            else if (mode == AppState.Build)
            {
                MainMenu.Instance.showMaterialBox(true);
                MainMenu.Instance.showDigButtons(true);
                laserAim.SetActive(true);
                _curEditorTool = _aEditorTools [(int)Globals.TOOL.BUILD];
                //_curEditorTool.setSingleMaterial (laserAim, _aMaterials[MainMenu.Instance.iSelectedMaterial], false);
                _curEditorTool.setCurAimMaterial();
            }
            else if (mode == AppState.Props)
            {
                //MainMenu.Instance.showItemsBox (true);
                _curEditorTool = _aEditorTools [(int)Globals.TOOL.PROPS];
                laserAim.SetActive(true);
                propAim.SetActive(true);
                if (_goCurProp == null)
                {
                    newPropSelected();
                }
            }

            SceneGizmo.Instance.editorCameraTransform = (itemCam.enabled ? EditorCamera.Instance.transform : FlyCam.Instance.player);

            RuntimeEditorApplication.Instance.gameObject.SetActive(mode == AppState.Select);

            MainMenu.Instance.setDigSliders(mode);
            //MainMenu.Instance.resetDigSettings (new Vector3 (1, 1, 1));
            updateDigSettings(MainMenu.Instance.v3DigSettings);

            if (_curEditorTool != null)
            {
                _curEditorTool.activate();
            }
        }