diff options
author | ClxS <slxxls92@gmail.com> | 2016-03-04 20:20:58 +0000 |
---|---|---|
committer | ClxS <slxxls92@gmail.com> | 2016-03-04 20:20:58 +0000 |
commit | 4712da9f2d382e4593966530145140f33c7673bf (patch) | |
tree | 106bd85ff0ce2b13eadbf2ff948940a51d5d63c1 /StardewModdingAPI | |
parent | 210db71a92eb4cc1d3bb0121a1f40dadd9cd9cc7 (diff) | |
download | SMAPI-4712da9f2d382e4593966530145140f33c7673bf.tar.gz SMAPI-4712da9f2d382e4593966530145140f33c7673bf.tar.bz2 SMAPI-4712da9f2d382e4593966530145140f33c7673bf.zip |
Improved Inventory Changed command to show which items were added/removed/alteredQuantity
Diffstat (limited to 'StardewModdingAPI')
-rw-r--r-- | StardewModdingAPI/Events/EventArgs.cs | 9 | ||||
-rw-r--r-- | StardewModdingAPI/Events/Player.cs | 7 | ||||
-rw-r--r-- | StardewModdingAPI/Inheritance/ItemStackChange.cs | 23 | ||||
-rw-r--r-- | StardewModdingAPI/Inheritance/SGame.cs | 42 | ||||
-rw-r--r-- | StardewModdingAPI/Program.cs | 2 | ||||
-rw-r--r-- | StardewModdingAPI/StardewModdingAPI.csproj | 3 |
6 files changed, 74 insertions, 12 deletions
diff --git a/StardewModdingAPI/Events/EventArgs.cs b/StardewModdingAPI/Events/EventArgs.cs index 1ebafa54..7f2e28c7 100644 --- a/StardewModdingAPI/Events/EventArgs.cs +++ b/StardewModdingAPI/Events/EventArgs.cs @@ -1,5 +1,6 @@ using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
+using StardewModdingAPI.Inheritance;
using StardewValley;
using StardewValley.Menus;
using System;
@@ -94,11 +95,17 @@ namespace StardewModdingAPI.Events public class EventArgsInventoryChanged : EventArgs
{
- public EventArgsInventoryChanged(List<Item> inventory)
+ public EventArgsInventoryChanged(List<Item> inventory, List<ItemStackChange> changedItems)
{
Inventory = inventory;
+ Added = changedItems.Where(n => n.ChangeType == ChangeType.Added).ToList();
+ Removed = changedItems.Where(n => n.ChangeType == ChangeType.Removed).ToList();
+ QuantityChanged = changedItems.Where(n => n.ChangeType == ChangeType.StackChange).ToList();
}
public List<Item> Inventory { get; private set; }
+ public List<ItemStackChange> Added { get; private set; }
+ public List<ItemStackChange> Removed { get; private set; }
+ public List<ItemStackChange> QuantityChanged { get; private set; }
}
public class EventArgsIntChanged : EventArgs
diff --git a/StardewModdingAPI/Events/Player.cs b/StardewModdingAPI/Events/Player.cs index 7904a6e2..47d21f63 100644 --- a/StardewModdingAPI/Events/Player.cs +++ b/StardewModdingAPI/Events/Player.cs @@ -1,4 +1,5 @@ -using StardewValley;
+using StardewModdingAPI.Inheritance;
+using StardewValley;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -17,9 +18,9 @@ namespace StardewModdingAPI.Events FarmerChanged.Invoke(null, new EventArgsFarmerChanged(priorFarmer, newFarmer));
}
- public static void InvokeInventoryChanged(List<Item> inventory)
+ public static void InvokeInventoryChanged(List<Item> inventory, List<ItemStackChange> changedItems)
{
- InventoryChanged.Invoke(null, new EventArgsInventoryChanged(inventory));
+ InventoryChanged.Invoke(null, new EventArgsInventoryChanged(inventory, changedItems));
}
}
}
diff --git a/StardewModdingAPI/Inheritance/ItemStackChange.cs b/StardewModdingAPI/Inheritance/ItemStackChange.cs new file mode 100644 index 00000000..88003579 --- /dev/null +++ b/StardewModdingAPI/Inheritance/ItemStackChange.cs @@ -0,0 +1,23 @@ +using StardewValley;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace StardewModdingAPI.Inheritance
+{
+ public enum ChangeType
+ {
+ Removed,
+ Added,
+ StackChange
+ }
+
+ public class ItemStackChange
+ {
+ public Item Item { get; set; }
+ public int StackChange { get; set; }
+ public ChangeType ChangeType { get; set; }
+ }
+}
diff --git a/StardewModdingAPI/Inheritance/SGame.cs b/StardewModdingAPI/Inheritance/SGame.cs index c19dadf2..366f3045 100644 --- a/StardewModdingAPI/Inheritance/SGame.cs +++ b/StardewModdingAPI/Inheritance/SGame.cs @@ -45,7 +45,8 @@ namespace StardewModdingAPI.Inheritance public int PreviousGameLocations { get; private set; }
public int PreviousLocationObjects { get; private set; }
- public int PreviousItems { get; private set; }
+ public int PreviousItems_ { get; private set; }
+ public Dictionary<Item, int> PreviousItems { get; private set; }
public GameLocation PreviousGameLocation { get; private set; }
public IClickableMenu PreviousActiveMenu { get; private set; }
@@ -217,8 +218,7 @@ namespace StardewModdingAPI.Inheritance Program.LogDebug("A custom location could not be created for: " + name);
return null;
}
-
-
+
public void UpdateEventCalls()
{
KStateNow = Keyboard.GetState();
@@ -264,10 +264,12 @@ namespace StardewModdingAPI.Inheritance PreviousFarmer = player;
}
- if(player != null && PreviousItems != player.items.GetHash())
+ List<ItemStackChange> changedItems;
+ if (player != null && HasInventoryChanged(player.items, out changedItems))
{
- Events.PlayerEvents.InvokeInventoryChanged(player.items);
- }
+ Events.PlayerEvents.InvokeInventoryChanged(player.items, changedItems);
+ PreviousItems = player.items.Where(n => n != null).ToDictionary(n => n, n => n.Stack);
+ }
if(currentLocation != null && PreviousLocationObjects != currentLocation.objects.GetHash())
{
@@ -299,5 +301,33 @@ namespace StardewModdingAPI.Inheritance PreviousYearOfGame = year;
}
}
+
+ private bool HasInventoryChanged(List<Item> items, out List<ItemStackChange> changedItems)
+ {
+ changedItems = new List<ItemStackChange>();
+ IEnumerable<Item> actualItems = items.Where(n => n != null);
+ foreach (var item in actualItems)
+ {
+ if (PreviousItems != null && PreviousItems.ContainsKey(item))
+ {
+ if(PreviousItems[item] != item.Stack)
+ {
+ changedItems.Add(new ItemStackChange() { Item = item, StackChange = item.Stack - PreviousItems[item], ChangeType = ChangeType.StackChange });
+ }
+ }
+ else
+ {
+ changedItems.Add(new ItemStackChange() { Item = item, StackChange = item.Stack, ChangeType = ChangeType.Added });
+ }
+ }
+
+ if (PreviousItems != null)
+ {
+ changedItems.AddRange(PreviousItems.Where(n => !actualItems.Any(i => i == n.Key)).Select(n =>
+ new ItemStackChange() { Item = n.Key, StackChange = -n.Key.Stack, ChangeType = ChangeType.Removed }));
+ }
+
+ return (changedItems.Any());
+ }
}
}
\ No newline at end of file diff --git a/StardewModdingAPI/Program.cs b/StardewModdingAPI/Program.cs index f7cb7c87..000ddab0 100644 --- a/StardewModdingAPI/Program.cs +++ b/StardewModdingAPI/Program.cs @@ -51,7 +51,7 @@ namespace StardewModdingAPI public static Thread consoleInputThread; public const string Version = "0.36 Alpha"; - public const bool debug = true; + public const bool debug = false; public static bool disableLogging { get; private set; } public static bool StardewInjectorLoaded { get; private set; } diff --git a/StardewModdingAPI/StardewModdingAPI.csproj b/StardewModdingAPI/StardewModdingAPI.csproj index 64f5a718..a223f6c2 100644 --- a/StardewModdingAPI/StardewModdingAPI.csproj +++ b/StardewModdingAPI/StardewModdingAPI.csproj @@ -88,6 +88,7 @@ <Compile Include="Events\Player.cs" />
<Compile Include="Events\Time.cs" />
<Compile Include="Extensions.cs" />
+ <Compile Include="Inheritance\ItemStackChange.cs" />
<Compile Include="Inheritance\Menus\SBobberBar.cs" />
<Compile Include="Inheritance\Menus\SGameMenu.cs" />
<Compile Include="Inheritance\Menus\SInventoryPage.cs" />
@@ -110,7 +111,7 @@ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>
-</PostBuildEvent>
+ </PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. |