Ejemplo n.º 1
0
        void AddUndoRedo(Cockpit cockpit)
        {
            HUDButton undoButton = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Disc, fDiscButtonRadius1)
            {
                Slices = 32
            },
                fCockpitRadiusButton, -6.5f, -50.0f, "icons/undo_v1");

            //UnityUtil.TranslateInFrame(undoButton.RootGameObject, -fDiscButtonRadius1*1.1f, 0, 0, CoordSpace.WorldCoords);
            undoButton.Name       = "undo";
            undoButton.OnClicked += (o, e) => { cockpit.Scene.History.InteractiveStepBack(); };
            cockpit.AddUIElement(undoButton, true);

            HUDButton redoButton = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Disc, fDiscButtonRadius1)
            {
                Slices = 32
            },
                fCockpitRadiusButton, 6.5f, -50.0f, "icons/redo_v1");

            //UnityUtil.TranslateInFrame(redoButton.RootGameObject, fDiscButtonRadius1*1.1f, 0, 0, CoordSpace.WorldCoords);
            redoButton.Name       = "redo";
            redoButton.OnClicked += (o, e) => { cockpit.Scene.History.InteractiveStepForward(); };
            cockpit.AddUIElement(redoButton, true);
        }
Ejemplo n.º 2
0
        private void IconButton_DoubleClick(object sender, InputEvent e)
        {
            HUDButton button   = (HUDButton)sender;
            string    sName    = button.Name;
            string    sNewPath = Path.Combine(FolderPath, sName);

            sNewPath = Path.GetFullPath(sNewPath);
            if (Directory.Exists(sNewPath))
            {
                Dismiss();

                // create new folder source
                IconFilesystemPanel list = new IconFilesystemPanel()
                {
                    IconSize   = this.IconSize,
                    FolderPath = sNewPath,
                    Source     = this.Source
                };
                list.Initialize(activeCockpit, activeHUDRadius);

                // notify listeners that we have changed folder
                if (OnFolderChanged != null)
                {
                    OnFolderChanged(list);
                }
            }
            else if (File.Exists(sNewPath))
            {
                OnFileDoubleClicked(sNewPath);
            }
        }
Ejemplo n.º 3
0
        // creates navigation mode toggle group
        void AddNavModeToggleGroup(Cockpit cockpit)
        {
            float h  = 25.0f;
            float dh = 13.0f;
            float v  = -50.0f;
            float dv = 13.0f;

            HUDToggleButton tumbleButton = HUDBuilder.CreateToggleButton(
                fDiscButtonRadius1, fCockpitRadiusButton, h, v,
                "cockpit_icons/view_controls/bunny_enabled", "cockpit_icons/view_controls/bunny_disabled",
                new IconMeshGenerator()
            {
                Path      = "icon_meshes/camera",
                Scale     = 0.07f, Color = ColorUtil.make(30, 30, 30),
                Translate = new Vector3(0.04f, -0.07f, 0.04f),
                Rotate    = Quaternion.AngleAxis(30.0f, Vector3.up) * Quaternion.AngleAxis(-90.0f, Vector3.right)
            }
                );

            tumbleButton.Name = "tumbleNavMode";
            cockpit.AddUIElement(tumbleButton, true);

            HUDToggleButton flyButton = HUDBuilder.CreateToggleButton(
                fDiscButtonRadius1, fCockpitRadiusButton, h + dh, v,
                "cockpit_icons/view_controls/sponza_enabled", "cockpit_icons/view_controls/sponza_disabled");

            flyButton.Name = "flyNavMode";
            cockpit.AddUIElement(flyButton, true);

            HUDToggleGroup group = new HUDToggleGroup();

            group.AddButton(tumbleButton);
            group.AddButton(flyButton);
            group.Selected   = 1;
            group.OnToggled += (sender, nSelected) => {
                if (nSelected == 0)
                {
                    cockpit.Context.MouseCameraController = new MayaCameraHotkeys();
                }
                else
                {
                    cockpit.Context.MouseCameraController = new RateControlledEgocentricCamera();
                }
            };

            // set initial state
            group.Selected = 0;


            HUDButton resetButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, h + 0.3f * dh, v - 0.7f * dv,
                "icons/reset_v1");

            resetButton.Name = "export";
            cockpit.AddUIElement(resetButton, true);
            resetButton.OnClicked += (s, e) => {
                cockpit.Context.ResetView(true);
            };
        }
Ejemplo n.º 4
0
        IEnumerator Animate(HUDButton button)
        {
            yield return(null);

            FlyAwayAnimator anim = button.RootGameObject.AddComponent <FlyAwayAnimator>();

            anim.Distance         = 2.0f;
            anim.Direction        = -Vector3.forward;
            anim.CompleteCallback = Destroy;
            anim.Begin(button, 1.5f);
        }
Ejemplo n.º 5
0
        public void add_text_entry_field(Cockpit cockpit)
        {
            float fUseRadius = HUDRadius * 0.85f;
            float fAngle     = -35.0f;

            entryField            = new HUDTextEntry();
            entryField.Text       = GetDefaultFileName();
            entryField.Width      = 1.0f;
            entryField.Height     = 0.08f;
            entryField.TextHeight = 0.06f;
            entryField.Create();
            entryField.Name = "selectFileName";
            HUDUtil.PlaceInSphere(entryField, fUseRadius, 0.0f, fAngle);
            cockpit.AddUIElement(entryField, true);

            tooltipText                 = new HUDLabel();
            tooltipText.Shape           = new HUDShape(HUDShapeType.Rectangle, 1.0f, 0.04f);
            tooltipText.Text            = Tooltip;
            tooltipText.TextHeight      = 0.03f;
            tooltipText.BackgroundColor = Colorf.TransparentBlack;
            tooltipText.TextColor       = Colorf.Silver;
            tooltipText.Create();
            tooltipText.Name = "tooltip";
            HUDUtil.PlaceInSphere(tooltipText, fUseRadius, 0.0f, fAngle);
            UnityUtil.TranslateInFrame(tooltipText.RootGameObject, 0.0f, -entryField.Height, 0, CoordSpace.WorldCoords);
            cockpit.AddUIElement(tooltipText, true);


            HUDButton saveButton = HUDBuilder.CreateRectIconClickButton(
                0.2f, 0.1f, fUseRadius, 0.0f, fAngle,
                "icons/save_v1");

            UnityUtil.TranslateInFrame(saveButton.RootGameObject, 0.2f, -0.1f, 0, CoordSpace.WorldCoords);
            saveButton.Name = "save";
            cockpit.AddUIElement(saveButton, true);
            saveButton.OnClicked += (s, e) => { SaveFromEntryText(); };

            HUDButton cancelButton = HUDBuilder.CreateRectIconClickButton(
                0.2f, 0.1f, fUseRadius, 0.0f, fAngle,
                "icons/cancel_v1");

            UnityUtil.TranslateInFrame(cancelButton.RootGameObject, 0.4f, -0.1f, 0, CoordSpace.WorldCoords);
            cancelButton.Name = "cancel";
            cockpit.AddUIElement(cancelButton, true);
            cancelButton.OnClicked += (s, e) => {
                cockpit.Context.PopCockpit(true);
            };
        }
Ejemplo n.º 6
0
        public void Initialize(Cockpit cockpit)
        {
            Frame3 cockpitF = cockpit.GetLocalFrame(CoordSpace.WorldCoords);

            float fHUDRadius = 0.7f;
            Color bgColor    = new Color(0.7f, 0.7f, 1.0f);

            Material bgMaterial   = MaterialUtil.CreateTransparentMaterial(bgColor, 0.7f);
            Material primMaterial = MaterialUtil.CreateStandardMaterial(Color.yellow);

            HUDButton addCylinderButton = new HUDButton()
            {
                Radius = 0.08f
            };

            addCylinderButton.Create(PrimitiveType.Cylinder, bgMaterial, primMaterial);
            Frame3 cylFrame    = addCylinderButton.GetObjectFrame();
            Frame3 cylHUDFrame = make_hud_sphere_frame(fHUDRadius, -45.0f, 0.0f);

            addCylinderButton.SetObjectFrame(
                cylFrame.Translated(cylHUDFrame.Origin)
                .Rotated(Quaternion.FromToRotation(cylFrame.Z, cylHUDFrame.Z)));
            addCylinderButton.OnClicked += (s, e) => {
                cockpit.Parent.Scene.AddCylinder();
            };
            cockpit.AddUIElement(addCylinderButton, true);


            HUDButton addBoxButton = new HUDButton()
            {
                Radius = 0.08f
            };

            addBoxButton.Create(PrimitiveType.Cube, bgMaterial, primMaterial);
            Frame3 boxFrame    = addBoxButton.GetObjectFrame();
            Frame3 boxHUDFrame = make_hud_sphere_frame(fHUDRadius, -45.0f, -15.0f);

            addBoxButton.SetObjectFrame(
                boxFrame.Translated(boxHUDFrame.Origin)
                .Rotated(Quaternion.FromToRotation(boxFrame.Z, boxHUDFrame.Z)));
            addBoxButton.OnClicked += (s, e) => {
                cockpit.Parent.Scene.AddBox();
            };
            cockpit.AddUIElement(addBoxButton, true);
        }
Ejemplo n.º 7
0
        public static HUDButton CreateIconClickButton(HUDShape shape,
                                                      float fHUDRadius, float fAngleHorz, float fAngleVert,
                                                      string icon,
                                                      IGameObjectGenerator addGeometry = null)
        {
            Material  mat    = MaterialUtil.CreateTransparentImageMaterial(icon);
            HUDButton button = new HUDButton()
            {
                Shape = shape
            };

            button.Create(mat);
            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            HUDUtil.PlaceInSphere(button, fHUDRadius, fAngleHorz, fAngleVert);
            return(button);
        }
Ejemplo n.º 8
0
        public static HUDButton CreateMeshClickButton(
            Mesh mesh, Color color, float fMeshScale, Quaternion meshRotation,
            HUDSurface hudSurf, float dx, float dy,
            IGameObjectGenerator addGeometry = null)
        {
            Material mat = (color.a < 1.0f) ?
                           MaterialUtil.CreateTransparentMaterial(color, color.a) :
                           MaterialUtil.CreateStandardMaterial(color);

            HUDButton button = new HUDButton();

            button.Create(mesh, mat, fMeshScale, meshRotation);

            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            hudSurf.Place(button, dx, dy);
            return(button);
        }
Ejemplo n.º 9
0
        public static HUDButton CreateMeshClickButton(
            Mesh mesh, Color color, float fMeshScale, Quaternion meshRotation,
            float fHUDRadius, float fAngleHorz, float fAngleVert,
            IGameObjectGenerator addGeometry = null)
        {
            Material mat = (color.a < 1.0f) ?
                           MaterialUtil.CreateTransparentMaterial(color, color.a) :
                           MaterialUtil.CreateStandardMaterial(color);

            HUDButton button = new HUDButton();

            button.Create(mesh, mat, fMeshScale, meshRotation);

            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            HUDUtil.PlaceInSphere(button, fHUDRadius, fAngleHorz, fAngleVert);
            return(button);
        }
Ejemplo n.º 10
0
        public static HUDButton CreateGeometryIconClickButton(HUDShape shape,
                                                              float fHUDRadius, float fAngleHorz, float fAngleVert,
                                                              Color bgColor,
                                                              IGameObjectGenerator addGeometry = null)
        {
            Material mat = (bgColor.a == 1.0f) ?
                           MaterialUtil.CreateStandardMaterial(bgColor) : MaterialUtil.CreateTransparentMaterial(bgColor);
            HUDButton button = new HUDButton()
            {
                Shape = shape
            };

            button.Create(mat);
            if (addGeometry != null)
            {
                button.AddVisualElements(addGeometry.Generate(), true);
            }
            HUDUtil.PlaceInSphere(button, fHUDRadius, fAngleHorz, fAngleVert);
            return(button);
        }
Ejemplo n.º 11
0
        void AddMenuButtonsGroup(Cockpit cockpit)
        {
            HUDButton importButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                //0.1f, 0.05f, 0.7f, 5.0f, -5.0f,       // for debugging
                "icons/import_v1");

            importButton.Name = "import";
            cockpit.AddUIElement(importButton, true);
            importButton.OnClicked += (s, e) => {
                var cp = new FileImportCockpit()
                {
                    InitialPath = SceneGraphConfig.LastFileOpenPath
                };
                cockpit.Context.PushCockpit(cp);
            };

            HUDButton exportButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                //0.1f, 0.05f, 0.7f, 5.0f, -5.0f,       // for debugging convenience
                "icons/export_v1");

            UnityUtil.TranslateInFrame(exportButton.RootGameObject, 0, -0.055f, 0, CoordSpace.WorldCoords);
            exportButton.Name = "export";
            cockpit.AddUIElement(exportButton, true);
            exportButton.OnClicked += (s, e) => {
                var cp = new FileExportCockpit()
                {
                    InitialPath = SceneGraphConfig.LastFileOpenPath
                };
                cockpit.Context.PushCockpit(cp);
            };


            HUDButton janusButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                //0.1f, 0.05f, 0.7f, 5.0f, -5.0f,       // for debugging convenience
                "cockpit_icons/menu_buttons/janus_v1");

            UnityUtil.TranslateInFrame(janusButton.RootGameObject, 0, 2.0f * -0.055f, 0, CoordSpace.WorldCoords);
            janusButton.Name = "export";
            cockpit.AddUIElement(janusButton, true);
            janusButton.OnClicked += (s, e) => {
                var cp = new JanusVRExportCockpit()
                {
                    InitialPath = SceneGraphConfig.LastFileOpenPath
                };
                cockpit.Context.PushCockpit(cp);
            };


            HUDButton loadButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                // 0.1f, 0.05f, 0.7f, 5.0f, -5.0f,       // for debugging convenience
                "icons/load_v1");

            UnityUtil.TranslateInFrame(loadButton.RootGameObject, 0.12f, 0, 0, CoordSpace.WorldCoords);
            loadButton.Name = "load";
            cockpit.AddUIElement(loadButton, true);
            loadButton.OnClicked += (s, e) => {
                var cp = new FileLoadSceneCockpit()
                {
                    InitialPath = SceneGraphConfig.LastFileOpenPath
                };
                cockpit.Context.PushCockpit(cp);
            };

            HUDButton saveButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                // 0.1f, 0.05f, 0.7f, 5.0f, -5.0f,       // for debugging
                "icons/save_v1");

            UnityUtil.TranslateInFrame(saveButton.RootGameObject, 0.12f, -0.055f, 0, CoordSpace.WorldCoords);
            saveButton.Name = "save";
            cockpit.AddUIElement(saveButton, true);
            saveButton.OnClicked += (s, e) => {
                var cp = new FileSaveSceneCockpit()
                {
                    InitialPath = SceneGraphConfig.LastFileOpenPath
                };
                cockpit.Context.PushCockpit(cp);
            };



            HUDButton newButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                "icons/new_v1");

            UnityUtil.TranslateInFrame(newButton.RootGameObject, 0.24f, 0, 0, CoordSpace.WorldCoords);
            newButton.Name = "new";
            cockpit.AddUIElement(newButton, true);
            newButton.OnClicked += (s, e) => {
                cockpit.Context.NewScene(true);
            };


            HUDButton quitButton = HUDBuilder.CreateRectIconClickButton(
                0.1f, 0.05f, 0.7f, 55.0f, -50.0f,
                "icons/quit_v1");

            UnityUtil.TranslateInFrame(quitButton.RootGameObject, 0.24f, -0.055f, 0, CoordSpace.WorldCoords);
            quitButton.Name = "quit";
            cockpit.AddUIElement(quitButton, true);
            quitButton.OnClicked += (s, e) => { FPlatform.QuitApplication(); };
        }
Ejemplo n.º 12
0
        public void Initialize(Cockpit cockpit, float fCockpitRadius)
        {
            activeCockpit = cockpit;
            activeCockpit.PositionMode = Cockpit.MovementMode.Static;
            activeCockpit.GrabFocus    = true;
            activeHUDRadius            = fCockpitRadius;

            string[] files, folders;
            try {
                files   = Source.GetFiles(FolderPath);
                folders = Source.GetFolders(FolderPath);
            } catch (Exception e) {
                Debug.Log("[CurrentFolderList.Initialize] exception! " + e.Message);
                return;
            }

            float fMinHorz = -45.0f, fMaxHorz = 45.0f;
            float fStartVert = 15.0f;
            float fTop       = HUDUtil.GetSphereFrame(fCockpitRadius, 0.0f, fStartVert).Origin.y;

            int folderi = 0, filei = 0;

            Mesh  folderMesh              = Resources.Load <Mesh>("icon_meshes/folder_v1");
            Color folderColor             = ColorUtil.make(241, 213, 146);
            Color inaccessibleFolderColor = ColorUtil.make(100, 100, 100);
            Mesh  fileMesh                = Resources.Load <Mesh>("icon_meshes/file_v1");
            Color fileColor               = ColorUtil.make(250, 250, 250);

            // [TODO] something wrong here, icons are loading backwards...??
            Quaternion meshRotation =
                Quaternion.AngleAxis(270.0f, Vector3.right) *
                Quaternion.AngleAxis(180.0f + 25.0f, Vector3.forward);
            float meshScale = IconSize * 0.9f;

            HUDCylinder hudSurf = new HUDCylinder()
            {
                Radius = fCockpitRadius, VerticalCoordIsAngle = false
            };
            float fStepH     = VRUtil.HorizontalStepAngle(fCockpitRadius, 0, IconSize + IconPadding);
            int   nStepsHorz = (int)((fMaxHorz - fMinHorz) / fStepH);

            fMinHorz = -(nStepsHorz * fStepH * 0.5f);
            fMaxHorz = (nStepsHorz * fStepH * 0.5f);
            float fStepV = IconSize + IconPadding;


            IconCollection = new HUDCollection();
            IconCollection.Create();

            bool bDone = false;
            int  yi    = 0;

            while (!bDone)
            {
                float fCurV = fTop - yi * fStepV;
                yi++;

                for (int xi = 0; xi < nStepsHorz && bDone == false; ++xi)
                {
                    float fCurH = fMinHorz + ((float)xi + 0.5f) * fStepH;

                    string name        = "x";
                    fMesh  useMesh     = null;
                    Color  useColor    = Color.white;
                    bool   bAccessible = true;
                    bool   bIsFile     = false;
                    if (folderi < folders.Length)
                    {
                        name     = folders[folderi++];
                        useMesh  = new fMesh(UnityEngine.Object.Instantiate <Mesh>(folderMesh));
                        useColor = folderColor;
                        if (Source.FilterInaccessibleFolders == false &&
                            FileSystemUtils.CanAccessFolder(Path.Combine(FolderPath, name)) == false)
                        {
                            bAccessible = false;
                            useColor    = inaccessibleFolderColor;
                        }
                    }
                    else if (filei < files.Length)
                    {
                        name     = files[filei++];
                        useMesh  = new fMesh(UnityEngine.Object.Instantiate <Mesh>(fileMesh));
                        useColor = fileColor;
                        bIsFile  = true;
                    }
                    else
                    {
                        bDone = true;
                        break;
                    }
                    //useColor.a = 0.999f;        // [RMS] can use this to force into alpha pass

                    string displayName = name;
                    if (displayName.Length > 12)
                    {
                        displayName = name.Substring(0, 12) + "...";
                    }

                    //float TextScale = 0.01f, ShiftX = -IconSize * 0.5f;
                    float TextScale = 0.005f, ShiftX = -IconSize * 0.5f;

                    HUDButton iconButton = HUDBuilder.CreateMeshClickButton(
                        useMesh, useColor, meshScale, meshRotation,
                        hudSurf, fCurH, fCurV,
                        new TextLabelGenerator()
                    {
                        Text = displayName, Scale = TextScale, Translate = new Vector3(ShiftX, 0.0f, 0.0f)
                    });
                    iconButton.Name = name;
                    //cockpit.AddUIElement(iconButton, true);
                    IconCollection.AddChild(iconButton);

                    if (bIsFile)
                    {
                        iconButton.OnClicked += (o, e) => {
                            if (this.OnFileClicked != null)
                            {
                                this.OnFileClicked(name);
                            }
                        };
                    }

                    if (bAccessible)
                    {
                        iconButton.OnDoubleClicked += IconButton_DoubleClick;
                    }
                }
            }

            cockpit.AddUIElement(IconCollection, true);
            fCurMaxScroll = Mathf.Max(0, (yi - 4) * fStepV);
        }
Ejemplo n.º 13
0
 public void Begin(HUDButton button)
 {
     this.button = button;
     StartCoroutine(Animate(button));
 }
Ejemplo n.º 14
0
        public void Initialize(Cockpit cockpit)
        {
            cockpit.Name = "splashCockpit";
            cockpit.DefaultCursorDepth = 3.0f;
            cockpit.PositionMode       = Cockpit.MovementMode.Static;

            // create black sphere around camera to hide existing scene
            fGameObject blackBackground = new fGameObject(
                UnityUtil.CreateMeshGO("background_delete", "icon_meshes/inverted_sphere_tiny", 1.0f,
                                       UnityUtil.MeshAlignOption.AllAxesCentered, MaterialUtil.CreateFlatMaterial(Color.black), false));

            // add as bounds object to do mouse hit-test
            cockpit.Context.Scene.AddWorldBoundsObject(blackBackground);

            // re-parent from Scene so the sphere tracks the camera
            cockpit.FixedCameraTrackingGO.AddChild(blackBackground, false);

            HUDButton title = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 2.0f, 0.8f),
                3.0f, 0.0f, 2.5f, "simplex_startup/simplex_v2");

            title.Name    = "title";
            title.Enabled = false;
            cockpit.AddUIElement(title, true);

            HUDButton start = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.5f, 0.25f),
                3.0f, 8.0f, -10, "simplex_startup/start_v1");

            start.Name       = "start";
            start.OnClicked += (s, e) => {
                cockpit.ActiveCamera.Animator().DoActionDuringDipToBlack(() => {
                    cockpit.Context.Scene.RemoveWorldBoundsObject(blackBackground);
                    UnityEngine.GameObject.Destroy(blackBackground);
                    cockpit.Context.PushCockpit(
                        new SetupCADCockpit_V1());
                }, 1.0f);
            };
            cockpit.AddUIElement(start, true);

            HUDButton quit = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.5f, 0.25f),
                3.0f, -8.0f, -10, "simplex_startup/quit_v1");

            quit.Name       = "quit";
            quit.OnClicked += (s, e) => {
                FPlatform.QuitApplication();
            };
            cockpit.AddUIElement(quit, true);

            HUDButton logo = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.8f, 0.2f),
                3.0f, 0.0f, -25.0f, "simplex_startup/gradientspace_splash");

            logo.Name    = "logo";
            logo.Enabled = false;
            cockpit.AddUIElement(logo, true);



            HUDButton about_arrow = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.75f, 0.75f),
                3.0f, -30.0f, -10.0f, "simplex_startup/about_arrow");

            about_arrow.Name    = "about_arrow";
            about_arrow.Enabled = false;
            cockpit.AddUIElement(about_arrow, true);


            float     about_text_scale = 3.0f;
            float     angle_left       = -65.0f;
            HUDButton about_text       = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle,
                             0.8f * about_text_scale, 1.0f * about_text_scale)
            {
                UseUVSubRegion = false
            },
                3.0f, angle_left, 0.0f, "simplex_startup/about_text");

            UnityUtil.TranslateInFrame(about_text.RootGameObject, 0.0f, -0.5f, 0, CoordSpace.WorldCoords);
            about_text.Name    = "about_text";
            about_text.Enabled = false;
            cockpit.AddUIElement(about_text, true);



            HUDButton controls_arrow = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.75f, 0.75f),
                3.0f, 30.0f, -10.0f, "simplex_startup/controls_arrow");

            controls_arrow.Name    = "controls_arrow";
            controls_arrow.Enabled = false;
            cockpit.AddUIElement(controls_arrow, true);



            float     text_scale     = 3.0f;
            float     angle_right    = 65.0f;
            HUDButton controls_mouse = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.7f * text_scale, 0.7f * text_scale)
            {
                UseUVSubRegion = false
            },
                3.0f, angle_right, 0.0f, "simplex_startup/controls_mouse");

            UnityUtil.TranslateInFrame(controls_mouse.RootGameObject, 0.25f, 0.1f, 0, CoordSpace.WorldCoords);
            controls_mouse.Name    = "controls_mouse";
            controls_mouse.Enabled = false;
            cockpit.AddUIElement(controls_mouse, true);

            HUDButton controls_gamepad = HUDBuilder.CreateIconClickButton(
                new HUDShape(HUDShapeType.Rectangle, 0.7f * text_scale, 0.7f * text_scale)
            {
                UseUVSubRegion = false
            },
                3.0f, angle_right, 0.0f, "simplex_startup/controls_gamepad");

            UnityUtil.TranslateInFrame(controls_gamepad.RootGameObject, 0.25f, 0.1f, 0, CoordSpace.WorldCoords);
            controls_gamepad.Name    = "controls_gamepad";
            controls_gamepad.Enabled = false;
            cockpit.AddUIElement(controls_gamepad, true);
            controls_gamepad.RootGameObject.Hide();



            HUDToggleButton mouse_button = HUDBuilder.CreateToggleButton(
                new HUDShape(HUDShapeType.Rectangle, 1.0f, 1.0f),
                2.9f, angle_right, 0.0f, "simplex_startup/mouse", "simplex_startup/mouse_disabled");

            UnityUtil.TranslateInFrame(mouse_button.RootGameObject, -0.5f, -1.0f, 0, CoordSpace.WorldCoords);
            mouse_button.Name = "mouse_button";
            cockpit.AddUIElement(mouse_button, true);

            HUDToggleButton gamepad_button = HUDBuilder.CreateToggleButton(
                new HUDShape(HUDShapeType.Rectangle, 1.0f, 1.0f),
                2.9f, angle_right, 0.0f, "simplex_startup/gamepad_with_labels", "simplex_startup/gamepad_disabled");

            UnityUtil.TranslateInFrame(gamepad_button.RootGameObject, 0.5f, -1.0f, 0, CoordSpace.WorldCoords);
            gamepad_button.Name = "gamepad_button";
            cockpit.AddUIElement(gamepad_button, true);


            HUDToggleGroup group = new HUDToggleGroup();

            group.AddButton(mouse_button);
            group.AddButton(gamepad_button);
            group.Selected   = 0;
            group.OnToggled += (sender, nSelected) => {
                if (nSelected == 0)
                {
                    controls_gamepad.RootGameObject.Hide();
                    controls_mouse.RootGameObject.Show();
                }
                else
                {
                    controls_gamepad.RootGameObject.Show();
                    controls_mouse.RootGameObject.Hide();
                }
            };



            // setup key handlers (need to move to behavior...)
            cockpit.AddKeyHandler(new SplashScreenKeyHandler(cockpit.Context));

            cockpit.InputBehaviors.Add(new VRMouseUIBehavior(cockpit.Context)
            {
                Priority = 0
            });
            cockpit.InputBehaviors.Add(new VRGamepadUIBehavior(cockpit.Context)
            {
                Priority = 0
            });
            cockpit.InputBehaviors.Add(new VRSpatialDeviceUIBehavior(cockpit.Context)
            {
                Priority = 0
            });
        }