forked from TouchScript/TouchScript
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTouchDebugger.cs
More file actions
134 lines (104 loc) · 4.82 KB
/
Copy pathTouchDebugger.cs
File metadata and controls
134 lines (104 loc) · 4.82 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
122
123
124
125
126
/*
* Copyright (C) 2012 Interactive Lab
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, * modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions:
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the * Software.
* * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
using System;
using System.Collections.Generic;
using TouchScript.Events;
using UnityEngine;
namespace TouchScript.Debugging {
/// <summary>
/// Visual debugger to show touches as GUI elements.
/// </summary>
public class TouchDebugger : MonoBehaviour
{
#region Unity fields
/// <summary>
/// Texture to use
/// </summary>
public Texture2D TouchTexture;
/// <summary>
/// Font color for touch ids
/// </summary>
public Color FontColor;
#endregion
#region Private variables
private readonly Dictionary<int, TouchPoint> dummies = new Dictionary<int, TouchPoint>();
private GUIStyle style;
#endregion
#region Unity
private void Start() {
if (camera == null) throw new Exception("A camera is required.");
if (TouchManager.Instance == null) throw new Exception("A TouchManager is required.");
TouchManager.Instance.TouchPointsAdded += OnTouchPointsAdded;
TouchManager.Instance.TouchPointsRemoved += OnTouchPointsRemoved;
TouchManager.Instance.TouchPointsUpdated += OnTouchPointsUpdated;
TouchManager.Instance.TouchPointsCancelled += OnTouchPointsCancelled;
}
private void Update() {
camera.orthographicSize = Screen.height * .5f;
}
private void OnGUI() {
if (TouchTexture == null) return;
GUI.color = FontColor;
foreach (KeyValuePair<int, TouchPoint> dummy in dummies)
{
var x = dummy.Value.Position.x;
var y = Screen.height - dummy.Value.Position.y;
GUI.DrawTexture(new Rect(x - TouchTexture.width / 2, y - TouchTexture.height / 2, TouchTexture.width, TouchTexture.height), TouchTexture, ScaleMode.ScaleToFit);
GUI.Label(new Rect(x + TouchTexture.width, y - 9, 60, 25), dummy.Value.Id.ToString());
}
}
private void OnDestroy() {
TouchManager.Instance.TouchPointsAdded -= OnTouchPointsAdded;
TouchManager.Instance.TouchPointsRemoved -= OnTouchPointsRemoved;
TouchManager.Instance.TouchPointsUpdated -= OnTouchPointsUpdated;
TouchManager.Instance.TouchPointsCancelled -= OnTouchPointsCancelled;
}
#endregion
#region Private functions
private void updateDummy(TouchPoint dummy)
{
dummies[dummy.Id] = dummy;
}
#endregion
#region Event handlers
private void OnTouchPointsAdded(object sender, TouchEventArgs e) {
if (!enabled) return;
foreach (var touchPoint in e.TouchPoints) {
dummies.Add(touchPoint.Id, touchPoint);
}
}
private void OnTouchPointsUpdated(object sender, TouchEventArgs e) {
if (!enabled) return;
foreach (var touchPoint in e.TouchPoints) {
TouchPoint dummy;
if (!dummies.TryGetValue(touchPoint.Id, out dummy)) return;
updateDummy(touchPoint);
}
}
private void OnTouchPointsRemoved(object sender, TouchEventArgs e) {
if (!enabled) return;
foreach (var touchPoint in e.TouchPoints) {
TouchPoint dummy;
if (!dummies.TryGetValue(touchPoint.Id, out dummy)) return;
dummies.Remove(touchPoint.Id);
}
}
private void OnTouchPointsCancelled(object sender, TouchEventArgs e) {
OnTouchPointsRemoved(sender, e);
}
#endregion
}
}