Skip to content

Commit 62d4a1c

Browse files
committed
Fix for game version 1.25.x
1 parent 46c1d85 commit 62d4a1c

File tree

7 files changed

+286
-299
lines changed

7 files changed

+286
-299
lines changed
Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
using UnityEngine;
22

3-
namespace ExtendedColorSchemes
3+
namespace ExtendedColorSchemes;
4+
5+
public class ColorSchemeWithEditableName : PlayerSaveData.ColorScheme
46
{
5-
public class ColorSchemeWithEditableName : PlayerSaveData.ColorScheme
6-
{
7-
public string colorSchemeName;
8-
public bool supportsEnvironmentColorBoost;
9-
public Color environmentColor0Boost;
10-
public Color environmentColor1Boost;
7+
public readonly string ColorSchemeName;
8+
public readonly bool SupportsEnvironmentColorBoost;
119

12-
public ColorSchemeWithEditableName(string colorSchemeName, string colorSchemeId, Color saberAColor, Color saberBColor, Color environmentColor0, Color environmentColor1, Color obstaclesColor, bool supportsEnvironmentColorBoost, Color environmentColor0Boost, Color environmentColor1Boost)
13-
: base(colorSchemeId, saberAColor, saberBColor, environmentColor0, environmentColor1, obstaclesColor)
14-
{
15-
this.colorSchemeName = colorSchemeName;
16-
this.supportsEnvironmentColorBoost = supportsEnvironmentColorBoost;
17-
this.environmentColor0Boost = environmentColor0Boost;
18-
this.environmentColor1Boost = environmentColor1Boost;
19-
}
10+
public ColorSchemeWithEditableName(string colorSchemeName, string colorSchemeId, Color saberAColor, Color saberBColor, Color environmentColor0, Color environmentColor1, Color obstaclesColor, bool supportsEnvironmentColorBoost, Color environmentColor0Boost, Color environmentColor1Boost)
11+
: base(colorSchemeId, saberAColor, saberBColor, environmentColor0, environmentColor1, obstaclesColor, environmentColor0Boost, environmentColor1Boost)
12+
{
13+
ColorSchemeName = colorSchemeName;
14+
SupportsEnvironmentColorBoost = supportsEnvironmentColorBoost;
2015
}
21-
}
16+
}

ExtendedColorSchemes/Converters/ColorSchemeWithEditableNameConverter.cs

Lines changed: 53 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -6,67 +6,65 @@
66
using UnityEngine;
77
using Boolean = IPA.Config.Data.Boolean;
88

9-
namespace ExtendedColorSchemes.Converters
9+
namespace ExtendedColorSchemes.Converters;
10+
11+
internal class ColorSchemeWithEditableNameConverter : ValueConverter<ColorSchemeWithEditableName>
1012
{
11-
internal class ColorSchemeWithEditableNameConverter : ValueConverter<ColorSchemeWithEditableName>
13+
public override ColorSchemeWithEditableName? FromValue(Value? value, object parent)
1214
{
13-
public override ColorSchemeWithEditableName? FromValue(Value? value, object parent)
15+
if (value is not Map map)
16+
{
17+
return null;
18+
}
19+
if (!map.ContainsKey("colorSchemeName"))
20+
{
21+
map["colorSchemeName"] = Value.Text(string.Empty);
22+
}
23+
if (map["colorSchemeName"] is not Text colorSchemeName)
1424
{
15-
if (value is not Map map)
16-
{
17-
return null;
18-
}
19-
if (!map.ContainsKey("colorSchemeName"))
20-
{
21-
map["colorSchemeName"] = Value.Text(string.Empty);
22-
}
23-
if (map["colorSchemeName"] is not Text colorSchemeName)
24-
{
25-
throw new ArgumentException("colorSchemeName must be a string!");
26-
}
27-
if (map["colorSchemeId"] is not Text colorSchemeId)
28-
{
29-
throw new ArgumentException("colorSchemeId must be a string!");
30-
}
25+
throw new ArgumentException("colorSchemeName must be a string!");
26+
}
27+
if (map["colorSchemeId"] is not Text colorSchemeId)
28+
{
29+
throw new ArgumentException("colorSchemeId must be a string!");
30+
}
3131

32-
if (map["supportsEnvironmentColorBoost"] is not Boolean supportsEnvironmentColorBoost)
33-
{
34-
throw new ArgumentException("supportsEnvironmentColorBoost must be a boolean!");
35-
}
36-
37-
return new ColorSchemeWithEditableName(colorSchemeName.Value,
38-
colorSchemeId.Value,
39-
CustomValueTypeConverter<Color>.Deserialize(map["saberAColor"], parent),
40-
CustomValueTypeConverter<Color>.Deserialize(map["saberBColor"], parent),
41-
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor0"], parent),
42-
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor1"], parent),
43-
CustomValueTypeConverter<Color>.Deserialize(map["obstaclesColor"], parent),
44-
supportsEnvironmentColorBoost.Value,
45-
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor0Boost"], parent),
46-
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor1Boost"], parent));
32+
if (map["supportsEnvironmentColorBoost"] is not Boolean supportsEnvironmentColorBoost)
33+
{
34+
throw new ArgumentException("supportsEnvironmentColorBoost must be a boolean!");
4735
}
4836

49-
public override Value? ToValue(ColorSchemeWithEditableName? obj, object parent)
50-
{
51-
if (obj == null)
52-
{
53-
return null;
54-
}
37+
return new ColorSchemeWithEditableName(colorSchemeName.Value,
38+
colorSchemeId.Value,
39+
CustomValueTypeConverter<Color>.Deserialize(map["saberAColor"], parent),
40+
CustomValueTypeConverter<Color>.Deserialize(map["saberBColor"], parent),
41+
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor0"], parent),
42+
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor1"], parent),
43+
CustomValueTypeConverter<Color>.Deserialize(map["obstaclesColor"], parent),
44+
supportsEnvironmentColorBoost.Value,
45+
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor0Boost"], parent),
46+
CustomValueTypeConverter<Color>.Deserialize(map["environmentColor1Boost"], parent));
47+
}
5548

56-
return Value.From(new Dictionary<string, Value?>
57-
{
58-
{"colorSchemeName", Value.From(obj.colorSchemeName)},
59-
{"colorSchemeId", Value.From(obj.colorSchemeId)},
60-
{"saberAColor", CustomValueTypeConverter<Color>.Serialize(obj.saberAColor)},
61-
{"saberBColor", CustomValueTypeConverter<Color>.Serialize(obj.saberBColor)},
62-
{"environmentColor0", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor0)},
63-
{"environmentColor1", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor1)},
64-
{"obstaclesColor", CustomValueTypeConverter<Color>.Serialize(obj.obstaclesColor)},
65-
{"supportsEnvironmentColorBoost", Value.From(obj.supportsEnvironmentColorBoost)},
66-
{"environmentColor0Boost", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor0Boost)},
67-
{"environmentColor1Boost", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor1Boost)}
68-
});
49+
public override Value? ToValue(ColorSchemeWithEditableName? obj, object parent)
50+
{
51+
if (obj == null)
52+
{
53+
return null;
6954
}
70-
}
7155

72-
}
56+
return Value.From(new Dictionary<string, Value?>
57+
{
58+
{"colorSchemeName", Value.From(obj.ColorSchemeName)},
59+
{"colorSchemeId", Value.From(obj.colorSchemeId)},
60+
{"saberAColor", CustomValueTypeConverter<Color>.Serialize(obj.saberAColor)},
61+
{"saberBColor", CustomValueTypeConverter<Color>.Serialize(obj.saberBColor)},
62+
{"environmentColor0", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor0)},
63+
{"environmentColor1", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor1)},
64+
{"obstaclesColor", CustomValueTypeConverter<Color>.Serialize(obj.obstaclesColor)},
65+
{"supportsEnvironmentColorBoost", Value.From(obj.SupportsEnvironmentColorBoost)},
66+
{"environmentColor0Boost", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor0Boost)},
67+
{"environmentColor1Boost", CustomValueTypeConverter<Color>.Serialize(obj.environmentColor1Boost)}
68+
});
69+
}
70+
}

ExtendedColorSchemes/HarmonyPatches/ColorSchemesSettings.cs

Lines changed: 73 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,95 +4,94 @@
44
using HarmonyLib;
55
using Polyglot;
66

7-
namespace ExtendedColorSchemes.HarmonyPatches
7+
namespace ExtendedColorSchemes.HarmonyPatches;
8+
9+
[HarmonyPatch(typeof(ColorSchemesSettings), MethodType.Constructor, typeof(ColorScheme[]))]
10+
internal class ColorSchemesSettingsConstructor
811
{
9-
[HarmonyPatch(typeof(ColorSchemesSettings), MethodType.Constructor, typeof(ColorScheme[]))]
10-
internal class ColorSchemesSettingsConstructor
11-
{
12-
public static int NumberOfDefaultUserColorSchemes;
13-
public static string? DefaultSelectedColorSchemeId;
14-
public static ColorScheme[]? DefaultColorSchemes;
12+
public static int NumberOfDefaultUserColorSchemes;
13+
public static string? DefaultSelectedColorSchemeId;
14+
public static ColorScheme[]? DefaultColorSchemes;
1515

16-
private const int NumberOfColorSchemesToAddByDefault = 8;
17-
private static readonly int NumberOfColorSchemesToAdd = Plugin.Config.colorSchemes.Count > 0 ? Plugin.Config.colorSchemes.Count : NumberOfColorSchemesToAddByDefault;
16+
private const int NumberOfColorSchemesToAddByDefault = 8;
17+
private static readonly int NumberOfColorSchemesToAdd = Plugin.Config.colorSchemes.Count > 0 ? Plugin.Config.colorSchemes.Count : NumberOfColorSchemesToAddByDefault;
1818

19-
internal static void Prefix(ref ColorScheme[] colorSchemes)
20-
{
21-
DefaultColorSchemes = colorSchemes;
22-
NumberOfDefaultUserColorSchemes = colorSchemes.Count(x => x.isEditable);
23-
string translation = Localization.Get("CUSTOM_0_COLOR_SCHEME");
24-
var regex = new Regex(@"\d+", RegexOptions.None);
25-
26-
List<ColorScheme> colorSchemesList = colorSchemes.ToList();
19+
internal static void Prefix(ref ColorScheme[] colorSchemes)
20+
{
21+
DefaultColorSchemes = colorSchemes;
22+
NumberOfDefaultUserColorSchemes = colorSchemes.Count(x => x.isEditable);
23+
string translation = Localization.Get("CUSTOM_0_COLOR_SCHEME");
24+
var regex = new Regex(@"\d+", RegexOptions.None);
2725

28-
var first = colorSchemesList.First();
29-
var firstWithBoostColors = colorSchemesList.FirstOrDefault(x => x.supportsEnvironmentColorBoost);
26+
List<ColorScheme> colorSchemesList = colorSchemes.ToList();
3027

31-
for (var i = 0; i < NumberOfColorSchemesToAdd; i++)
32-
{
33-
ColorSchemeWithEditableName? savedColorScheme = Plugin.Config.colorSchemes.Count > i ? Plugin.Config.colorSchemes[i] : null;
34-
colorSchemesList.Insert(i + NumberOfDefaultUserColorSchemes, new ColorScheme(
35-
$"User{i + NumberOfDefaultUserColorSchemes}",
36-
$"_UNLOCALIZED_",
37-
true,
38-
!string.IsNullOrWhiteSpace(savedColorScheme?.colorSchemeName) ? savedColorScheme?.colorSchemeName : regex.Replace(translation, (i + NumberOfDefaultUserColorSchemes).ToString()),
39-
first.isEditable,
40-
savedColorScheme?.saberAColor ?? first.saberAColor,
41-
savedColorScheme?.saberBColor ?? first.saberBColor,
42-
savedColorScheme?.environmentColor0 ?? first.environmentColor0,
43-
savedColorScheme?.environmentColor1 ?? first.environmentColor1,
44-
savedColorScheme?.supportsEnvironmentColorBoost ?? firstWithBoostColors?.supportsEnvironmentColorBoost ?? first.supportsEnvironmentColorBoost,
45-
savedColorScheme?.environmentColor0Boost ?? firstWithBoostColors?.environmentColor0Boost ?? first.environmentColor0Boost,
46-
savedColorScheme?.environmentColor1Boost ?? firstWithBoostColors?.environmentColor1Boost ?? first.environmentColor1Boost,
47-
savedColorScheme?.obstaclesColor ?? first.obstaclesColor));
48-
}
28+
var first = colorSchemesList.First();
29+
var firstWithBoostColors = colorSchemesList.FirstOrDefault(x => x.supportsEnvironmentColorBoost);
4930

50-
if (Plugin.Config.selectedColorSchemeId != null && colorSchemesList.All(x => x.colorSchemeId != Plugin.Config.selectedColorSchemeId))
51-
{
52-
Plugin.Log.Warn($"Selected color scheme doesn't exist in the collection, restoring default value \"{DefaultSelectedColorSchemeId}\".");
53-
Plugin.Config.selectedColorSchemeId = DefaultSelectedColorSchemeId;
54-
}
31+
for (var i = 0; i < NumberOfColorSchemesToAdd; i++)
32+
{
33+
ColorSchemeWithEditableName? savedColorScheme = Plugin.Config.colorSchemes.Count > i ? Plugin.Config.colorSchemes[i] : null;
34+
colorSchemesList.Insert(i + NumberOfDefaultUserColorSchemes, new ColorScheme(
35+
$"User{i + NumberOfDefaultUserColorSchemes}",
36+
$"_UNLOCALIZED_",
37+
true,
38+
!string.IsNullOrWhiteSpace(savedColorScheme?.ColorSchemeName) ? savedColorScheme?.ColorSchemeName : regex.Replace(translation, (i + NumberOfDefaultUserColorSchemes).ToString()),
39+
first.isEditable,
40+
savedColorScheme?.saberAColor ?? first.saberAColor,
41+
savedColorScheme?.saberBColor ?? first.saberBColor,
42+
savedColorScheme?.environmentColor0 ?? first.environmentColor0,
43+
savedColorScheme?.environmentColor1 ?? first.environmentColor1,
44+
savedColorScheme?.SupportsEnvironmentColorBoost ?? firstWithBoostColors?.supportsEnvironmentColorBoost ?? first.supportsEnvironmentColorBoost,
45+
savedColorScheme?.environmentColor0Boost ?? firstWithBoostColors?.environmentColor0Boost ?? first.environmentColor0Boost,
46+
savedColorScheme?.environmentColor1Boost ?? firstWithBoostColors?.environmentColor1Boost ?? first.environmentColor1Boost,
47+
savedColorScheme?.obstaclesColor ?? first.obstaclesColor));
48+
}
5549

56-
colorSchemes = colorSchemesList.ToArray();
50+
if (Plugin.Config.selectedColorSchemeId != null && colorSchemesList.All(x => x.colorSchemeId != Plugin.Config.selectedColorSchemeId))
51+
{
52+
Plugin.Log.Warn($"Selected color scheme doesn't exist in the collection, restoring default value \"{DefaultSelectedColorSchemeId}\".");
53+
Plugin.Config.selectedColorSchemeId = DefaultSelectedColorSchemeId;
5754
}
55+
56+
colorSchemes = colorSchemesList.ToArray();
5857
}
58+
}
5959

60-
//[HarmonyPatch(typeof(ColorSchemesSettings), "selectedColorSchemeId", MethodType.Setter)]
61-
internal class ColorSchemesSettingsSelectedColorSchemeIdSetter
60+
//[HarmonyPatch(typeof(ColorSchemesSettings), "selectedColorSchemeId", MethodType.Setter)]
61+
internal class ColorSchemesSettingsSelectedColorSchemeIdSetter
62+
{
63+
//[HarmonyPriority(Priority.HigherThanNormal)]
64+
internal static void Prefix(ref string? value)
6265
{
63-
//[HarmonyPriority(Priority.HigherThanNormal)]
64-
internal static void Prefix(ref string? value)
66+
if (LoadFromCurrentVersionPatch.PlayerDataIsCorrupted)
6567
{
66-
if (LoadFromCurrentVersionPatch.PlayerDataIsCorrupted)
67-
{
68-
Plugin.Log.Error("Player data is corrupted, aborting.");
69-
return;
70-
}
68+
Plugin.Log.Error("Player data is corrupted, aborting.");
69+
return;
70+
}
7171

72-
string? colorSchemeId = value;
73-
if (ColorSchemesSettingsConstructor.DefaultColorSchemes != null && ColorSchemesSettingsConstructor.DefaultColorSchemes.Any(x => x.colorSchemeId == colorSchemeId))
74-
{
75-
ColorSchemesSettingsConstructor.DefaultSelectedColorSchemeId = value;
76-
}
72+
string? colorSchemeId = value;
73+
if (ColorSchemesSettingsConstructor.DefaultColorSchemes != null && ColorSchemesSettingsConstructor.DefaultColorSchemes.Any(x => x.colorSchemeId == colorSchemeId))
74+
{
75+
ColorSchemesSettingsConstructor.DefaultSelectedColorSchemeId = value;
76+
}
7777

78-
if (!LoadFromCurrentVersionPatch.IsCalledByLoadFromCurrentVersion)
79-
{
80-
Plugin.Log.Info("Not called by LoadFromCurrentVersion, aborting.");
81-
return;
82-
}
78+
if (!LoadFromCurrentVersionPatch.IsCalledByLoadFromCurrentVersion)
79+
{
80+
Plugin.Log.Info("Not called by LoadFromCurrentVersion, aborting.");
81+
return;
82+
}
8383

84-
Plugin.Log.Info($"DefaultSelectedColorSchemeId={value}");
84+
Plugin.Log.Info($"DefaultSelectedColorSchemeId={value}");
8585

86-
if (Plugin.Config.selectedColorSchemeId == null)
87-
{
88-
Plugin.Config.selectedColorSchemeId = value;
89-
Plugin.Log.Info($"Plugin.Config.selectedColorSchemeId={value}");
90-
}
91-
else
92-
{
93-
value = Plugin.Config.selectedColorSchemeId;
94-
Plugin.Log.Info($"value={Plugin.Config.selectedColorSchemeId}");
95-
}
86+
if (Plugin.Config.selectedColorSchemeId == null)
87+
{
88+
Plugin.Config.selectedColorSchemeId = value;
89+
Plugin.Log.Info($"Plugin.Config.selectedColorSchemeId={value}");
90+
}
91+
else
92+
{
93+
value = Plugin.Config.selectedColorSchemeId;
94+
Plugin.Log.Info($"value={Plugin.Config.selectedColorSchemeId}");
9695
}
9796
}
98-
}
97+
}

0 commit comments

Comments
 (0)