Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
152 changes: 144 additions & 8 deletions Source/Pads/Gamepad.as
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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)
);
}
}
}
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
55 changes: 47 additions & 8 deletions Source/Pads/Keyboard.as
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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);
}
}
}
47 changes: 38 additions & 9 deletions Source/Settings.as
Original file line number Diff line number Diff line change
Expand Up @@ -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);


Expand Down Expand Up @@ -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"]
Expand Down
2 changes: 1 addition & 1 deletion Source/Things/Acceleration.as
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion Source/Things/Clock.as
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion Source/Things/Gearbox.as
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Loading