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