add mouse scroll event (#310)

This commit is contained in:
Jesse Plamondon-Willard 2018-06-02 12:14:15 -04:00
parent 74971f5328
commit 90f55a6921
6 changed files with 68 additions and 0 deletions

View File

@ -13,5 +13,8 @@ namespace StardewModdingAPI.Events
/// <summary>Raised after the player moves the in-game cursor.</summary> /// <summary>Raised after the player moves the in-game cursor.</summary>
event EventHandler<InputCursorMovedArgsInput> CursorMoved; event EventHandler<InputCursorMovedArgsInput> CursorMoved;
/// <summary>Raised after the player scrolls the mouse wheel.</summary>
event EventHandler<InputMouseWheelScrolledEventArgs> MouseWheelScrolled;
} }
} }

View File

@ -0,0 +1,38 @@
using System;
namespace StardewModdingAPI.Events
{
/// <summary>Event arguments when the player scrolls the mouse wheel.</summary>
public class InputMouseWheelScrolledEventArgs : EventArgs
{
/*********
** Accessors
*********/
/// <summary>The cursor position.</summary>
public ICursorPosition Position { get; }
/// <summary>The old scroll value.</summary>
public int OldValue { get; }
/// <summary>The new scroll value.</summary>
public int NewValue { get; }
/// <summary>The amount by which the scroll value changed.</summary>
public int Delta => this.NewValue - this.OldValue;
/*********
** Public methods
*********/
/// <summary>Construct an instance.</summary>
/// <param name="position">The cursor position.</param>
/// <param name="oldValue">The old scroll value.</param>
/// <param name="newValue">The new scroll value.</param>
public InputMouseWheelScrolledEventArgs(ICursorPosition position, int oldValue, int newValue)
{
this.Position = position;
this.OldValue = oldValue;
this.NewValue = newValue;
}
}
}

View File

@ -44,6 +44,9 @@ namespace StardewModdingAPI.Framework.Events
/// <summary>Raised after the player moves the in-game cursor.</summary> /// <summary>Raised after the player moves the in-game cursor.</summary>
public readonly ManagedEvent<InputCursorMovedArgsInput> Input_CursorMoved; public readonly ManagedEvent<InputCursorMovedArgsInput> Input_CursorMoved;
/// <summary>Raised after the player scrolls the mouse wheel.</summary>
public readonly ManagedEvent<InputMouseWheelScrolledEventArgs> Input_MouseWheelScrolled;
/********* /*********
** Events (old) ** Events (old)
@ -249,6 +252,7 @@ namespace StardewModdingAPI.Framework.Events
this.Input_ButtonPressed = ManageEventOf<InputButtonPressedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.ButtonPressed)); this.Input_ButtonPressed = ManageEventOf<InputButtonPressedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.ButtonPressed));
this.Input_ButtonReleased = ManageEventOf<InputButtonReleasedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.ButtonReleased)); this.Input_ButtonReleased = ManageEventOf<InputButtonReleasedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.ButtonReleased));
this.Input_CursorMoved = ManageEventOf<InputCursorMovedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.CursorMoved)); this.Input_CursorMoved = ManageEventOf<InputCursorMovedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.CursorMoved));
this.Input_MouseWheelScrolled = ManageEventOf<InputMouseWheelScrolledEventArgs>(nameof(IModEvents.Input), nameof(IInputEvents.MouseWheelScrolled));
this.World_BuildingListChanged = ManageEventOf<WorldBuildingListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.LocationListChanged)); this.World_BuildingListChanged = ManageEventOf<WorldBuildingListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.LocationListChanged));
this.World_LargeTerrainFeatureListChanged = ManageEventOf<WorldLargeTerrainFeatureListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.LargeTerrainFeatureListChanged)); this.World_LargeTerrainFeatureListChanged = ManageEventOf<WorldLargeTerrainFeatureListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.LargeTerrainFeatureListChanged));

View File

@ -30,6 +30,13 @@ namespace StardewModdingAPI.Framework.Events
remove => this.EventManager.Input_CursorMoved.Remove(value); remove => this.EventManager.Input_CursorMoved.Remove(value);
} }
/// <summary>Raised after the player scrolls the mouse wheel.</summary>
public event EventHandler<InputMouseWheelScrolledEventArgs> MouseWheelScrolled
{
add => this.EventManager.Input_MouseWheelScrolled.Add(value);
remove => this.EventManager.Input_MouseWheelScrolled.Remove(value);
}
/********* /*********
** Public methods ** Public methods

View File

@ -103,6 +103,9 @@ namespace StardewModdingAPI.Framework
/// <summary>Tracks changes to the cursor position.</summary> /// <summary>Tracks changes to the cursor position.</summary>
private readonly IValueWatcher<Point> CursorWatcher; private readonly IValueWatcher<Point> CursorWatcher;
/// <summary>Tracks changes to the mouse wheel scroll.</summary>
private readonly IValueWatcher<int> MouseWheelScrollWatcher;
/// <summary>The previous content locale.</summary> /// <summary>The previous content locale.</summary>
private LocalizedContentManager.LanguageCode? PreviousLocale; private LocalizedContentManager.LanguageCode? PreviousLocale;
@ -172,6 +175,7 @@ namespace StardewModdingAPI.Framework
// init watchers // init watchers
Game1.locations = new ObservableCollection<GameLocation>(); Game1.locations = new ObservableCollection<GameLocation>();
this.CursorWatcher = WatcherFactory.ForEquatable(() => this.Input.MousePosition); this.CursorWatcher = WatcherFactory.ForEquatable(() => this.Input.MousePosition);
this.MouseWheelScrollWatcher = WatcherFactory.ForEquatable(() => this.Input.RealMouse.ScrollWheelValue);
this.SaveIdWatcher = WatcherFactory.ForEquatable(() => Game1.hasLoadedGame ? Game1.uniqueIDForThisGame : 0); this.SaveIdWatcher = WatcherFactory.ForEquatable(() => Game1.hasLoadedGame ? Game1.uniqueIDForThisGame : 0);
this.WindowSizeWatcher = WatcherFactory.ForEquatable(() => new Point(Game1.viewport.Width, Game1.viewport.Height)); this.WindowSizeWatcher = WatcherFactory.ForEquatable(() => new Point(Game1.viewport.Width, Game1.viewport.Height));
this.TimeWatcher = WatcherFactory.ForEquatable(() => Game1.timeOfDay); this.TimeWatcher = WatcherFactory.ForEquatable(() => Game1.timeOfDay);
@ -180,6 +184,7 @@ namespace StardewModdingAPI.Framework
this.Watchers.AddRange(new IWatcher[] this.Watchers.AddRange(new IWatcher[]
{ {
this.CursorWatcher, this.CursorWatcher,
this.MouseWheelScrollWatcher,
this.SaveIdWatcher, this.SaveIdWatcher,
this.WindowSizeWatcher, this.WindowSizeWatcher,
this.TimeWatcher, this.TimeWatcher,
@ -468,6 +473,16 @@ namespace StardewModdingAPI.Framework
} }
this.PreviousCursorPosition = cursor; this.PreviousCursorPosition = cursor;
// raise mouse wheel scrolled
if (this.MouseWheelScrollWatcher.IsChanged)
{
int oldValue = this.MouseWheelScrollWatcher.PreviousValue;
int newValue = this.MouseWheelScrollWatcher.CurrentValue;
this.MouseWheelScrollWatcher.Reset();
this.Events.Input_MouseWheelScrolled.Raise(new InputMouseWheelScrolledEventArgs(cursor, oldValue, newValue));
}
// raise input button events // raise input button events
foreach (var pair in inputState.ActiveButtons) foreach (var pair in inputState.ActiveButtons)
{ {

View File

@ -85,6 +85,7 @@
<Compile Include="..\..\build\GlobalAssemblyInfo.cs"> <Compile Include="..\..\build\GlobalAssemblyInfo.cs">
<Link>Properties\GlobalAssemblyInfo.cs</Link> <Link>Properties\GlobalAssemblyInfo.cs</Link>
</Compile> </Compile>
<Compile Include="Events\InputMouseWheelScrolledEventArgs.cs" />
<Compile Include="Events\InputCursorMovedEventArgs.cs" /> <Compile Include="Events\InputCursorMovedEventArgs.cs" />
<Compile Include="Events\InputButtonReleasedEventArgs.cs" /> <Compile Include="Events\InputButtonReleasedEventArgs.cs" />
<Compile Include="Events\InputButtonPressedEventArgs.cs" /> <Compile Include="Events\InputButtonPressedEventArgs.cs" />