Add checkbox for toggle walking (#20926)

Co-authored-by: onoira <onoira@psiko.zone>
LGTM!
This commit is contained in:
Keiku
2023-10-18 22:59:00 +02:00
committed by GitHub
parent 9741aaa5c1
commit 7b4ceb9d0c
3 changed files with 65 additions and 0 deletions

View 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);