Skip to content

Commit 3e56c20

Browse files
committed
Add pedal effect graphics and fix pedal effects
1 parent 3d9d7c0 commit 3e56c20

12 files changed

Lines changed: 362 additions & 122 deletions

App.xaml.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@ public partial class App : Application
2323
public Logger Logger { get; private set; }
2424
public CloudService CloudService { get; private set; }
2525
public SettingsFile SettingsFile { get; private set; }
26+
public Graph Graph { get; private set; }
2627
public Pedals Pedals { get; private set; }
2728
public AdminBoxx AdminBoxx { get; private set; }
2829
public Debug Debug { get; private set; }
2930
public new MainWindow MainWindow { get; private set; }
30-
public Graph Graph { get; private set; }
3131
public RacingWheel RacingWheel { get; private set; }
3232
public ChatQueue ChatQueue { get; private set; }
3333
public AudioManager AudioManager { get; private set; }
@@ -54,11 +54,11 @@ public partial class App : Application
5454
Logger = new();
5555
CloudService = new();
5656
SettingsFile = new();
57+
Graph = new();
5758
Pedals = new();
5859
AdminBoxx = new();
5960
Debug = new();
6061
MainWindow = new();
61-
Graph = new();
6262
RacingWheel = new();
6363
ChatQueue = new();
6464
AudioManager = new();
@@ -90,8 +90,9 @@ private async void App_Startup( object sender, StartupEventArgs e )
9090
Logger.Initialize();
9191
CloudService.Initialize();
9292
SettingsFile.Initialize();
93-
AdminBoxx.Initialize();
9493
Graph.Initialize();
94+
Pedals.Initialize();
95+
AdminBoxx.Initialize();
9596
RacingWheel.Initialize();
9697
AudioManager.Initialize();
9798
DirectInput.Initialize();
@@ -752,6 +753,18 @@ private void OnInput( string deviceProductName, Guid deviceInstanceGuid, int but
752753
DataContext.DataContext.Instance.Settings.PedalsAmplitudeCurve -= 0.01f;
753754
}
754755

756+
// pedals noise damper
757+
758+
if ( CheckMappedButtons( DataContext.DataContext.Instance.Settings.PedalsNoiseDamperPlusButtonMappings, deviceInstanceGuid, buttonNumber ) )
759+
{
760+
DataContext.DataContext.Instance.Settings.PedalsNoiseDamper += 0.01f;
761+
}
762+
763+
if ( CheckMappedButtons( DataContext.DataContext.Instance.Settings.PedalsNoiseDamperMinusButtonMappings, deviceInstanceGuid, buttonNumber ) )
764+
{
765+
DataContext.DataContext.Instance.Settings.PedalsNoiseDamper -= 0.01f;
766+
}
767+
755768
// adminboxx brightness knob
756769

757770
if ( CheckMappedButtons( DataContext.DataContext.Instance.Settings.AdminBoxxBrightnessPlusButtonMappings, deviceInstanceGuid, buttonNumber ) )

Components/Graph.cs

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,14 @@ public class Graph
1313
{
1414
public enum LayerIndex
1515
{
16+
InputTorque,
17+
OutputTorque,
1618
InputTorque60Hz,
17-
InputTorque500Hz,
18-
InputLFE500Hz,
19-
OutputTorque500Hz,
20-
TimerJitter500Hz,
19+
InputLFE,
20+
ClutchPedalHaptics,
21+
BrakePedalHaptics,
22+
ThrottlePedalHaptics,
23+
TimerJitter,
2124
Count
2225
}
2326

@@ -80,11 +83,14 @@ public static void SetMairaComboBoxItemsSource( MairaComboBox mairaComboBox )
8083

8184
var dictionary = new Dictionary<LayerIndex, string>
8285
{
83-
{ LayerIndex.InputTorque60Hz, DataContext.DataContext.Instance.Localization[ "TorqueInput60Hz" ] },
84-
{ LayerIndex.InputTorque500Hz, DataContext.DataContext.Instance.Localization[ "TorqueInput500Hz" ] },
85-
{ LayerIndex.InputLFE500Hz, DataContext.DataContext.Instance.Localization[ "LFEInput500Hz" ] },
86-
{ LayerIndex.OutputTorque500Hz, DataContext.DataContext.Instance.Localization[ "TorqueOutput500Hz" ] },
87-
{ LayerIndex.TimerJitter500Hz, DataContext.DataContext.Instance.Localization[ "TimerJitter500Hz" ] }
86+
{ LayerIndex.InputTorque, DataContext.DataContext.Instance.Localization[ "InputTorque" ] },
87+
{ LayerIndex.OutputTorque, DataContext.DataContext.Instance.Localization[ "OutputTorque" ] },
88+
{ LayerIndex.InputTorque60Hz, DataContext.DataContext.Instance.Localization[ "InputTorque60hz" ] },
89+
{ LayerIndex.InputLFE, DataContext.DataContext.Instance.Localization[ "InputLFE" ] },
90+
{ LayerIndex.ClutchPedalHaptics, DataContext.DataContext.Instance.Localization[ "ClutchPedalHaptics" ] },
91+
{ LayerIndex.BrakePedalHaptics, DataContext.DataContext.Instance.Localization[ "BrakePedalHaptics" ] },
92+
{ LayerIndex.ThrottlePedalHaptics, DataContext.DataContext.Instance.Localization[ "ThrottlePedalHaptics" ] },
93+
{ LayerIndex.TimerJitter, DataContext.DataContext.Instance.Localization[ "TimerJitter" ] }
8894
};
8995

9096
mairaComboBox.ItemsSource = dictionary;
@@ -95,7 +101,7 @@ public static void SetMairaComboBoxItemsSource( MairaComboBox mairaComboBox )
95101
}
96102
else
97103
{
98-
mairaComboBox.SelectedValue = LayerIndex.OutputTorque500Hz;
104+
mairaComboBox.SelectedValue = LayerIndex.OutputTorque;
99105
}
100106

101107
app.Logger.WriteLine( "[Graph] <<< SetMairaComboBoxItemsSource" );
@@ -142,11 +148,14 @@ public void Update()
142148
{
143149
var showLayer = layerIndex switch
144150
{
145-
LayerIndex.InputTorque60Hz => settings.GraphTorqueInput60Hz,
146-
LayerIndex.InputTorque500Hz => settings.GraphTorqueInput500Hz,
147-
LayerIndex.InputLFE500Hz => settings.GraphLFEInput500Hz,
148-
LayerIndex.OutputTorque500Hz => settings.GraphTorqueOutput500Hz,
149-
LayerIndex.TimerJitter500Hz => settings.GraphTimerJitter500Hz,
151+
LayerIndex.InputTorque => settings.GraphInputTorque,
152+
LayerIndex.OutputTorque => settings.GraphOutputTorque,
153+
LayerIndex.InputTorque60Hz => settings.GraphInputTorque60Hz,
154+
LayerIndex.InputLFE => settings.GraphInputLFE,
155+
LayerIndex.ClutchPedalHaptics => settings.GraphClutchPedalHaptics,
156+
LayerIndex.BrakePedalHaptics => settings.GraphBrakePedalHaptics,
157+
LayerIndex.ThrottlePedalHaptics => settings.GraphThrottlePedalHaptics,
158+
LayerIndex.TimerJitter => settings.GraphTimerJitter,
150159
_ => false
151160
};
152161

@@ -248,3 +257,4 @@ private class Layer
248257
public float maxB;
249258
}
250259
}
260+

Components/MultimediaTimer.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public void Initialize()
5959
{
6060
app.Logger.WriteLine( "[MultimediaTimer] Initialize >>>" );
6161

62-
app.Graph.SetLayerColors( Graph.LayerIndex.TimerJitter500Hz, 0.25f, 1f, 0.25f, 1f, 0.25f, 0.25f );
62+
app.Graph.SetLayerColors( Graph.LayerIndex.TimerJitter, 0.25f, 1f, 0.25f, 1f, 0.25f, 0.25f );
6363

6464
_stopwatch.Start();
6565

@@ -163,13 +163,17 @@ private static void WorkerThread()
163163

164164
app.RacingWheel.Update( deltaMilliseconds );
165165

166+
// update pedals graph
167+
168+
app.Pedals.UpdateGraph();
169+
166170
// update jitter statistics and graph
167171

168172
var jitterMilliseconds = deltaMilliseconds - 2f;
169173

170174
var y = Math.Clamp( jitterMilliseconds / 2f, -1f, 1f );
171175

172-
app.Graph.UpdateLayer( Graph.LayerIndex.TimerJitter500Hz, jitterMilliseconds, y );
176+
app.Graph.UpdateLayer( Graph.LayerIndex.TimerJitter, jitterMilliseconds, y );
173177

174178
// update the graph
175179

Components/Pedals.cs

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,22 @@ public enum Effect
3232
private float _gearChangeAmplitude = 0f;
3333
private float _gearChangeTimer = 0f;
3434

35+
private readonly float[] _frequency = [ 0f, 0f, 0f ];
36+
private readonly float[] _amplitude = [ 0f, 0f, 0f ];
37+
private readonly float[] _cycles = [ 0f, 0f, 0f ];
38+
39+
public void Initialize()
40+
{
41+
var app = App.Instance;
42+
43+
if ( app != null )
44+
{
45+
app.Graph.SetLayerColors( Graph.LayerIndex.ClutchPedalHaptics, 0f, 0f, 0.5f, 0f, 0f, 1f );
46+
app.Graph.SetLayerColors( Graph.LayerIndex.BrakePedalHaptics, 0.5f, 0f, 0f, 1f, 0f, 0f );
47+
app.Graph.SetLayerColors( Graph.LayerIndex.ThrottlePedalHaptics, 0f, 0.5f, 0f, 0f, 1f, 0f );
48+
}
49+
}
50+
3551
public void Refresh()
3652
{
3753
var app = App.Instance;
@@ -87,6 +103,23 @@ public static void SetMairaComboBoxItemsSource( MairaComboBox mairaComboBox )
87103
}
88104
}
89105

106+
public void UpdateGraph()
107+
{
108+
var app = App.Instance;
109+
110+
if ( app != null )
111+
{
112+
for ( var i = 0; i < 3; i++ )
113+
{
114+
_cycles[ i ] += _frequency[ i ] * MathF.Tau / 500f;
115+
116+
var amplitude = MathF.Sin( _cycles[ i ] ) * _amplitude[ i ];
117+
118+
app.Graph.UpdateLayer( Graph.LayerIndex.ClutchPedalHaptics + i, amplitude, amplitude );
119+
}
120+
}
121+
}
122+
90123
public void Update( App app )
91124
{
92125
// update gear change effect timer
@@ -104,6 +137,18 @@ public void Update( App app )
104137
_hpr.VibratePedal( HPR.Channel.Brake, HPR.State.Off, 0, 0 );
105138
_hpr.VibratePedal( HPR.Channel.Throttle, HPR.State.Off, 0, 0 );
106139

140+
_frequency[ 0 ] = 0f;
141+
_frequency[ 1 ] = 0f;
142+
_frequency[ 2 ] = 0f;
143+
144+
_amplitude[ 0 ] = 0f;
145+
_amplitude[ 1 ] = 0f;
146+
_amplitude[ 2 ] = 0f;
147+
148+
_cycles[ 0 ] = 0f;
149+
_cycles[ 1 ] = 0f;
150+
_cycles[ 2 ] = 0f;
151+
107152
return;
108153
}
109154

@@ -122,13 +167,13 @@ public void Update( App app )
122167
{
123168
if ( app.Simulator.Gear == 0 )
124169
{
125-
_gearChangeFrequency = settings.PedalsShiftIntoNeutralFrequency;
170+
_gearChangeFrequency = Misc.Lerp( settings.PedalsMinimumFrequency, settings.PedalsMaximumFrequency, settings.PedalsShiftIntoNeutralFrequency );
126171
_gearChangeAmplitude = settings.PedalsShiftIntoNeutralAmplitude;
127172
_gearChangeTimer = settings.PedalsShiftIntoNeutralDuration;
128173
}
129174
else
130175
{
131-
_gearChangeFrequency = settings.PedalsShiftIntoGearFrequency;
176+
_gearChangeFrequency = Misc.Lerp( settings.PedalsMinimumFrequency, settings.PedalsMaximumFrequency, settings.PedalsShiftIntoGearFrequency );
132177
_gearChangeAmplitude = settings.PedalsShiftIntoGearAmplitude;
133178
_gearChangeTimer = settings.PedalsShiftIntoGearDuration;
134179
}
@@ -175,11 +220,22 @@ public void Update( App app )
175220

176221
if ( effectActive )
177222
{
223+
amplitude *= MathF.Pow( frequency / 50f, Misc.CurveToPower( settings.PedalsNoiseDamper ) );
224+
178225
_hpr.VibratePedal( (HPR.Channel) i, HPR.State.On, frequency, amplitude * 100f );
226+
227+
_frequency[ i ] = (int) ( Math.Clamp( frequency, 1f, 50f ) );
228+
_amplitude[ i ] = amplitude;
179229
}
180230
else
181231
{
182232
_hpr.VibratePedal( (HPR.Channel) i, HPR.State.Off, 0f, 0f );
233+
234+
app.Graph.UpdateLayer( Graph.LayerIndex.ClutchPedalHaptics + i, 0f, 0f );
235+
236+
_frequency[ i ] = 0f;
237+
_amplitude[ i ] = 0f;
238+
_cycles[ i ] = 0f;
183239
}
184240
}
185241
}

Components/RacingWheel.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ public void Initialize()
6969
app.Logger.WriteLine( "[RacingWheel] Initialize >>>" );
7070

7171
app.Graph.SetLayerColors( Graph.LayerIndex.InputTorque60Hz, 1f, 0f, 0f, 1f, 0f, 0f );
72-
app.Graph.SetLayerColors( Graph.LayerIndex.InputTorque500Hz, 1f, 0f, 1f, 1f, 0f, 1f );
73-
app.Graph.SetLayerColors( Graph.LayerIndex.InputLFE500Hz, 0.1f, 0.5f, 1f, 1f, 1f, 1f );
74-
app.Graph.SetLayerColors( Graph.LayerIndex.OutputTorque500Hz, 0f, 1f, 1f, 0f, 1f, 1f );
72+
app.Graph.SetLayerColors( Graph.LayerIndex.InputTorque, 1f, 0f, 1f, 1f, 0f, 1f );
73+
app.Graph.SetLayerColors( Graph.LayerIndex.InputLFE, 0.1f, 0.5f, 1f, 1f, 1f, 1f );
74+
app.Graph.SetLayerColors( Graph.LayerIndex.OutputTorque, 0f, 1f, 1f, 0f, 1f, 1f );
7575

7676
app.Logger.WriteLine( "[RacingWheel] <<< Initialize" );
7777
}
@@ -587,9 +587,9 @@ public void Update( float deltaMilliseconds )
587587
// update graph
588588

589589
app.Graph.UpdateLayer( Graph.LayerIndex.InputTorque60Hz, steeringWheelTorque60Hz, steeringWheelTorque60Hz / settings.RacingWheelMaxForce );
590-
app.Graph.UpdateLayer( Graph.LayerIndex.InputTorque500Hz, steeringWheelTorque500Hz, steeringWheelTorque500Hz / settings.RacingWheelMaxForce );
591-
app.Graph.UpdateLayer( Graph.LayerIndex.InputLFE500Hz, inputLFEMagnitude, inputLFEMagnitude );
592-
app.Graph.UpdateLayer( Graph.LayerIndex.OutputTorque500Hz, outputTorque, outputTorque );
590+
app.Graph.UpdateLayer( Graph.LayerIndex.InputTorque, steeringWheelTorque500Hz, steeringWheelTorque500Hz / settings.RacingWheelMaxForce );
591+
app.Graph.UpdateLayer( Graph.LayerIndex.InputLFE, inputLFEMagnitude, inputLFEMagnitude );
592+
app.Graph.UpdateLayer( Graph.LayerIndex.OutputTorque, outputTorque, outputTorque );
593593

594594
// update alan le dump
595595

DataContext/ContextSettings.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,5 @@ public class ContextSettings
6969
public float PedalsMinimumAmplitude { get; set; }
7070
public float PedalsMaximumAmplitude { get; set; }
7171
public float PedalsAmplitudeCurve { get; set; }
72+
public float PedalsNoiseDamper { get; set; }
7273
}

0 commit comments

Comments
 (0)