@@ -9,29 +9,29 @@ void DoTelemetry(STelemetryData* pTelemetry)
9
9
{
10
10
TCHAR szText[MAX_CONTROLTEXT];
11
11
static int nRaceNumber = 0 ; // Number of attempts
12
- static BOOL bAddFinalColumns = FALSE ; // Append some statistics after the end of each race
13
-
14
- // Static variables for storing values for the statistical data:
15
- static Nat32 uTopSpeed = 0 ; // Top speed per race
16
- static int nNbGearchanges = 0 ; // Number of gear changes per race
17
- static int nNbBrakesUsed = 0 ; // Number of braking operations per race
18
- static int nNbRumbles = 0 ; // Number of rumbles per race
19
- static BOOL bIsRumbling = FALSE ; // Are we rumbling right now?
20
- static Nat32 uFullspeedTime = 0 ; // Total time at full throttle
12
+ static BOOL bAddFinalColumns = FALSE ; // Append some stats after the end of each race
13
+
14
+ // Static variables for storing values for the statistics:
15
+ static Nat32 uTopSpeed = 0 ; // Top speed per race
16
+ static int nNbGearchanges = 0 ; // Number of gear changes per race
17
+ static int nNbBrakesUsed = 0 ; // Number of braking operations per race
18
+ static Nat32 uMaxNbCheckpoints = 0 ; // Highest number of CPs per game client
19
+ static int nNbRumbles = 0 ; // Number of rumbles per race
20
+ static BOOL bIsRumbling = FALSE ; // Are we rumbling right now?
21
+ static Nat32 uFullspeedTime = 0 ; // Total time at full throttle
21
22
static Nat32 uFullspeedTimestamp = 0 ; // Full throttle timestamp
22
- static BOOL bIsFullspeed = FALSE ; // Are we going full throttle right now?
23
- static Nat32 uWheelSlipTime = 0 ; // Total time of wheel slippage
23
+ static BOOL bIsFullspeed = FALSE ; // Are we going full throttle right now?
24
+ static Nat32 uWheelSlipTime = 0 ; // Total time of wheel slippage
24
25
static Nat32 uWheelSlipTimestamp = 0 ; // Wheel slip timestamp
25
- static BOOL bIsSlipping = FALSE ; // Is a wheel slipping right now?
26
- static Nat32 uMaxNbCheckpoints = 0 ; // Highest number of CPs per game client
26
+ static BOOL bIsSlipping = FALSE ; // Is a wheel slipping right now?
27
27
28
28
// Test for updated telemetry data records
29
29
if (pTelemetry->Current .UpdateNumber == pTelemetry->Previous .UpdateNumber )
30
30
return ;
31
31
32
32
pTelemetry->Previous .UpdateNumber = pTelemetry->Current .UpdateNumber ;
33
33
34
- // STelemetry header version; will be displayed in the About box
34
+ // STelemetry header version; will be displayed in the about box
35
35
if (pTelemetry->Current .Header .Version != uHeaderVersion)
36
36
uHeaderVersion = pTelemetry->Current .Header .Version ;
37
37
@@ -67,10 +67,9 @@ void DoTelemetry(STelemetryData* pTelemetry)
67
67
SendMessage (hwndTBSteering, TBM_CLEARSEL, (WPARAM)TRUE , 0 );
68
68
SendMessage (hwndTBSteering, TBM_SETPOS, (WPARAM)TRUE , 0 );
69
69
}
70
- if (hwndPBThrottle != NULL )
71
- SendMessage (hwndPBThrottle, PBM_SETPOS, 0 , 0 );
72
- if (hwndPBRumble != NULL )
73
- SendMessage (hwndPBRumble, PBM_SETPOS, 0 , 0 );
70
+
71
+ if (hwndPBThrottle != NULL ) SendMessage (hwndPBThrottle, PBM_SETPOS, 0 , 0 );
72
+ if (hwndPBRumble != NULL ) SendMessage (hwndPBRumble, PBM_SETPOS, 0 , 0 );
74
73
75
74
return ; // Nothing to monitor
76
75
@@ -96,23 +95,26 @@ void DoTelemetry(STelemetryData* pTelemetry)
96
95
// Race state
97
96
if (pTelemetry->Current .Race .State != pTelemetry->Previous .Race .State )
98
97
{
99
- // Handle the start of a race (Race state changes from "BeforeState" to "Running")
98
+ // Handle the start of a race (race state changes from "BeforeState" to "Running")
100
99
if (pTelemetry->Previous .Race .State == STelemetry::ERaceState_BeforeState &&
101
100
pTelemetry->Current .Race .State == STelemetry::ERaceState_Running)
102
101
{
103
102
uTopSpeed = 0 ;
104
103
nNbGearchanges = 0 ;
105
104
nNbBrakesUsed = 0 ;
105
+ uMaxNbCheckpoints = 0 ;
106
+
106
107
bIsRumbling = pTelemetry->Current .Vehicle .RumbleIntensity > uRumbleThreshold / 100 .0f ;
107
108
nNbRumbles = bIsRumbling ? 1 : 0 ;
108
- bIsFullspeed = pTelemetry-> Current . Vehicle . InputGasPedal >= uFullspeedThreshold / 100 . 0f ;
109
+
109
110
uFullspeedTime = 0 ;
110
111
uFullspeedTimestamp = pTelemetry->Current .Vehicle .Timestamp ;
111
- bIsSlipping = pTelemetry->Current .Vehicle .WheelsIsSliping [ 0 ] || pTelemetry-> Current . Vehicle . WheelsIsSliping [ 1 ] ||
112
- pTelemetry-> Current . Vehicle . WheelsIsSliping [ 2 ] || pTelemetry-> Current . Vehicle . WheelsIsSliping [ 3 ];
112
+ bIsFullspeed = pTelemetry->Current .Vehicle .InputGasPedal >= uFullspeedThreshold / 100 . 0f ;
113
+
113
114
uWheelSlipTime = 0 ;
114
115
uWheelSlipTimestamp = pTelemetry->Current .Vehicle .Timestamp ;
115
- uMaxNbCheckpoints = 0 ;
116
+ bIsSlipping = pTelemetry->Current .Vehicle .WheelsIsSliping [0 ] || pTelemetry->Current .Vehicle .WheelsIsSliping [1 ] ||
117
+ pTelemetry->Current .Vehicle .WheelsIsSliping [2 ] || pTelemetry->Current .Vehicle .WheelsIsSliping [3 ];
116
118
117
119
// Add a new race to the list-view control and increment the number of attempts
118
120
if (ListView_AddRace (hwndListView, nRaceNumber + 1 , COLUMN_AUTOFIT) != -1 )
@@ -124,25 +126,30 @@ void DoTelemetry(STelemetryData* pTelemetry)
124
126
MultiByteToWideChar (CP_UTF8, 0 , pTelemetry->Current .Game .MapId , -1 , szText, _countof (szText));
125
127
ListView_AddRaceText (hwndListView, nRaceNumber, COLUMN_AUTOFIT, szMapIdentifier, szText);
126
128
}
129
+
127
130
if (dwColumns & COL_MAPNAME)
128
131
{
129
132
MultiByteToWideChar (CP_UTF8, 0 , pTelemetry->Current .Game .MapName , -1 , szText, _countof (szText));
130
133
ListView_AddRaceText (hwndListView, nRaceNumber, COLUMN_AUTOFIT, szTrackName, szText);
131
134
}
135
+
132
136
if (dwColumns & COL_PLAYERMODEL)
133
137
{
134
138
MultiByteToWideChar (CP_UTF8, 0 , pTelemetry->Current .Game .GameplayVariant , -1 , szText, _countof (szText));
135
139
ListView_AddRaceText (hwndListView, nRaceNumber, COLUMN_AUTOFIT, szPlayerModel, szText);
136
140
}
141
+
137
142
if (dwColumns & (COL_DATE | COL_TIME))
138
143
{
139
144
SYSTEMTIME st;
140
145
GetLocalTime (&st);
146
+
141
147
if (dwColumns & COL_DATE)
142
148
{
143
149
_sntprintf (szText, _countof (szText), TEXT (" %02u-%02u-%02u" ), st.wYear , st.wMonth , st.wDay );
144
150
ListView_AddRaceText (hwndListView, nRaceNumber, COLUMN_AUTOFIT, szDate, szText);
145
151
}
152
+
146
153
if (dwColumns & COL_TIME)
147
154
{
148
155
_sntprintf (szText, _countof (szText), TEXT (" %02u:%02u:%02u" ), st.wHour , st.wMinute , st.wSecond );
@@ -151,7 +158,7 @@ void DoTelemetry(STelemetryData* pTelemetry)
151
158
}
152
159
}
153
160
154
- // Handle the end of a race (Race state changes from "Running" to "Finished" or "BeforeStart")
161
+ // Handle the end of a race (race state changes from "Running" to "Finished" or "BeforeStart")
155
162
if (pTelemetry->Previous .Race .State == STelemetry::ERaceState_Running &&
156
163
(pTelemetry->Current .Race .State == STelemetry::ERaceState_Finished ||
157
164
pTelemetry->Current .Race .State == STelemetry::ERaceState_BeforeState))
@@ -163,6 +170,7 @@ void DoTelemetry(STelemetryData* pTelemetry)
163
170
164
171
if (bIsFullspeed)
165
172
uFullspeedTime += pTelemetry->Current .Vehicle .Timestamp - uFullspeedTimestamp;
173
+
166
174
if (bIsSlipping)
167
175
uWheelSlipTime += pTelemetry->Current .Vehicle .Timestamp - uWheelSlipTimestamp;
168
176
}
@@ -175,15 +183,19 @@ void DoTelemetry(STelemetryData* pTelemetry)
175
183
case STelemetry::ERaceState_BeforeState:
176
184
StatusBar_SetText (hwndStatusBar, SBP_RACESTATE, szRaceBeforeStart);
177
185
break ;
186
+
178
187
case STelemetry::ERaceState_Running:
179
188
StatusBar_SetText (hwndStatusBar, SBP_RACESTATE, szRaceRunning);
180
189
break ;
190
+
181
191
case STelemetry::ERaceState_Finished:
182
192
StatusBar_SetText (hwndStatusBar, SBP_RACESTATE, szRaceFinished);
183
193
break ;
184
- // case STelemetry::ERaceState_Eliminated:
185
- // StatusBar_SetText(hwndStatusBar, SBP_RACESTATE, szRaceEliminated);
186
- // break;
194
+
195
+ // case STelemetry::ERaceState_Eliminated:
196
+ // StatusBar_SetText(hwndStatusBar, SBP_RACESTATE, szRaceEliminated);
197
+ // break;
198
+
187
199
default :
188
200
StatusBar_SetText (hwndStatusBar, SBP_RACESTATE, TEXT (" " ));
189
201
}
@@ -269,15 +281,15 @@ void DoTelemetry(STelemetryData* pTelemetry)
269
281
{
270
282
Nat32 uCurrentSpeedMeter = pTelemetry->Current .Vehicle .SpeedMeter ;
271
283
284
+ if (uCurrentSpeedMeter > uTopSpeed)
285
+ uTopSpeed = uCurrentSpeedMeter;
286
+
272
287
if (bMilesPerHour)
273
288
_sntprintf (szText, _countof (szText), szSpeedMph, MulDiv (uCurrentSpeedMeter, 1000000 , 1609344 ));
274
289
else
275
290
_sntprintf (szText, _countof (szText), szSpeedKmh, uCurrentSpeedMeter);
276
291
StatusBar_SetText (hwndStatusBar, SBP_SPEEDMETER, szText, TRUE );
277
292
278
- if (uCurrentSpeedMeter > uTopSpeed)
279
- uTopSpeed = uCurrentSpeedMeter;
280
-
281
293
pTelemetry->Previous .Vehicle .SpeedMeter = uCurrentSpeedMeter;
282
294
}
283
295
@@ -293,11 +305,11 @@ void DoTelemetry(STelemetryData* pTelemetry)
293
305
// Gear
294
306
if (pTelemetry->Current .Vehicle .EngineCurGear != pTelemetry->Previous .Vehicle .EngineCurGear )
295
307
{
308
+ nNbGearchanges++;
309
+
296
310
_sntprintf (szText, _countof (szText), szEngineCurGear, pTelemetry->Current .Vehicle .EngineCurGear );
297
311
StatusBar_SetText (hwndStatusBar, SBP_CURGEAR, szText, TRUE );
298
312
299
- nNbGearchanges++;
300
-
301
313
pTelemetry->Previous .Vehicle .EngineCurGear = pTelemetry->Current .Vehicle .EngineCurGear ;
302
314
}
303
315
@@ -327,16 +339,8 @@ void DoTelemetry(STelemetryData* pTelemetry)
327
339
{
328
340
float fCurrentInputGasPedal = pTelemetry->Current .Vehicle .InputGasPedal ;
329
341
330
- if (hwndPBThrottle != NULL )
331
- SendMessage (hwndPBThrottle, PBM_SETPOS, (WPARAM)((fCurrentInputGasPedal * 100.0 ) + 0.5 ), 0 );
332
- else
333
- {
334
- _sntprintf (szText, _countof (szText), szGasPedal, fCurrentInputGasPedal * 100.0 );
335
- StatusBar_SetText (hwndStatusBar, SBP_THROTTLE, szText, TRUE );
336
- }
337
-
338
- // Determine full throttle percentage per race. The default threshold of 0.85 does
339
- // not take into account releasing the throttle during shifting (powershifting)
342
+ // Determine full throttle percentage per race. The default threshold
343
+ // of 0.85 compensates that the game throttles down during shifting.
340
344
if (fCurrentInputGasPedal >= uFullspeedThreshold / 100 .0f )
341
345
{
342
346
if (!bIsFullspeed)
@@ -354,6 +358,14 @@ void DoTelemetry(STelemetryData* pTelemetry)
354
358
}
355
359
}
356
360
361
+ if (hwndPBThrottle != NULL )
362
+ SendMessage (hwndPBThrottle, PBM_SETPOS, (WPARAM)((fCurrentInputGasPedal * 100.0 ) + 0.5 ), 0 );
363
+ else
364
+ {
365
+ _sntprintf (szText, _countof (szText), szGasPedal, fCurrentInputGasPedal * 100.0 );
366
+ StatusBar_SetText (hwndStatusBar, SBP_THROTTLE, szText, TRUE );
367
+ }
368
+
357
369
pTelemetry->Previous .Vehicle .InputGasPedal = fCurrentInputGasPedal ;
358
370
}
359
371
@@ -389,14 +401,6 @@ void DoTelemetry(STelemetryData* pTelemetry)
389
401
{
390
402
float fCurrentRumbleIntensity = pTelemetry->Current .Vehicle .RumbleIntensity ;
391
403
392
- if (hwndPBRumble != NULL )
393
- SendMessage (hwndPBRumble, PBM_SETPOS, (WPARAM)((fCurrentRumbleIntensity * 100.0 ) + 0.5 ), 0 );
394
- else
395
- {
396
- _sntprintf (szText, _countof (szText), szRumbleIntensity, fCurrentRumbleIntensity * 100.0 );
397
- StatusBar_SetText (hwndStatusBar, SBP_RUMBLE, szText, TRUE );
398
- }
399
-
400
404
// Determine number of rumbles per race
401
405
if (fCurrentRumbleIntensity > uRumbleThreshold / 100 .0f )
402
406
{
@@ -412,6 +416,14 @@ void DoTelemetry(STelemetryData* pTelemetry)
412
416
bIsRumbling = FALSE ;
413
417
}
414
418
419
+ if (hwndPBRumble != NULL )
420
+ SendMessage (hwndPBRumble, PBM_SETPOS, (WPARAM)((fCurrentRumbleIntensity * 100.0 ) + 0.5 ), 0 );
421
+ else
422
+ {
423
+ _sntprintf (szText, _countof (szText), szRumbleIntensity, fCurrentRumbleIntensity * 100.0 );
424
+ StatusBar_SetText (hwndStatusBar, SBP_RUMBLE, szText, TRUE );
425
+ }
426
+
415
427
pTelemetry->Previous .Vehicle .RumbleIntensity = fCurrentRumbleIntensity ;
416
428
}
417
429
@@ -433,7 +445,7 @@ void DoTelemetry(STelemetryData* pTelemetry)
433
445
// Map UID
434
446
if (strcmp (pTelemetry->Current .Game .MapId , pTelemetry->Previous .Game .MapId ) != 0 )
435
447
{
436
- // Clear all races after map changes
448
+ // Clear all races after map change
437
449
if (strcmp (pTelemetry->Current .Game .MapId , " Unassigned" ) != 0 )
438
450
if (ListView_DeleteAllRaces (hwndListView))
439
451
nRaceNumber = 0 ;
@@ -487,27 +499,29 @@ void DoTelemetry(STelemetryData* pTelemetry)
487
499
// after program start and at the start of each game session
488
500
void InitTelemetryData (STelemetryData* pTelemetry)
489
501
{
490
- if (pTelemetry != NULL )
491
- {
492
- // As a precaution, set all member variables to zero
493
- memset (&pTelemetry->Previous , 0 , sizeof (pTelemetry->Previous ));
494
-
495
- // Set all variables that can be zero at startup to a different value
496
- pTelemetry->Previous .Game .State = (STelemetry::EGameState) - 1 ;
497
- pTelemetry->Previous .Race .State = (STelemetry::ERaceState) - 1 ;
498
- pTelemetry->Previous .Race .Time = (Nat32)-2 ; // -1 is a regular value
499
- pTelemetry->Previous .Race .NbRespawns = (Nat32)-2 ; // -1 is a regular value
500
- pTelemetry->Previous .Race .NbCheckpoints = (Nat32)-1 ;
501
- pTelemetry->Previous .Vehicle .InputSteer = -2 .0f ; // -1.0 is a regular value
502
- pTelemetry->Previous .Vehicle .InputGasPedal = -1 .0f ;
503
- pTelemetry->Previous .Vehicle .InputIsBraking = (Bool)-1 ;
504
- pTelemetry->Previous .Vehicle .EngineRpm = -1 .0f ;
505
- pTelemetry->Previous .Vehicle .EngineCurGear = -1 ;
506
- pTelemetry->Previous .Vehicle .WheelsIsSliping [0 ] = (Bool)-1 ;
507
- pTelemetry->Previous .Vehicle .WheelsIsSliping [1 ] = (Bool)-1 ;
508
- pTelemetry->Previous .Vehicle .WheelsIsSliping [2 ] = (Bool)-1 ;
509
- pTelemetry->Previous .Vehicle .WheelsIsSliping [3 ] = (Bool)-1 ;
510
- pTelemetry->Previous .Vehicle .RumbleIntensity = -1 .0f ;
511
- pTelemetry->Previous .Vehicle .SpeedMeter = (Nat32)-1 ;
512
- }
502
+ if (pTelemetry == NULL )
503
+ return ;
504
+
505
+ // As a precaution, set all member variables to zero
506
+ memset (&pTelemetry->Previous , 0 , sizeof (pTelemetry->Previous ));
507
+
508
+ // Set all variables that can be zero at startup to a different value
509
+ pTelemetry->Previous .Game .State = (STelemetry::EGameState)-1 ;
510
+
511
+ pTelemetry->Previous .Race .State = (STelemetry::ERaceState)-1 ;
512
+ pTelemetry->Previous .Race .Time = (Nat32)-2 ; // -1 is a regular value
513
+ pTelemetry->Previous .Race .NbRespawns = (Nat32)-2 ; // -1 is a regular value
514
+ pTelemetry->Previous .Race .NbCheckpoints = (Nat32)-1 ;
515
+
516
+ pTelemetry->Previous .Vehicle .InputSteer = -2 .0f ; // -1.0 is a regular value
517
+ pTelemetry->Previous .Vehicle .InputGasPedal = -1 .0f ;
518
+ pTelemetry->Previous .Vehicle .InputIsBraking = (Bool)-1 ;
519
+ pTelemetry->Previous .Vehicle .EngineRpm = -1 .0f ;
520
+ pTelemetry->Previous .Vehicle .EngineCurGear = -1 ;
521
+ pTelemetry->Previous .Vehicle .WheelsIsSliping [0 ] = (Bool)-1 ;
522
+ pTelemetry->Previous .Vehicle .WheelsIsSliping [1 ] = (Bool)-1 ;
523
+ pTelemetry->Previous .Vehicle .WheelsIsSliping [2 ] = (Bool)-1 ;
524
+ pTelemetry->Previous .Vehicle .WheelsIsSliping [3 ] = (Bool)-1 ;
525
+ pTelemetry->Previous .Vehicle .RumbleIntensity = -1 .0f ;
526
+ pTelemetry->Previous .Vehicle .SpeedMeter = (Nat32)-1 ;
513
527
}
0 commit comments