Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Road sign themes reloadable + Canadian signs #1215

Merged
merged 80 commits into from
Dec 31, 2021
Merged
Show file tree
Hide file tree
Changes from 71 commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
7ae637e
Speedlimits UI changes preparation: Changes to U library
kvakvs Sep 12, 2021
b250236
Remove Redirection Framework
kvakvs Oct 3, 2021
0e415a9
Speed Limits UI: New textures, new overlay and util classes
kvakvs Oct 18, 2021
3301b4b
Rebase on fresh master
kvakvs Oct 18, 2021
6ed359a
Merge branch 'master' into u-speedlimits-tool-7
kvakvs Nov 14, 2021
22ec96a
Fixes for after master was merged
kvakvs Nov 14, 2021
4d80bfb
laneSpeedLimit and laneSpeedLimitArray use game units for speed
kvakvs Nov 15, 2021
31448bd
SetLaneSpeedLimit accepts action with null override, but requires it …
kvakvs Nov 15, 2021
b47ff59
Tooltip position for speedlimits is now corrected for UIScale. UI fon…
kvakvs Nov 16, 2021
60b58ed
Do not recreate Speed Limits tool window if MPH setting was not chang…
kvakvs Nov 16, 2021
01d9291
On tool reactivation, visible segments and segment centers cache is c…
kvakvs Nov 16, 2021
ae77565
Check for Null when rendering overlay, if window has not been yet cre…
kvakvs Nov 16, 2021
ec7897a
SetSpeedLimitAction.cs: Speed limit value is now guarded, and only ac…
kvakvs Nov 21, 2021
cbe20d5
Minor cosmetics for SegmentLaneMarker.cs, moved useful function IsUnd…
kvakvs Nov 22, 2021
d327e4a
WIP render segment center signs
kvakvs Nov 26, 2021
05c126b
Merge Master into U-Speedlimits-Tool-7
kvakvs Nov 26, 2021
42eec09
Show single speed limit mode for segments; average value for both dir…
kvakvs Nov 27, 2021
4940d9c
Set speed limits for segment
kvakvs Nov 27, 2021
8353d1e
Render seg-default speed limit if Alt is held
kvakvs Nov 27, 2021
8929f32
Triple mode for edit Segments, Lanes and Defaults. Holding alt shows …
kvakvs Nov 27, 2021
10a7518
Draw circle with default speed limit, when no override. Fix for recta…
kvakvs Nov 27, 2021
d0f02ca
Review cleanup
kvakvs Nov 28, 2021
1a9a15f
Null window check for getting the mouse coords
kvakvs Dec 1, 2021
ad8cb8e
Krzychu's fix to parking manager freeze bug
kvakvs Dec 1, 2021
f408bfa
Merge master
kvakvs Dec 1, 2021
5d5ac2b
Keybind for speed limits now opens speed limits; Holding Alt will not…
kvakvs Dec 3, 2021
ab8fb29
Draw hovered segments and lanes (even more than one if mouse hovers o…
kvakvs Dec 3, 2021
d324e73
Speed limits Translations: English, Russian, Ukrainian
kvakvs Dec 4, 2021
e243837
Events in ModUI grouped into a inner class; New event for UI Language…
kvakvs Dec 4, 2021
4352e6f
Lane highlight for speed limits lane mode with Shift; Warning for che…
kvakvs Dec 4, 2021
caa2faa
Overlay drawing code moved
kvakvs Dec 4, 2021
c4c8bfb
Down arrow is rendered for speed limit icons of underground nodes
kvakvs Dec 4, 2021
9b4a9df
Disabled sign fading due to bug in screen UI scaling calculations
kvakvs Dec 4, 2021
f10a565
Fixed screen position calculations for GUI rects and fading signs
kvakvs Dec 4, 2021
aad56e0
Underground nodes don't show in overground mode. Added hint for that
kvakvs Dec 4, 2021
294d562
Language change makes the speed limits window wonky. Close it.
kvakvs Dec 4, 2021
14b216e
Merge branch 'master' into u-speedlimits-tool-7
kvakvs Dec 4, 2021
26ee314
More review/testing fixes: Cosmetic window sizing and special palette…
kvakvs Dec 5, 2021
b460f4f
Loadable/reloadable themes for road signs; Compatibility for kmph/mph…
kvakvs Dec 5, 2021
936e300
Translations; Translation key fixes
kvakvs Dec 5, 2021
3b9de26
Renamed German signs directory, imported Canadian style signs
kvakvs Dec 5, 2021
20b7566
Translations for renamed German theme, and canadian theme
kvakvs Dec 5, 2021
cbd4f42
Saving config properly on incompatible theme and MPH choices
kvakvs Dec 5, 2021
dc5d80d
UI Changes: Default button moved left; Text labels in form removed; B…
kvakvs Dec 5, 2021
937d2db
Merge remote-tracking branch 'kvakvs/u-speedlimits-tool-7' into featu…
kvakvs Dec 5, 2021
e9d42c5
New event for display MPH checkbox change (when switching road sign s…
kvakvs Dec 5, 2021
94b6e89
New event for display MPH checkbox change (when switching road sign s…
kvakvs Dec 5, 2021
d740f71
Fix after merging in base branch
kvakvs Dec 5, 2021
c09f33d
Window draghandle size fix; Reset defaults now working again.
kvakvs Dec 6, 2021
6d62ddf
Tooltips hide over GUI
kvakvs Dec 6, 2021
46a6039
Increase max overlay distance for road signs. Render road without ove…
kvakvs Dec 6, 2021
1a408d2
Aubergine10: Buttons contain themed signs, replace with blue sausages
kvakvs Dec 6, 2021
2506eca
Draw large blue speed limit defaults in lane mode
kvakvs Dec 6, 2021
ccf8a9d
Merge remote-tracking branch 'kvakvs/u-speedlimits-tool-7' into featu…
kvakvs Dec 6, 2021
a693735
Reload atlases in debug but keep in release
kvakvs Dec 6, 2021
01239c6
Merge remote-tracking branch 'kvakvs/u-speedlimits-tool-7' into featu…
kvakvs Dec 6, 2021
6bf4ee1
Merge remote-tracking branch 'kvakvs/u-speedlimits-tool-7' into featu…
kvakvs Dec 6, 2021
e878a12
For users without theme key in config, preselect German theme in the …
kvakvs Dec 6, 2021
39d2618
Green road signs; / and Delete keybinds; No numbered keybinds, no +- …
kvakvs Dec 6, 2021
6c8ce5f
Ctrl, select +- keys, slash, delete keys; Translations for new keybinds
kvakvs Dec 6, 2021
cb4b88f
Merge remote-tracking branch 'kvakvs/u-speedlimits-tool-7' into featu…
kvakvs Dec 6, 2021
491fc62
Form is now focused to allow keybinds to work; Esc now closes tool an…
kvakvs Dec 7, 2021
d0936ef
Overlay icons do not fade; UI intersection test now checks OSD panel.
kvakvs Dec 7, 2021
aa20d01
Unlimited button is now placed 2nd, is blue and behaves like a speed …
kvakvs Dec 7, 2021
73ab6fa
Keypress does not work as good as Keyup.
kvakvs Dec 7, 2021
061be92
Holding Alt shows defauls; Holding Alt in defaults shows override; Al…
kvakvs Dec 7, 2021
7d0dafe
Merge remote-tracking branch 'kvakvs/u-speedlimits-tool-7' into featu…
kvakvs Dec 7, 2021
4388cfd
Merge remote-tracking branch 'tmpe/master' into feature/dynamic-sign-…
kvakvs Dec 9, 2021
7492e68
Merge conflict project file fixed, dupe files removed
kvakvs Dec 9, 2021
3cffca3
Close window/deactivate speed limits on MPH option change
kvakvs Dec 9, 2021
9ecee42
Speed limit themes: Minor corrections for Egi's review
kvakvs Dec 10, 2021
fc66449
Window visibility is maintained when the window must be rebuilt; Fix …
kvakvs Dec 24, 2021
5a30aaf
Translations update
kvakvs Dec 24, 2021
8394e02
Merge branch 'master' into feature/dynamic-sign-themes
kvakvs Dec 24, 2021
262fb4e
Merge remote-tracking branch 'tmpe/master' into feature/dynamic-sign-…
kvakvs Dec 27, 2021
9b72e58
Sign themes use only one unit per theme; Use British signs as default…
kvakvs Dec 29, 2021
6d91794
Check the game is loaded before firing option changed events
kvakvs Dec 29, 2021
f2b571f
Null propagation when disposing of event subscribers where event unsu…
kvakvs Dec 30, 2021
971fef8
RebuildMenu regardless of isGameLoaded; Destroy gameobject not component
kvakvs Dec 30, 2021
0360e50
+translations for themes branch
kvakvs Dec 31, 2021
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
1 change: 0 additions & 1 deletion TLM/TLM/Lifecycle/TMPELifecycle.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
namespace TrafficManager.Lifecycle {
using CitiesHarmony.API;
using ColossalFramework;
using ColossalFramework.Globalization;
using ColossalFramework.UI;
using CSUtil.Commons;
Expand Down
7 changes: 1 addition & 6 deletions TLM/TLM/Manager/Impl/SpeedLimitManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -146,12 +146,7 @@ private bool MayHaveCustomSpeedLimits([NotNull] NetInfo.Lane laneInfo) {
laneIndex++;
}

switch (validLanes) {
case 0:
return null;
case > 0:
return meanSpeedLimit.Scale(1.0f / validLanes);
}
return validLanes == 0 ? null : meanSpeedLimit.Scale(1.0f / validLanes);
}

/// <summary>
Expand Down
2,923 changes: 0 additions & 2,923 deletions TLM/TLM/Resources/SpeedLimits/Kmh/roadsigns-km-german.svg

This file was deleted.

Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/100.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/105.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/110.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/120.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/125.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/130.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/135.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/140.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/15.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/20.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/25.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/30.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/35.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/40.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/5.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/50.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/55.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/60.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/65.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/70.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/80.png
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/85.png
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/90.png
Binary file added TLM/TLM/Resources/SpeedLimits/Kmph_Canada/95.png
10 changes: 8 additions & 2 deletions TLM/TLM/State/ConfigData/Main.cs
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,16 @@ public SpeedUnit GetDisplaySpeedUnit() => DisplaySpeedLimitsMph
? SpeedUnit.Mph
: SpeedUnit.Kmph;

// /// <summary>Selected theme for road signs when MPH is active.</summary>
// [Obsolete("This now becomes RoadSignTheme")]
// public MphSignStyle MphRoadSignStyle = MphSignStyle.SquareUS;

/// <summary>
/// Selected theme for road signs when MPH is active.
/// String key in SpeedLimitsTextures.Themes. Some themes support only MPH, and
/// some support both Km/h and MPH, changing this might affect
/// <see cref="DisplaySpeedLimitsMph"/>.
/// </summary>
public MphSignStyle MphRoadSignStyle = MphSignStyle.SquareUS;
public string RoadSignTheme = string.Empty;

public void AddDisplayedTutorialMessage(string messageKey) {
HashSet<string> newMessages = DisplayedTutorialMessages != null
Expand Down
120 changes: 81 additions & 39 deletions TLM/TLM/State/OptionsTabs/OptionsGeneralTab.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
namespace TrafficManager.State {
using System;
using System.Linq;
using TrafficManager.API.Traffic.Enums;
using ColossalFramework.UI;
using CSUtil.Commons;
Expand All @@ -10,6 +12,8 @@ namespace TrafficManager.State {
using TrafficManager.UI;
using UnityEngine;
using TrafficManager.Lifecycle;
using TrafficManager.State.ConfigData;
using TrafficManager.UI.Textures;

public static class OptionsGeneralTab {
private static UICheckBox _instantEffectsToggle;
Expand Down Expand Up @@ -38,8 +42,8 @@ public static class OptionsGeneralTab {
private static UICheckBox _ignoreDisabledModsToggle;

private static UICheckBox _displayMphToggle;
private static UIDropDown _roadSignsMphThemeDropdown;
private static int _roadSignMphStyleInt;

private static UIDropDown _roadSignsThemeDropdown;

private static UICheckBox _useUUI;

Expand Down Expand Up @@ -141,17 +145,18 @@ internal static void MakeSettings_General(ExtUITabstrip tabStrip) {

// General: Simulation
UIHelperBase simGroup = panelHelper.AddGroup(T("General.Group:Simulation"));
string[] simPrecisionOptions = new[] {
T("General.Dropdown.Option:Very low"),
T("General.Dropdown.Option:Low"),
T("General.Dropdown.Option:Medium"),
T("General.Dropdown.Option:High"),
T("General.Dropdown.Option:Very high"),
};
_simulationAccuracyDropdown = simGroup.AddDropdown(
text: T("General.Dropdown:Simulation accuracy") + ":",
options: new[] {
T("General.Dropdown.Option:Very low"),
T("General.Dropdown.Option:Low"),
T("General.Dropdown.Option:Medium"),
T("General.Dropdown.Option:High"),
T("General.Dropdown.Option:Very high"),
},
defaultSelection: (int)Options.simulationAccuracy,
eventCallback: OnSimulationAccuracyChanged) as UIDropDown;
text: T("General.Dropdown:Simulation accuracy") + ":",
options: simPrecisionOptions,
defaultSelection: (int)Options.simulationAccuracy,
eventCallback: OnSimulationAccuracyChanged) as UIDropDown;

_instantEffectsToggle = simGroup.AddCheckbox(
text: T("General.Checkbox:Apply AI changes right away"),
Expand All @@ -160,23 +165,29 @@ internal static void MakeSettings_General(ExtUITabstrip tabStrip) {
}

private static void SetupSpeedLimitsPanel(UIHelperBase generalGroup) {
Main mainConfig = GlobalConfig.Instance.Main;

_displayMphToggle = generalGroup.AddCheckbox(
text: Translation.SpeedLimits.Get("Checkbox:Display speed limits mph"),
defaultValue: GlobalConfig.Instance.Main.DisplaySpeedLimitsMph,
defaultValue: mainConfig.DisplaySpeedLimitsMph,
eventCallback: OnDisplayMphChanged) as UICheckBox;
string[] mphThemeOptions = {
Translation.SpeedLimits.Get("General.Theme.Option:Square US"),
Translation.SpeedLimits.Get("General.Theme.Option:Round UK"),
Translation.SpeedLimits.Get("General.Theme.Option:Round German"),
};
_roadSignMphStyleInt = (int)GlobalConfig.Instance.Main.MphRoadSignStyle;
_roadSignsMphThemeDropdown

string FormatThemeName(string themeName) {
return Translation.SpeedLimits.Get($"RoadSignTheme:{themeName}");
}

var themeOptions = SpeedLimitTextures.ThemeNames
.Select(FormatThemeName)
.ToArray();
int selectedThemeIndex = SpeedLimitTextures.ThemeNames.FindIndex(x => x == mainConfig.RoadSignTheme);
int defaultGermanSignsThemeIndex = SpeedLimitTextures.ThemeNames.FindIndex(x => x == SpeedLimitTextures.GERMAN_KM_SIGNS);
_roadSignsThemeDropdown
= generalGroup.AddDropdown(
text: Translation.SpeedLimits.Get("General.Dropdown:Road signs theme mph") + ":",
options: mphThemeOptions,
defaultSelection: _roadSignMphStyleInt,
eventCallback: OnRoadSignsMphThemeChanged) as UIDropDown;
_roadSignsMphThemeDropdown.width = 400;
text: Translation.SpeedLimits.Get("General.Dropdown:Road signs theme") + ":",
options: themeOptions,
defaultSelection: selectedThemeIndex >= 0 ? selectedThemeIndex : defaultGermanSignsThemeIndex,
eventCallback: OnRoadSignsThemeChanged) as UIDropDown;
_roadSignsThemeDropdown.width *= 2.0f;
}

private static void OnLanguageChanged(int newLanguageIndex) {
Expand Down Expand Up @@ -325,8 +336,25 @@ private static void OnIgnoreDisabledModsChanged(bool newValue) {
}

private static void OnDisplayMphChanged(bool newValue) {
Log._Debug($"Display MPH changed to {newValue}");
GlobalConfig.Instance.Main.DisplaySpeedLimitsMph = newValue;
bool supportedByTheme = newValue
? SpeedLimitTextures.ActiveTheme.SupportsMph
: SpeedLimitTextures.ActiveTheme.SupportsKmph;
Main mainConfig = GlobalConfig.Instance.Main;

if (!supportedByTheme) {
// Reset to German road signs theme
_roadSignsThemeDropdown.selectedIndex = SpeedLimitTextures.ThemeNames.FindIndex(
x => x == SpeedLimitTextures.GERMAN_KM_SIGNS);
mainConfig.RoadSignTheme = SpeedLimitTextures.GERMAN_KM_SIGNS;
Log.Info(
$"Display MPH changed to {newValue}, but was not supported by current theme, "
+ "so theme was also reset to German_Kmph");
} else {
Log.Info($"Display MPH changed to {newValue}");
}

mainConfig.DisplaySpeedLimitsMph = newValue;

GlobalConfig.WriteConfig();

ModUI.Instance.Events.DisplayMphChanged(newValue);
Expand All @@ -338,24 +366,38 @@ public static void SetDisplayInMph(bool value) {
}
}

private static void OnRoadSignsMphThemeChanged(int newRoadSignStyle) {
private static void OnRoadSignsThemeChanged(int newThemeIndex) {
if (!Options.IsGameLoaded()) {
return;
}

// The UI order is: US, UK, German
var newStyle = MphSignStyle.RoundGerman;
switch (newRoadSignStyle) {
case 1:
newStyle = MphSignStyle.RoundUK;
break;
case 0:
newStyle = MphSignStyle.SquareUS;
break;
var newTheme = SpeedLimitTextures.ThemeNames[newThemeIndex];

Main mainConfig = GlobalConfig.Instance.Main;
if (SpeedLimitTextures.OnThemeChanged(
newTheme: newTheme,
mphEnabled: mainConfig.DisplaySpeedLimitsMph))
{
Log.Info($"Road Sign theme changed to {newTheme}");
mainConfig.RoadSignTheme = newTheme;
} else {
Log.Info(
$"Road Sign theme was not changed to {newTheme} (doesn't support MPH={mainConfig.DisplaySpeedLimitsMph}). "
+ "Toggling MPH and trying once again.");

bool invertedMph = !mainConfig.DisplaySpeedLimitsMph;
if (SpeedLimitTextures.OnThemeChanged(
newTheme: newTheme,
mphEnabled: invertedMph))
{
Log.Info($"Road Sign theme changed to {newTheme}. ShowMPH config value is now {invertedMph}.");
_displayMphToggle.isChecked = invertedMph;
mainConfig.DisplaySpeedLimitsMph = invertedMph;
mainConfig.RoadSignTheme = newTheme;
}
}

Log._Debug($"Road Sign theme changed to {newStyle}");
GlobalConfig.Instance.Main.MphRoadSignStyle = newStyle;
GlobalConfig.WriteConfig();
}

private static void OnSimulationAccuracyChanged(int newAccuracy) {
Expand Down
Loading