public override void RecreateControls(bool constructor)
        {
            base.RecreateControls(constructor);

            AddCaption(MySpaceTexts.ScreenCaptionGameOptions);

            var leftAlign = MyGuiDrawAlignEnum.HORISONTAL_LEFT_AND_VERTICAL_CENTER;
            var rightAlign = MyGuiDrawAlignEnum.HORISONTAL_RIGHT_AND_VERTICAL_CENTER;
            Vector2 controlsOriginLeft = new Vector2(-m_size.Value.X / 2.0f + 0.025f, -m_size.Value.Y / 2.0f + 0.125f);
            Vector2 controlsOriginRight = new Vector2(m_size.Value.X / 2.0f - 0.025f, -m_size.Value.Y / 2.0f + 0.125f);
            Vector2 controlsDelta = new Vector2(0, 0.0525f);
            float rowIndex = 0;

            //  Language
            var languageLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.Language))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign,
            };
            m_languageCombobox = new MyGuiControlCombobox()
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };

            foreach (var languageId in MyLanguage.SupportedLanguages)
            {
                var description = MyTexts.Languages[languageId];
                var name = description.Name;
                if (description.IsCommunityLocalized)
                    name += " *";
                m_languageCombobox.AddItem(languageId, name);
            }
            m_languageCombobox.CustomSortItems((a, b) => a.Key.CompareTo(b.Key));
            m_languageCombobox.ItemSelected += m_languageCombobox_ItemSelected;

            rowIndex += 0.65f;
            m_localizationWebButton = new MyGuiControlButton(
               position: controlsOriginRight + rowIndex * controlsDelta,
               text: MyTexts.Get(MySpaceTexts.ScreenOptionsGame_MoreInfo),
               textScale: MyGuiConstants.DEFAULT_TEXT_SCALE * 0.85f * 0.85f,
               onButtonClick: LocalizationWebButtonClicked,
               implementedFeature: true,
               originAlign: rightAlign);
            m_localizationWebButton.VisualStyle = MyGuiControlButtonStyleEnum.ClickableText;
            var tmp = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ScreenOptionsGame_MoreInfo), textScale: MyGuiConstants.DEFAULT_TEXT_SCALE * 0.85f * 0.85f);
            m_localizationWarningLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ScreenOptionsGame_LocalizationWarning), textScale: MyGuiConstants.DEFAULT_TEXT_SCALE * 0.85f * 0.85f)
            {
                Position = controlsOriginRight + rowIndex * controlsDelta - new Vector2(tmp.Size.X + 0.005f, 0),
                OriginAlign = rightAlign,
            };
            rowIndex += 0.8f;

            var buildingModeLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ScreenOptionsGame_BuildingMode))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign,
            };
            m_buildingModeCombobox = new MyGuiControlCombobox()
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            m_buildingModeCombobox.AddItem((int)MyCubeBuilder.BuildingModeEnum.SingleBlock, MySpaceTexts.ScreenOptionsGame_SingleBlock);
            m_buildingModeCombobox.AddItem((int)MyCubeBuilder.BuildingModeEnum.Line, MySpaceTexts.ScreenOptionsGame_Line);
            m_buildingModeCombobox.AddItem((int)MyCubeBuilder.BuildingModeEnum.Plane, MySpaceTexts.ScreenOptionsGame_Plane);
            m_buildingModeCombobox.ItemSelected += m_buildingModeCombobox_ItemSelected;

            //  Notifications
            rowIndex++;
            var controlHintsLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ShowControlsHints))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            m_controlHintsCheckbox = new MyGuiControlCheckbox(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsShowControlsHints))
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            m_controlHintsCheckbox.IsCheckedChanged += checkboxChanged;

            //  Rotation gizmo
            MyGuiControlLabel rotationHintsLabel = null;
            if (MyFakes.ENABLE_ROTATION_HINTS)
            {
                rowIndex++;
                rotationHintsLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ShowRotationHints))
                {
                    Position = controlsOriginLeft + rowIndex * controlsDelta,
                    OriginAlign = leftAlign
                };
                m_rotationHintsCheckbox = new MyGuiControlCheckbox(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsShowRotationHints))
                {
                    Position = controlsOriginRight + rowIndex * controlsDelta,
                    OriginAlign = rightAlign,
                };
                m_rotationHintsCheckbox.IsCheckedChanged += checkboxChanged;
            }

            //  Show crosshair?
            rowIndex++;
            var crosshairLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ShowCrosshair))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            m_crosshairCheckbox = new MyGuiControlCheckbox(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsShowCrosshair))
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            m_crosshairCheckbox.IsCheckedChanged += checkboxChanged;

            //  Headbob
            rowIndex++;
            var headbobLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.Headbob))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            m_disableHeadbobCheckbox = new MyGuiControlCheckbox(toolTip: MyTexts.GetString(MySpaceTexts.Headbob))
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            m_disableHeadbobCheckbox.IsCheckedChanged += checkboxChanged;

            //  Compress save games checkbox
            rowIndex++;
            var compressSavesLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.CompressSaveGames))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            m_compressSavesCheckbox = new MyGuiControlCheckbox(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsCompressSaveGames))
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            m_compressSavesCheckbox.IsCheckedChanged += checkboxChanged;

            rowIndex++;
            var showPlayerNamesOnHudLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ScreenOptionsGame_ShowPlayerNames))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            m_showPlayerNamesCheckbox = new MyGuiControlCheckbox(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsShowPlayerNames))
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            m_showPlayerNamesCheckbox.IsCheckedChanged += checkboxChanged;

            rowIndex++;
			var UIOpacityLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ScreenOptionsGame_UIOpacity))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            rowIndex++;
			m_UIOpacitySlider = new MyGuiControlSlider(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsUIOpacity), minValue: 0.1f, maxValue: 1.0f, defaultValue: 1.0f)
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            

            rowIndex++;
			var UIBkOpacityLabel = new MyGuiControlLabel(text: MyTexts.GetString(MySpaceTexts.ScreenOptionsGame_UIBkOpacity))
            {
                Position = controlsOriginLeft + rowIndex * controlsDelta,
                OriginAlign = leftAlign
            };
            rowIndex++;
			m_UIBkOpacitySlider = new MyGuiControlSlider(toolTip: MyTexts.GetString(MySpaceTexts.ToolTipGameOptionsUIBkOpacity), minValue: 0, maxValue: 1.0f, defaultValue: 1.0f)
            {
                Position = controlsOriginRight + rowIndex * controlsDelta,
                OriginAlign = rightAlign,
            };
            

            //  Buttons OK and CANCEL
            var buttonOk = new MyGuiControlButton(text: MyTexts.Get(MySpaceTexts.Ok), onButtonClick: OnOkClick);
            var buttonCancel = new MyGuiControlButton(text: MyTexts.Get(MySpaceTexts.Cancel), onButtonClick: OnCancelClick);
            float buttonX = 0.01f;
            float buttonY = m_size.Value.Y / 2.0f - (buttonOk.Size.Y + 0.03f);
            buttonOk.Position = new Vector2(-buttonX, buttonY);
            buttonOk.OriginAlign = rightAlign;
            buttonCancel.Position = new Vector2(buttonX, buttonY);
            buttonCancel.OriginAlign = leftAlign;

            Controls.Add(languageLabel);
            Controls.Add(m_languageCombobox);
            Controls.Add(m_localizationWebButton);
            Controls.Add(m_localizationWarningLabel);
            Controls.Add(buildingModeLabel);
            Controls.Add(m_buildingModeCombobox);
            Controls.Add(controlHintsLabel);
            if (rotationHintsLabel != null)
                Controls.Add(rotationHintsLabel);
            Controls.Add(m_controlHintsCheckbox);
            if (m_rotationHintsCheckbox != null)
                Controls.Add(m_rotationHintsCheckbox);
            Controls.Add(crosshairLabel);
            Controls.Add(m_crosshairCheckbox);
            Controls.Add(headbobLabel);
            Controls.Add(m_disableHeadbobCheckbox);
            Controls.Add(compressSavesLabel);
            Controls.Add(m_compressSavesCheckbox);
            Controls.Add(showPlayerNamesOnHudLabel);
            Controls.Add(m_showPlayerNamesCheckbox);
            Controls.Add(UIOpacityLabel);
            Controls.Add(m_UIOpacitySlider);
            Controls.Add(UIBkOpacityLabel);
            Controls.Add(m_UIBkOpacitySlider);
            Controls.Add(buttonOk);
            Controls.Add(buttonCancel);

            //  Update controls with values from config file
            UpdateControls(constructor);

            m_UIOpacitySlider.ValueChanged += sliderChanged;
            m_UIBkOpacitySlider.ValueChanged += sliderChanged;

            CloseButtonEnabled = true;
        }