Beispiel #1
0
        static void ShowLanguageDropdown(DropDownButtonWidget dropdown, IEnumerable <string> languages)
        {
            Func <string, ScrollItemWidget, ScrollItemWidget> setupItem = (o, itemTemplate) =>
            {
                var item = ScrollItemWidget.Setup(itemTemplate,
                                                  () => Game.Settings.Graphics.Language == o,
                                                  () => Game.Settings.Graphics.Language = o);

                item.Get <LabelWidget>("LABEL").GetText = () => FieldLoader.Translate(o);
                return(item);
            };

            dropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 500, languages, setupItem);
        }
Beispiel #2
0
        Action InitDisplayPanel(Widget panel)
        {
            var ds = Game.Settings.Graphics;
            var gs = Game.Settings.Game;

            BindCheckboxPref(panel, "HARDWARECURSORS_CHECKBOX", ds, "HardwareCursors");
            BindCheckboxPref(panel, "PIXELDOUBLE_CHECKBOX", ds, "PixelDouble");
            BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
            BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
            BindCheckboxPref(panel, "SHOW_SHELLMAP", gs, "ShowShellmap");
            BindCheckboxPref(panel, "ALWAYS_SHOW_STATUS_BARS_CHECKBOX", gs, "AlwaysShowStatusBars");
            BindCheckboxPref(panel, "TEAM_HEALTH_COLORS_CHECKBOX", gs, "TeamHealthColors");

            var languageDropDownButton = panel.Get <DropDownButtonWidget>("LANGUAGE_DROPDOWNBUTTON");

            languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton);
            languageDropDownButton.GetText     = () => FieldLoader.Translate(ds.Language);

            var windowModeDropdown = panel.Get <DropDownButtonWidget>("MODE_DROPDOWN");

            windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, ds);
            windowModeDropdown.GetText     = () => ds.Mode == WindowMode.Windowed ?
                                             "Windowed" : ds.Mode == WindowMode.Fullscreen ? "Fullscreen" : "Pseudo-Fullscreen";

            // Update zoom immediately
            var pixelDoubleCheckbox = panel.Get <CheckboxWidget>("PIXELDOUBLE_CHECKBOX");
            var pixelDoubleOnClick  = pixelDoubleCheckbox.OnClick;

            pixelDoubleCheckbox.OnClick = () =>
            {
                pixelDoubleOnClick();
                worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1;
            };

            // Cursor doubling is only supported with software cursors and when pixel doubling is enabled
            var cursorDoubleCheckbox = panel.Get <CheckboxWidget>("CURSORDOUBLE_CHECKBOX");

            cursorDoubleCheckbox.IsDisabled = () => !ds.PixelDouble || Game.Cursor is HardwareCursor;

            var cursorDoubleIsChecked = cursorDoubleCheckbox.IsChecked;

            cursorDoubleCheckbox.IsChecked = () => !cursorDoubleCheckbox.IsDisabled() && cursorDoubleIsChecked();

            panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed;
            var windowWidth = panel.Get <TextFieldWidget>("WINDOW_WIDTH");

            windowWidth.Text = ds.WindowedSize.X.ToString();

            var windowHeight = panel.Get <TextFieldWidget>("WINDOW_HEIGHT");

            windowHeight.Text = ds.WindowedSize.Y.ToString();

            var frameLimitTextfield = panel.Get <TextFieldWidget>("FRAME_LIMIT_TEXTFIELD");

            frameLimitTextfield.Text        = ds.MaxFramerate.ToString();
            frameLimitTextfield.OnLoseFocus = () =>
            {
                int fps;
                Exts.TryParseIntegerInvariant(frameLimitTextfield.Text, out fps);
                ds.MaxFramerate          = fps.Clamp(1, 1000);
                frameLimitTextfield.Text = ds.MaxFramerate.ToString();
            };
            frameLimitTextfield.OnEnterKey = () => { frameLimitTextfield.YieldKeyboardFocus(); return(true); };
            frameLimitTextfield.IsDisabled = () => !ds.CapFramerate;

            // Player profile
            var ps = Game.Settings.Player;

            var nameTextfield = panel.Get <TextFieldWidget>("PLAYERNAME");

            nameTextfield.Text        = ps.Name;
            nameTextfield.OnEnterKey  = () => { nameTextfield.YieldKeyboardFocus(); return(true); };
            nameTextfield.OnLoseFocus = () => { ps.Name = nameTextfield.Text; };

            var colorPreview = panel.Get <ColorPreviewManagerWidget>("COLOR_MANAGER");

            colorPreview.Color = ps.Color;

            var colorDropdown = panel.Get <DropDownButtonWidget>("PLAYERCOLOR");

            colorDropdown.OnMouseDown = _ => ColorPickerLogic.ShowColorDropDown(colorDropdown, colorPreview, worldRenderer.World);
            colorDropdown.Get <ColorBlockWidget>("COLORBLOCK").GetColor = () => ps.Color.RGB;

            return(() =>
            {
                int x, y;
                Exts.TryParseIntegerInvariant(windowWidth.Text, out x);
                Exts.TryParseIntegerInvariant(windowHeight.Text, out y);
                ds.WindowedSize = new int2(x, y);
                frameLimitTextfield.YieldKeyboardFocus();
                nameTextfield.YieldKeyboardFocus();
            });
        }
Beispiel #3
0
        Action InitDisplayPanel(Widget panel)
        {
            var ds = Game.Settings.Graphics;
            var gs = Game.Settings.Game;

            BindCheckboxPref(panel, "HARDWARECURSORS_CHECKBOX", ds, "HardwareCursors");
            BindCheckboxPref(panel, "PIXELDOUBLE_CHECKBOX", ds, "PixelDouble");
            BindCheckboxPref(panel, "CURSORDOUBLE_CHECKBOX", ds, "CursorDouble");
            BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
            BindCheckboxPref(panel, "DISPLAY_TARGET_LINES_CHECKBOX", gs, "DrawTargetLine");
            BindCheckboxPref(panel, "PLAYER_STANCE_COLORS_CHECKBOX", gs, "UsePlayerStanceColors");

            var languageDropDownButton = panel.Get <DropDownButtonWidget>("LANGUAGE_DROPDOWNBUTTON");

            languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton, modData.Languages);
            languageDropDownButton.GetText     = () => FieldLoader.Translate(ds.Language);

            var windowModeDropdown = panel.Get <DropDownButtonWidget>("MODE_DROPDOWN");

            windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, ds);
            windowModeDropdown.GetText     = () => ds.Mode == WindowMode.Windowed ?
                                             "Windowed" : ds.Mode == WindowMode.Fullscreen ? "Fullscreen (Legacy)" : "Fullscreen";

            var statusBarsDropDown = panel.Get <DropDownButtonWidget>("STATUS_BAR_DROPDOWN");

            statusBarsDropDown.OnMouseDown = _ => ShowStatusBarsDropdown(statusBarsDropDown, gs);
            statusBarsDropDown.GetText     = () => gs.StatusBars.ToString() == "Standard" ?
                                             "Standard" : gs.StatusBars.ToString() == "DamageShow" ? "Show On Damage" : "Always Show";

            // Update zoom immediately
            var pixelDoubleCheckbox = panel.Get <CheckboxWidget>("PIXELDOUBLE_CHECKBOX");
            var pixelDoubleOnClick  = pixelDoubleCheckbox.OnClick;

            pixelDoubleCheckbox.OnClick = () =>
            {
                pixelDoubleOnClick();
                worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1;
            };

            // Cursor doubling is only supported with software cursors and when pixel doubling is enabled
            var cursorDoubleCheckbox = panel.Get <CheckboxWidget>("CURSORDOUBLE_CHECKBOX");

            cursorDoubleCheckbox.IsDisabled = () => !ds.PixelDouble || Game.Cursor is HardwareCursor;

            var cursorDoubleIsChecked = cursorDoubleCheckbox.IsChecked;

            cursorDoubleCheckbox.IsChecked = () => !cursorDoubleCheckbox.IsDisabled() && cursorDoubleIsChecked();

            panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed;
            var windowWidth = panel.Get <TextFieldWidget>("WINDOW_WIDTH");

            windowWidth.Text = ds.WindowedSize.X.ToString();

            var windowHeight = panel.Get <TextFieldWidget>("WINDOW_HEIGHT");

            windowHeight.Text = ds.WindowedSize.Y.ToString();

            var frameLimitTextfield = panel.Get <TextFieldWidget>("FRAME_LIMIT_TEXTFIELD");

            frameLimitTextfield.Text = ds.MaxFramerate.ToString();
            var escPressed = false;

            frameLimitTextfield.OnLoseFocus = () =>
            {
                if (escPressed)
                {
                    escPressed = false;
                    return;
                }

                int fps;
                Exts.TryParseIntegerInvariant(frameLimitTextfield.Text, out fps);
                ds.MaxFramerate          = fps.Clamp(1, 1000);
                frameLimitTextfield.Text = ds.MaxFramerate.ToString();
            };

            frameLimitTextfield.OnEnterKey = () => { frameLimitTextfield.YieldKeyboardFocus(); return(true); };
            frameLimitTextfield.OnEscKey   = () =>
            {
                frameLimitTextfield.Text = ds.MaxFramerate.ToString();
                escPressed = true;
                frameLimitTextfield.YieldKeyboardFocus();
                return(true);
            };

            frameLimitTextfield.IsDisabled = () => !ds.CapFramerate;

            // Player profile
            var ps = Game.Settings.Player;

            var nameTextfield = panel.Get <TextFieldWidget>("PLAYERNAME");

            nameTextfield.IsDisabled  = () => worldRenderer.World.Type != WorldType.Shellmap;
            nameTextfield.Text        = Settings.SanitizedPlayerName(ps.Name);
            nameTextfield.OnLoseFocus = () =>
            {
                if (escPressed)
                {
                    escPressed = false;
                    return;
                }

                nameTextfield.Text = nameTextfield.Text.Trim();
                if (nameTextfield.Text.Length == 0)
                {
                    nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
                }
                else
                {
                    nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
                    ps.Name            = nameTextfield.Text;
                }
            };

            nameTextfield.OnEnterKey = () => { nameTextfield.YieldKeyboardFocus(); return(true); };
            nameTextfield.OnEscKey   = () =>
            {
                nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
                escPressed         = true;
                nameTextfield.YieldKeyboardFocus();
                return(true);
            };

            var colorPreview = panel.Get <ColorPreviewManagerWidget>("COLOR_MANAGER");

            colorPreview.Color = ps.Color;

            var colorDropdown = panel.Get <DropDownButtonWidget>("PLAYERCOLOR");

            colorDropdown.IsDisabled  = () => worldRenderer.World.Type != WorldType.Shellmap;
            colorDropdown.OnMouseDown = _ => ColorPickerLogic.ShowColorDropDown(colorDropdown, colorPreview, worldRenderer.World);
            colorDropdown.Get <ColorBlockWidget>("COLORBLOCK").GetColor = () => ps.Color.RGB;

            return(() =>
            {
                int x, y;
                Exts.TryParseIntegerInvariant(windowWidth.Text, out x);
                Exts.TryParseIntegerInvariant(windowHeight.Text, out y);
                ds.WindowedSize = new int2(x, y);
                frameLimitTextfield.YieldKeyboardFocus();
                nameTextfield.YieldKeyboardFocus();
            });
        }
Beispiel #4
0
        Action InitDisplayPanel(Widget panel)
        {
            var ds = Game.Settings.Graphics;
            var gs = Game.Settings.Game;

            BindCheckboxPref(panel, "PIXELDOUBLE_CHECKBOX", ds, "PixelDouble");
            BindCheckboxPref(panel, "FRAME_LIMIT_CHECKBOX", ds, "CapFramerate");
            BindCheckboxPref(panel, "SHOW_SHELLMAP", gs, "ShowShellmap");
            BindCheckboxPref(panel, "ALWAYS_SHOW_STATUS_BARS_CHECKBOX", gs, "AlwaysShowStatusBars");
            BindCheckboxPref(panel, "TEAM_HEALTH_COLORS_CHECKBOX", gs, "TeamHealthColors");

            var languageDropDownButton = panel.Get <DropDownButtonWidget>("LANGUAGE_DROPDOWNBUTTON");

            languageDropDownButton.OnMouseDown = _ => ShowLanguageDropdown(languageDropDownButton);
            languageDropDownButton.GetText     = () => FieldLoader.Translate(ds.Language);

            var windowModeDropdown = panel.Get <DropDownButtonWidget>("MODE_DROPDOWN");

            windowModeDropdown.OnMouseDown = _ => ShowWindowModeDropdown(windowModeDropdown, ds);
            windowModeDropdown.GetText     = () => ds.Mode == WindowMode.Windowed ?
                                             "Windowed" : ds.Mode == WindowMode.Fullscreen ? "Fullscreen" : "Pseudo-Fullscreen";

            // Update zoom immediately
            var pixelDoubleCheckbox = panel.Get <CheckboxWidget>("PIXELDOUBLE_CHECKBOX");
            var oldOnClick          = pixelDoubleCheckbox.OnClick;

            pixelDoubleCheckbox.OnClick = () =>
            {
                oldOnClick();
                worldRenderer.Viewport.Zoom = ds.PixelDouble ? 2 : 1;
            };

            panel.Get("WINDOW_RESOLUTION").IsVisible = () => ds.Mode == WindowMode.Windowed;
            var windowWidth = panel.Get <TextFieldWidget>("WINDOW_WIDTH");

            windowWidth.Text = ds.WindowedSize.X.ToString();

            var windowHeight = panel.Get <TextFieldWidget>("WINDOW_HEIGHT");

            windowHeight.Text = ds.WindowedSize.Y.ToString();

            var frameLimitTextfield = panel.Get <TextFieldWidget>("FRAME_LIMIT_TEXTFIELD");

            frameLimitTextfield.Text        = ds.MaxFramerate.ToString();
            frameLimitTextfield.OnLoseFocus = () =>
            {
                int fps;
                int.TryParse(frameLimitTextfield.Text, out fps);
                ds.MaxFramerate          = fps.Clamp(20, 200);
                frameLimitTextfield.Text = ds.MaxFramerate.ToString();
            };
            frameLimitTextfield.OnEnterKey = () => { frameLimitTextfield.YieldKeyboardFocus(); return(true); };
            frameLimitTextfield.IsDisabled = () => !ds.CapFramerate;

            return(() =>
            {
                int x, y;
                int.TryParse(windowWidth.Text, out x);
                int.TryParse(windowHeight.Text, out y);
                ds.WindowedSize = new int2(x, y);
                frameLimitTextfield.YieldKeyboardFocus();
            });
        }