1
0
Fork 0

Config: reduce repetition

It may look complicated, but it reduced references to each individual
entry from almost ten to just 4.
This commit is contained in:
ivan tkachenko 2025-07-19 17:28:01 +03:00
parent 601ecf8887
commit 3e751c0d8d
1 changed files with 25 additions and 37 deletions

View File

@ -1334,6 +1334,7 @@ namespace MuzikaGromche
const string section = "Timings"; const string section = "Timings";
var colorTransitionRange = new AcceptableValueRange<float>(0f, 1f); var colorTransitionRange = new AcceptableValueRange<float>(0f, 1f);
// Declare and initialize early to avoid "Use of unassigned local variable" // Declare and initialize early to avoid "Use of unassigned local variable"
List<(Action<Track> Load, Action Apply)> entries = [];
SyncedEntry<bool> overrideTimingsSyncedEntry = null; SyncedEntry<bool> overrideTimingsSyncedEntry = null;
SyncedEntry<float> beatsOffsetSyncedEntry = null; SyncedEntry<float> beatsOffsetSyncedEntry = null;
SyncedEntry<float> colorTransitionInSyncedEntry = null; SyncedEntry<float> colorTransitionInSyncedEntry = null;
@ -1379,56 +1380,43 @@ namespace MuzikaGromche
CanModifyCallback = CanModifyIfHost, CanModifyCallback = CanModifyIfHost,
})); }));
CSyncHackAddSyncedEntry(beatsOffsetSyncedEntry); registerStruct(beatsOffsetSyncedEntry, t => t._BeatsOffset, x => BeatsOffsetOverride = x);
CSyncHackAddSyncedEntry(colorTransitionInSyncedEntry); registerStruct(colorTransitionInSyncedEntry, t => t._ColorTransitionIn, x => ColorTransitionInOverride = x);
CSyncHackAddSyncedEntry(colorTransitionOutSyncedEntry); registerStruct(colorTransitionOutSyncedEntry, t => t._ColorTransitionOut, x => ColorTransitionOutOverride = x);
CSyncHackAddSyncedEntry(colorTransitionEasingSyncedEntry); registerClass(colorTransitionEasingSyncedEntry, t => t._ColorTransitionEasing.Name, x => ColorTransitionEasingOverride = x);
beatsOffsetSyncedEntry.SyncHostToLocal(); void register<T>(SyncedEntry<T> syncedEntry, Func<Track, T> getter, Action applier)
colorTransitionInSyncedEntry.SyncHostToLocal(); {
colorTransitionOutSyncedEntry.SyncHostToLocal(); CSyncHackAddSyncedEntry(syncedEntry);
colorTransitionEasingSyncedEntry.SyncHostToLocal(); syncedEntry.SyncHostToLocal();
syncedEntry.Changed += (sender, args) => applier();
void loader(Track track)
{
// if track is null, set everything to defaults
syncedEntry.LocalValue = track == null ? (T)syncedEntry.Entry.DefaultValue : getter(track);
}
entries.Add((loader, applier));
}
beatsOffsetSyncedEntry.Changed += (sender, args) => apply(); void registerStruct<T>(SyncedEntry<T> syncedEntry, Func<Track, T> getter, Action<T?> setter) where T: struct =>
colorTransitionInSyncedEntry.Changed += (sender, args) => apply(); register(syncedEntry, getter, () => setter.Invoke(overrideTimingsSyncedEntry.Value ? syncedEntry.Value : null));
colorTransitionOutSyncedEntry.Changed += (sender, args) => apply(); void registerClass<T>(SyncedEntry<T> syncedEntry, Func<Track, T> getter, Action<T> setter) where T: class =>
colorTransitionEasingSyncedEntry.Changed += (sender, args) => apply(); register(syncedEntry, getter, () => setter.Invoke(overrideTimingsSyncedEntry.Value ? syncedEntry.Value : null));
void load() void load()
{ {
// if track is null, set everything to defaults
var track = Plugin.CurrentTrack; var track = Plugin.CurrentTrack;
if (track == null) foreach (var entry in entries)
{ {
beatsOffsetSyncedEntry.LocalValue = 0f; entry.Load(track);
colorTransitionInSyncedEntry.LocalValue = 0f;
colorTransitionOutSyncedEntry.LocalValue = 0f;
colorTransitionEasingSyncedEntry.LocalValue = Easing.Linear.Name;
}
else
{
beatsOffsetSyncedEntry.LocalValue = track._BeatsOffset;
colorTransitionInSyncedEntry.LocalValue = track._ColorTransitionIn;
colorTransitionOutSyncedEntry.LocalValue = track._ColorTransitionOut;
colorTransitionEasingSyncedEntry.LocalValue = track._ColorTransitionEasing.Name;
} }
} }
void apply() void apply()
{ {
if (!overrideTimingsSyncedEntry.Value) foreach (var entry in entries)
{ {
BeatsOffsetOverride = null; entry.Apply();
ColorTransitionInOverride = null;
ColorTransitionOutOverride = null;
ColorTransitionEasingOverride = null;
}
else
{
BeatsOffsetOverride = beatsOffsetSyncedEntry.Value;
ColorTransitionInOverride = colorTransitionInSyncedEntry.Value;
ColorTransitionOutOverride = colorTransitionOutSyncedEntry.Value;
ColorTransitionEasingOverride = colorTransitionEasingSyncedEntry.Value;
} }
} }
} }