Polish the aesthetic and include deadzone visualization.

This commit is contained in:
MutantAura 2024-05-30 14:03:43 +01:00
parent 0682f6eea9
commit d01c67f7bf
2 changed files with 70 additions and 36 deletions

View file

@ -3,6 +3,7 @@ using Ryujinx.Ava.Input;
using Ryujinx.Ava.UI.Models.Input; using Ryujinx.Ava.UI.Models.Input;
using Ryujinx.Ava.UI.Views.Input; using Ryujinx.Ava.UI.Views.Input;
using Ryujinx.Input; using Ryujinx.Input;
using System;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -11,8 +12,8 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
public class ControllerInputViewModel : BaseModel public class ControllerInputViewModel : BaseModel
{ {
private const int StickUiPollMs = 50; // Milliseconds per poll. private const int StickUiPollMs = 50; // Milliseconds per poll.
private const float CanvasCenterOffset = 75f/2f; private const float CanvasCenterOffset = 47.5f;
private const int StickScaleFactor = 30; private const int StickScaleFactor = 45;
private IGamepad _selectedGamepad; private IGamepad _selectedGamepad;
@ -81,6 +82,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
OnPropertyChanged(); OnPropertyChanged();
OnPropertyChanged(nameof(UiStickRightX)); OnPropertyChanged(nameof(UiStickRightX));
OnPropertyChanged(nameof(UiStickRightY)); OnPropertyChanged(nameof(UiStickRightY));
OnPropertyChanged(nameof(UiDeadzoneRight));
} }
} }
@ -94,6 +96,7 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
OnPropertyChanged(); OnPropertyChanged();
OnPropertyChanged(nameof(UiStickLeftX)); OnPropertyChanged(nameof(UiStickLeftX));
OnPropertyChanged(nameof(UiStickLeftY)); OnPropertyChanged(nameof(UiStickLeftY));
OnPropertyChanged(nameof(UiDeadzoneLeft));
} }
} }
@ -104,6 +107,9 @@ namespace Ryujinx.Ava.UI.ViewModels.Input
public float UiStickRightX => UiStickRight.Item1 + CanvasCenterOffset; public float UiStickRightX => UiStickRight.Item1 + CanvasCenterOffset;
public float UiStickRightY => UiStickRight.Item2 + CanvasCenterOffset; public float UiStickRightY => UiStickRight.Item2 + CanvasCenterOffset;
public float UiDeadzoneLeft => Config.DeadzoneLeft * 95;
public float UiDeadzoneRight => Config.DeadzoneRight * 95;
public readonly InputViewModel ParentModel; public readonly InputViewModel ParentModel;
public ControllerInputViewModel(InputViewModel model, GamepadInputConfig config) public ControllerInputViewModel(InputViewModel model, GamepadInputConfig config)

View file

@ -333,56 +333,84 @@
BorderBrush="{DynamicResource ThemeControlBorderColor}" BorderBrush="{DynamicResource ThemeControlBorderColor}"
BorderThickness="1" BorderThickness="1"
CornerRadius="5" CornerRadius="5"
Height="100" Height="105"
Width="100"> Width="105">
<Canvas <Canvas
Background="{DynamicResource ThemeBackgroundColor}" Background="{DynamicResource ThemeBackgroundColor}"
Height="100" Height="100"
Width="100"> Width="100">
<Ellipse <Grid
Fill="Gray" Height="100"
Stroke="Blue" Width="100"
StrokeThickness="1" Background="{DynamicResource ThemeBackgroundColor}">
Width="25" <Grid.ColumnDefinitions>
Height="25" <ColumnDefinition Width="*" />
Canvas.Bottom="{Binding UiStickLeftY}" </Grid.ColumnDefinitions>
Canvas.Left="{Binding UiStickLeftX}" /> <Ellipse
Grid.Column="1"
HorizontalAlignment="Center"
Stroke="Black"
StrokeThickness="1"
Width="100"
Height="100"
Canvas.Bottom="2"
Canvas.Left="2" />
<Ellipse
Grid.Column="1"
HorizontalAlignment="Center"
Fill="Gray"
Opacity="100"
Height="{Binding UiDeadzoneLeft}"
Width="{Binding UiDeadzoneLeft}"/>
</Grid>
<Ellipse <Ellipse
Stroke="Black" Fill="Red"
StrokeThickness="1" Width="5"
StrokeDashOffset="2" Height="5"
Width="96" Canvas.Bottom="{Binding UiStickLeftY}"
Height="96" Canvas.Left="{Binding UiStickLeftX}" />
Canvas.Bottom="2"
Canvas.Left="2" />
</Canvas> </Canvas>
</Border> </Border>
<Border <Border
BorderBrush="{DynamicResource ThemeControlBorderColor}" BorderBrush="{DynamicResource ThemeControlBorderColor}"
BorderThickness="1" BorderThickness="1"
CornerRadius="5" CornerRadius="5"
Height="100" Height="105"
Width="100"> Width="105">
<Canvas <Canvas
Background="{DynamicResource ThemeBackgroundColor}" Background="{DynamicResource ThemeBackgroundColor}"
Height="100" Height="100"
Width="100"> Width="100">
<Ellipse <Grid
Fill="Gray" Height="100"
Stroke="Blue" Width="100"
StrokeThickness="1" Background="{DynamicResource ThemeBackgroundColor}">
Width="25" <Grid.ColumnDefinitions>
Height="25" <ColumnDefinition Width="*" />
Canvas.Bottom="{Binding UiStickRightY}" </Grid.ColumnDefinitions>
Canvas.Left="{Binding UiStickRightX}"/> <Ellipse
Grid.Column="1"
HorizontalAlignment="Center"
Stroke="Black"
StrokeThickness="1"
Width="100"
Height="100"
Canvas.Bottom="2"
Canvas.Left="2" />
<Ellipse
Grid.Column="1"
HorizontalAlignment="Center"
Fill="Gray"
Opacity="100"
Height="{Binding UiDeadzoneRight}"
Width="{Binding UiDeadzoneRight}"/>
</Grid>
<Ellipse <Ellipse
Stroke="Black" Fill="Red"
StrokeThickness="1" Width="5"
StrokeDashOffset="2" Height="5"
Width="96" Canvas.Bottom="{Binding UiStickRightY}"
Height="96" Canvas.Left="{Binding UiStickRightX}" />
Canvas.Bottom="2"
Canvas.Left="2" />
</Canvas> </Canvas>
</Border> </Border>
</StackPanel> </StackPanel>