1137{
1138 base.SetDrivenObjectTransform(settings, scaleSettings, gameBoardSettings);
1139 }
1140 }
1141
1142#if UNITY_2019_1_OR_NEWER && INPUTSYSTEM_AVAILABLE
1143 private class GlassesDeviceCore : GlassesCore, IDisposable
1144 {
1145 internal GlassesDevice glassesDevice;
1146
1147 private enum TrackingState : int
1148 {
1150 Limited,
1151 Tracking
1152 }
1153
1154 public GlassesDeviceCore(GlassesHandle glassesHandle) : base(glassesHandle)
1155 {
1156 glassesDevice =
Input.GetGlassesDevice(playerIndex);
1157
1158 if(glassesDevice != null && glassesDevice.added)
1159 {
1160 InputSystem.EnableDevice(glassesDevice);
1161 }
1162 }
1163
1164 public override void Dispose()
1165 {
1166 base.Dispose();
1167
1168 if(glassesDevice != null && glassesDevice.added)
1169 {
1170 InputSystem.DisableDevice(glassesDevice);
1171 }
1172 }
1173
1175 {
1176 base.SetDrivenObjectTransform(settings, scaleSettings, gameboardSettings);
1177
1178 if(glassesDevice == null || !glassesDevice.added)
1179 {
1180 return;
1181 }
1182
1183
1184 QueueDeltaStateEvent(glassesDevice.devicePosition, pose_UWRLD.position);
1185 QueueDeltaStateEvent(glassesDevice.centerEyePosition, pose_UWRLD.position);
1186 QueueDeltaStateEvent(glassesDevice.leftEyePosition, eyePositions[
AREyes.EYE_LEFT]);
1187 QueueDeltaStateEvent(glassesDevice.rightEyePosition, eyePositions[
AREyes.EYE_RIGHT]);
1188
1189
1190 QueueDeltaStateEvent(glassesDevice.deviceRotation, pose_UWRLD.rotation);
1191 QueueDeltaStateEvent(glassesDevice.centerEyeRotation, pose_UWRLD.rotation);
1192 QueueDeltaStateEvent(glassesDevice.leftEyeRotation, pose_UWRLD.rotation);
1193 QueueDeltaStateEvent(glassesDevice.rightEyeRotation, pose_UWRLD.rotation);
1194
1195
1196 QueueDeltaStateEvent(glassesDevice.RawPosition, pose_UGBD.position);
1197 QueueDeltaStateEvent(glassesDevice.RawLeftEyePosition, WorldToGameboardSpace(eyePositions[
AREyes.EYE_LEFT], scaleSettings, gameboardSettings));
1198 QueueDeltaStateEvent(glassesDevice.RawRightEyePosition, WorldToGameboardSpace(eyePositions[
AREyes.EYE_RIGHT], scaleSettings, gameboardSettings));
1199
1200
1201 QueueDeltaStateEvent(glassesDevice.RawRotation, pose_UGBD.rotation);
1202 QueueDeltaStateEvent(glassesDevice.leftEyeRotation, pose_UGBD.rotation);
1203 QueueDeltaStateEvent(glassesDevice.rightEyeRotation, pose_UGBD.rotation);
1204
1205 InputSystem.QueueDeltaStateEvent(glassesDevice.isTracked, isTracked);
1206
1207 var trackingState = TrackingState.Tracking;
1208 if (!isTracked)
1209 {
1210 trackingState = settings.FailureMode == TrackableSettings.TrackingFailureMode.FreezePosition
1211 ? TrackingState.Limited
1212 : TrackingState.None;
1213 }
1214
1215 InputSystem.QueueDeltaStateEvent(glassesDevice.trackingState, (int)trackingState);
1216 }
1217
1218 private static void QueueDeltaStateEvent(Vector3Control vector3Control, Vector3 delta)
1219 {
1220 InputSystem.QueueDeltaStateEvent(vector3Control.x, delta.x);
1221 InputSystem.QueueDeltaStateEvent(vector3Control.y, delta.y);
1222 InputSystem.QueueDeltaStateEvent(vector3Control.z, delta.z);
1223 }
1224
1225
1226
1227 private static void QueueDeltaStateEvent(QuaternionControl quaternionControl, Quaternion delta)
1228 {
1229 InputSystem.QueueDeltaStateEvent(quaternionControl.w, delta.w);
1230 InputSystem.QueueDeltaStateEvent(quaternionControl.x, delta.x);
1231 InputSystem.QueueDeltaStateEvent(quaternionControl.y, delta.y);
1232 InputSystem.QueueDeltaStateEvent(quaternionControl.z, delta.z);
1233 }
1234 }
1235#endif
1236
1237 }
1238}
TiltFive.Glasses.AREyes AREyes
GlassesSettings encapsulates all configuration data used by the Glasses' tracking runtime to compute ...
ScaleSettings contains the scale data used to translate between Unity units and the user's physical s...