-
Notifications
You must be signed in to change notification settings - Fork 33
/
MousePositionTrigger.cs
50 lines (44 loc) · 1.42 KB
/
MousePositionTrigger.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using DeltaEngine.Commands;
using DeltaEngine.Datatypes;
using DeltaEngine.Extensions;
using DeltaEngine.ScreenSpaces;
namespace DeltaEngine.Input
{
/// <summary>
/// Tracks mouse movement with a mouse button in a prescribed state.
/// </summary>
public class MousePositionTrigger : InputTrigger, PositionTrigger, MouseTrigger
{
public MousePositionTrigger(MouseButton button = MouseButton.Left, State state = State.Pressing)
{
Button = button;
State = state;
}
public MouseButton Button { get; private set; }
public State State { get; private set; }
public Vector2D Position { get; set; }
public MousePositionTrigger(string buttonAndState)
{
var parameters = buttonAndState.SplitAndTrim(new[] { ' ' });
if (parameters.Length == 0)
throw new CannotCreateMousePositionTriggerWithoutKey();
Button = parameters[0].Convert<MouseButton>();
State = parameters.Length > 1 ? parameters[1].Convert<State>() : State.Pressing;
}
public class CannotCreateMousePositionTriggerWithoutKey : Exception {}
protected override void StartInputDevice()
{
Start<Mouse>();
}
public void HandleWithMouse(Mouse mouse)
{
if (Position == mouse.Position)
return;
var isButton = mouse.GetButtonState(Button) == State;
Position = mouse.Position;
if (isButton && ScreenSpace.Current.Viewport.Contains(mouse.Position))
Invoke();
}
}
}