From 6bf99f0f81582ab6d6212dc21e8c36686ceb5a35 Mon Sep 17 00:00:00 2001 From: Jesse Plamondon-Willard Date: Tue, 31 Dec 2019 17:32:46 -0500 Subject: minor refactoring --- src/SMAPI/Framework/StateTracking/ChestTracker.cs | 21 +++++++++++++-------- .../Framework/StateTracking/LocationTracker.cs | 6 +----- src/SMAPI/Framework/StateTracking/PlayerTracker.cs | 2 +- .../StateTracking/Snapshots/LocationSnapshot.cs | 12 +++++------- 4 files changed, 20 insertions(+), 21 deletions(-) (limited to 'src/SMAPI/Framework/StateTracking') diff --git a/src/SMAPI/Framework/StateTracking/ChestTracker.cs b/src/SMAPI/Framework/StateTracking/ChestTracker.cs index 74039753..f907b9a5 100644 --- a/src/SMAPI/Framework/StateTracking/ChestTracker.cs +++ b/src/SMAPI/Framework/StateTracking/ChestTracker.cs @@ -1,15 +1,13 @@ -using System; using System.Collections.Generic; using System.Linq; -using StardewModdingAPI.Enums; using StardewModdingAPI.Events; -using StardewModdingAPI.Framework.StateTracking.FieldWatchers; using StardewValley; +using StardewValley.Objects; using ChangeType = StardewModdingAPI.Events.ChangeType; -using Chest = StardewValley.Objects.Chest; namespace StardewModdingAPI.Framework.StateTracking { + /// Tracks changes to a chest's items. internal class ChestTracker { /********* @@ -21,33 +19,39 @@ namespace StardewModdingAPI.Framework.StateTracking /// The chest's inventory change as of the last update. private IDictionary CurrentInventory; + /********* ** Accessors *********/ - /// The chest being tracked + /// The chest being tracked. public Chest Chest { get; } + /********* ** Public methods *********/ + /// Construct an instance. + /// The chest being tracked. public ChestTracker(Chest chest) { this.Chest = chest; this.PreviousInventory = this.GetInventory(); } + /// Update the current values if needed. public void Update() { this.CurrentInventory = this.GetInventory(); } - + /// Reset all trackers so their current values are the baseline. public void Reset() { - if(this.CurrentInventory!=null) + if (this.CurrentInventory != null) this.PreviousInventory = this.CurrentInventory; } + /// Get the inventory changes since the last update. public IEnumerable GetInventoryChanges() { IDictionary previous = this.PreviousInventory; @@ -64,10 +68,11 @@ namespace StardewModdingAPI.Framework.StateTracking } } + /********* ** Private methods *********/ - + /// Get the player's current inventory. private IDictionary GetInventory() { return this.Chest.items diff --git a/src/SMAPI/Framework/StateTracking/LocationTracker.cs b/src/SMAPI/Framework/StateTracking/LocationTracker.cs index 659efc57..7445add9 100644 --- a/src/SMAPI/Framework/StateTracking/LocationTracker.cs +++ b/src/SMAPI/Framework/StateTracking/LocationTracker.cs @@ -49,7 +49,7 @@ namespace StardewModdingAPI.Framework.StateTracking public IDictionaryWatcher TerrainFeaturesWatcher { get; } /// Tracks items added or removed to chests. - public Dictionary ChestWatchers = new Dictionary(); + public IDictionary ChestWatchers { get; } = new Dictionary(); /********* @@ -124,18 +124,14 @@ namespace StardewModdingAPI.Framework.StateTracking foreach (KeyValuePair pair in removed) { if (pair.Value is Chest && this.ChestWatchers.TryGetValue(pair.Key, out ChestTracker watcher)) - { this.ChestWatchers.Remove(pair.Key); - } } // add new watchers foreach (KeyValuePair pair in added) { if (pair.Value is Chest chest && !this.ChestWatchers.ContainsKey(pair.Key)) - { this.ChestWatchers.Add(pair.Key, new ChestTracker(chest)); - } } } } diff --git a/src/SMAPI/Framework/StateTracking/PlayerTracker.cs b/src/SMAPI/Framework/StateTracking/PlayerTracker.cs index 6302a889..cd7d75ec 100644 --- a/src/SMAPI/Framework/StateTracking/PlayerTracker.cs +++ b/src/SMAPI/Framework/StateTracking/PlayerTracker.cs @@ -99,7 +99,7 @@ namespace StardewModdingAPI.Framework.StateTracking return this.Player.currentLocation ?? this.LastValidLocation; } - /// Get the player inventory changes between two states. + /// Get the inventory changes since the last update. public IEnumerable GetInventoryChanges() { IDictionary previous = this.PreviousInventory; diff --git a/src/SMAPI/Framework/StateTracking/Snapshots/LocationSnapshot.cs b/src/SMAPI/Framework/StateTracking/Snapshots/LocationSnapshot.cs index 62a56c84..4e08a1ac 100644 --- a/src/SMAPI/Framework/StateTracking/Snapshots/LocationSnapshot.cs +++ b/src/SMAPI/Framework/StateTracking/Snapshots/LocationSnapshot.cs @@ -4,6 +4,7 @@ using Microsoft.Xna.Framework; using StardewModdingAPI.Events; using StardewValley; using StardewValley.Buildings; +using StardewValley.Objects; using StardewValley.TerrainFeatures; namespace StardewModdingAPI.Framework.StateTracking.Snapshots @@ -36,7 +37,7 @@ namespace StardewModdingAPI.Framework.StateTracking.Snapshots public SnapshotListDiff> TerrainFeatures { get; } = new SnapshotListDiff>(); /// Tracks changed chest inventories. - public IDictionary ChestItems { get; } = new Dictionary(); + public IDictionary ChestItems { get; } = new Dictionary(); /********* @@ -64,12 +65,9 @@ namespace StardewModdingAPI.Framework.StateTracking.Snapshots // chest inventories foreach (var pair in watcher.ChestWatchers) { - IEnumerable temp = pair.Value.GetInventoryChanges(); - if (temp.Any()) - if (this.ChestItems.ContainsKey(pair.Value.Chest)) - this.ChestItems[pair.Value.Chest] = pair.Value.GetInventoryChanges().ToArray(); - else - this.ChestItems.Add(pair.Value.Chest, pair.Value.GetInventoryChanges().ToArray()); + ItemStackChange[] changes = pair.Value.GetInventoryChanges().ToArray(); + if (changes.Length > 0) + this.ChestItems[pair.Value.Chest] = changes; else this.ChestItems.Remove(pair.Value.Chest); } -- cgit