diff --git a/Source/Pads/Gamepad.as b/Source/Pads/Gamepad.as index 9f99709..ad66ab6 100644 --- a/Source/Pads/Gamepad.as +++ b/Source/Pads/Gamepad.as @@ -1,5 +1,31 @@ class DashboardPadGamepad : IDashboardPad { + nvg::Font m_font; + string m_fontPath; + + DashboardPadGamepad() + { + LoadFont(); + } + + void LoadFont() + { + if (Setting_Gamepad_Font == m_fontPath) { + return; + } + + auto font = nvg::LoadFont(Setting_Gamepad_Font); + if (font >= 0) { + m_fontPath = Setting_Gamepad_Font; + m_font = font; + } + } + + void OnSettingsChanged() override + { + LoadFont(); + } + void RenderUniform(const vec2 &in size, CSceneVehicleVisState@ vis) { float leftSize = size.x * (0.5f - Setting_Gamepad_MiddleScale / 2) - Setting_Gamepad_Spacing; @@ -51,6 +77,12 @@ class DashboardPadGamepad : IDashboardPad nvg::Fill(); nvg::ResetScissor(); } + float fillAlphaLeft = Math::Lerp(Setting_Gamepad_OffAlpha, 1.0f, steerLeft); + if (Setting_Gamepad_UseBorderGradient) { + nvg::StrokePaint(Setting_Gamepad_BorderGradient.GetPaint(vec2(), size, fillAlphaLeft)); + } else { + nvg::StrokeColor(Setting_Gamepad_BorderColor); + } nvg::Stroke(); // Right @@ -72,6 +104,12 @@ class DashboardPadGamepad : IDashboardPad nvg::Fill(); nvg::ResetScissor(); } + float fillAlphaRight = Math::Lerp(Setting_Gamepad_OffAlpha, 1.0f, steerRight); + if (Setting_Gamepad_UseBorderGradient) { + nvg::StrokePaint(Setting_Gamepad_BorderGradient.GetPaint(vec2(), size, fillAlphaRight)); + } else { + nvg::StrokeColor(Setting_Gamepad_BorderColor); + } nvg::Stroke(); // Up @@ -90,6 +128,12 @@ class DashboardPadGamepad : IDashboardPad nvg::Fill(); nvg::ResetScissor(); } + float fillAlphaUp = pedalGas > 0.1f ? 1.0f : Setting_Gamepad_OffAlpha; + if (Setting_Gamepad_UseBorderGradient) { + nvg::StrokePaint(Setting_Gamepad_BorderGradient.GetPaint(vec2(), size, fillAlphaUp)); + } else { + nvg::StrokeColor(Setting_Gamepad_BorderColor); + } nvg::Stroke(); // Down @@ -108,37 +152,55 @@ class DashboardPadGamepad : IDashboardPad nvg::Fill(); nvg::ResetScissor(); } + float fillAlphaDown = pedalBrake > 0.1f ? 1.0f : Setting_Gamepad_OffAlpha; + if (Setting_Gamepad_UseBorderGradient) { + nvg::StrokePaint(Setting_Gamepad_BorderGradient.GetPaint(vec2(), size, fillAlphaDown)); + } else { + nvg::StrokeColor(Setting_Gamepad_BorderColor); + } nvg::Stroke(); // Up & Down texts if (Setting_Gamepad_UpDownSymbols) { nvg::BeginPath(); - nvg::FontFace(g_font); - nvg::FontSize(midSize / 2); - nvg::FillColor(Setting_Gamepad_TextColor); + nvg::FontFace(m_font); + nvg::FontSize(Setting_Gamepad_FontSize * 1.5f); nvg::TextAlign(nvg::Align::Middle | nvg::Align::Center); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Setting_Gamepad_OffAlphaText ? fillAlphaUp : 1.0f)); nvg::TextBox(midX, topSize / 2, midSize, Icons::AngleUp); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Setting_Gamepad_OffAlphaText ? fillAlphaDown : 1.0f)); nvg::TextBox(midX, bottomY + bottomSize / 2, midSize, Icons::AngleDown); } // Steering percentage if (Setting_Gamepad_SteerPercentage) { - nvg::FontFace(g_font); - nvg::FontSize(Setting_Gamepad_SteerPercentageSize); - nvg::FillColor(Setting_Gamepad_TextColor); + nvg::FontFace(m_font); + nvg::FontSize(Setting_Gamepad_FontSize); // Left if (steerLeft > 0) { nvg::BeginPath(); nvg::TextAlign(nvg::Align::Middle | nvg::Align::Right); - nvg::TextBox(0, size.y / 2, leftSize - Setting_Gamepad_Spacing, tostring(Math::Round(steerLeft * 100)) + "%"); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Setting_Gamepad_OffAlphaText ? fillAlphaLeft : 1.0f)); + nvg::TextBox( + -Setting_Gamepad_SteerPercentageSpacing, + size.y / 2, + leftSize - Setting_Gamepad_Spacing, + Text::Format("%.f" + (Setting_Gamepad_SteerPercentageSymbol ? "%%" : ""), steerLeft * 100.0f) + ); } // Right if (steerRight > 0) { nvg::BeginPath(); nvg::TextAlign(nvg::Align::Middle | nvg::Align::Left); - nvg::TextBox(rightX + Setting_Gamepad_Spacing, size.y / 2, rightSize, tostring(Math::Round(steerRight * 100)) + "%"); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Setting_Gamepad_OffAlphaText ? fillAlphaRight : 1.0f)); + nvg::TextBox( + Setting_Gamepad_SteerPercentageSpacing + rightX + Setting_Gamepad_Spacing, + size.y / 2, + rightSize, + Text::Format("%.f" + (Setting_Gamepad_SteerPercentageSymbol ? "%%" : ""), steerRight * 100.0f) + ); } } } @@ -212,6 +274,40 @@ class DashboardPadGamepad : IDashboardPad nvg::FillColor(WithAlpha(Setting_Gamepad_ClassicDownColor, pedalBrake > 0.1f ? 1.0f : Setting_Gamepad_OffAlpha)); nvg::Fill(); nvg::ResetScissor(); + + float textAlpha = Setting_Gamepad_OffAlphaText ? Setting_Gamepad_OffAlpha : 1.0f; + + // Steering percentage + if (Setting_Gamepad_SteerPercentage) { + nvg::FontFace(m_font); + nvg::FontSize(Setting_Gamepad_FontSize); + + // Left + if (steerLeft > 0) { + nvg::BeginPath(); + nvg::TextAlign(nvg::Align::Middle | nvg::Align::Right); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Math::Lerp(textAlpha, 1.0f, steerLeft))); + nvg::TextBox( + -Setting_Gamepad_SteerPercentageSpacing, + size.y / 2, + leftSize - Setting_Gamepad_Spacing, + Text::Format("%.f" + (Setting_Gamepad_SteerPercentageSymbol ? "%%" : ""), steerLeft * 100.0f) + ); + } + + // Right + if (steerRight > 0) { + nvg::BeginPath(); + nvg::TextAlign(nvg::Align::Middle | nvg::Align::Left); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Math::Lerp(textAlpha, 1.0f, steerRight))); + nvg::TextBox( + Setting_Gamepad_SteerPercentageSpacing + rightX + Setting_Gamepad_Spacing, + size.y / 2, + rightSize, + Text::Format("%.f" + (Setting_Gamepad_SteerPercentageSymbol ? "%%" : ""), steerRight * 100.0f) + ); + } + } } void RenderCateye(const vec2 &in size, CSceneVehicleVisState@ vis) @@ -297,6 +393,46 @@ class DashboardPadGamepad : IDashboardPad nvg::FillColor(pedalBrake > 0.1f ? Setting_Gamepad_FillColor : Setting_Gamepad_EmptyFillColor); FillInflectedTriangle(posMidBot, posBotInflection, posMidLeft, posMidRight); StrokeInflectedTriangle(posMidBot, posBotInflection, posMidLeft, posMidRight); + + float textAlpha = Setting_Gamepad_OffAlphaText ? Setting_Gamepad_OffAlpha : 1.0f; + + float leftSize = size.x * (0.5f - Setting_Gamepad_MiddleScale / 2) - Setting_Gamepad_Spacing; + float midX = leftSize + Setting_Gamepad_Spacing; + float midSize = size.x * Setting_Gamepad_MiddleScale; + float rightX = midX + midSize + Setting_Gamepad_Spacing; + float rightSize = size.x - rightX; + + // Steering percentage + if (Setting_Gamepad_SteerPercentage) { + nvg::FontFace(m_font); + nvg::FontSize(Setting_Gamepad_FontSize); + + // Left + if (steerLeft > 0) { + nvg::BeginPath(); + nvg::TextAlign(nvg::Align::Middle | nvg::Align::Right); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Math::Lerp(textAlpha, 1.0f, steerLeft))); + nvg::TextBox( + -Setting_Gamepad_SteerPercentageSpacing, + size.y / 2, + leftSize - Setting_Gamepad_Spacing, + Text::Format("%.f" + (Setting_Gamepad_SteerPercentageSymbol ? "%%" : ""), steerLeft * 100.0f) + ); + } + + // Right + if (steerRight > 0) { + nvg::BeginPath(); + nvg::TextAlign(nvg::Align::Middle | nvg::Align::Left); + nvg::FillColor(WithAlpha(Setting_Gamepad_TextColor, Math::Lerp(textAlpha, 1.0f, steerRight))); + nvg::TextBox( + Setting_Gamepad_SteerPercentageSpacing + rightX + Setting_Gamepad_Spacing, + size.y / 2, + rightSize, + Text::Format("%.f" + (Setting_Gamepad_SteerPercentageSymbol ? "%%" : ""), steerRight * 100.0f) + ); + } + } } private void FillInflectedTriangle(const vec2 &in posApex, const vec2 &in posInflection, const vec2 &in posSide1, const vec2 &in posSide2) diff --git a/Source/Pads/Keyboard.as b/Source/Pads/Keyboard.as index de4b290..11d36fc 100644 --- a/Source/Pads/Keyboard.as +++ b/Source/Pads/Keyboard.as @@ -1,7 +1,33 @@ class DashboardPadKeyboard : IDashboardPad { + nvg::Font m_font; + string m_fontPath; + vec2 m_size; + DashboardPadKeyboard() + { + LoadFont(); + } + + void LoadFont() + { + if (Setting_Keyboard_Font == m_fontPath) { + return; + } + + auto font = nvg::LoadFont(Setting_Keyboard_Font); + if (font >= 0) { + m_fontPath = Setting_Keyboard_Font; + m_font = font; + } + } + + void OnSettingsChanged() override + { + LoadFont(); + } + void Render(const vec2 &in size, CSceneVehicleVisState@ vis) override { m_size = size; @@ -91,15 +117,28 @@ class DashboardPadKeyboard : IDashboardPad } nvg::Stroke(); - nvg::BeginPath(); - nvg::FontFace(g_font); - nvg::FontSize(size.x / 2); - if (Setting_Keyboard_UseBorderGradient) { - nvg::FillPaint(Setting_Keyboard_BorderGradient.GetPaint(vec2(), m_size, fillAlpha)); - } else { - nvg::FillColor(borderColor); + vec4 textColor = Setting_Keyboard_TextColor; + if (Setting_Gamepad_InactiveAlphaText) { + textColor.w *= fillAlpha; } + + nvg::BeginPath(); + nvg::FontFace(m_font); + nvg::FillColor(textColor); nvg::TextAlign(nvg::Align::Middle | nvg::Align::Center); - nvg::TextBox(pos.x, pos.y + size.y / 2, size.x, text); + if (Setting_Keyboard_SteerPercentage && fillDir != 0) { + if (value > 0.0f) { + nvg::FontSize(Setting_Keyboard_FontSize); + nvg::TextBox( + pos.x, + pos.y + size.y / 2, + size.x, + Text::Format("%.f" + (Setting_Keyboard_SteerPercentageSymbol ? "%%" : ""), value * 100.0f) + ); + } + } else if (Setting_Keyboard_ArrowSymbols) { + nvg::FontSize(Setting_Keyboard_FontSize * 1.5f); + nvg::TextBox(pos.x, pos.y + size.y / 2, size.x, text); + } } } diff --git a/Source/Settings.as b/Source/Settings.as index 12de1eb..bf4fc75 100644 --- a/Source/Settings.as +++ b/Source/Settings.as @@ -116,26 +116,34 @@ vec4 Setting_Gamepad_ClassicUpColor = vec4(0.2f, 1, 0.6f, 1); [Setting category="Gamepad" name="Classic down color" color if="Setting_Gamepad_Style Classic"] vec4 Setting_Gamepad_ClassicDownColor = vec4(1, 0.6f, 0.2f, 1); -[Setting category="Gamepad" name="Classic off alpha" drag min=0 max=1 if="Setting_Gamepad_Style Classic"] +[Setting category="Gamepad" name="Inactive alpha" drag min=0 max=1] float Setting_Gamepad_OffAlpha = 0.33f; +[Setting category="Gamepad" name="Use inactive alpha for text"] +bool Setting_Gamepad_OffAlphaText = true; + [Setting category="Gamepad" name="Display up/down arrow symbols" if="Setting_Gamepad_Style Uniform"] bool Setting_Gamepad_UpDownSymbols = true; [Setting category="Gamepad" name="Cateye use simple steer" if="Setting_Gamepad_Style Cateye"] bool Setting_Gamepad_CateyeUseSimpleSteer = false; -[Setting category="Gamepad" name="Display steer percentage" if="Setting_Gamepad_Style Uniform"] +[Setting category="Gamepad" name="Display steer percentage"] bool Setting_Gamepad_SteerPercentage = false; -[Setting - category="Gamepad" - name="Steer percentage size" - drag min=2 max=40 - if="Setting_Gamepad_Style Uniform"] -int Setting_Gamepad_SteerPercentageSize = 16; +[Setting category="Gamepad" name="Display steer percentage symbol" if="Setting_Gamepad_SteerPercentage"] +bool Setting_Gamepad_SteerPercentageSymbol = true; + +[Setting category="Gamepad" name="Steer percentage spacing" min=-100 max=100] +float Setting_Gamepad_SteerPercentageSpacing = 0.0f; + +[Setting category="Gamepad" name="Font"] +string Setting_Gamepad_Font = "DroidSans.ttf"; -[Setting category="Gamepad" name="Text and symbol color" color if="Setting_Gamepad_Style Uniform"] +[Setting category="Gamepad" name="Font size" min=2 max=40] +int Setting_Gamepad_FontSize = 16; + +[Setting category="Gamepad" name="Text color" color] vec4 Setting_Gamepad_TextColor = vec4(1, 1, 1, 1); @@ -183,6 +191,27 @@ float Setting_Keyboard_Spacing = 10.0f; [Setting category="Keyboard" name="Inactive alpha" drag min=0 max=1] float Setting_Keyboard_InactiveAlpha = 1.0f; +[Setting category="Keyboard" name="Use inactive alpha for text"] +bool Setting_Gamepad_InactiveAlphaText = true; + +[Setting category="Keyboard" name="Display arrow symbols"] +bool Setting_Keyboard_ArrowSymbols = true; + +[Setting category="Keyboard" name="Display steer percentage" description="Overrides left/right arrows of setting above"] +bool Setting_Keyboard_SteerPercentage = false; + +[Setting category="Keyboard" name="Display steer percentage symbol" if="Setting_Keyboard_SteerPercentage"] +bool Setting_Keyboard_SteerPercentageSymbol = true; + +[Setting category="Keyboard" name="Font"] +string Setting_Keyboard_Font = "DroidSans.ttf"; + +[Setting category="Keyboard" name="Font size" min=2 max=40] +int Setting_Keyboard_FontSize = 16; + +[Setting category="Keyboard" name="Text color" color] +vec4 Setting_Keyboard_TextColor = vec4(1, 1, 1, 1); + [Setting category="Gearbox" name="Show text"] diff --git a/Source/Things/Acceleration.as b/Source/Things/Acceleration.as index 871be36..46810e3 100644 --- a/Source/Things/Acceleration.as +++ b/Source/Things/Acceleration.as @@ -47,7 +47,7 @@ class DashboardAcceleration : DashboardThing } auto font = nvg::LoadFont(Setting_Acceleration_Font); - if (font > 0) { + if (font >= 0) { m_fontPath = Setting_Acceleration_Font; m_font = font; } diff --git a/Source/Things/Clock.as b/Source/Things/Clock.as index 7c2f39c..8b12318 100644 --- a/Source/Things/Clock.as +++ b/Source/Things/Clock.as @@ -42,7 +42,7 @@ class DashboardClock : DashboardThing } auto font = nvg::LoadFont(Setting_Clock_Font); - if (font > 0) { + if (font >= 0) { m_fontPath = Setting_Clock_Font; m_font = font; } diff --git a/Source/Things/Gearbox.as b/Source/Things/Gearbox.as index 8fc92f4..a8e6489 100644 --- a/Source/Things/Gearbox.as +++ b/Source/Things/Gearbox.as @@ -45,7 +45,7 @@ class DashboardGearbox : DashboardThing } auto font = nvg::LoadFont(Setting_Gearbox_Font); - if (font > 0) { + if (font >= 0) { m_fontPath = Setting_Gearbox_Font; m_font = font; } diff --git a/Source/Things/PadHost.as b/Source/Things/PadHost.as index 5e1e3ac..32e597b 100644 --- a/Source/Things/PadHost.as +++ b/Source/Things/PadHost.as @@ -1,5 +1,6 @@ interface IDashboardPad { + void OnSettingsChanged(); void Render(const vec2 &in size, CSceneVehicleVisState@ vis); } @@ -116,4 +117,11 @@ class DashboardPadHost : DashboardThing case PadType::Gamepad: @m_pad = DashboardPadGamepad(); break; } } + + void OnSettingsChanged() override + { + if (m_pad !is null) { + m_pad.OnSettingsChanged(); + } + } } diff --git a/Source/Things/Speed.as b/Source/Things/Speed.as index 20a90e5..3938e9c 100644 --- a/Source/Things/Speed.as +++ b/Source/Things/Speed.as @@ -42,7 +42,7 @@ class DashboardSpeed : DashboardThing } auto font = nvg::LoadFont(Setting_Speed_Font); - if (font > 0) { + if (font >= 0) { m_fontPath = Setting_Speed_Font; m_font = font; } diff --git a/Source/Things/Wheels.as b/Source/Things/Wheels.as index 4671bda..e50cc82 100644 --- a/Source/Things/Wheels.as +++ b/Source/Things/Wheels.as @@ -64,7 +64,7 @@ class DashboardWheels : DashboardThing } auto font = nvg::LoadFont(Setting_Wheels_DetailsFont); - if (font > 0) { + if (font >= 0) { m_fontPath = Setting_Wheels_DetailsFont; m_font = font; }