add new-style input events (#310)
This commit is contained in:
parent
97a2bdfdd4
commit
0df7a967a6
|
@ -20,22 +20,22 @@ namespace StardewModdingAPI.Events
|
|||
/// <summary>Raised when the <see cref="KeyboardState"/> changes. That happens when the player presses or releases a key.</summary>
|
||||
public static event EventHandler<EventArgsKeyboardStateChanged> KeyboardChanged
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_KeyboardChanged.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_KeyboardChanged.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_KeyboardChanged.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_KeyboardChanged.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>Raised when the player presses a keyboard key.</summary>
|
||||
public static event EventHandler<EventArgsKeyPressed> KeyPressed
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_KeyPressed.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_KeyPressed.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_KeyPressed.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_KeyPressed.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>Raised when the player releases a keyboard key.</summary>
|
||||
public static event EventHandler<EventArgsKeyPressed> KeyReleased
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_KeyReleased.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_KeyReleased.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_KeyReleased.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_KeyReleased.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>Raised when the <see cref="MouseState"/> changes. That happens when the player moves the mouse, scrolls the mouse wheel, or presses/releases a button.</summary>
|
||||
|
@ -48,29 +48,29 @@ namespace StardewModdingAPI.Events
|
|||
/// <summary>The player pressed a controller button. This event isn't raised for trigger buttons.</summary>
|
||||
public static event EventHandler<EventArgsControllerButtonPressed> ControllerButtonPressed
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_ControllerButtonPressed.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_ControllerButtonPressed.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_ControllerButtonPressed.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_ControllerButtonPressed.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>The player released a controller button. This event isn't raised for trigger buttons.</summary>
|
||||
public static event EventHandler<EventArgsControllerButtonReleased> ControllerButtonReleased
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_ControllerButtonReleased.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_ControllerButtonReleased.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_ControllerButtonReleased.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_ControllerButtonReleased.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>The player pressed a controller trigger button.</summary>
|
||||
public static event EventHandler<EventArgsControllerTriggerPressed> ControllerTriggerPressed
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_ControllerTriggerPressed.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_ControllerTriggerPressed.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_ControllerTriggerPressed.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_ControllerTriggerPressed.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>The player released a controller trigger button.</summary>
|
||||
public static event EventHandler<EventArgsControllerTriggerReleased> ControllerTriggerReleased
|
||||
{
|
||||
add => ControlEvents.EventManager.Control_ControllerTriggerReleased.Add(value);
|
||||
remove => ControlEvents.EventManager.Control_ControllerTriggerReleased.Remove(value);
|
||||
add => ControlEvents.EventManager.Legacy_Control_ControllerTriggerReleased.Add(value);
|
||||
remove => ControlEvents.EventManager.Legacy_Control_ControllerTriggerReleased.Remove(value);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -23,10 +23,10 @@ namespace StardewModdingAPI.Events
|
|||
public ICursorPosition Cursor { get; }
|
||||
|
||||
/// <summary>Whether the input should trigger actions on the affected tile.</summary>
|
||||
public bool IsActionButton { get; }
|
||||
public bool IsActionButton => this.Button.IsActionButton();
|
||||
|
||||
/// <summary>Whether the input should use tools on the affected tile.</summary>
|
||||
public bool IsUseToolButton { get; }
|
||||
public bool IsUseToolButton => this.Button.IsUseToolButton();
|
||||
|
||||
/// <summary>Whether a mod has indicated the key was already handled.</summary>
|
||||
public bool IsSuppressed => this.SuppressButtons.Contains(this.Button);
|
||||
|
@ -38,15 +38,11 @@ namespace StardewModdingAPI.Events
|
|||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="button">The button on the controller, keyboard, or mouse.</param>
|
||||
/// <param name="cursor">The cursor position.</param>
|
||||
/// <param name="isActionButton">Whether the input should trigger actions on the affected tile.</param>
|
||||
/// <param name="isUseToolButton">Whether the input should use tools on the affected tile.</param>
|
||||
/// <param name="suppressButtons">The buttons to suppress.</param>
|
||||
public EventArgsInput(SButton button, ICursorPosition cursor, bool isActionButton, bool isUseToolButton, HashSet<SButton> suppressButtons)
|
||||
public EventArgsInput(SButton button, ICursorPosition cursor, HashSet<SButton> suppressButtons)
|
||||
{
|
||||
this.Button = button;
|
||||
this.Cursor = cursor;
|
||||
this.IsActionButton = isActionButton;
|
||||
this.IsUseToolButton = isUseToolButton;
|
||||
this.SuppressButtons = suppressButtons;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
using System;
|
||||
|
||||
namespace StardewModdingAPI.Events
|
||||
{
|
||||
/// <summary>Events raised when the player provides input using a controller, keyboard, or mouse.</summary>
|
||||
public interface IInputEvents
|
||||
{
|
||||
/// <summary>Raised when the player presses a button on the keyboard, controller, or mouse.</summary>
|
||||
event EventHandler<InputButtonPressedArgsInput> ButtonPressed;
|
||||
|
||||
/// <summary>Raised when the player releases a button on the keyboard, controller, or mouse.</summary>
|
||||
event EventHandler<InputButtonReleasedArgsInput> ButtonReleased;
|
||||
}
|
||||
}
|
|
@ -3,6 +3,9 @@ namespace StardewModdingAPI.Events
|
|||
/// <summary>Manages access to events raised by SMAPI.</summary>
|
||||
public interface IModEvents
|
||||
{
|
||||
/// <summary>Events raised when the player provides input using a controller, keyboard, or mouse.</summary>
|
||||
IInputEvents Input { get; }
|
||||
|
||||
/// <summary>Events raised when something changes in the world.</summary>
|
||||
IWorldEvents World { get; }
|
||||
}
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace StardewModdingAPI.Events
|
||||
{
|
||||
/// <summary>Event arguments when a button is pressed.</summary>
|
||||
public class InputButtonPressedArgsInput : EventArgs
|
||||
{
|
||||
/*********
|
||||
** Properties
|
||||
*********/
|
||||
/// <summary>The buttons to suppress.</summary>
|
||||
private readonly HashSet<SButton> SuppressButtons;
|
||||
|
||||
|
||||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>The button on the controller, keyboard, or mouse.</summary>
|
||||
public SButton Button { get; }
|
||||
|
||||
/// <summary>The current cursor position.</summary>
|
||||
public ICursorPosition Cursor { get; }
|
||||
|
||||
/// <summary>Whether a mod has indicated the key was already handled.</summary>
|
||||
public bool IsSuppressed => this.SuppressButtons.Contains(this.Button);
|
||||
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="button">The button on the controller, keyboard, or mouse.</param>
|
||||
/// <param name="cursor">The cursor position.</param>
|
||||
/// <param name="suppressButtons">The buttons to suppress.</param>
|
||||
public InputButtonPressedArgsInput(SButton button, ICursorPosition cursor, HashSet<SButton> suppressButtons)
|
||||
{
|
||||
this.Button = button;
|
||||
this.Cursor = cursor;
|
||||
this.SuppressButtons = suppressButtons;
|
||||
}
|
||||
|
||||
/// <summary>Prevent the game from handling the current button press. This doesn't prevent other mods from receiving the event.</summary>
|
||||
public void SuppressButton()
|
||||
{
|
||||
this.SuppressButton(this.Button);
|
||||
}
|
||||
|
||||
/// <summary>Prevent the game from handling a button press. This doesn't prevent other mods from receiving the event.</summary>
|
||||
/// <param name="button">The button to suppress.</param>
|
||||
public void SuppressButton(SButton button)
|
||||
{
|
||||
this.SuppressButtons.Add(button);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace StardewModdingAPI.Events
|
||||
{
|
||||
/// <summary>Event arguments when a button is released.</summary>
|
||||
public class InputButtonReleasedArgsInput : EventArgs
|
||||
{
|
||||
/*********
|
||||
** Properties
|
||||
*********/
|
||||
/// <summary>The buttons to suppress.</summary>
|
||||
private readonly HashSet<SButton> SuppressButtons;
|
||||
|
||||
|
||||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>The button on the controller, keyboard, or mouse.</summary>
|
||||
public SButton Button { get; }
|
||||
|
||||
/// <summary>The current cursor position.</summary>
|
||||
public ICursorPosition Cursor { get; }
|
||||
|
||||
/// <summary>Whether a mod has indicated the key was already handled.</summary>
|
||||
public bool IsSuppressed => this.SuppressButtons.Contains(this.Button);
|
||||
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="button">The button on the controller, keyboard, or mouse.</param>
|
||||
/// <param name="cursor">The cursor position.</param>
|
||||
/// <param name="suppressButtons">The buttons to suppress.</param>
|
||||
public InputButtonReleasedArgsInput(SButton button, ICursorPosition cursor, HashSet<SButton> suppressButtons)
|
||||
{
|
||||
this.Button = button;
|
||||
this.Cursor = cursor;
|
||||
this.SuppressButtons = suppressButtons;
|
||||
}
|
||||
|
||||
/// <summary>Prevent the game from handling the current button press. This doesn't prevent other mods from receiving the event.</summary>
|
||||
public void SuppressButton()
|
||||
{
|
||||
this.SuppressButton(this.Button);
|
||||
}
|
||||
|
||||
/// <summary>Prevent the game from handling a button press. This doesn't prevent other mods from receiving the event.</summary>
|
||||
/// <param name="button">The button to suppress.</param>
|
||||
public void SuppressButton(SButton button)
|
||||
{
|
||||
this.SuppressButtons.Add(button);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,15 +19,15 @@ namespace StardewModdingAPI.Events
|
|||
/// <summary>Raised when the player presses a button on the keyboard, controller, or mouse.</summary>
|
||||
public static event EventHandler<EventArgsInput> ButtonPressed
|
||||
{
|
||||
add => InputEvents.EventManager.Input_ButtonPressed.Add(value);
|
||||
remove => InputEvents.EventManager.Input_ButtonPressed.Remove(value);
|
||||
add => InputEvents.EventManager.Legacy_Input_ButtonPressed.Add(value);
|
||||
remove => InputEvents.EventManager.Legacy_Input_ButtonPressed.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>Raised when the player releases a keyboard key on the keyboard, controller, or mouse.</summary>
|
||||
public static event EventHandler<EventArgsInput> ButtonReleased
|
||||
{
|
||||
add => InputEvents.EventManager.Input_ButtonReleased.Add(value);
|
||||
remove => InputEvents.EventManager.Input_ButtonReleased.Remove(value);
|
||||
add => InputEvents.EventManager.Legacy_Input_ButtonReleased.Add(value);
|
||||
remove => InputEvents.EventManager.Legacy_Input_ButtonReleased.Remove(value);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -32,6 +32,15 @@ namespace StardewModdingAPI.Framework.Events
|
|||
/// <summary>Raised after terrain features (like floors and trees) are added or removed in a location.</summary>
|
||||
public readonly ManagedEvent<WorldTerrainFeatureListChangedEventArgs> World_TerrainFeatureListChanged;
|
||||
|
||||
/****
|
||||
** Input
|
||||
****/
|
||||
/// <summary>Raised when the player presses a button on the keyboard, controller, or mouse.</summary>
|
||||
public readonly ManagedEvent<InputButtonPressedArgsInput> Input_ButtonPressed;
|
||||
|
||||
/// <summary>Raised when the player released a button on the keyboard, controller, or mouse.</summary>
|
||||
public readonly ManagedEvent<InputButtonReleasedArgsInput> Input_ButtonReleased;
|
||||
|
||||
|
||||
/*********
|
||||
** Events (old)
|
||||
|
@ -46,28 +55,28 @@ namespace StardewModdingAPI.Framework.Events
|
|||
** ControlEvents
|
||||
****/
|
||||
/// <summary>Raised when the <see cref="KeyboardState"/> changes. That happens when the player presses or releases a key.</summary>
|
||||
public readonly ManagedEvent<EventArgsKeyboardStateChanged> Control_KeyboardChanged;
|
||||
public readonly ManagedEvent<EventArgsKeyboardStateChanged> Legacy_Control_KeyboardChanged;
|
||||
|
||||
/// <summary>Raised when the player presses a keyboard key.</summary>
|
||||
public readonly ManagedEvent<EventArgsKeyPressed> Control_KeyPressed;
|
||||
public readonly ManagedEvent<EventArgsKeyPressed> Legacy_Control_KeyPressed;
|
||||
|
||||
/// <summary>Raised when the player releases a keyboard key.</summary>
|
||||
public readonly ManagedEvent<EventArgsKeyPressed> Control_KeyReleased;
|
||||
public readonly ManagedEvent<EventArgsKeyPressed> Legacy_Control_KeyReleased;
|
||||
|
||||
/// <summary>Raised when the <see cref="MouseState"/> changes. That happens when the player moves the mouse, scrolls the mouse wheel, or presses/releases a button.</summary>
|
||||
public readonly ManagedEvent<EventArgsMouseStateChanged> Control_MouseChanged;
|
||||
|
||||
/// <summary>The player pressed a controller button. This event isn't raised for trigger buttons.</summary>
|
||||
public readonly ManagedEvent<EventArgsControllerButtonPressed> Control_ControllerButtonPressed;
|
||||
public readonly ManagedEvent<EventArgsControllerButtonPressed> Legacy_Control_ControllerButtonPressed;
|
||||
|
||||
/// <summary>The player released a controller button. This event isn't raised for trigger buttons.</summary>
|
||||
public readonly ManagedEvent<EventArgsControllerButtonReleased> Control_ControllerButtonReleased;
|
||||
public readonly ManagedEvent<EventArgsControllerButtonReleased> Legacy_Control_ControllerButtonReleased;
|
||||
|
||||
/// <summary>The player pressed a controller trigger button.</summary>
|
||||
public readonly ManagedEvent<EventArgsControllerTriggerPressed> Control_ControllerTriggerPressed;
|
||||
public readonly ManagedEvent<EventArgsControllerTriggerPressed> Legacy_Control_ControllerTriggerPressed;
|
||||
|
||||
/// <summary>The player released a controller trigger button.</summary>
|
||||
public readonly ManagedEvent<EventArgsControllerTriggerReleased> Control_ControllerTriggerReleased;
|
||||
public readonly ManagedEvent<EventArgsControllerTriggerReleased> Legacy_Control_ControllerTriggerReleased;
|
||||
|
||||
/****
|
||||
** GameEvents
|
||||
|
@ -124,10 +133,10 @@ namespace StardewModdingAPI.Framework.Events
|
|||
** InputEvents
|
||||
****/
|
||||
/// <summary>Raised when the player presses a button on the keyboard, controller, or mouse.</summary>
|
||||
public readonly ManagedEvent<EventArgsInput> Input_ButtonPressed;
|
||||
public readonly ManagedEvent<EventArgsInput> Legacy_Input_ButtonPressed;
|
||||
|
||||
/// <summary>Raised when the player releases a keyboard key on the keyboard, controller, or mouse.</summary>
|
||||
public readonly ManagedEvent<EventArgsInput> Input_ButtonReleased;
|
||||
public readonly ManagedEvent<EventArgsInput> Legacy_Input_ButtonReleased;
|
||||
|
||||
/****
|
||||
** LocationEvents
|
||||
|
@ -234,6 +243,9 @@ namespace StardewModdingAPI.Framework.Events
|
|||
ManagedEvent ManageEvent(string typeName, string eventName) => new ManagedEvent($"{typeName}.{eventName}", monitor, modRegistry);
|
||||
|
||||
// init events (new)
|
||||
this.Input_ButtonPressed = ManageEventOf<InputButtonPressedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.ButtonPressed));
|
||||
this.Input_ButtonReleased = ManageEventOf<InputButtonReleasedArgsInput>(nameof(IModEvents.Input), nameof(IInputEvents.ButtonReleased));
|
||||
|
||||
this.World_BuildingListChanged = ManageEventOf<WorldBuildingListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.LocationListChanged));
|
||||
this.World_LargeTerrainFeatureListChanged = ManageEventOf<WorldLargeTerrainFeatureListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.LargeTerrainFeatureListChanged));
|
||||
this.World_LocationListChanged = ManageEventOf<WorldLocationListChangedEventArgs>(nameof(IModEvents.World), nameof(IWorldEvents.BuildingListChanged));
|
||||
|
@ -244,13 +256,13 @@ namespace StardewModdingAPI.Framework.Events
|
|||
// init events (old)
|
||||
this.Content_LocaleChanged = ManageEventOf<EventArgsValueChanged<string>>(nameof(ContentEvents), nameof(ContentEvents.AfterLocaleChanged));
|
||||
|
||||
this.Control_ControllerButtonPressed = ManageEventOf<EventArgsControllerButtonPressed>(nameof(ControlEvents), nameof(ControlEvents.ControllerButtonPressed));
|
||||
this.Control_ControllerButtonReleased = ManageEventOf<EventArgsControllerButtonReleased>(nameof(ControlEvents), nameof(ControlEvents.ControllerButtonReleased));
|
||||
this.Control_ControllerTriggerPressed = ManageEventOf<EventArgsControllerTriggerPressed>(nameof(ControlEvents), nameof(ControlEvents.ControllerTriggerPressed));
|
||||
this.Control_ControllerTriggerReleased = ManageEventOf<EventArgsControllerTriggerReleased>(nameof(ControlEvents), nameof(ControlEvents.ControllerTriggerReleased));
|
||||
this.Control_KeyboardChanged = ManageEventOf<EventArgsKeyboardStateChanged>(nameof(ControlEvents), nameof(ControlEvents.KeyboardChanged));
|
||||
this.Control_KeyPressed = ManageEventOf<EventArgsKeyPressed>(nameof(ControlEvents), nameof(ControlEvents.KeyPressed));
|
||||
this.Control_KeyReleased = ManageEventOf<EventArgsKeyPressed>(nameof(ControlEvents), nameof(ControlEvents.KeyReleased));
|
||||
this.Legacy_Control_ControllerButtonPressed = ManageEventOf<EventArgsControllerButtonPressed>(nameof(ControlEvents), nameof(ControlEvents.ControllerButtonPressed));
|
||||
this.Legacy_Control_ControllerButtonReleased = ManageEventOf<EventArgsControllerButtonReleased>(nameof(ControlEvents), nameof(ControlEvents.ControllerButtonReleased));
|
||||
this.Legacy_Control_ControllerTriggerPressed = ManageEventOf<EventArgsControllerTriggerPressed>(nameof(ControlEvents), nameof(ControlEvents.ControllerTriggerPressed));
|
||||
this.Legacy_Control_ControllerTriggerReleased = ManageEventOf<EventArgsControllerTriggerReleased>(nameof(ControlEvents), nameof(ControlEvents.ControllerTriggerReleased));
|
||||
this.Legacy_Control_KeyboardChanged = ManageEventOf<EventArgsKeyboardStateChanged>(nameof(ControlEvents), nameof(ControlEvents.KeyboardChanged));
|
||||
this.Legacy_Control_KeyPressed = ManageEventOf<EventArgsKeyPressed>(nameof(ControlEvents), nameof(ControlEvents.KeyPressed));
|
||||
this.Legacy_Control_KeyReleased = ManageEventOf<EventArgsKeyPressed>(nameof(ControlEvents), nameof(ControlEvents.KeyReleased));
|
||||
this.Control_MouseChanged = ManageEventOf<EventArgsMouseStateChanged>(nameof(ControlEvents), nameof(ControlEvents.MouseChanged));
|
||||
|
||||
this.Game_FirstUpdateTick = ManageEvent(nameof(GameEvents), nameof(GameEvents.FirstUpdateTick));
|
||||
|
@ -270,8 +282,8 @@ namespace StardewModdingAPI.Framework.Events
|
|||
this.Graphics_OnPreRenderGuiEvent = ManageEvent(nameof(GraphicsEvents), nameof(GraphicsEvents.OnPreRenderGuiEvent));
|
||||
this.Graphics_OnPostRenderGuiEvent = ManageEvent(nameof(GraphicsEvents), nameof(GraphicsEvents.OnPostRenderGuiEvent));
|
||||
|
||||
this.Input_ButtonPressed = ManageEventOf<EventArgsInput>(nameof(InputEvents), nameof(InputEvents.ButtonPressed));
|
||||
this.Input_ButtonReleased = ManageEventOf<EventArgsInput>(nameof(InputEvents), nameof(InputEvents.ButtonReleased));
|
||||
this.Legacy_Input_ButtonPressed = ManageEventOf<EventArgsInput>(nameof(InputEvents), nameof(InputEvents.ButtonPressed));
|
||||
this.Legacy_Input_ButtonReleased = ManageEventOf<EventArgsInput>(nameof(InputEvents), nameof(InputEvents.ButtonReleased));
|
||||
|
||||
this.Legacy_Location_LocationsChanged = ManageEventOf<EventArgsLocationsChanged>(nameof(LocationEvents), nameof(LocationEvents.LocationsChanged));
|
||||
this.Legacy_Location_BuildingsChanged = ManageEventOf<EventArgsLocationBuildingsChanged>(nameof(LocationEvents), nameof(LocationEvents.BuildingsChanged));
|
||||
|
|
|
@ -8,6 +8,9 @@ namespace StardewModdingAPI.Framework.Events
|
|||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>Events raised when the player provides input using a controller, keyboard, or mouse.</summary>
|
||||
public IInputEvents Input { get; }
|
||||
|
||||
/// <summary>Events raised when something changes in the world.</summary>
|
||||
public IWorldEvents World { get; }
|
||||
|
||||
|
@ -20,6 +23,7 @@ namespace StardewModdingAPI.Framework.Events
|
|||
/// <param name="eventManager">The underlying event manager.</param>
|
||||
public ModEvents(IModMetadata mod, EventManager eventManager)
|
||||
{
|
||||
this.Input = new ModInputEvents(mod, eventManager);
|
||||
this.World = new ModWorldEvents(mod, eventManager);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
using System;
|
||||
using StardewModdingAPI.Events;
|
||||
|
||||
namespace StardewModdingAPI.Framework.Events
|
||||
{
|
||||
/// <summary>Events raised when the player provides input using a controller, keyboard, or mouse.</summary>
|
||||
internal class ModInputEvents : ModEventsBase, IInputEvents
|
||||
{
|
||||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>Raised when the player presses a button on the keyboard, controller, or mouse.</summary>
|
||||
public event EventHandler<InputButtonPressedArgsInput> ButtonPressed
|
||||
{
|
||||
add => this.EventManager.Input_ButtonPressed.Add(value);
|
||||
remove => this.EventManager.Input_ButtonPressed.Remove(value);
|
||||
}
|
||||
|
||||
/// <summary>Raised when the player releases a button on the keyboard, controller, or mouse.</summary>
|
||||
public event EventHandler<InputButtonReleasedArgsInput> ButtonReleased
|
||||
{
|
||||
add => this.EventManager.Input_ButtonReleased.Add(value);
|
||||
remove => this.EventManager.Input_ButtonReleased.Remove(value);
|
||||
}
|
||||
|
||||
|
||||
/*********
|
||||
** Public methods
|
||||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="mod">The mod which uses this instance.</param>
|
||||
/// <param name="eventManager">The underlying event manager.</param>
|
||||
internal ModInputEvents(IModMetadata mod, EventManager eventManager)
|
||||
: base(mod, eventManager) { }
|
||||
}
|
||||
}
|
|
@ -459,45 +459,47 @@ namespace StardewModdingAPI.Framework
|
|||
|
||||
if (status == InputStatus.Pressed)
|
||||
{
|
||||
this.Events.Input_ButtonPressed.Raise(new EventArgsInput(button, cursor, button.IsActionButton(), button.IsUseToolButton(), inputState.SuppressButtons));
|
||||
this.Events.Input_ButtonPressed.Raise(new InputButtonPressedArgsInput(button, cursor, inputState.SuppressButtons));
|
||||
this.Events.Legacy_Input_ButtonPressed.Raise(new EventArgsInput(button, cursor, inputState.SuppressButtons));
|
||||
|
||||
// legacy events
|
||||
if (button.TryGetKeyboard(out Keys key))
|
||||
{
|
||||
if (key != Keys.None)
|
||||
this.Events.Control_KeyPressed.Raise(new EventArgsKeyPressed(key));
|
||||
this.Events.Legacy_Control_KeyPressed.Raise(new EventArgsKeyPressed(key));
|
||||
}
|
||||
else if (button.TryGetController(out Buttons controllerButton))
|
||||
{
|
||||
if (controllerButton == Buttons.LeftTrigger || controllerButton == Buttons.RightTrigger)
|
||||
this.Events.Control_ControllerTriggerPressed.Raise(new EventArgsControllerTriggerPressed(PlayerIndex.One, controllerButton, controllerButton == Buttons.LeftTrigger ? inputState.RealController.Triggers.Left : inputState.RealController.Triggers.Right));
|
||||
this.Events.Legacy_Control_ControllerTriggerPressed.Raise(new EventArgsControllerTriggerPressed(PlayerIndex.One, controllerButton, controllerButton == Buttons.LeftTrigger ? inputState.RealController.Triggers.Left : inputState.RealController.Triggers.Right));
|
||||
else
|
||||
this.Events.Control_ControllerButtonPressed.Raise(new EventArgsControllerButtonPressed(PlayerIndex.One, controllerButton));
|
||||
this.Events.Legacy_Control_ControllerButtonPressed.Raise(new EventArgsControllerButtonPressed(PlayerIndex.One, controllerButton));
|
||||
}
|
||||
}
|
||||
else if (status == InputStatus.Released)
|
||||
{
|
||||
this.Events.Input_ButtonReleased.Raise(new EventArgsInput(button, cursor, button.IsActionButton(), button.IsUseToolButton(), inputState.SuppressButtons));
|
||||
this.Events.Input_ButtonReleased.Raise(new InputButtonReleasedArgsInput(button, cursor, inputState.SuppressButtons));
|
||||
this.Events.Legacy_Input_ButtonReleased.Raise(new EventArgsInput(button, cursor, inputState.SuppressButtons));
|
||||
|
||||
// legacy events
|
||||
if (button.TryGetKeyboard(out Keys key))
|
||||
{
|
||||
if (key != Keys.None)
|
||||
this.Events.Control_KeyReleased.Raise(new EventArgsKeyPressed(key));
|
||||
this.Events.Legacy_Control_KeyReleased.Raise(new EventArgsKeyPressed(key));
|
||||
}
|
||||
else if (button.TryGetController(out Buttons controllerButton))
|
||||
{
|
||||
if (controllerButton == Buttons.LeftTrigger || controllerButton == Buttons.RightTrigger)
|
||||
this.Events.Control_ControllerTriggerReleased.Raise(new EventArgsControllerTriggerReleased(PlayerIndex.One, controllerButton, controllerButton == Buttons.LeftTrigger ? inputState.RealController.Triggers.Left : inputState.RealController.Triggers.Right));
|
||||
this.Events.Legacy_Control_ControllerTriggerReleased.Raise(new EventArgsControllerTriggerReleased(PlayerIndex.One, controllerButton, controllerButton == Buttons.LeftTrigger ? inputState.RealController.Triggers.Left : inputState.RealController.Triggers.Right));
|
||||
else
|
||||
this.Events.Control_ControllerButtonReleased.Raise(new EventArgsControllerButtonReleased(PlayerIndex.One, controllerButton));
|
||||
this.Events.Legacy_Control_ControllerButtonReleased.Raise(new EventArgsControllerButtonReleased(PlayerIndex.One, controllerButton));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// raise legacy state-changed events
|
||||
if (inputState.RealKeyboard != previousInputState.RealKeyboard)
|
||||
this.Events.Control_KeyboardChanged.Raise(new EventArgsKeyboardStateChanged(previousInputState.RealKeyboard, inputState.RealKeyboard));
|
||||
this.Events.Legacy_Control_KeyboardChanged.Raise(new EventArgsKeyboardStateChanged(previousInputState.RealKeyboard, inputState.RealKeyboard));
|
||||
if (inputState.RealMouse != previousInputState.RealMouse)
|
||||
this.Events.Control_MouseChanged.Raise(new EventArgsMouseStateChanged(previousInputState.RealMouse, inputState.RealMouse, previousInputState.MousePosition, inputState.MousePosition));
|
||||
}
|
||||
|
|
|
@ -85,7 +85,10 @@
|
|||
<Compile Include="..\..\build\GlobalAssemblyInfo.cs">
|
||||
<Link>Properties\GlobalAssemblyInfo.cs</Link>
|
||||
</Compile>
|
||||
<Compile Include="Events\InputButtonReleasedEventArgs.cs" />
|
||||
<Compile Include="Events\InputButtonPressedEventArgs.cs" />
|
||||
<Compile Include="Events\EventArgsLocationBuildingsChanged.cs" />
|
||||
<Compile Include="Events\IInputEvents.cs" />
|
||||
<Compile Include="Events\IWorldEvents.cs" />
|
||||
<Compile Include="Events\MultiplayerEvents.cs" />
|
||||
<Compile Include="Events\WorldNpcListChangedEventArgs.cs" />
|
||||
|
@ -107,6 +110,7 @@
|
|||
<Compile Include="Framework\Content\ContentCache.cs" />
|
||||
<Compile Include="Framework\Events\ManagedEventBase.cs" />
|
||||
<Compile Include="Framework\Events\ModEvents.cs" />
|
||||
<Compile Include="Framework\Events\ModInputEvents.cs" />
|
||||
<Compile Include="Framework\Input\GamePadStateBuilder.cs" />
|
||||
<Compile Include="Framework\Input\SInputState.cs" />
|
||||
<Compile Include="Framework\Input\InputStatus.cs" />
|
||||
|
|
Loading…
Reference in New Issue