forked from Unity-Technologies/UnityCsReference
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVRNodeState.cs
More file actions
192 lines (171 loc) · 5.15 KB
/
Copy pathVRNodeState.cs
File metadata and controls
192 lines (171 loc) · 5.15 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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
// Unity C# reference source
// Copyright (c) Unity Technologies. For terms of use, see
// https://unity3d.com/legal/licenses/Unity_Reference_Only_License
using System;
using System.Runtime.InteropServices;
using UnityEngine.Scripting;
using UnityEngine.Scripting.APIUpdating;
namespace UnityEngine.XR
{
// Matches UnityVRTrackedNodeAttribs in IUnityVR.h
[Flags]
internal enum AvailableTrackingData
{
None = 0,
PositionAvailable = 0x00000001,
RotationAvailable = 0x00000002,
VelocityAvailable = 0x00000004,
AngularVelocityAvailable = 0x00000008,
AccelerationAvailable = 0x00000010,
AngularAccelerationAvailable = 0x00000020
}
[StructLayout(LayoutKind.Sequential)]
[UsedByNativeCode]
public struct XRNodeState
{
// This sequence of members must match the C++ struct 'XRNodeStateToManaged' in XR.bindings
private XRNode m_Type;
private AvailableTrackingData m_AvailableFields;
private Vector3 m_Position;
private Quaternion m_Rotation;
private Vector3 m_Velocity;
private Vector3 m_AngularVelocity;
private Vector3 m_Acceleration;
private Vector3 m_AngularAcceleration;
private int m_Tracked;
private ulong m_UniqueID;
// Properties
public ulong uniqueID
{
get
{
return m_UniqueID;
}
set
{
m_UniqueID = value;
}
}
public XRNode nodeType
{
get
{
return m_Type;
}
set
{
m_Type = value;
}
}
public bool tracked
{
get
{
return m_Tracked == 1;
}
set
{
m_Tracked = value ? 1 : 0;
}
}
public Vector3 position
{
set
{
m_Position = value;
m_AvailableFields |= AvailableTrackingData.PositionAvailable;
}
}
public Quaternion rotation
{
set
{
m_Rotation = value;
m_AvailableFields |= AvailableTrackingData.RotationAvailable;
}
}
public Vector3 velocity
{
set
{
m_Velocity = value;
m_AvailableFields |= AvailableTrackingData.VelocityAvailable;
}
}
public Vector3 angularVelocity
{
set
{
m_AngularVelocity = value;
m_AvailableFields |= AvailableTrackingData.AngularVelocityAvailable;
}
}
public Vector3 acceleration
{
set
{
m_Acceleration = value;
m_AvailableFields |= AvailableTrackingData.AccelerationAvailable;
}
}
public Vector3 angularAcceleration
{
set
{
m_AngularAcceleration = value;
m_AvailableFields |= AvailableTrackingData.AngularAccelerationAvailable;
}
}
// Getters
public bool TryGetPosition(out Vector3 position)
{
return TryGet(m_Position, AvailableTrackingData.PositionAvailable, out position);
}
public bool TryGetRotation(out Quaternion rotation)
{
return TryGet(m_Rotation, AvailableTrackingData.RotationAvailable, out rotation);
}
public bool TryGetVelocity(out Vector3 velocity)
{
return TryGet(m_Velocity, AvailableTrackingData.VelocityAvailable, out velocity);
}
public bool TryGetAngularVelocity(out Vector3 angularVelocity)
{
return TryGet(m_AngularVelocity, AvailableTrackingData.AngularVelocityAvailable, out angularVelocity);
}
public bool TryGetAcceleration(out Vector3 acceleration)
{
return TryGet(m_Acceleration, AvailableTrackingData.AccelerationAvailable, out acceleration);
}
public bool TryGetAngularAcceleration(out Vector3 angularAcceleration)
{
return TryGet(m_AngularAcceleration, AvailableTrackingData.AngularAccelerationAvailable, out angularAcceleration);
}
private bool TryGet(Vector3 inValue, AvailableTrackingData availabilityFlag, out Vector3 outValue)
{
if ((m_AvailableFields & availabilityFlag) > 0)
{
outValue = inValue;
return true;
}
else
{
outValue = Vector3.zero;
return false;
}
}
private bool TryGet(Quaternion inValue, AvailableTrackingData availabilityFlag, out Quaternion outValue)
{
if ((m_AvailableFields & availabilityFlag) > 0)
{
outValue = inValue;
return true;
}
else
{
outValue = Quaternion.identity;
return false;
}
}
}
}