summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release-notes.md3
-rw-r--r--src/StardewModdingAPI/Events/ControlEvents.cs6
-rw-r--r--src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs18
-rw-r--r--src/StardewModdingAPI/Inheritance/SGame.cs14
4 files changed, 32 insertions, 9 deletions
diff --git a/release-notes.md b/release-notes.md
index c82846a6..8d38732b 100644
--- a/release-notes.md
+++ b/release-notes.md
@@ -3,8 +3,9 @@
## 1.x
* 1.0 (upcoming, [log](https://github.com/CLxS/SMAPI/compare/0.40.1.1-3...master))
* Added support for Linux and Mac.
+ * Added zoom-adjusted mouse position to mouse-changed event arguments.
+ * Fixed several events not correctly propagating state.
* Removed undocumented support for mods in AppData folder **(breaking change)**.
- * Fixed several events not correctly propagating state (#129).
* Internal cleanup:
* Simplified compiling from source.
* Added code documentation.
diff --git a/src/StardewModdingAPI/Events/ControlEvents.cs b/src/StardewModdingAPI/Events/ControlEvents.cs
index 8fb9061d..1b1e0b78 100644
--- a/src/StardewModdingAPI/Events/ControlEvents.cs
+++ b/src/StardewModdingAPI/Events/ControlEvents.cs
@@ -49,9 +49,11 @@ namespace StardewModdingAPI.Events
/// <summary>Raise a <see cref="MouseChanged"/> event.</summary>
/// <param name="priorState">The previous mouse state.</param>
/// <param name="newState">The current mouse state.</param>
- internal static void InvokeMouseChanged(MouseState priorState, MouseState newState)
+ /// <param name="priorPosition">The previous mouse position on the screen adjusted for the zoom level.</param>
+ /// <param name="newPosition">The current mouse position on the screen adjusted for the zoom level.</param>
+ internal static void InvokeMouseChanged(MouseState priorState, MouseState newState, Point priorPosition, Point newPosition)
{
- ControlEvents.MouseChanged.Invoke(null, new EventArgsMouseStateChanged(priorState, newState));
+ ControlEvents.MouseChanged.Invoke(null, new EventArgsMouseStateChanged(priorState, newState, priorPosition, newPosition));
}
/// <summary>Raise a <see cref="KeyPressed"/> event.</summary>
diff --git a/src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs b/src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs
index 9117a0c2..0997ad18 100644
--- a/src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs
+++ b/src/StardewModdingAPI/Events/EventArgsMouseStateChanged.cs
@@ -1,5 +1,7 @@
using System;
+using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
+using StardewValley;
namespace StardewModdingAPI.Events
{
@@ -10,10 +12,16 @@ namespace StardewModdingAPI.Events
** Accessors
*********/
/// <summary>The previous mouse state.</summary>
- public MouseState NewState { get; private set; }
+ public MouseState PriorState { get; private set; }
/// <summary>The current mouse state.</summary>
- public MouseState PriorState { get; private set; }
+ public MouseState NewState { get; private set; }
+
+ /// <summary>The previous mouse position on the screen adjusted for the zoom level.</summary>
+ public Point PriorPosition { get; private set; }
+
+ /// <summary>The current mouse position on the screen adjusted for the zoom level.</summary>
+ public Point NewPosition { get; private set; }
/*********
@@ -22,10 +30,14 @@ namespace StardewModdingAPI.Events
/// <summary>Construct an instance.</summary>
/// <param name="priorState">The previous mouse state.</param>
/// <param name="newState">The current mouse state.</param>
- public EventArgsMouseStateChanged(MouseState priorState, MouseState newState)
+ /// <param name="priorPosition">The previous mouse position on the screen adjusted for the zoom level.</param>
+ /// <param name="newPosition">The current mouse position on the screen adjusted for the zoom level.</param>
+ public EventArgsMouseStateChanged(MouseState priorState, MouseState newState, Point priorPosition, Point newPosition)
{
this.PriorState = priorState;
this.NewState = newState;
+ this.PriorPosition = priorPosition;
+ this.NewPosition = newPosition;
}
}
}
diff --git a/src/StardewModdingAPI/Inheritance/SGame.cs b/src/StardewModdingAPI/Inheritance/SGame.cs
index c595fae3..b0e6bebc 100644
--- a/src/StardewModdingAPI/Inheritance/SGame.cs
+++ b/src/StardewModdingAPI/Inheritance/SGame.cs
@@ -54,6 +54,12 @@ namespace StardewModdingAPI.Inheritance
/// </summary>
public MouseState MStatePrior { get; private set; }
+ /// <summary>The current mouse position on the screen adjusted for the zoom level.</summary>
+ public Point MPositionNow { get; private set; }
+
+ /// <summary>The previous mouse position on the screen adjusted for the zoom level.</summary>
+ public Point MPositionPrior { get; private set; }
+
/// <summary>
/// All keys pressed on the current frame
/// </summary>
@@ -261,7 +267,7 @@ namespace StardewModdingAPI.Inheritance
{
return WasButtonJustPressed(button, value > 0.2f ? ButtonState.Pressed : ButtonState.Released, stateIndex);
}
-
+
/// <summary>
/// Whether or not an analog button was just released on the controller
/// </summary>
@@ -767,7 +773,7 @@ namespace StardewModdingAPI.Inheritance
//typeof (Game).GetMethod("Update", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(this, new object[] {gameTime});
//base.Update(gameTime);
-
+
#endregion
}
else
@@ -1403,6 +1409,7 @@ namespace StardewModdingAPI.Inheritance
KStateNow = Keyboard.GetState();
MStateNow = Mouse.GetState();
+ MPositionNow = new Point(Game1.getMouseX(), Game1.getMouseY());
foreach (var k in FramePressedKeys)
ControlEvents.InvokeKeyPressed(k);
@@ -1449,8 +1456,9 @@ namespace StardewModdingAPI.Inheritance
if (MStateNow != MStatePrior)
{
- ControlEvents.InvokeMouseChanged(MStatePrior, MStateNow);
+ ControlEvents.InvokeMouseChanged(MStatePrior, MStateNow, MPositionPrior, MPositionNow);
MStatePrior = MStateNow;
+ MPositionPrior = MPositionPrior;
}
if (activeClickableMenu != null && activeClickableMenu != PreviousActiveMenu)