forked from TouchScript/TouchScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTuioInput.cs
More file actions
121 lines (99 loc) · 3.34 KB
/
TuioInput.cs
File metadata and controls
121 lines (99 loc) · 3.34 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
* @author Valentin Simonov / http://va.lent.in/
*/
using System.Collections.Generic;
using TUIOsharp;
using UnityEngine;
namespace TouchScript.InputSources
{
/// <summary>
/// Processes TUIO 1.0 input.
/// </summary>
[AddComponentMenu("TouchScript/Input Sources/TUIO Input")]
public class TuioInput : InputSourcePro
{
#region Unity fields
/// <summary>
/// Port to listen to.
/// </summary>
public int TuioPort = 3333;
/// <summary>
/// Minimum movement delta to ignore in cm.
/// </summary>
public float MovementThreshold = 0f;
#endregion
#region Private variables
private TuioServer server;
private Dictionary<TuioCursor, int> cursorToInternalId = new Dictionary<TuioCursor, int>();
private int screenWidth;
private int screenHeight;
#endregion
#region Unity
/// <inheritdoc />
protected override void Start()
{
base.Start();
server = new TuioServer(TuioPort);
server.MovementThreshold = MovementThreshold*TouchManager.Instance.DotsPerCentimeter/Mathf.Max(Screen.width, Screen.height);
server.CursorAdded += OnCursorAdded;
server.CursorUpdated += OnCursorUpdated;
server.CursorRemoved += OnCursorRemoved;
server.Connect();
}
/// <inheritdoc />
protected override void Update()
{
base.Update();
screenWidth = Screen.width;
screenHeight = Screen.height;
}
/// <inheritdoc />
protected override void OnDestroy()
{
if (server != null)
{
server.CursorAdded -= OnCursorAdded;
server.CursorUpdated -= OnCursorUpdated;
server.CursorRemoved -= OnCursorRemoved;
server.Disconnect();
}
base.OnDestroy();
}
#endregion
#region Event handlers
private void OnCursorAdded(object sender, TuioCursorEventArgs tuioCursorEventArgs)
{
var cursor = tuioCursorEventArgs.Cursor;
lock (this)
{
var x = cursor.X*screenWidth;
var y = (1 - cursor.Y)*screenHeight;
cursorToInternalId.Add(cursor, beginTouch(new Vector2(x, y)));
}
}
private void OnCursorUpdated(object sender, TuioCursorEventArgs tuioCursorEventArgs)
{
var cursor = tuioCursorEventArgs.Cursor;
lock (this)
{
int existingCursor;
if (!cursorToInternalId.TryGetValue(cursor, out existingCursor)) return;
var x = cursor.X*screenWidth;
var y = (1 - cursor.Y)*screenHeight;
moveTouch(existingCursor, new Vector2(x, y));
}
}
private void OnCursorRemoved(object sender, TuioCursorEventArgs tuioCursorEventArgs)
{
var cursor = tuioCursorEventArgs.Cursor;
lock (this)
{
int existingCursor;
if (!cursorToInternalId.TryGetValue(cursor, out existingCursor)) return;
cursorToInternalId.Remove(cursor);
endTouch(existingCursor);
}
}
#endregion
}
}