using System;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
namespace StardewModdingAPI.Events
{
/// Events raised when the player uses a controller, keyboard, or mouse.
public static class ControlEvents
{
/*********
** Events
*********/
/// Raised when the changes. That happens when the player presses or releases a key.
public static event EventHandler KeyboardChanged = delegate { };
/// Raised when the player presses a keyboard key.
public static event EventHandler KeyPressed = delegate { };
/// Raised when the player releases a keyboard key.
public static event EventHandler KeyReleased = delegate { };
/// Raised when the changes. That happens when the player moves the mouse, scrolls the mouse wheel, or presses/releases a button.
public static event EventHandler MouseChanged = delegate { };
/// The player pressed a controller button. This event isn't raised for trigger buttons.
public static event EventHandler ControllerButtonPressed = delegate { };
/// The player released a controller button. This event isn't raised for trigger buttons.
public static event EventHandler ControllerButtonReleased = delegate { };
/// The player pressed a controller trigger button.
public static event EventHandler ControllerTriggerPressed = delegate { };
/// The player released a controller trigger button.
public static event EventHandler ControllerTriggerReleased = delegate { };
/*********
** Internal methods
*********/
/// Raise a event.
/// The previous keyboard state.
/// The current keyboard state.
internal static void InvokeKeyboardChanged(KeyboardState priorState, KeyboardState newState)
{
ControlEvents.KeyboardChanged.Invoke(null, new EventArgsKeyboardStateChanged(priorState, newState));
}
/// Raise a event.
/// The previous mouse state.
/// The current mouse state.
/// The previous mouse position on the screen adjusted for the zoom level.
/// The current mouse position on the screen adjusted for the zoom level.
internal static void InvokeMouseChanged(MouseState priorState, MouseState newState, Point priorPosition, Point newPosition)
{
ControlEvents.MouseChanged.Invoke(null, new EventArgsMouseStateChanged(priorState, newState, priorPosition, newPosition));
}
/// Raise a event.
/// The keyboard button that was pressed.
internal static void InvokeKeyPressed(Keys key)
{
ControlEvents.KeyPressed.Invoke(null, new EventArgsKeyPressed(key));
}
/// Raise a event.
/// The keyboard button that was released.
internal static void InvokeKeyReleased(Keys key)
{
ControlEvents.KeyReleased.Invoke(null, new EventArgsKeyPressed(key));
}
/// Raise a event.
/// The player who pressed the button.
/// The controller button that was pressed.
internal static void InvokeButtonPressed(PlayerIndex playerIndex, Buttons button)
{
ControlEvents.ControllerButtonPressed.Invoke(null, new EventArgsControllerButtonPressed(playerIndex, button));
}
/// Raise a event.
/// The player who released the button.
/// The controller button that was released.
internal static void InvokeButtonReleased(PlayerIndex playerIndex, Buttons button)
{
ControlEvents.ControllerButtonReleased.Invoke(null, new EventArgsControllerButtonReleased(playerIndex, button));
}
/// Raise a event.
/// The player who pressed the trigger button.
/// The trigger button that was pressed.
/// The current trigger value.
internal static void InvokeTriggerPressed(PlayerIndex playerIndex, Buttons button, float value)
{
ControlEvents.ControllerTriggerPressed.Invoke(null, new EventArgsControllerTriggerPressed(playerIndex, button, value));
}
/// Raise a event.
/// The player who pressed the trigger button.
/// The trigger button that was pressed.
/// The current trigger value.
internal static void InvokeTriggerReleased(PlayerIndex playerIndex, Buttons button, float value)
{
ControlEvents.ControllerTriggerReleased.Invoke(null, new EventArgsControllerTriggerReleased(playerIndex, button, value));
}
}
}