-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGazeSystem.cs
118 lines (92 loc) · 2.99 KB
/
GazeSystem.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
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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GazeSystem : MonoBehaviour {
public GameObject reticle;
public Color inactivatedReticle = Color.gray;
public Color activatedReticle = Color.green;
private GazableObj currentGazeObj;
private GazableObj currentSelectedObj;
private RaycastHit lastHit;
// Use this for initialization
void Start () {
SetReticleColor(inactivatedReticle);
}
// Update is called once per frame
void Update () {
ProcessGaze();
CheckForInput(lastHit);
}
public void ProcessGaze() {
Ray raycastRay = new Ray(transform.position, transform.forward);
RaycastHit hitInfo;
Debug.DrawRay(raycastRay.origin, raycastRay.direction * 100);
if (Physics.Raycast(raycastRay, out hitInfo))
{
// Do something to the object
//Check if the object is interactable
//Get the gameobject from the hitInfo
GameObject hitObj = hitInfo.collider.gameObject;
//Get the Gazableobject from the hit object
GazableObj gazeObj = hitObj.GetComponent<GazableObj>();
// Object has a Gazable component
if (gazeObj != null)
{
if (gazeObj != currentGazeObj)
{
ClearCurrentObj();
currentGazeObj = gazeObj;
currentGazeObj.OnGazeEnter(hitInfo);
SetReticleColor(activatedReticle);
}
else {
currentGazeObj.OnGaze(hitInfo);
}
}
else
{
ClearCurrentObj();
}
lastHit = hitInfo;
//Check if the object is a new object (first time looking)
//Set the reticle color
}
else
{
ClearCurrentObj();
}
}
private void SetReticleColor(Color reticleColor)
{
// set the color of the reticle
reticle.GetComponent<Renderer>().material.SetColor("_Color", reticleColor);
}
private void CheckForInput(RaycastHit hitInfo)
{
//check for down
if (Input.GetMouseButtonDown(0) && currentGazeObj != null) {
currentSelectedObj = currentGazeObj;
currentSelectedObj.OnPress(hitInfo);
}
//check for hold
else if (Input.GetMouseButton(0) && currentSelectedObj != null)
{
currentSelectedObj.OnHold(hitInfo);
}
else if (Input.GetMouseButtonUp(0) && currentSelectedObj != null)
{
currentSelectedObj.OnRelease(hitInfo);
currentSelectedObj = null;
}
//check for release
}
private void ClearCurrentObj()
{
if (currentGazeObj != null)
{
currentGazeObj.OnGazeExit();
SetReticleColor(inactivatedReticle);
currentGazeObj = null;
}
}
}