Skip to content

Commit e94cdae

Browse files
committed
Some more.
1 parent b1ca073 commit e94cdae

11 files changed

+70
-55
lines changed

Penumbra/Import/TexToolsImporter.ModPack.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ private DirectoryInfo ImportExtendedV2ModPack(ZipArchive extractedModPack, strin
153153

154154
// Iterate through all pages
155155
var options = new List<ISubMod>();
156-
var groupPriority = 0;
156+
var groupPriority = ModPriority.Default;
157157
var groupNames = new HashSet<string>();
158158
foreach (var page in modList.ModPackPages)
159159
{
@@ -209,9 +209,9 @@ private DirectoryInfo ImportExtendedV2ModPack(ZipArchive extractedModPack, strin
209209
}
210210
}
211211

212-
_modManager.Creator.CreateOptionGroup(_currentModDirectory, group.SelectionType, name, groupPriority, groupPriority,
212+
_modManager.Creator.CreateOptionGroup(_currentModDirectory, group.SelectionType, name, groupPriority, groupPriority.Value,
213213
defaultSettings ?? Setting.Zero, group.Description, options);
214-
++groupPriority;
214+
groupPriority += 1;
215215
}
216216
}
217217
}

Penumbra/Mods/Manager/ModMigration.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,9 @@ private static bool MigrateV0ToV1(ModCreator creator, SaveService saveService, M
6161
if (fileVersion > 0)
6262
return false;
6363

64-
var swaps = json["FileSwaps"]?.ToObject<Dictionary<Utf8GamePath, FullPath>>()
65-
?? new Dictionary<Utf8GamePath, FullPath>();
66-
var groups = json["Groups"]?.ToObject<Dictionary<string, OptionGroupV0>>() ?? new Dictionary<string, OptionGroupV0>();
67-
var priority = 1;
64+
var swaps = json["FileSwaps"]?.ToObject<Dictionary<Utf8GamePath, FullPath>>() ?? [];
65+
var groups = json["Groups"]?.ToObject<Dictionary<string, OptionGroupV0>>() ?? [];
66+
var priority = new ModPriority(1);
6867
var seenMetaFiles = new HashSet<FullPath>();
6968
foreach (var group in groups.Values)
7069
ConvertGroup(creator, mod, group, ref priority, seenMetaFiles);
@@ -116,7 +115,8 @@ private static bool MigrateV0ToV1(ModCreator creator, SaveService saveService, M
116115
return true;
117116
}
118117

119-
private static void ConvertGroup(ModCreator creator, Mod mod, OptionGroupV0 group, ref int priority, HashSet<FullPath> seenMetaFiles)
118+
private static void ConvertGroup(ModCreator creator, Mod mod, OptionGroupV0 group, ref ModPriority priority,
119+
HashSet<FullPath> seenMetaFiles)
120120
{
121121
if (group.Options.Count == 0)
122122
return;
@@ -125,7 +125,7 @@ private static void ConvertGroup(ModCreator creator, Mod mod, OptionGroupV0 grou
125125
{
126126
case GroupType.Multi:
127127

128-
var optionPriority = 0;
128+
var optionPriority = ModPriority.Default;
129129
var newMultiGroup = new MultiModGroup()
130130
{
131131
Name = group.GroupName,

Penumbra/Mods/Manager/ModOptionEditor.cs

+10-8
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@ public enum ModOptionChangeType
3434

3535
public class ModOptionEditor(CommunicatorService communicator, SaveService saveService, Configuration config)
3636
{
37-
38-
3937
/// <summary> Change the type of a group given by mod and index to type, if possible. </summary>
4038
public void ChangeModGroupType(Mod mod, int groupIdx, GroupType type)
4139
{
@@ -86,7 +84,7 @@ public void AddModGroup(Mod mod, GroupType type, string newName, SaveType saveTy
8684
if (!VerifyFileName(mod, null, newName, true))
8785
return;
8886

89-
var maxPriority = mod.Groups.Count == 0 ? 0 : mod.Groups.Max(o => o.Priority) + 1;
87+
var maxPriority = mod.Groups.Count == 0 ? ModPriority.Default : mod.Groups.Max(o => o.Priority) + 1;
9088

9189
mod.Groups.Add(type == GroupType.Multi
9290
? new MultiModGroup
@@ -169,7 +167,7 @@ public void ChangeOptionDescription(Mod mod, int groupIdx, int optionIdx, string
169167
}
170168

171169
/// <summary> Change the internal priority of the given option group. </summary>
172-
public void ChangeGroupPriority(Mod mod, int groupIdx, int newPriority)
170+
public void ChangeGroupPriority(Mod mod, int groupIdx, ModPriority newPriority)
173171
{
174172
var group = mod.Groups[groupIdx];
175173
if (group.Priority == newPriority)
@@ -186,7 +184,7 @@ public void ChangeGroupPriority(Mod mod, int groupIdx, int newPriority)
186184
}
187185

188186
/// <summary> Change the internal priority of the given option. </summary>
189-
public void ChangeOptionPriority(Mod mod, int groupIdx, int optionIdx, int newPriority)
187+
public void ChangeOptionPriority(Mod mod, int groupIdx, int optionIdx, ModPriority newPriority)
190188
{
191189
switch (mod.Groups[groupIdx])
192190
{
@@ -240,7 +238,7 @@ public void AddOption(Mod mod, int groupIdx, string newName, SaveType saveType =
240238
s.OptionData.Add(subMod);
241239
break;
242240
case MultiModGroup m:
243-
m.PrioritizedOptions.Add((subMod, 0));
241+
m.PrioritizedOptions.Add((subMod, ModPriority.Default));
244242
break;
245243
}
246244

@@ -263,8 +261,12 @@ public void AddOption(Mod mod, int groupIdx, string newName, SaveType saveType =
263261
return ((SubMod)group[^1], true);
264262
}
265263

266-
/// <summary> Add an existing option to a given group with a given priority. </summary>
267-
public void AddOption(Mod mod, int groupIdx, ISubMod option, int priority = 0)
264+
/// <summary> Add an existing option to a given group with default priority. </summary>
265+
public void AddOption(Mod mod, int groupIdx, ISubMod option)
266+
=> AddOption(mod, groupIdx, option, ModPriority.Default);
267+
268+
/// <summary> Add an existing option to a given group with a given priority. </summary>
269+
public void AddOption(Mod mod, int groupIdx, ISubMod option, ModPriority priority)
268270
{
269271
if (option is not SubMod o)
270272
return;

Penumbra/Mods/ModCreator.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ public void IncorporateAllMetaChanges(Mod mod, bool delete)
235235

236236
/// <summary> Create a file for an option group from given data. </summary>
237237
public void CreateOptionGroup(DirectoryInfo baseFolder, GroupType type, string name,
238-
int priority, int index, Setting defaultSettings, string desc, IEnumerable<ISubMod> subMods)
238+
ModPriority priority, int index, Setting defaultSettings, string desc, IEnumerable<ISubMod> subMods)
239239
{
240240
switch (type)
241241
{
@@ -248,7 +248,7 @@ public void CreateOptionGroup(DirectoryInfo baseFolder, GroupType type, string n
248248
Priority = priority,
249249
DefaultSettings = defaultSettings,
250250
};
251-
group.PrioritizedOptions.AddRange(subMods.OfType<SubMod>().Select((s, idx) => (s, idx)));
251+
group.PrioritizedOptions.AddRange(subMods.OfType<SubMod>().Select((s, idx) => (s, new ModPriority(idx))));
252252
_saveService.ImmediateSaveSync(new ModSaveGroup(baseFolder, group, index, Config.ReplaceNonAsciiOnImport));
253253
break;
254254
}

Penumbra/Mods/Subclasses/IModGroup.cs

+11-7
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@ public interface IModGroup : IEnumerable<ISubMod>
88
{
99
public const int MaxMultiOptions = 32;
1010

11-
public string Name { get; }
12-
public string Description { get; }
13-
public GroupType Type { get; }
14-
public int Priority { get; }
15-
public Setting DefaultSettings { get; set; }
11+
public string Name { get; }
12+
public string Description { get; }
13+
public GroupType Type { get; }
14+
public ModPriority Priority { get; }
15+
public Setting DefaultSettings { get; set; }
1616

17-
public int OptionPriority(Index optionIdx);
17+
public ModPriority OptionPriority(Index optionIdx);
1818

1919
public ISubMod this[Index idx] { get; }
2020

@@ -94,7 +94,11 @@ public void Save(StreamWriter writer)
9494
j.WritePropertyName("Options");
9595
j.WriteStartArray();
9696
for (var idx = 0; idx < _group.Count; ++idx)
97-
ISubMod.WriteSubMod(j, serializer, _group[idx], _basePath, _group.Type == GroupType.Multi ? _group.OptionPriority(idx) : null);
97+
ISubMod.WriteSubMod(j, serializer, _group[idx], _basePath, _group.Type switch
98+
{
99+
GroupType.Multi => _group.OptionPriority(idx),
100+
_ => null,
101+
});
98102

99103
j.WriteEndArray();
100104
j.WriteEndObject();

Penumbra/Mods/Subclasses/ISubMod.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public interface ISubMod
1616

1717
public bool IsDefault { get; }
1818

19-
public static void WriteSubMod(JsonWriter j, JsonSerializer serializer, ISubMod mod, DirectoryInfo basePath, int? priority)
19+
public static void WriteSubMod(JsonWriter j, JsonSerializer serializer, ISubMod mod, DirectoryInfo basePath, ModPriority? priority)
2020
{
2121
j.WriteStartObject();
2222
j.WritePropertyName(nameof(Name));
@@ -26,7 +26,7 @@ public static void WriteSubMod(JsonWriter j, JsonSerializer serializer, ISubMod
2626
if (priority != null)
2727
{
2828
j.WritePropertyName(nameof(IModGroup.Priority));
29-
j.WriteValue(priority.Value);
29+
j.WriteValue(priority.Value.Value);
3030
}
3131

3232
j.WritePropertyName(nameof(mod.Files));

Penumbra/Mods/Subclasses/ModPriority.cs

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ public readonly record struct ModPriority(int Value) :
88
IAdditionOperators<ModPriority, ModPriority, ModPriority>,
99
IAdditionOperators<ModPriority, int, ModPriority>,
1010
ISubtractionOperators<ModPriority, ModPriority, ModPriority>,
11-
ISubtractionOperators<ModPriority, int, ModPriority>
11+
ISubtractionOperators<ModPriority, int, ModPriority>,
12+
IIncrementOperators<ModPriority>,
13+
IComparable<ModPriority>
1214
{
1315
public static readonly ModPriority Default = new(0);
1416
public static readonly ModPriority MaxValue = new(int.MaxValue);
@@ -58,4 +60,10 @@ public override ModPriority ReadJson(JsonReader reader, Type objectType, ModPrio
5860

5961
public static ModPriority operator -(ModPriority left, int right)
6062
=> new(left.Value - right);
63+
64+
public static ModPriority operator ++(ModPriority value)
65+
=> new(value.Value + 1);
66+
67+
public int CompareTo(ModPriority other)
68+
=> Value.CompareTo(other.Value);
6169
}

Penumbra/Mods/Subclasses/MultiModGroup.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@ public sealed class MultiModGroup : IModGroup
1414
public GroupType Type
1515
=> GroupType.Multi;
1616

17-
public string Name { get; set; } = "Group";
18-
public string Description { get; set; } = "A non-exclusive group of settings.";
19-
public int Priority { get; set; }
20-
public Setting DefaultSettings { get; set; }
17+
public string Name { get; set; } = "Group";
18+
public string Description { get; set; } = "A non-exclusive group of settings.";
19+
public ModPriority Priority { get; set; }
20+
public Setting DefaultSettings { get; set; }
2121

22-
public int OptionPriority(Index idx)
22+
public ModPriority OptionPriority(Index idx)
2323
=> PrioritizedOptions[idx].Priority;
2424

2525
public ISubMod this[Index idx]
@@ -29,7 +29,7 @@ public ISubMod this[Index idx]
2929
public int Count
3030
=> PrioritizedOptions.Count;
3131

32-
public readonly List<(SubMod Mod, int Priority)> PrioritizedOptions = new();
32+
public readonly List<(SubMod Mod, ModPriority Priority)> PrioritizedOptions = [];
3333

3434
public IEnumerator<ISubMod> GetEnumerator()
3535
=> PrioritizedOptions.Select(o => o.Mod).GetEnumerator();
@@ -43,7 +43,7 @@ IEnumerator IEnumerable.GetEnumerator()
4343
{
4444
Name = json[nameof(Name)]?.ToObject<string>() ?? string.Empty,
4545
Description = json[nameof(Description)]?.ToObject<string>() ?? string.Empty,
46-
Priority = json[nameof(Priority)]?.ToObject<int>() ?? 0,
46+
Priority = json[nameof(Priority)]?.ToObject<ModPriority>() ?? ModPriority.Default,
4747
DefaultSettings = json[nameof(DefaultSettings)]?.ToObject<Setting>() ?? Setting.Zero,
4848
};
4949
if (ret.Name.Length == 0)

Penumbra/Mods/Subclasses/SingleModGroup.cs

+8-8
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@ public sealed class SingleModGroup : IModGroup
1212
public GroupType Type
1313
=> GroupType.Single;
1414

15-
public string Name { get; set; } = "Option";
16-
public string Description { get; set; } = "A mutually exclusive group of settings.";
17-
public int Priority { get; set; }
18-
public Setting DefaultSettings { get; set; }
15+
public string Name { get; set; } = "Option";
16+
public string Description { get; set; } = "A mutually exclusive group of settings.";
17+
public ModPriority Priority { get; set; }
18+
public Setting DefaultSettings { get; set; }
1919

2020
public readonly List<SubMod> OptionData = [];
2121

22-
public int OptionPriority(Index _)
22+
public ModPriority OptionPriority(Index _)
2323
=> Priority;
2424

2525
public ISubMod this[Index idx]
@@ -42,7 +42,7 @@ IEnumerator IEnumerable.GetEnumerator()
4242
{
4343
Name = json[nameof(Name)]?.ToObject<string>() ?? string.Empty,
4444
Description = json[nameof(Description)]?.ToObject<string>() ?? string.Empty,
45-
Priority = json[nameof(Priority)]?.ToObject<int>() ?? 0,
45+
Priority = json[nameof(Priority)]?.ToObject<ModPriority>() ?? ModPriority.Default,
4646
DefaultSettings = json[nameof(DefaultSettings)]?.ToObject<Setting>() ?? Setting.Zero,
4747
};
4848
if (ret.Name.Length == 0)
@@ -72,9 +72,9 @@ public IModGroup Convert(GroupType type)
7272
Name = Name,
7373
Description = Description,
7474
Priority = Priority,
75-
DefaultSettings = Setting.Multi((int) DefaultSettings.Value),
75+
DefaultSettings = Setting.Multi((int)DefaultSettings.Value),
7676
};
77-
multi.PrioritizedOptions.AddRange(OptionData.Select((o, i) => (o, i)));
77+
multi.PrioritizedOptions.AddRange(OptionData.Select((o, i) => (o, new ModPriority(i))));
7878
return multi;
7979
default: throw new ArgumentOutOfRangeException(nameof(type), type, null);
8080
}

Penumbra/Mods/Subclasses/SubMod.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void SetPosition(int groupIdx, int optionIdx)
5353
OptionIdx = optionIdx;
5454
}
5555

56-
public void Load(DirectoryInfo basePath, JToken json, out int priority)
56+
public void Load(DirectoryInfo basePath, JToken json, out ModPriority priority)
5757
{
5858
FileData.Clear();
5959
FileSwapData.Clear();
@@ -62,7 +62,7 @@ public void Load(DirectoryInfo basePath, JToken json, out int priority)
6262
// Every option has a name, but priorities are only relevant for multi group options.
6363
Name = json[nameof(ISubMod.Name)]?.ToObject<string>() ?? string.Empty;
6464
Description = json[nameof(ISubMod.Description)]?.ToObject<string>() ?? string.Empty;
65-
priority = json[nameof(IModGroup.Priority)]?.ToObject<int>() ?? 0;
65+
priority = json[nameof(IModGroup.Priority)]?.ToObject<ModPriority>() ?? ModPriority.Default;
6666

6767
var files = (JObject?)json[nameof(Files)];
6868
if (files != null)

Penumbra/UI/ModsTab/ModPanelEditTab.cs

+10-9
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,8 @@ private static void EditOption(ModPanelEditTab panel, IModGroup group, int group
511511
{
512512
var isDefaultOption = group.DefaultSettings.HasFlag(optionIdx);
513513
if (ImGui.Checkbox("##default", ref isDefaultOption))
514-
panel._modManager.OptionEditor.ChangeModGroupDefaultOption(panel._mod, groupIdx, group.DefaultSettings.SetBit(optionIdx, isDefaultOption));
514+
panel._modManager.OptionEditor.ChangeModGroupDefaultOption(panel._mod, groupIdx,
515+
group.DefaultSettings.SetBit(optionIdx, isDefaultOption));
515516

516517
ImGuiUtil.HoverTooltip($"{(isDefaultOption ? "Disable" : "Enable")} {option.Name} per default in this group.");
517518
}
@@ -669,10 +670,10 @@ private static class Input
669670
public const int Description = -7;
670671

671672
// Temporary strings
672-
private static string? _currentEdit;
673-
private static int? _currentGroupPriority;
674-
private static int _currentField = None;
675-
private static int _optionIndex = None;
673+
private static string? _currentEdit;
674+
private static ModPriority? _currentGroupPriority;
675+
private static int _currentField = None;
676+
private static int _optionIndex = None;
676677

677678
public static void Reset()
678679
{
@@ -705,13 +706,13 @@ public static bool Text(string label, int field, int option, string oldValue, ou
705706
return false;
706707
}
707708

708-
public static bool Priority(string label, int field, int option, int oldValue, out int value, float width)
709+
public static bool Priority(string label, int field, int option, ModPriority oldValue, out ModPriority value, float width)
709710
{
710-
var tmp = field == _currentField && option == _optionIndex ? _currentGroupPriority ?? oldValue : oldValue;
711+
var tmp = (field == _currentField && option == _optionIndex ? _currentGroupPriority ?? oldValue : oldValue).Value;
711712
ImGui.SetNextItemWidth(width);
712713
if (ImGui.InputInt(label, ref tmp, 0, 0))
713714
{
714-
_currentGroupPriority = tmp;
715+
_currentGroupPriority = new ModPriority(tmp);
715716
_optionIndex = option;
716717
_currentField = field;
717718
}
@@ -724,7 +725,7 @@ public static bool Priority(string label, int field, int option, int oldValue, o
724725
return ret;
725726
}
726727

727-
value = 0;
728+
value = ModPriority.Default;
728729
return false;
729730
}
730731
}

0 commit comments

Comments
 (0)