mirror of
https://git.ryujinx.app/ryubing/ryujinx.git
synced 2025-04-21 18:13:14 +02:00

- paired devices have notifications that they are configured and require connection - paired devices load the configuration when connected - A notification appears when changing control configuration settings. - Now control settings will be saved only when they are changed - Added a button to roll back changes to the previously saved state - Fixed a bug: when switching the "player", if the "input device" and "controller type" settings were changed, the save dialog box did not appear. - "Motion", "Rumble" and "Led" also have events notifying about changes
95 lines
2.8 KiB
C#
95 lines
2.8 KiB
C#
using Avalonia.Svg.Skia;
|
|
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using Ryujinx.Ava.UI.Models.Input;
|
|
using Ryujinx.Ava.UI.Views.Input;
|
|
using Ryujinx.Common.Utilities;
|
|
using Ryujinx.UI.Views.Input;
|
|
using System.Drawing;
|
|
|
|
namespace Ryujinx.Ava.UI.ViewModels.Input
|
|
{
|
|
public partial class ControllerInputViewModel : BaseModel
|
|
{
|
|
[ObservableProperty] private GamepadInputConfig _config;
|
|
|
|
private bool _isLeft;
|
|
public bool IsLeft
|
|
{
|
|
get => _isLeft;
|
|
set
|
|
{
|
|
_isLeft = value;
|
|
OnPropertyChanged();
|
|
OnPropertyChanged(nameof(HasSides));
|
|
}
|
|
}
|
|
|
|
private bool _isRight;
|
|
public bool IsRight
|
|
{
|
|
get => _isRight;
|
|
set
|
|
{
|
|
_isRight = value;
|
|
OnPropertyChanged();
|
|
OnPropertyChanged(nameof(HasSides));
|
|
}
|
|
}
|
|
|
|
public bool HasSides => IsLeft ^ IsRight;
|
|
|
|
[ObservableProperty] private SvgImage _image;
|
|
|
|
public InputViewModel ParentModel { get; }
|
|
|
|
public ControllerInputViewModel(InputViewModel model, GamepadInputConfig config)
|
|
{
|
|
ParentModel = model;
|
|
model.NotifyChangesEvent += OnParentModelChanged;
|
|
OnParentModelChanged();
|
|
config.PropertyChanged += (_, args) =>
|
|
{
|
|
if (args.PropertyName is nameof(Config.UseRainbowLed))
|
|
{
|
|
if (Config is { UseRainbowLed: true, TurnOffLed: false, EnableLedChanging: true })
|
|
Rainbow.Updated += (ref Color color) => ParentModel.SelectedGamepad.SetLed((uint)color.ToArgb());
|
|
else
|
|
{
|
|
Rainbow.Reset();
|
|
|
|
if (Config.TurnOffLed)
|
|
ParentModel.SelectedGamepad.ClearLed();
|
|
else
|
|
ParentModel.SelectedGamepad.SetLed(Config.LedColor.ToUInt32());
|
|
}
|
|
}
|
|
};
|
|
Config = config;
|
|
}
|
|
|
|
public async void ShowMotionConfig()
|
|
{
|
|
await MotionInputView.Show(this);
|
|
ParentModel.IsModified = true;
|
|
}
|
|
|
|
public async void ShowRumbleConfig()
|
|
{
|
|
await RumbleInputView.Show(this);
|
|
ParentModel.IsModified = true;
|
|
}
|
|
|
|
public async void ShowLedConfig()
|
|
{
|
|
await LedInputView.Show(this);
|
|
ParentModel.IsModified = true;
|
|
}
|
|
|
|
public void OnParentModelChanged()
|
|
{
|
|
IsLeft = ParentModel.IsLeft;
|
|
IsRight = ParentModel.IsRight;
|
|
Image = ParentModel.Image;
|
|
}
|
|
}
|
|
}
|