summaryrefslogtreecommitdiff
path: root/src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-05-27 18:09:04 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-05-27 18:09:04 -0400
commit0209e70695b6d12692d4de554ce1fc9d65ca4715 (patch)
tree011867d845ee3cf2a88f306504a4bdd6fe414ed6 /src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs
parent2ab2182645179129997eac3fccb63f6f0683dbe1 (diff)
parente4cd7c8eb09fa50802ce4eb9dbe4683ce61f7a5d (diff)
downloadSMAPI-0209e70695b6d12692d4de554ce1fc9d65ca4715.tar.gz
SMAPI-0209e70695b6d12692d4de554ce1fc9d65ca4715.tar.bz2
SMAPI-0209e70695b6d12692d4de554ce1fc9d65ca4715.zip
Merge branch 'develop' into stable
Diffstat (limited to 'src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs')
-rw-r--r--src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs45
1 files changed, 27 insertions, 18 deletions
diff --git a/src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs b/src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs
index c4a4d0b9..c31be1fc 100644
--- a/src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs
+++ b/src/SMAPI/Framework/StateTracking/FieldWatchers/WatcherFactory.cs
@@ -17,37 +17,41 @@ namespace StardewModdingAPI.Framework.StateTracking.FieldWatchers
****/
/// <summary>Get a watcher which compares values using their <see cref="object.Equals(object)"/> method. This method should only be used when <see cref="ForEquatable{T}"/> won't work, since this doesn't validate whether they're comparable.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="getValue">Get the current value.</param>
- public static IValueWatcher<T> ForGenericEquality<T>(Func<T> getValue)
+ public static IValueWatcher<T> ForGenericEquality<T>(string name, Func<T> getValue)
where T : struct
{
- return new ComparableWatcher<T>(getValue, new GenericEqualsComparer<T>());
+ return new ComparableWatcher<T>(name, getValue, new GenericEqualsComparer<T>());
}
/// <summary>Get a watcher for an <see cref="IEquatable{T}"/> value.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="getValue">Get the current value.</param>
- public static IValueWatcher<T> ForEquatable<T>(Func<T> getValue)
+ public static IValueWatcher<T> ForEquatable<T>(string name, Func<T> getValue)
where T : IEquatable<T>
{
- return new ComparableWatcher<T>(getValue, new EquatableComparer<T>());
+ return new ComparableWatcher<T>(name, getValue, new EquatableComparer<T>());
}
/// <summary>Get a watcher which detects when an object reference changes.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="getValue">Get the current value.</param>
- public static IValueWatcher<T> ForReference<T>(Func<T> getValue)
+ public static IValueWatcher<T> ForReference<T>(string name, Func<T> getValue)
{
- return new ComparableWatcher<T>(getValue, new ObjectReferenceComparer<T>());
+ return new ComparableWatcher<T>(name, getValue, new ObjectReferenceComparer<T>());
}
/// <summary>Get a watcher for a net collection.</summary>
/// <typeparam name="T">The value type.</typeparam>
/// <typeparam name="TSelf">The net field instance type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="field">The net collection.</param>
- public static IValueWatcher<T> ForNetValue<T, TSelf>(NetFieldBase<T, TSelf> field) where TSelf : NetFieldBase<T, TSelf>
+ public static IValueWatcher<T> ForNetValue<T, TSelf>(string name, NetFieldBase<T, TSelf> field) where TSelf : NetFieldBase<T, TSelf>
{
- return new NetValueWatcher<T, TSelf>(field);
+ return new NetValueWatcher<T, TSelf>(name, field);
}
/****
@@ -55,18 +59,20 @@ namespace StardewModdingAPI.Framework.StateTracking.FieldWatchers
****/
/// <summary>Get a watcher which detects when an object reference in a collection changes.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="collection">The observable collection.</param>
- public static ICollectionWatcher<T> ForReferenceList<T>(ICollection<T> collection)
+ public static ICollectionWatcher<T> ForReferenceList<T>(string name, ICollection<T> collection)
{
- return new ComparableListWatcher<T>(collection, new ObjectReferenceComparer<T>());
+ return new ComparableListWatcher<T>(name, collection, new ObjectReferenceComparer<T>());
}
/// <summary>Get a watcher for an observable collection.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="collection">The observable collection.</param>
- public static ICollectionWatcher<T> ForObservableCollection<T>(ObservableCollection<T> collection)
+ public static ICollectionWatcher<T> ForObservableCollection<T>(string name, ObservableCollection<T> collection)
{
- return new ObservableCollectionWatcher<T>(collection);
+ return new ObservableCollectionWatcher<T>(name, collection);
}
/// <summary>Get a watcher for a collection that never changes.</summary>
@@ -78,36 +84,39 @@ namespace StardewModdingAPI.Framework.StateTracking.FieldWatchers
/// <summary>Get a watcher for a net collection.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="collection">The net collection.</param>
- public static ICollectionWatcher<T> ForNetCollection<T>(NetCollection<T> collection)
+ public static ICollectionWatcher<T> ForNetCollection<T>(string name, NetCollection<T> collection)
where T : class, INetObject<INetSerializable>
{
- return new NetCollectionWatcher<T>(collection);
+ return new NetCollectionWatcher<T>(name, collection);
}
/// <summary>Get a watcher for a net list.</summary>
/// <typeparam name="T">The value type.</typeparam>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <param name="collection">The net list.</param>
- public static ICollectionWatcher<T> ForNetList<T>(NetList<T, NetRef<T>> collection)
+ public static ICollectionWatcher<T> ForNetList<T>(string name, NetList<T, NetRef<T>> collection)
where T : class, INetObject<INetSerializable>
{
- return new NetListWatcher<T>(collection);
+ return new NetListWatcher<T>(name, collection);
}
/// <summary>Get a watcher for a net dictionary.</summary>
+ /// <param name="name">A name which identifies what the watcher is watching, used for troubleshooting.</param>
/// <typeparam name="TKey">The dictionary key type.</typeparam>
/// <typeparam name="TValue">The dictionary value type.</typeparam>
/// <typeparam name="TField">The net type equivalent to <typeparamref name="TValue"/>.</typeparam>
/// <typeparam name="TSerialDict">The serializable dictionary type that can store the keys and values.</typeparam>
/// <typeparam name="TSelf">The net field instance type.</typeparam>
/// <param name="field">The net field.</param>
- public static NetDictionaryWatcher<TKey, TValue, TField, TSerialDict, TSelf> ForNetDictionary<TKey, TValue, TField, TSerialDict, TSelf>(NetDictionary<TKey, TValue, TField, TSerialDict, TSelf> field)
+ public static NetDictionaryWatcher<TKey, TValue, TField, TSerialDict, TSelf> ForNetDictionary<TKey, TValue, TField, TSerialDict, TSelf>(string name, NetDictionary<TKey, TValue, TField, TSerialDict, TSelf> field)
where TKey : notnull
where TField : class, INetObject<INetSerializable>, new()
where TSerialDict : IDictionary<TKey, TValue>, new()
where TSelf : NetDictionary<TKey, TValue, TField, TSerialDict, TSelf>
{
- return new NetDictionaryWatcher<TKey, TValue, TField, TSerialDict, TSelf>(field);
+ return new NetDictionaryWatcher<TKey, TValue, TField, TSerialDict, TSelf>(name, field);
}
}
}