]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
Add checkbox for toggle walking (#20926)
authorKeiku <41867291+Keikiru@users.noreply.github.com>
Wed, 18 Oct 2023 20:59:00 +0000 (22:59 +0200)
committerGitHub <noreply@github.com>
Wed, 18 Oct 2023 20:59:00 +0000 (13:59 -0700)
Co-authored-by: onoira <onoira@psiko.zone>
LGTM!

Content.Client/Options/UI/Tabs/KeyRebindTab.xaml.cs
Content.Shared/CCVar/CCVars.cs
Resources/Locale/en-US/escape-menu/ui/options-menu.ftl

index 188fe7740cc6d9cb090a9dfeb8170f7d6c4f1d1c..c68e7f3af95ee2d1832217fbcc169a7676610b3f 100644 (file)
@@ -1,5 +1,6 @@
 using System.Numerics;
 using Content.Client.Stylesheets;
+using Content.Shared.CCVar;
 using Content.Shared.Input;
 using Robust.Client.AutoGenerated;
 using Robust.Client.Input;
@@ -41,6 +42,61 @@ namespace Content.Client.Options.UI.Tabs
             _cfg.SaveToFile();
         }
 
+        private void InitToggleWalk()
+        {
+            if (_cfg.GetCVar(CCVars.ToggleWalk))
+            {
+                ToggleFunctions.Add(EngineKeyFunctions.Walk);
+            }
+            else
+            {
+                ToggleFunctions.Remove(EngineKeyFunctions.Walk);
+            }
+        }
+
+        private void HandleToggleWalk(BaseButton.ButtonToggledEventArgs args)
+        {
+            _cfg.SetCVar(CCVars.ToggleWalk, args.Pressed);
+            _cfg.SaveToFile();
+            InitToggleWalk();
+
+            if (!_keyControls.TryGetValue(EngineKeyFunctions.Walk, out var keyControl))
+            {
+                return;
+            }
+
+            var bindingType = args.Pressed ? KeyBindingType.Toggle : KeyBindingType.State;
+            for (var i = 0; i <= 1; i++)
+            {
+                var binding = (i == 0 ? keyControl.BindButton1 : keyControl.BindButton2).Binding;
+                if (binding == null)
+                {
+                    continue;
+                }
+
+                var registration = new KeyBindingRegistration
+                {
+                    Function = EngineKeyFunctions.Walk,
+                    BaseKey = binding.BaseKey,
+                    Mod1 = binding.Mod1,
+                    Mod2 = binding.Mod2,
+                    Mod3 = binding.Mod3,
+                    Priority = binding.Priority,
+                    Type = bindingType,
+                    CanFocus = binding.CanFocus,
+                    CanRepeat = binding.CanRepeat,
+                };
+
+                _deferCommands.Add(() =>
+                {
+                    _inputManager.RemoveBinding(binding);
+                    _inputManager.RegisterBinding(registration);
+                });
+            }
+
+            _deferCommands.Add(_inputManager.SaveToUserData);
+        }
+
         public KeyRebindTab()
         {
             IoCManager.InjectDependencies(this);
@@ -98,6 +154,8 @@ namespace Content.Client.Options.UI.Tabs
             AddButton(EngineKeyFunctions.MoveDown);
             AddButton(EngineKeyFunctions.MoveRight);
             AddButton(EngineKeyFunctions.Walk);
+            AddCheckBox("ui-options-hotkey-toggle-walk", _cfg.GetCVar(CCVars.ToggleWalk), HandleToggleWalk);
+            InitToggleWalk();
 
             AddHeader("ui-options-header-camera");
             AddButton(EngineKeyFunctions.CameraRotateLeft);
index 0cf374fe4dea801bd3cf094f51055d6730225276..eb74a4994f5836f6ad69dddff5fa7fa79300ba19 100644 (file)
@@ -1617,6 +1617,12 @@ namespace Content.Shared.CCVar
         public static readonly CVarDef<float> DragDropDeadZone =
             CVarDef.Create("control.drag_dead_zone", 12f, CVar.CLIENTONLY | CVar.ARCHIVE);
 
+        /// <summary>
+        /// Toggles whether the walking key is a toggle or a held key.
+        /// </summary>
+        public static readonly CVarDef<bool> ToggleWalk =
+            CVarDef.Create("control.toggle_walk", false, CVar.CLIENTONLY | CVar.ARCHIVE);
+
         /*
          * UPDATE
          */
index 10db378ab42af742e40871af8f6c8f0d6a9e5ccb..97d1da949b00c8580ce1f21b38aa80dc11d42647 100644 (file)
@@ -82,6 +82,7 @@ ui-options-header-dev = Development
 ui-options-header-general = General
 
 ui-options-hotkey-keymap = Use US QWERTY Keys
+ui-options-hotkey-toggle-walk = Toggle Walk
 
 ui-options-function-move-up = Move Up
 ui-options-function-move-left = Move Left