From 552a08112be149ebb394dcbf28bc2017a8b21d8b Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 07:29:52 +0100 Subject: [PATCH 1/8] Implement flashing pit limiter #18 - Needs testing, no iracing install --- OverlayDDU.h | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/OverlayDDU.h b/OverlayDDU.h index f8b4627..b18148b 100644 --- a/OverlayDDU.h +++ b/OverlayDDU.h @@ -200,6 +200,7 @@ class OverlayDDU : public Overlay { const float fontSize = g_cfg.getFloat( m_name, "font_size", DefaultFontSize ); const float4 outlineCol = g_cfg.getFloat4( m_name, "outline_col", float4(0.7f,0.7f,0.7f,0.9f) ); + const float4 limiterCol = g_cfg.getFloat4( m_name, "limiter_col", float4(1,0.6f,0,1)); const float4 textCol = g_cfg.getFloat4( m_name, "text_col", float4(1,1,1,0.9f) ); const float4 goodCol = g_cfg.getFloat4( m_name, "good_col", float4(0,0.8f,0,0.6f) ); const float4 badCol = g_cfg.getFloat4( m_name, "bad_col", float4(0.8f,0.1f,0.1f,0.6f) ); @@ -264,18 +265,39 @@ class OverlayDDU : public Overlay D2D1_ELLIPSE e = { float2(r2ax(0.5f-ww/2+(i+0.5f)*ww/8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - if( rpmPct < lightPct ) { - m_brush->SetColor( outlineCol ); - m_renderTarget->DrawEllipse( &e, m_brush.Get() ); + if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) + { + if (rpmPct < lightPct) { + m_brush->SetColor(outlineCol); + m_renderTarget->DrawEllipse(&e, m_brush.Get()); + } + else { + if (lightRpm < ir_session.rpmSLFirst) + m_brush->SetColor(float4(1, 1, 1, 1)); + else if (lightRpm < ir_session.rpmSLLast) + m_brush->SetColor(warnCol); + else + m_brush->SetColor(float4(1, 0, 0, 1)); + m_renderTarget->FillEllipse(&e, m_brush.Get()); + } } - else { - if( lightRpm < ir_session.rpmSLFirst ) - m_brush->SetColor( float4(1,1,1,1) ); - else if( lightRpm < ir_session.rpmSLLast ) - m_brush->SetColor( warnCol ); + else + { + int frames = 60; + if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; + + if (m_rpmFlashTickCount <= frames / 2) + { + m_brush->SetColor(limiterCol); + m_rpmFlashTickCount++; + } else - m_brush->SetColor( float4(1,0,0,1) ); - m_renderTarget->FillEllipse( &e, m_brush.Get() ); + { + m_brush->SetColor(outlineCol); + m_rpmFlashTickCount++; + } + if (m_rpmFlashTickCount > frames) m_rpmFlashTickCount = 0; + m_renderTarget->DrawEllipse(&e, m_brush.Get()); } } } @@ -777,6 +799,7 @@ class OverlayDDU : public Overlay int m_prevCurrentLap = 0; DWORD m_lastLapChangeTickCount = 0; + DWORD m_rpmFlashTickCount = 0; float m_prevBestLapTime = 0; From 6f56f36f086f9582bf24b2a032b913a04f2ed1f6 Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 07:57:13 +0100 Subject: [PATCH 2/8] Improved flashing LEDs #18 - Moved limiter lights out of rpm for loop. - Tested by reverting if statement, not tested with iRacing client open. --- OverlayDDU.h | 66 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/OverlayDDU.h b/OverlayDDU.h index b18148b..65b044b 100644 --- a/OverlayDDU.h +++ b/OverlayDDU.h @@ -258,15 +258,15 @@ class OverlayDDU : public Overlay const float rpmPct = (rpm-lo) / (hi-lo); const float ww = 0.16f; - for( int i=0; i<8; ++i ) + if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) { - const float lightPct = i/8.0f; - const float lightRpm = lo + (hi-lo) * lightPct; + for (int i = 0; i < 8; ++i) + { + const float lightPct = i / 8.0f; + const float lightRpm = lo + (hi - lo) * lightPct; - D2D1_ELLIPSE e = { float2(r2ax(0.5f-ww/2+(i+0.5f)*ww/8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE e = { float2(r2ax(0.5f - ww / 2 + (i + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) - { if (rpmPct < lightPct) { m_brush->SetColor(outlineCol); m_renderTarget->DrawEllipse(&e, m_brush.Get()); @@ -281,24 +281,48 @@ class OverlayDDU : public Overlay m_renderTarget->FillEllipse(&e, m_brush.Get()); } } + } + else + { + D2D1_ELLIPSE l0 = { float2(r2ax(0.5f - ww / 2 + (0 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l1 = { float2(r2ax(0.5f - ww / 2 + (1 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l2 = { float2(r2ax(0.5f - ww / 2 + (2 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l3 = { float2(r2ax(0.5f - ww / 2 + (3 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l4 = { float2(r2ax(0.5f - ww / 2 + (4 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l5 = { float2(r2ax(0.5f - ww / 2 + (5 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l6 = { float2(r2ax(0.5f - ww / 2 + (6 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE l7 = { float2(r2ax(0.5f - ww / 2 + (7 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + + int frames = 60; + if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; + + if (m_rpmFlashTickCount <= frames / 2) + { + m_brush->SetColor(limiterCol); + m_renderTarget->FillEllipse(&l0, m_brush.Get()); + m_renderTarget->FillEllipse(&l1, m_brush.Get()); + m_renderTarget->FillEllipse(&l2, m_brush.Get()); + m_renderTarget->FillEllipse(&l3, m_brush.Get()); + m_renderTarget->FillEllipse(&l4, m_brush.Get()); + m_renderTarget->FillEllipse(&l5, m_brush.Get()); + m_renderTarget->FillEllipse(&l6, m_brush.Get()); + m_renderTarget->FillEllipse(&l7, m_brush.Get()); + m_rpmFlashTickCount++; + } else { - int frames = 60; - if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; - - if (m_rpmFlashTickCount <= frames / 2) - { - m_brush->SetColor(limiterCol); - m_rpmFlashTickCount++; - } - else - { - m_brush->SetColor(outlineCol); - m_rpmFlashTickCount++; - } - if (m_rpmFlashTickCount > frames) m_rpmFlashTickCount = 0; - m_renderTarget->DrawEllipse(&e, m_brush.Get()); + m_brush->SetColor(outlineCol); + m_renderTarget->DrawEllipse(&l0, m_brush.Get()); + m_renderTarget->DrawEllipse(&l1, m_brush.Get()); + m_renderTarget->DrawEllipse(&l2, m_brush.Get()); + m_renderTarget->DrawEllipse(&l3, m_brush.Get()); + m_renderTarget->DrawEllipse(&l4, m_brush.Get()); + m_renderTarget->DrawEllipse(&l5, m_brush.Get()); + m_renderTarget->DrawEllipse(&l6, m_brush.Get()); + m_renderTarget->DrawEllipse(&l7, m_brush.Get()); + m_rpmFlashTickCount++; } + if (m_rpmFlashTickCount > frames) m_rpmFlashTickCount = 0; } } From cddd59cec96d2345256db6cb41239874423cb26e Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 08:29:35 +0100 Subject: [PATCH 3/8] Added lap number to standings #9 --- OverlayStandings.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/OverlayStandings.h b/OverlayStandings.h index ae02341..b41f245 100644 --- a/OverlayStandings.h +++ b/OverlayStandings.h @@ -363,16 +363,18 @@ class OverlayStandings : public Overlay float trackTemp = ir_TrackTempCrew.getFloat(); float airTemp = ir_AirTemp.getFloat(); char tempUnit = 'C'; + int lapcount = ir_CarIdxLap.getInt(ir_session.driverCarIdx); + int totallaps = ir_SessionLapsTotal.getInt(); if( imperial ) { trackTemp = celsiusToFahrenheit( trackTemp ); airTemp = celsiusToFahrenheit( airTemp ); tempUnit = 'F'; } - + m_brush->SetColor(float4(1,1,1,0.4f)); m_renderTarget->DrawLine( float2(0,ybottom),float2((float)m_width,ybottom),m_brush.Get() ); - swprintf( s, _countof(s), L"SoF: %d Track Temp: %.1f°%c Air Temp: %.1f°%c Setup: %s Subsession: %d", ir_session.sof, trackTemp, tempUnit, airTemp, tempUnit, ir_session.isFixedSetup?L"fixed":L"open", ir_session.subsessionId ); + swprintf( s, _countof(s), L"SoF: %d Track Temp: %.1f°%c Air Temp: %.1f°%c Setup: %s Subsession: %d Lap: %d/%d", ir_session.sof, trackTemp, tempUnit, airTemp, tempUnit, ir_session.isFixedSetup?L"fixed":L"open", ir_session.subsessionId, lapcount, totallaps); y = m_height - (m_height-ybottom)/2; m_brush->SetColor( headerCol ); m_text.render( m_renderTarget.Get(), s, m_textFormat.Get(), xoff, (float)m_width-2*xoff, y, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER ); From 7cb127a91a63246b00728e61aa1db14a4ddba3b7 Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 11:39:41 +0100 Subject: [PATCH 4/8] Changed pit limiter lights #18 - Moved draw into its own for loop - Changed to only draw outline on LEDs, allowing RPM to still be displayed on LEDs when limiter is enabled - Gear indicator background flashes green in sync with LED outline --- OverlayDDU.h | 96 +++++++++++++++++++++------------------------------- 1 file changed, 38 insertions(+), 58 deletions(-) diff --git a/OverlayDDU.h b/OverlayDDU.h index 65b044b..cf918c6 100644 --- a/OverlayDDU.h +++ b/OverlayDDU.h @@ -31,7 +31,6 @@ SOFTWARE. #include "iracing.h" #include "Config.h" #include "OverlayDebug.h" - class OverlayDDU : public Overlay { public: @@ -200,7 +199,6 @@ class OverlayDDU : public Overlay { const float fontSize = g_cfg.getFloat( m_name, "font_size", DefaultFontSize ); const float4 outlineCol = g_cfg.getFloat4( m_name, "outline_col", float4(0.7f,0.7f,0.7f,0.9f) ); - const float4 limiterCol = g_cfg.getFloat4( m_name, "limiter_col", float4(1,0.6f,0,1)); const float4 textCol = g_cfg.getFloat4( m_name, "text_col", float4(1,1,1,0.9f) ); const float4 goodCol = g_cfg.getFloat4( m_name, "good_col", float4(0,0.8f,0,0.6f) ); const float4 badCol = g_cfg.getFloat4( m_name, "bad_col", float4(0.8f,0.1f,0.1f,0.6f) ); @@ -258,77 +256,59 @@ class OverlayDDU : public Overlay const float rpmPct = (rpm-lo) / (hi-lo); const float ww = 0.16f; - if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) + for (int i = 0; i < 8; ++i) { - for (int i = 0; i < 8; ++i) - { - const float lightPct = i / 8.0f; - const float lightRpm = lo + (hi - lo) * lightPct; + const float lightPct = i / 8.0f; + const float lightRpm = lo + (hi - lo) * lightPct; - D2D1_ELLIPSE e = { float2(r2ax(0.5f - ww / 2 + (i + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + D2D1_ELLIPSE e = { float2(r2ax(0.5f - ww / 2 + (i + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - if (rpmPct < lightPct) { - m_brush->SetColor(outlineCol); - m_renderTarget->DrawEllipse(&e, m_brush.Get()); - } - else { - if (lightRpm < ir_session.rpmSLFirst) - m_brush->SetColor(float4(1, 1, 1, 1)); - else if (lightRpm < ir_session.rpmSLLast) - m_brush->SetColor(warnCol); - else - m_brush->SetColor(float4(1, 0, 0, 1)); - m_renderTarget->FillEllipse(&e, m_brush.Get()); - } + if (rpmPct < lightPct) { + m_brush->SetColor(outlineCol); + m_renderTarget->DrawEllipse(&e, m_brush.Get()); + } + else { + if (lightRpm < ir_session.rpmSLFirst) + m_brush->SetColor(float4(1, 1, 1, 1)); + else if (lightRpm < ir_session.rpmSLLast) + m_brush->SetColor(warnCol); + else + m_brush->SetColor(float4(1, 0, 0, 1)); + m_renderTarget->FillEllipse(&e, m_brush.Get()); } } - else + + if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) { - D2D1_ELLIPSE l0 = { float2(r2ax(0.5f - ww / 2 + (0 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l1 = { float2(r2ax(0.5f - ww / 2 + (1 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l2 = { float2(r2ax(0.5f - ww / 2 + (2 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l3 = { float2(r2ax(0.5f - ww / 2 + (3 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l4 = { float2(r2ax(0.5f - ww / 2 + (4 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l5 = { float2(r2ax(0.5f - ww / 2 + (5 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l6 = { float2(r2ax(0.5f - ww / 2 + (6 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - D2D1_ELLIPSE l7 = { float2(r2ax(0.5f - ww / 2 + (7 + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; - int frames = 60; if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; - - if (m_rpmFlashTickCount <= frames / 2) - { - m_brush->SetColor(limiterCol); - m_renderTarget->FillEllipse(&l0, m_brush.Get()); - m_renderTarget->FillEllipse(&l1, m_brush.Get()); - m_renderTarget->FillEllipse(&l2, m_brush.Get()); - m_renderTarget->FillEllipse(&l3, m_brush.Get()); - m_renderTarget->FillEllipse(&l4, m_brush.Get()); - m_renderTarget->FillEllipse(&l5, m_brush.Get()); - m_renderTarget->FillEllipse(&l6, m_brush.Get()); - m_renderTarget->FillEllipse(&l7, m_brush.Get()); - m_rpmFlashTickCount++; - } - else + if (m_rpmFlashTickCount <= frames / 4) m_brush->SetColor(warnCol); + else m_brush->SetColor(outlineCol); + + for (int i = 0; i < 8; ++i) { - m_brush->SetColor(outlineCol); - m_renderTarget->DrawEllipse(&l0, m_brush.Get()); - m_renderTarget->DrawEllipse(&l1, m_brush.Get()); - m_renderTarget->DrawEllipse(&l2, m_brush.Get()); - m_renderTarget->DrawEllipse(&l3, m_brush.Get()); - m_renderTarget->DrawEllipse(&l4, m_brush.Get()); - m_renderTarget->DrawEllipse(&l5, m_brush.Get()); - m_renderTarget->DrawEllipse(&l6, m_brush.Get()); - m_renderTarget->DrawEllipse(&l7, m_brush.Get()); - m_rpmFlashTickCount++; + D2D1_ELLIPSE e = { float2(r2ax(0.5f - ww / 2 + (i + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; + m_renderTarget->DrawEllipse(&e, m_brush.Get()); } - if (m_rpmFlashTickCount > frames) m_rpmFlashTickCount = 0; + m_rpmFlashTickCount++; + if (m_rpmFlashTickCount > frames / 2) m_rpmFlashTickCount = 0; } } // Gear & Speed { - if( ir_RPM.getFloat() >= ir_session.rpmSLShift || ir_EngineWarnings.getInt() & irsdk_revLimiterActive ) + if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) + { + int frames = 60; + if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; + if (m_rpmFlashTickCount <= frames / 4) + { + m_brush->SetColor(goodCol); + D2D1_RECT_F r = { m_boxGear.x0, m_boxGear.y0, m_boxGear.x1, m_boxGear.y1 }; + m_renderTarget->FillRectangle(&r, m_brush.Get()); + } + } + else if( ir_RPM.getFloat() >= ir_session.rpmSLShift ) { m_brush->SetColor( warnCol ); D2D1_RECT_F r = { m_boxGear.x0, m_boxGear.y0, m_boxGear.x1, m_boxGear.y1 }; From e12944b83fc7542c0af80f91610ef0529cbf3731 Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 11:41:24 +0100 Subject: [PATCH 5/8] Reverted if statements back after testing #18 --- OverlayDDU.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OverlayDDU.h b/OverlayDDU.h index cf918c6..25e6560 100644 --- a/OverlayDDU.h +++ b/OverlayDDU.h @@ -278,7 +278,7 @@ class OverlayDDU : public Overlay } } - if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) + if ((ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) { int frames = 60; if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; @@ -297,7 +297,7 @@ class OverlayDDU : public Overlay // Gear & Speed { - if (!(ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) + if ((ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) { int frames = 60; if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; From 8a9221cf990d6ff275718f79df4bf0f1ff90ef26 Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 14:01:55 +0100 Subject: [PATCH 6/8] Issue #14 fix - No longer crashes in debug mode --- OverlayDDU.h | 54 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/OverlayDDU.h b/OverlayDDU.h index 25e6560..5334379 100644 --- a/OverlayDDU.h +++ b/OverlayDDU.h @@ -579,25 +579,32 @@ class OverlayDDU : public Overlay const float rr = 100.0f * std::min(std::min( ir_RRwearL.getFloat(), ir_RRwearM.getFloat() ), ir_RRwearR.getFloat() ); // Left - if( ir_dpLTireChange.getFloat() ) - m_brush->SetColor( serviceCol ); - else - m_brush->SetColor( textCol ); - swprintf( s, _countof(s), L"%d", (int)(lf+0.5f) ); - m_text.render( m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0+20, m_boxTires.x0+m_boxTires.w/2, m_boxTires.y0+m_boxTires.h*1.0f/3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER ); - swprintf( s, _countof(s), L"%d", (int)(lr+0.5f) ); - m_text.render( m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0+20, m_boxTires.x0+m_boxTires.w/2, m_boxTires.y0+m_boxTires.h*2.0f/3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER ); - - // Right - if( ir_dpRTireChange.getFloat() ) - m_brush->SetColor( serviceCol ); - else - m_brush->SetColor( textCol ); - swprintf( s, _countof(s), L"%d", (int)(rf+0.5f) ); - m_text.render( m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0+m_boxTires.w/2, m_boxTires.x1-20, m_boxTires.y0+m_boxTires.h*1.0f/3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER ); - swprintf( s, _countof(s), L"%d", (int)(rr+0.5f) ); - m_text.render( m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0+m_boxTires.w/2, m_boxTires.x1-20, m_boxTires.y0+m_boxTires.h*2.0f/3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER ); - m_brush->SetColor( textCol ); + if (ir_dpLTireChange.isValid()) + { + if (ir_dpLTireChange.getFloat()) + m_brush->SetColor(serviceCol); + else + m_brush->SetColor(textCol); + + swprintf(s, _countof(s), L"%d", (int)(lf + 0.5f)); + m_text.render(m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0 + 20, m_boxTires.x0 + m_boxTires.w / 2, m_boxTires.y0 + m_boxTires.h * 1.0f / 3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER); + swprintf(s, _countof(s), L"%d", (int)(lr + 0.5f)); + m_text.render(m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0 + 20, m_boxTires.x0 + m_boxTires.w / 2, m_boxTires.y0 + m_boxTires.h * 2.0f / 3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER); + } + + if (ir_dpRTireChange.isValid()) + { + // Right + if (ir_dpRTireChange.getFloat()) + m_brush->SetColor(serviceCol); + else + m_brush->SetColor(textCol); + swprintf(s, _countof(s), L"%d", (int)(rf + 0.5f)); + m_text.render(m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0 + m_boxTires.w / 2, m_boxTires.x1 - 20, m_boxTires.y0 + m_boxTires.h * 1.0f / 3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER); + swprintf(s, _countof(s), L"%d", (int)(rr + 0.5f)); + m_text.render(m_renderTarget.Get(), s, m_textFormatSmall.Get(), m_boxTires.x0 + m_boxTires.w / 2, m_boxTires.x1 - 20, m_boxTires.y0 + m_boxTires.h * 2.0f / 3.0f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER); + m_brush->SetColor(textCol); + } /* TODO: why doesn't iracing report 255 here in an AI session where we DO have unlimited tire sets?? @@ -659,9 +666,12 @@ class OverlayDDU : public Overlay // Brake bias { - const float bias = ir_dcBrakeBias.getFloat(); - swprintf( s, _countof(s), L"%+3.1f", bias ); - m_text.render( m_renderTarget.Get(), s, m_textFormat.Get(), m_boxBias.x0, m_boxBias.x1, m_boxBias.y0+m_boxBias.h*0.5f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER ); + if (ir_dcBrakeBias.isValid()) + { + const float bias = ir_dcBrakeBias.getFloat(); + swprintf(s, _countof(s), L"%+3.1f", bias); + m_text.render(m_renderTarget.Get(), s, m_textFormat.Get(), m_boxBias.x0, m_boxBias.x1, m_boxBias.y0 + m_boxBias.h * 0.5f, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER); + } } // Oil temp From 55a748041cf5c0493015697e98589a06225c567e Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Wed, 23 Aug 2023 15:00:55 +0100 Subject: [PATCH 7/8] Pit limiter feedback timing #18 #21 - Changed how timing works for pit limiter feedback - Would prefer to not use as many magic numbers, but I am limited by inconsistency in tick numbers --- OverlayDDU.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/OverlayDDU.h b/OverlayDDU.h index 5334379..19ed451 100644 --- a/OverlayDDU.h +++ b/OverlayDDU.h @@ -282,7 +282,7 @@ class OverlayDDU : public Overlay { int frames = 60; if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; - if (m_rpmFlashTickCount <= frames / 4) m_brush->SetColor(warnCol); + if (((tickCount / 16) % (frames / 2)) <= frames / 4) m_brush->SetColor(warnCol); else m_brush->SetColor(outlineCol); for (int i = 0; i < 8; ++i) @@ -290,18 +290,18 @@ class OverlayDDU : public Overlay D2D1_ELLIPSE e = { float2(r2ax(0.5f - ww / 2 + (i + 0.5f) * ww / 8),r2ay(0.065f)), r2ax(0.007f), r2ax(0.007f) }; m_renderTarget->DrawEllipse(&e, m_brush.Get()); } - m_rpmFlashTickCount++; - if (m_rpmFlashTickCount > frames / 2) m_rpmFlashTickCount = 0; } } // Gear & Speed { + //std::cout << tickCount / 16 << std::endl; if ((ir_EngineWarnings.getInt() & irsdk_pitSpeedLimiter)) { int frames = 60; if (g_cfg.getBool("General", "performance_mode_30hz", false)) frames = 30; - if (m_rpmFlashTickCount <= frames / 4) + //std::cout << (tickCount % frames) << std::endl; + if (((tickCount / 16) % (frames / 2)) <= frames / 4) { m_brush->SetColor(goodCol); D2D1_RECT_F r = { m_boxGear.x0, m_boxGear.y0, m_boxGear.x1, m_boxGear.y1 }; @@ -813,7 +813,6 @@ class OverlayDDU : public Overlay int m_prevCurrentLap = 0; DWORD m_lastLapChangeTickCount = 0; - DWORD m_rpmFlashTickCount = 0; float m_prevBestLapTime = 0; From a4d3118dcf528563f10d73278f4da80e56801dcc Mon Sep 17 00:00:00 2001 From: Dan Dumont Date: Thu, 24 Aug 2023 11:16:10 +0100 Subject: [PATCH 8/8] Revert "Added lap number to standings #9" This reverts commit cddd59cec96d2345256db6cb41239874423cb26e. Reverted as this would create a conflict with the @frmjar fork. --- OverlayStandings.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/OverlayStandings.h b/OverlayStandings.h index b41f245..ae02341 100644 --- a/OverlayStandings.h +++ b/OverlayStandings.h @@ -363,18 +363,16 @@ class OverlayStandings : public Overlay float trackTemp = ir_TrackTempCrew.getFloat(); float airTemp = ir_AirTemp.getFloat(); char tempUnit = 'C'; - int lapcount = ir_CarIdxLap.getInt(ir_session.driverCarIdx); - int totallaps = ir_SessionLapsTotal.getInt(); if( imperial ) { trackTemp = celsiusToFahrenheit( trackTemp ); airTemp = celsiusToFahrenheit( airTemp ); tempUnit = 'F'; } - + m_brush->SetColor(float4(1,1,1,0.4f)); m_renderTarget->DrawLine( float2(0,ybottom),float2((float)m_width,ybottom),m_brush.Get() ); - swprintf( s, _countof(s), L"SoF: %d Track Temp: %.1f°%c Air Temp: %.1f°%c Setup: %s Subsession: %d Lap: %d/%d", ir_session.sof, trackTemp, tempUnit, airTemp, tempUnit, ir_session.isFixedSetup?L"fixed":L"open", ir_session.subsessionId, lapcount, totallaps); + swprintf( s, _countof(s), L"SoF: %d Track Temp: %.1f°%c Air Temp: %.1f°%c Setup: %s Subsession: %d", ir_session.sof, trackTemp, tempUnit, airTemp, tempUnit, ir_session.isFixedSetup?L"fixed":L"open", ir_session.subsessionId ); y = m_height - (m_height-ybottom)/2; m_brush->SetColor( headerCol ); m_text.render( m_renderTarget.Get(), s, m_textFormat.Get(), xoff, (float)m_width-2*xoff, y, m_brush.Get(), DWRITE_TEXT_ALIGNMENT_CENTER );