From 1286a90ec2fb0dcf26bd59feec714544844e4398 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Sun, 29 Dec 2019 13:29:25 -0500 Subject: minor refactoring This commit... - removes key fields added to non-keyed types like NetListWatcher and SnapshotListDiff; - fixes existing chests not being watched; - fixes diffs not correctly updated for added/removed chests; - performs minor cleanup, adds missing docs, etc. --- .../StateTracking/FieldWatchers/NetListWatcher.cs | 90 ++++++++++++---------- 1 file changed, 49 insertions(+), 41 deletions(-) (limited to 'src/SMAPI/Framework/StateTracking/FieldWatchers') diff --git a/src/SMAPI/Framework/StateTracking/FieldWatchers/NetListWatcher.cs b/src/SMAPI/Framework/StateTracking/FieldWatchers/NetListWatcher.cs index cac66356..8aa0eab5 100644 --- a/src/SMAPI/Framework/StateTracking/FieldWatchers/NetListWatcher.cs +++ b/src/SMAPI/Framework/StateTracking/FieldWatchers/NetListWatcher.cs @@ -1,21 +1,18 @@ -using System; using System.Collections.Generic; using Netcode; namespace StardewModdingAPI.Framework.StateTracking.FieldWatchers { - internal class NetListWatcher : BaseDisposableWatcher, ICollectionWatcher + /// A watcher which detects changes to a net list field. + /// The list value type. + internal class NetListWatcher : BaseDisposableWatcher, ICollectionWatcher where TValue : class, INetObject { - - /********* ** Fields *********/ /// The field being watched. - private readonly NetList> Field; - - public TKey Key { get; } + private readonly NetList> Field; /// The pairs added since the last reset. private readonly IList AddedImpl = new List(); @@ -23,26 +20,47 @@ namespace StardewModdingAPI.Framework.StateTracking.FieldWatchers /// The pairs removed since the last reset. private readonly IList RemovedImpl = new List(); + + /********* + ** Accessors + *********/ + /// Whether the collection changed since the last reset. + public bool IsChanged => this.AddedImpl.Count > 0 || this.RemovedImpl.Count > 0; + + /// The values added since the last reset. + public IEnumerable Added => this.AddedImpl; + + /// The values removed since the last reset. + public IEnumerable Removed => this.RemovedImpl; + + /********* ** Public methods *********/ /// Construct an instance. /// The field to watch. - public NetListWatcher(NetList> field, TKey key) + public NetListWatcher(NetList> field) { this.Field = field; - this.Key = key; field.OnElementChanged += this.OnElementChanged; field.OnArrayReplaced += this.OnArrayReplaced; } - public bool IsChanged => this.AddedImpl.Count > 0 || this.RemovedImpl.Count > 0; - - public IEnumerable Added => this.AddedImpl; + /// Set the current value as the baseline. + public void Reset() + { + this.AddedImpl.Clear(); + this.RemovedImpl.Clear(); + } - public IEnumerable Removed => this.RemovedImpl; + /// Update the current value if needed. + public void Update() + { + this.AssertNotDisposed(); + } - public void Dispose() + /// Stop watching the field and release all references. + public override void Dispose() { if (!this.IsDisposed) { @@ -53,47 +71,37 @@ namespace StardewModdingAPI.Framework.StateTracking.FieldWatchers base.Dispose(); } - public void Reset() - { - this.AddedImpl.Clear(); - this.RemovedImpl.Clear(); - } - - public void Update() - { - this.AssertNotDisposed(); - } /********* ** Private methods *********/ - private void OnArrayReplaced(NetList> list, IList before, IList after) + /// A callback invoked when the value list is replaced. + /// The net field whose values changed. + /// The previous list of values. + /// The new list of values. + private void OnArrayReplaced(NetList> list, IList oldValues, IList newValues) { this.AddedImpl.Clear(); this.RemovedImpl.Clear(); - foreach(var obj in after) - this.AddedImpl.Add(obj); + foreach (TValue value in newValues) + this.AddedImpl.Add(value); - foreach(var obj in before) - this.RemovedImpl.Add(obj); + foreach (TValue value in oldValues) + this.RemovedImpl.Add(value); } - private void OnElementChanged(NetList> list, int index, TValue oldValue, TValue newValue) + /// A callback invoked when an entry is replaced. + /// The net field whose values changed. + /// The list index which changed. + /// The previous value. + /// The new value. + private void OnElementChanged(NetList> list, int index, TValue oldValue, TValue newValue) { - - /* checks for stack addition / subtraction changing stacks does not fire off an element changed event - if ((oldValue != null && newValue != null) && oldValue.CompareTo(newValue) < 0) - this.AddedImpl.Add(newValue); - //Stack Removed from - if ((oldValue != null && newValue != null) && oldValue.CompareTo(newValue) > 0) - this.RemovedImpl.Add(newValue); - */ - - if(newValue!=null) + if (newValue != null) this.AddedImpl.Add(newValue); - if(oldValue!=null) + if (oldValue != null) this.RemovedImpl.Add(oldValue); } } -- cgit