Consolidate most logic into StickVisualizer.
This commit is contained in:
@@ -1,28 +1,11 @@
|
||||
using Avalonia.Svg.Skia;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using Ryujinx.Ava.UI.Models.Input;
|
||||
using Ryujinx.Input;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Ryujinx.Ava.UI.ViewModels.Input
|
||||
{
|
||||
public partial class KeyboardInputViewModel : BaseModel
|
||||
{
|
||||
private (float, float) _leftBuffer = (0, 0);
|
||||
private (float, float) _rightBuffer = (0, 0);
|
||||
private StickVisualizer _stickVisualizer;
|
||||
public StickVisualizer StickVisualizer
|
||||
{
|
||||
get => _stickVisualizer;
|
||||
set
|
||||
{
|
||||
_stickVisualizer = value;
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private KeyboardInputConfig _config;
|
||||
public KeyboardInputConfig Config
|
||||
{
|
||||
@@ -30,7 +13,18 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
||||
set
|
||||
{
|
||||
_config = value;
|
||||
StickVisualizer.UpdateConfig(_config);
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
private StickVisualizer _visualizer;
|
||||
public StickVisualizer Visualizer
|
||||
{
|
||||
get => _visualizer;
|
||||
set
|
||||
{
|
||||
_visualizer = value;
|
||||
|
||||
OnPropertyChanged();
|
||||
}
|
||||
@@ -66,70 +60,13 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
|
||||
|
||||
public readonly InputViewModel ParentModel;
|
||||
|
||||
public KeyboardInputViewModel(InputViewModel model, KeyboardInputConfig config)
|
||||
public KeyboardInputViewModel(InputViewModel model, KeyboardInputConfig config, StickVisualizer visualizer)
|
||||
{
|
||||
ParentModel = model;
|
||||
Visualizer = visualizer;
|
||||
model.NotifyChangesEvent += OnParentModelChanged;
|
||||
OnParentModelChanged();
|
||||
_stickVisualizer = new();
|
||||
Config = config;
|
||||
|
||||
StickVisualizer.PollToken = StickVisualizer.PollTokenSource.Token;
|
||||
|
||||
Task.Run(() => PollKeyboard(StickVisualizer.PollToken));
|
||||
}
|
||||
|
||||
private async Task PollKeyboard(CancellationToken token)
|
||||
{
|
||||
while (!token.IsCancellationRequested)
|
||||
{
|
||||
if (ParentModel.IsKeyboard)
|
||||
{
|
||||
IKeyboard keyboard = (IKeyboard)ParentModel.AvaloniaKeyboardDriver.GetGamepad("0");
|
||||
var snap = keyboard.GetKeyboardStateSnapshot();
|
||||
|
||||
if (snap.IsPressed((Key)Config.LeftStickRight))
|
||||
{
|
||||
_leftBuffer.Item1 += 1;
|
||||
}
|
||||
if (snap.IsPressed((Key)Config.LeftStickLeft))
|
||||
{
|
||||
_leftBuffer.Item1 -= 1;
|
||||
}
|
||||
if (snap.IsPressed((Key)Config.LeftStickUp))
|
||||
{
|
||||
_leftBuffer.Item2 += 1;
|
||||
}
|
||||
if (snap.IsPressed((Key)Config.LeftStickDown))
|
||||
{
|
||||
_leftBuffer.Item2 -= 1;
|
||||
}
|
||||
|
||||
if (snap.IsPressed((Key)Config.RightStickRight))
|
||||
{
|
||||
_rightBuffer.Item1 += 1;
|
||||
}
|
||||
if (snap.IsPressed((Key)Config.RightStickLeft))
|
||||
{
|
||||
_rightBuffer.Item1 -= 1;
|
||||
}
|
||||
if (snap.IsPressed((Key)Config.RightStickUp))
|
||||
{
|
||||
_rightBuffer.Item2 += 1;
|
||||
}
|
||||
if (snap.IsPressed((Key)Config.RightStickDown))
|
||||
{
|
||||
_rightBuffer.Item2 -= 1;
|
||||
}
|
||||
|
||||
StickVisualizer.UiStickLeft = _leftBuffer;
|
||||
StickVisualizer.UiStickRight = _rightBuffer;
|
||||
}
|
||||
|
||||
await Task.Delay(StickVisualizer.DrawStickPollRate, token);
|
||||
}
|
||||
|
||||
StickVisualizer.PollTokenSource.Dispose();
|
||||
}
|
||||
|
||||
public void OnParentModelChanged()
|
||||
|
||||
Reference in New Issue
Block a user