#region usings
using System;
using System.Collections.Generic;
using OpenTK;
using OpenTK.Input;
using SM.Base.Window;
#endregion
namespace SM.Base.Controls
{
///
/// Mouse controller
///
public class Mouse
{
internal static MouseState? _mouseState;
internal static List _lastButtonsPressed = new List();
///
/// The current position of the mouse in the screen.
///
public static Vector2 InScreen { get; private set; }
///
/// The current position of the mouse in the screen from 0..1.
///
public static Vector2 InScreenNormalized { get; private set; }
///
/// The event to update the values.
///
/// The event args.
/// The window where the mouse is checked
internal static void MouseMoveEvent(MouseMoveEventArgs mmea, IGenericWindow window)
{
InScreen = new Vector2(mmea.X, mmea.Y);
InScreenNormalized = new Vector2(mmea.X / (float) window.Width, mmea.Y / (float) window.Height);
}
internal static void SetState()
{
if (_mouseState.HasValue)
{
_lastButtonsPressed = new List();
foreach (object o in Enum.GetValues(typeof(MouseButton)))
if (_mouseState.Value[(MouseButton) o])
_lastButtonsPressed.Add((MouseButton) o);
}
_mouseState = OpenTK.Input.Mouse.GetState();
}
public static bool IsDown(MouseButton button, bool once = false)
{
return _mouseState?[button] == true && !(once && _lastButtonsPressed.Contains(button));
}
public static bool IsUp(MouseButton button, bool once = false)
{
return _mouseState?[button] == false && !(once && !_lastButtonsPressed.Contains(button));
}
}
}