From bd7e8983811c2219b3e9c04c7fdf07e97f34c967 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 11:44:11 -0400 Subject: [PATCH 01/73] removed profile references from outside constructor --- .../CameraSystem/MixedRealityCameraSystem.cs | 70 ++++++++++++++----- 1 file changed, 52 insertions(+), 18 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 53c173e9b..322a5ff20 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -23,16 +23,50 @@ public class MixedRealityCameraSystem : BaseSystem, IMixedRealityCameraSystem public MixedRealityCameraSystem(MixedRealityCameraProfile profile) : base(profile) { - this.profile = profile; DefaultHeadHeight = profile.DefaultHeadHeight; - if (profile.CameraRigType.Type == null) + if (profile.CameraRigType?.Type == null) { throw new Exception("Camera rig type cannot be null!"); } + + cameraRigType = profile.CameraRigType?.Type; + isCameraPersistent = profile.IsCameraPersistent; + + opaqueQualityLevel = profile.OpaqueQualityLevel; + transparentQualityLevel = profile.TransparentQualityLevel; + + nearClipPlaneOpaqueDisplay = profile.NearClipPlaneOpaqueDisplay; + nearClipPlaneTransparentDisplay = profile.NearClipPlaneTransparentDisplay; + + backgroundColorOpaqueDisplay = profile.BackgroundColorOpaqueDisplay; + backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay; + + cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay; + cameraClearFlagsTransparentDisplay = profile.CameraClearFlagsTransparentDisplay; + + bodyAdjustmentAngle = profile.BodyAdjustmentAngle; + bodyAdjustmentSpeed = profile.BodyAdjustmentSpeed; } - private readonly MixedRealityCameraProfile profile; + private readonly Type cameraRigType; + + private readonly bool isCameraPersistent; + + private readonly int opaqueQualityLevel; + private readonly int transparentQualityLevel; + + private readonly float nearClipPlaneOpaqueDisplay; + private readonly float nearClipPlaneTransparentDisplay; + + private readonly Color backgroundColorOpaqueDisplay; + private readonly Color backgroundColorTransparentDisplay; + + private readonly CameraClearFlags cameraClearFlagsOpaqueDisplay; + private readonly CameraClearFlags cameraClearFlagsTransparentDisplay; + + private readonly float bodyAdjustmentSpeed; + private readonly double bodyAdjustmentAngle; /// public bool IsOpaque @@ -106,11 +140,11 @@ public override void Initialize() if (CameraRig == null) { - CameraRig = CameraCache.Main.gameObject.EnsureComponent(profile.CameraRigType.Type) as IMixedRealityCameraRig; + CameraRig = CameraCache.Main.gameObject.EnsureComponent(cameraRigType) as IMixedRealityCameraRig; Debug.Assert(CameraRig != null); ResetRigTransforms(); } - + ApplySettingsForDefaultHeadHeight(); } @@ -122,11 +156,11 @@ public override void Enable() ResetRigTransforms(); if (Application.isPlaying && - profile.IsCameraPersistent) + isCameraPersistent) { CameraCache.Main.transform.root.DontDestroyOnLoad(); } - + ApplySettingsForDefaultHeadHeight(); } @@ -197,7 +231,7 @@ public override void Disable() } } } - + /// /// Depending on whether there is an XR device connected, /// moves the camera to the setting from the camera profile. @@ -222,10 +256,10 @@ private void ApplySettingsForDefaultHeadHeight() /// private void ApplySettingsForOpaqueDisplay() { - CameraCache.Main.clearFlags = profile.CameraClearFlagsOpaqueDisplay; - CameraCache.Main.nearClipPlane = profile.NearClipPlaneOpaqueDisplay; - CameraCache.Main.backgroundColor = profile.BackgroundColorOpaqueDisplay; - QualitySettings.SetQualityLevel(profile.OpaqueQualityLevel, false); + CameraCache.Main.clearFlags = cameraClearFlagsOpaqueDisplay; + CameraCache.Main.nearClipPlane = nearClipPlaneOpaqueDisplay; + CameraCache.Main.backgroundColor = backgroundColorOpaqueDisplay; + QualitySettings.SetQualityLevel(opaqueQualityLevel, false); } /// @@ -233,10 +267,10 @@ private void ApplySettingsForOpaqueDisplay() /// private void ApplySettingsForTransparentDisplay() { - CameraCache.Main.clearFlags = profile.CameraClearFlagsTransparentDisplay; - CameraCache.Main.backgroundColor = profile.BackgroundColorTransparentDisplay; - CameraCache.Main.nearClipPlane = profile.NearClipPlaneTransparentDisplay; - QualitySettings.SetQualityLevel(profile.TransparentQualityLevel, false); + CameraCache.Main.clearFlags = cameraClearFlagsTransparentDisplay; + CameraCache.Main.backgroundColor = backgroundColorTransparentDisplay; + CameraCache.Main.nearClipPlane = nearClipPlaneTransparentDisplay; + QualitySettings.SetQualityLevel(transparentQualityLevel, false); } private void ResetRigTransforms() @@ -264,9 +298,9 @@ private void SyncRigTransforms() var headRotation = CameraRig.CameraTransform.rotation; var currentAngle = Mathf.Abs(Quaternion.Angle(bodyRotation, headRotation)); - if (currentAngle > profile.BodyAdjustmentAngle) + if (currentAngle > bodyAdjustmentAngle) { - CameraRig.BodyTransform.rotation = Quaternion.Slerp(bodyRotation, headRotation, Time.deltaTime * profile.BodyAdjustmentSpeed); + CameraRig.BodyTransform.rotation = Quaternion.Slerp(bodyRotation, headRotation, Time.deltaTime * bodyAdjustmentSpeed); } } } From a676d8e8b77a44dd180706ab283ccb577e5cfe85 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 13:00:59 -0400 Subject: [PATCH 02/73] First pass at camera system refactor --- .../MixedRealityCameraDataProvidersProfile.cs | 14 +++++ ...dRealityCameraDataProvidersProfile.cs.meta | 11 ++++ ....cs => MixedRealityCameraSystemProfile.cs} | 22 +++++-- ...> MixedRealityCameraSystemProfile.cs.meta} | 0 .../MixedRealityToolkitRootProfile.cs | 15 +++-- ...lityCameraDataProvidersProfileInspector.cs | 19 ++++++ ...ameraDataProvidersProfileInspector.cs.meta | 3 + ...xedRealityCameraSystemProfileInspector.cs} | 16 +++-- ...alityCameraSystemProfileInspector.cs.meta} | 0 ...MixedRealityToolkitRootProfileInspector.cs | 6 +- .../IMixedRealityCameraDataProvider.cs | 12 ++++ .../IMixedRealityCameraDataProvider.cs.meta | 11 ++++ .../CameraSystem/IMixedRealityCameraSystem.cs | 8 ++- .../CameraSystem/MixedRealityCameraSystem.cs | 62 +++++++++++-------- .../Services/MixedRealityToolkit.cs | 20 ++++-- 15 files changed, 170 insertions(+), 49 deletions(-) create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs.meta rename XRTK-Core/Packages/com.xrtk.core/Definitions/{MixedRealityCameraProfile.cs => MixedRealityCameraSystemProfile.cs} (85%) rename XRTK-Core/Packages/com.xrtk.core/Definitions/{MixedRealityCameraProfile.cs.meta => MixedRealityCameraSystemProfile.cs.meta} (100%) create mode 100644 XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta rename XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/{MixedRealityCameraProfileInspector.cs => MixedRealityCameraSystemProfileInspector.cs} (91%) rename XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/{MixedRealityCameraProfileInspector.cs.meta => MixedRealityCameraSystemProfileInspector.cs.meta} (100%) create mode 100644 XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs.meta diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs new file mode 100644 index 000000000..4b9935cbb --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs @@ -0,0 +1,14 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.CameraSystem; + +namespace XRTK.Definitions.CameraSystem +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera System/Data Providers Profile", fileName = "MixedRealityCameraDataProvidersProfile", order = (int)CreateProfileMenuItemIndices.Camera)] + public class MixedRealityCameraDataProvidersProfile : BaseMixedRealityServiceProfile + { + } +} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs.meta new file mode 100644 index 000000000..1071f8f2c --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6392e72d9fe0498d862d829cd68490f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs similarity index 85% rename from XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraProfile.cs rename to XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs index 0915b9fd5..5d1ad060c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs @@ -1,4 +1,4 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. using UnityEngine; @@ -6,17 +6,27 @@ using XRTK.Definitions.Utilities; using XRTK.Interfaces; using XRTK.Services.CameraSystem; +using XRTK.Interfaces.CameraSystem; -namespace XRTK.Definitions +namespace XRTK.Definitions.CameraSystem { /// - /// This tells you if your head mounted display (HMD) + /// This tells you if your head mounted display (HMD) /// is a transparent device or an occluded device. /// Based on those values, you can customize your camera and quality settings. /// - [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera Profile", fileName = "MixedRealityCameraProfile", order = (int)CreateProfileMenuItemIndices.Camera)] - public class MixedRealityCameraProfile : BaseMixedRealityProfile + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera System Profile", fileName = "MixedRealityCameraSystemProfile", order = (int)CreateProfileMenuItemIndices.Camera)] + public class MixedRealityCameraSystemProfile : BaseMixedRealityProfile { + [SerializeField] + [Tooltip("The list of registered Camera Data Providers for each platform.")] + private MixedRealityCameraDataProvidersProfile cameraDataProvidersProfile = null; + + /// + /// The The list of registered s for each platform. + /// + public MixedRealityCameraDataProvidersProfile CameraDataProvidersProfile => cameraDataProvidersProfile; + [SerializeField] private bool isCameraPersistent = false; @@ -126,7 +136,7 @@ public SystemType CameraRigType public float DefaultHeadHeight => defaultHeadHeight; [SerializeField] - [Range(0f, 180f)] + [UnityEngine.Range(0f, 180f)] [Tooltip("This is the angle that will be used to adjust the player's body rotation in relation to their head position.")] private float bodyAdjustmentAngle = 60f; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraProfile.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs.meta similarity index 100% rename from XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraProfile.cs.meta rename to XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs.meta diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityToolkitRootProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityToolkitRootProfile.cs index 2e7c7c26a..230da4509 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityToolkitRootProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityToolkitRootProfile.cs @@ -2,8 +2,10 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using UnityEngine; +using UnityEngine.Serialization; using XRTK.Attributes; using XRTK.Definitions.BoundarySystem; +using XRTK.Definitions.CameraSystem; using XRTK.Definitions.DiagnosticsSystem; using XRTK.Definitions.InputSystem; using XRTK.Definitions.NetworkingSystem; @@ -38,7 +40,7 @@ public sealed class MixedRealityToolkitRootProfile : BaseMixedRealityProfile /// public bool IsCameraSystemEnabled { - get => CameraProfile != null && cameraSystemType != null && cameraSystemType.Type != null && enableCameraSystem; + get => CameraSystemProfile != null && cameraSystemType != null && cameraSystemType.Type != null && enableCameraSystem; internal set => enableCameraSystem = value; } @@ -57,17 +59,18 @@ public SystemType CameraSystemType } [SerializeField] - [Tooltip("Camera profile.")] - private MixedRealityCameraProfile cameraProfile; + [Tooltip("Camera system profile.")] + [FormerlySerializedAs("cameraProfile")] + private MixedRealityCameraSystemProfile cameraSystemProfile; /// /// Profile for customizing your camera and quality settings based on if your /// head mounted display (HMD) is a transparent device or an occluded device. /// - public MixedRealityCameraProfile CameraProfile + public MixedRealityCameraSystemProfile CameraSystemProfile { - get => cameraProfile; - internal set => cameraProfile = value; + get => cameraSystemProfile; + internal set => cameraSystemProfile = value; } #endregion Camera System Properties diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs new file mode 100644 index 000000000..6de46fd97 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs @@ -0,0 +1,19 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Definitions.CameraSystem; + +namespace XRTK.Inspectors.Profiles.CameraSystem +{ + [CustomEditor(typeof(MixedRealityCameraDataProvidersProfile))] + public class MixedRealityCameraDataProvidersProfileInspector : MixedRealityServiceProfileInspector + { + public override void OnInspectorGUI() + { + RenderHeader("Use this profile to define and control camera sources in your application.\n\nBelow is a list of registered Camera Data Providers for each platform."); + + base.OnInspectorGUI(); + } + } +} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta new file mode 100644 index 000000000..c9c71f1e3 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 90a8f941d0354a9889fac49e8369c9b8 +timeCreated: 1586624388 \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs similarity index 91% rename from XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs rename to XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs index 2dd97356a..c2b74a56c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs @@ -3,15 +3,18 @@ using UnityEditor; using UnityEngine; -using XRTK.Definitions; +using XRTK.Definitions.CameraSystem; using XRTK.Services; -namespace XRTK.Inspectors.Profiles +namespace XRTK.Inspectors.Profiles.CameraSystem { - [CustomEditor(typeof(MixedRealityCameraProfile))] - public class MixedRealityCameraProfileInspector : BaseMixedRealityProfileInspector + [CustomEditor(typeof(MixedRealityCameraSystemProfile))] + public class MixedRealityCameraSystemProfileInspector : BaseMixedRealityProfileInspector { + private SerializedProperty cameraDataProvidersProfile; + private SerializedProperty isCameraPersistent; + private SerializedProperty nearClipPlaneOpaqueDisplay; private SerializedProperty cameraClearFlagsOpaqueDisplay; private SerializedProperty backgroundColorOpaqueDisplay; @@ -34,6 +37,8 @@ protected override void OnEnable() { base.OnEnable(); + cameraDataProvidersProfile = serializedObject.FindProperty(nameof(cameraDataProvidersProfile)); + isCameraPersistent = serializedObject.FindProperty(nameof(isCameraPersistent)); nearClipPlaneOpaqueDisplay = serializedObject.FindProperty(nameof(nearClipPlaneOpaqueDisplay)); cameraClearFlagsOpaqueDisplay = serializedObject.FindProperty(nameof(cameraClearFlagsOpaqueDisplay)); @@ -59,8 +64,11 @@ public override void OnInspectorGUI() EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(cameraDataProvidersProfile); + EditorGUILayout.Space(); EditorGUILayout.LabelField("Global Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(isCameraPersistent); EditorGUILayout.PropertyField(cameraRigType); EditorGUILayout.PropertyField(defaultHeadHeight); diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs.meta similarity index 100% rename from XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs.meta rename to XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs.meta diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs index 8cec8fd87..47fa6e702 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs @@ -16,7 +16,7 @@ public class MixedRealityToolkitRootProfileInspector : BaseMixedRealityProfileIn // Camera system properties private SerializedProperty enableCameraSystem; private SerializedProperty cameraSystemType; - private SerializedProperty cameraProfile; + private SerializedProperty cameraSystemProfile; // Input system properties private SerializedProperty enableInputSystem; @@ -94,7 +94,7 @@ protected override void OnEnable() // Camera system configuration enableCameraSystem = serializedObject.FindProperty(nameof(enableCameraSystem)); cameraSystemType = serializedObject.FindProperty(nameof(cameraSystemType)); - cameraProfile = serializedObject.FindProperty(nameof(cameraProfile)); + cameraSystemProfile = serializedObject.FindProperty(nameof(cameraSystemProfile)); // Input system configuration enableInputSystem = serializedObject.FindProperty(nameof(enableInputSystem)); @@ -145,7 +145,7 @@ public override void OnInspectorGUI() EditorGUILayout.LabelField("Camera System Settings", EditorStyles.boldLabel); EditorGUILayout.PropertyField(enableCameraSystem); EditorGUILayout.PropertyField(cameraSystemType); - EditorGUILayout.PropertyField(cameraProfile); + EditorGUILayout.PropertyField(cameraSystemProfile); // Input System configuration GUILayout.Space(12f); diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs new file mode 100644 index 000000000..7ea63901c --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs @@ -0,0 +1,12 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Interfaces.CameraSystem +{ + /// + /// Base interface for implementing camera data providers to be registered with the + /// + public interface IMixedRealityCameraDataProvider : IMixedRealityDataProvider + { + } +} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs.meta new file mode 100644 index 000000000..95677894c --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a55980ab02f44aa7a1c40ddd1cc9aa7c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs index 5ceac4ad4..d8bf74fc1 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs @@ -1,6 +1,7 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using System.Collections.Generic; namespace XRTK.Interfaces.CameraSystem { @@ -33,5 +34,10 @@ public interface IMixedRealityCameraSystem : IMixedRealityService /// The current head height of the player /// float HeadHeight { get; set; } + + /// + /// The list of s registered and running with the system. + /// + IReadOnlyCollection CameraDataProviders { get; } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 322a5ff20..7cc1e9f9a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -1,13 +1,14 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. using System; +using System.Collections.Generic; using UnityEngine; -using XRTK.Definitions; -using XRTK.Interfaces.CameraSystem; -using XRTK.Utilities; +using XRTK.Definitions.CameraSystem; using XRTK.Extensions; using XRTK.Interfaces; +using XRTK.Interfaces.CameraSystem; +using XRTK.Utilities; namespace XRTK.Services.CameraSystem { @@ -20,30 +21,28 @@ public class MixedRealityCameraSystem : BaseSystem, IMixedRealityCameraSystem /// Constructor. /// /// - public MixedRealityCameraSystem(MixedRealityCameraProfile profile) + public MixedRealityCameraSystem(MixedRealityCameraSystemProfile profile) : base(profile) { - DefaultHeadHeight = profile.DefaultHeadHeight; - if (profile.CameraRigType?.Type == null) { - throw new Exception("Camera rig type cannot be null!"); + throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); } - cameraRigType = profile.CameraRigType?.Type; isCameraPersistent = profile.IsCameraPersistent; + cameraRigType = profile.CameraRigType.Type; - opaqueQualityLevel = profile.OpaqueQualityLevel; - transparentQualityLevel = profile.TransparentQualityLevel; + DefaultHeadHeight = profile.DefaultHeadHeight; nearClipPlaneOpaqueDisplay = profile.NearClipPlaneOpaqueDisplay; - nearClipPlaneTransparentDisplay = profile.NearClipPlaneTransparentDisplay; - + cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay; backgroundColorOpaqueDisplay = profile.BackgroundColorOpaqueDisplay; - backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay; + opaqueQualityLevel = profile.OpaqueQualityLevel; - cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay; + nearClipPlaneTransparentDisplay = profile.NearClipPlaneTransparentDisplay; cameraClearFlagsTransparentDisplay = profile.CameraClearFlagsTransparentDisplay; + backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay; + transparentQualityLevel = profile.TransparentQualityLevel; bodyAdjustmentAngle = profile.BodyAdjustmentAngle; bodyAdjustmentSpeed = profile.BodyAdjustmentSpeed; @@ -68,6 +67,17 @@ public MixedRealityCameraSystem(MixedRealityCameraProfile profile) private readonly float bodyAdjustmentSpeed; private readonly double bodyAdjustmentAngle; + private bool cameraOpaqueLastFrame; + private DisplayType currentDisplayType; + + private enum DisplayType + { + Opaque = 0, + Transparent + } + + #region IMixedRealityCameraSystem Impelementation + /// public bool IsOpaque { @@ -86,6 +96,12 @@ public bool IsOpaque } } + /// + public bool IsStereoscopic => UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRDevice.isPresent; + + /// + public IMixedRealityCameraRig CameraRig { get; private set; } + /// public float DefaultHeadHeight { get; } @@ -107,20 +123,14 @@ public float HeadHeight } } - /// - public bool IsStereoscopic => UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRDevice.isPresent; + private readonly HashSet cameraDataProviders = new HashSet(); /// - public IMixedRealityCameraRig CameraRig { get; private set; } + public IReadOnlyCollection CameraDataProviders => cameraDataProviders; - private DisplayType currentDisplayType; - private bool cameraOpaqueLastFrame = false; + #endregion IMixedRealityCameraSystem Impelementation - private enum DisplayType - { - Opaque = 0, - Transparent - } + #region IMixedRealitySerivce Implementation /// public override void Initialize() @@ -232,6 +242,8 @@ public override void Disable() } } + #endregion IMixedRealitySerivce Implementation + /// /// Depending on whether there is an XR device connected, /// moves the camera to the setting from the camera profile. diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 6849ead2a..f3fe16254 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -385,11 +385,23 @@ private void InitializeServiceLocator() #region Services Registration - if (ActiveProfile.IsCameraSystemEnabled && - (!CreateAndRegisterService(ActiveProfile.CameraSystemType, ActiveProfile.CameraProfile) || - CameraSystem == null)) + if (ActiveProfile.IsCameraSystemEnabled) { - Debug.LogError("Failed to start the Camera System!"); + if (CreateAndRegisterService(ActiveProfile.CameraSystemType, ActiveProfile.CameraSystemProfile) && CameraSystem != null) + { + if (activeProfile.CameraSystemProfile.CameraDataProvidersProfile != null) + { + RegisterServices(ActiveProfile.CameraSystemProfile.CameraDataProvidersProfile.RegisteredServiceConfigurations); + } + else + { + Debug.LogError("Missing required Camera Data Providers Profile for the Camera System!"); + } + } + else + { + Debug.LogError("Failed to start the Camera System!"); + } } if (ActiveProfile.IsInputSystemEnabled) From 7839c97ddb10f216bbb9ab4d1f8dffaaa4d74b94 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 13:02:39 -0400 Subject: [PATCH 03/73] put some files in their proper place --- .../Packages/com.xrtk.core/Definitions/CameraSystem.meta | 8 ++++++++ .../MixedRealityCameraDataProvidersProfile.cs | 0 .../MixedRealityCameraDataProvidersProfile.cs.meta | 0 .../{ => CameraSystem}/MixedRealityCameraSystemProfile.cs | 0 .../MixedRealityCameraSystemProfile.cs.meta | 0 5 files changed, 8 insertions(+) create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem.meta rename XRTK-Core/Packages/com.xrtk.core/Definitions/{ => CameraSystem}/MixedRealityCameraDataProvidersProfile.cs (100%) rename XRTK-Core/Packages/com.xrtk.core/Definitions/{ => CameraSystem}/MixedRealityCameraDataProvidersProfile.cs.meta (100%) rename XRTK-Core/Packages/com.xrtk.core/Definitions/{ => CameraSystem}/MixedRealityCameraSystemProfile.cs (100%) rename XRTK-Core/Packages/com.xrtk.core/Definitions/{ => CameraSystem}/MixedRealityCameraSystemProfile.cs.meta (100%) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem.meta new file mode 100644 index 000000000..575bf65e5 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8df45bcc8b051e4989458076f191d18 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs similarity index 100% rename from XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs rename to XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs.meta similarity index 100% rename from XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraDataProvidersProfile.cs.meta rename to XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs.meta diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs similarity index 100% rename from XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs rename to XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs.meta similarity index 100% rename from XRTK-Core/Packages/com.xrtk.core/Definitions/MixedRealityCameraSystemProfile.cs.meta rename to XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs.meta From f885b64b661da7de727403ea544a4d27575d2b5a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 15:11:12 -0400 Subject: [PATCH 04/73] Added camera data provider --- Submodules/Lumin | 2 +- Submodules/Oculus | 2 +- Submodules/SDK | 2 +- ...seMixedRealityCameraDataProviderProfile.cs | 145 ++++++++ ...edRealityCameraDataProviderProfile.cs.meta | 11 + .../MixedRealityCameraSystemProfile.cs | 1 - .../Hands/SimulatedHandControllerPose.cs | 4 +- .../Utilities/TrackedObjectType.cs | 2 +- ...alityCameraDataProviderProfileInspector.cs | 103 ++++++ ...CameraDataProviderProfileInspector.cs.meta | 11 + ...ameraDataProvidersProfileInspector.cs.meta | 12 +- ...MixedRealityToolkitRootProfileInspector.cs | 2 +- .../IMixedRealityCameraDataProvider.cs | 24 ++ .../CameraSystem/IMixedRealityCameraSystem.cs | 28 +- .../Interfaces/IMixedRealityCameraRig.cs | 2 +- .../com.xrtk.core/Providers/CameraSystem.meta | 8 + .../CameraSystem/BaseCameraDataProvider.cs | 339 ++++++++++++++++++ .../BaseCameraDataProvider.cs.meta | 11 + .../Providers/Controllers/BaseController.cs | 4 +- .../Controllers/BaseControllerDataProvider.cs | 2 +- .../Hands/SimulatedHandController.cs | 8 +- .../MixedRealityBoundarySystem.cs | 10 +- .../Services/CameraSystem/DefaultCameraRig.cs | 2 +- .../CameraSystem/MixedRealityCameraSystem.cs | 284 ++------------- .../MixedRealityCameraSystem.cs.meta | 2 +- .../MixedRealityDiagnosticsSystem.cs | 2 +- .../MixedRealitySpatialAwarenessSystem.cs | 2 +- .../MixedRealityTeleportSystem.cs | 2 +- .../Utilities/Solvers/Orbital.cs | 2 +- .../Utilities/Solvers/SolverHandler.cs | 6 +- .../ProjectSettings/QualitySettings.asset | 2 +- 31 files changed, 726 insertions(+), 311 deletions(-) create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs.meta create mode 100644 XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs.meta create mode 100644 XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem.meta create mode 100644 XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs.meta diff --git a/Submodules/Lumin b/Submodules/Lumin index 2414774e5..982009e07 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 2414774e55dce3b8c736f0021339d37453760482 +Subproject commit 982009e07ef970a1c4b3f6a94722d50c90954df0 diff --git a/Submodules/Oculus b/Submodules/Oculus index 8f9ffd2b7..510179839 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 8f9ffd2b741a3e0137bac1090257f823f107bafe +Subproject commit 510179839feb76ec1a697f325f6718ff149d0863 diff --git a/Submodules/SDK b/Submodules/SDK index 740a34bd1..b8c90bab1 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 740a34bd10b17752a6681420e33f4db7ffaac217 +Subproject commit b8c90bab1cf3d7bb024d2bc0902b90dc6d189e63 diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs new file mode 100644 index 000000000..374dd3e8a --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs @@ -0,0 +1,145 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.CameraSystem; +using XRTK.Services.CameraSystem; + +namespace XRTK.Definitions.CameraSystem +{ + /// + /// Provides additional configuration options for camera data providers. + /// + public class BaseMixedRealityCameraDataProviderProfile : BaseMixedRealityProfile + { + [SerializeField] + private bool isCameraPersistent = true; + + /// + /// Should the camera be reused in each scene? + /// If so, then the camera's root will be flagged so it is not destroyed when the scene is unloaded. + /// + public bool IsCameraPersistent => isCameraPersistent; + + + [SerializeField] + [Tooltip("The near clipping plane distance for an opaque display.")] + private float nearClipPlaneOpaqueDisplay = 0.1f; + + /// + /// The near clipping plane distance for an opaque display. + /// + public float NearClipPlaneOpaqueDisplay + { + get => nearClipPlaneOpaqueDisplay; + internal set => nearClipPlaneOpaqueDisplay = value; + } + + [SerializeField] + [Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")] + private CameraClearFlags cameraClearFlagsOpaqueDisplay = CameraClearFlags.Skybox; + + /// + /// Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display. + /// + public CameraClearFlags CameraClearFlagsOpaqueDisplay => cameraClearFlagsOpaqueDisplay; + + [SerializeField] + [Tooltip("Background color for a transparent display.")] + private Color backgroundColorOpaqueDisplay = Color.black; + + /// + /// Background color for a transparent display. + /// + public Color BackgroundColorOpaqueDisplay => backgroundColorOpaqueDisplay; + + [SerializeField] + [Tooltip("Set the desired quality for your application for opaque display.")] + private int opaqueQualityLevel = 0; + + /// + /// Set the desired quality for your application for opaque display. + /// + public int OpaqueQualityLevel => opaqueQualityLevel; + + [SerializeField] + [Tooltip("The near clipping plane distance for a transparent display.")] + private float nearClipPlaneTransparentDisplay = 0.85f; + + /// + /// The near clipping plane distance for a transparent display. + /// + public float NearClipPlaneTransparentDisplay => nearClipPlaneTransparentDisplay; + + [SerializeField] + [Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")] + private CameraClearFlags cameraClearFlagsTransparentDisplay = CameraClearFlags.SolidColor; + + /// + /// Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display. + /// + public CameraClearFlags CameraClearFlagsTransparentDisplay => cameraClearFlagsTransparentDisplay; + + [SerializeField] + [Tooltip("Background color for a transparent display.")] + private Color backgroundColorTransparentDisplay = Color.clear; + + /// + /// Background color for a transparent display. + /// + public Color BackgroundColorTransparentDisplay => backgroundColorTransparentDisplay; + + [SerializeField] + [Tooltip("Set the desired quality for your application for transparent display.")] + private int transparentQualityLevel = 0; + + /// + /// Set the desired quality for your application for transparent display. + /// + public int TransparentQualityLevel => transparentQualityLevel; + + [SerializeField] + [Tooltip("The concrete type to use for the camera rig.")] + [Implements(typeof(IMixedRealityCameraRig), TypeGrouping.ByNamespaceFlat)] + private SystemType cameraRigType = new SystemType(typeof(DefaultCameraRig)); + + /// + /// The concrete type to use for the camera rig. + /// + public SystemType CameraRigType + { + get => cameraRigType; + internal set => cameraRigType = value; + } + + [SerializeField] + [Tooltip("The default head height the rig will start at if a platform doesn't automatically adjust the height for you.")] + private float defaultHeadHeight = 1.6f; + + /// + /// The default head height the rig will start at if a platform doesn't automatically adjust the height for you. + /// + public float DefaultHeadHeight => defaultHeadHeight; + + [SerializeField] + [Range(0f, 180f)] + [Tooltip("This is the angle that will be used to adjust the player's body rotation in relation to their head position.")] + private float bodyAdjustmentAngle = 60f; + + /// + /// /// This is the angle that will be used to adjust the player's body rotation in relation to their head position. + /// + public float BodyAdjustmentAngle => bodyAdjustmentAngle; + + [SerializeField] + [Tooltip("The speed at which the body transform will sync it's rotation with the head transform.")] + private float bodyAdjustmentSpeed = 1f; + + /// + /// The speed at which the body transform will sync it's rotation with the head transform. + /// + public float BodyAdjustmentSpeed => bodyAdjustmentSpeed; + } +} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs.meta new file mode 100644 index 000000000..b1f6341c8 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00d813fd5a164e19a160f322b2926006 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs index 5d1ad060c..4f437349b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs @@ -4,7 +4,6 @@ using UnityEngine; using XRTK.Attributes; using XRTK.Definitions.Utilities; -using XRTK.Interfaces; using XRTK.Services.CameraSystem; using XRTK.Interfaces.CameraSystem; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs index cafe210e4..f8ad29d78 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs @@ -151,7 +151,7 @@ private static void OffsetJointsRelativeToOpenPosePalmPosition(SimulatedHandCont /// public void ComputeJointPoses(Handedness handedness, Quaternion rotation, Vector3 position, MixedRealityPose[] jointsOut) { - Quaternion cameraRotation = MixedRealityToolkit.CameraSystem.CameraRig.PlayerCamera.transform.rotation; + Quaternion cameraRotation = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.rotation; for (int i = 0; i < HandData.JointCount; i++) { @@ -185,7 +185,7 @@ public void ComputeJointPoses(Handedness handedness, Quaternion rotation, Vector public void ParseFromJointPoses(MixedRealityPose[] joints, Handedness handedness, Quaternion rotation, Vector3 position) { var invRotation = Quaternion.Inverse(rotation); - var invCameraRotation = Quaternion.Inverse(MixedRealityToolkit.CameraSystem.CameraRig.PlayerCamera.transform.rotation); + var invCameraRotation = Quaternion.Inverse(MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.rotation); for (int i = 0; i < HandData.JointCount; i++) { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Utilities/TrackedObjectType.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Utilities/TrackedObjectType.cs index 9e8ffe1bd..e909f439c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Utilities/TrackedObjectType.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Utilities/TrackedObjectType.cs @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. -using XRTK.Interfaces; +using XRTK.Interfaces.CameraSystem; namespace XRTK.Definitions.Utilities { diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs new file mode 100644 index 000000000..0c97aad6a --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs @@ -0,0 +1,103 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.CameraSystem; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles.CameraSystem +{ + [CustomEditor(typeof(BaseMixedRealityCameraDataProviderProfile), true, isFallback = true)] + public class BaseMixedRealityCameraDataProviderProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty isCameraPersistent; + + private SerializedProperty nearClipPlaneOpaqueDisplay; + private SerializedProperty cameraClearFlagsOpaqueDisplay; + private SerializedProperty backgroundColorOpaqueDisplay; + private SerializedProperty opaqueQualityLevel; + + private SerializedProperty nearClipPlaneTransparentDisplay; + private SerializedProperty cameraClearFlagsTransparentDisplay; + private SerializedProperty backgroundColorTransparentDisplay; + private SerializedProperty transparentQualityLevel; + + private SerializedProperty cameraRigType; + private SerializedProperty defaultHeadHeight; + private SerializedProperty bodyAdjustmentAngle; + private SerializedProperty bodyAdjustmentSpeed; + + private readonly GUIContent nearClipTitle = new GUIContent("Near Clip"); + private readonly GUIContent clearFlagsTitle = new GUIContent("Clear Flags"); + protected override void OnEnable() + { + base.OnEnable(); + + isCameraPersistent = serializedObject.FindProperty(nameof(isCameraPersistent)); + nearClipPlaneOpaqueDisplay = serializedObject.FindProperty(nameof(nearClipPlaneOpaqueDisplay)); + cameraClearFlagsOpaqueDisplay = serializedObject.FindProperty(nameof(cameraClearFlagsOpaqueDisplay)); + backgroundColorOpaqueDisplay = serializedObject.FindProperty(nameof(backgroundColorOpaqueDisplay)); + opaqueQualityLevel = serializedObject.FindProperty(nameof(opaqueQualityLevel)); + + nearClipPlaneTransparentDisplay = serializedObject.FindProperty(nameof(nearClipPlaneTransparentDisplay)); + cameraClearFlagsTransparentDisplay = serializedObject.FindProperty(nameof(cameraClearFlagsTransparentDisplay)); + backgroundColorTransparentDisplay = serializedObject.FindProperty(nameof(backgroundColorTransparentDisplay)); + transparentQualityLevel = serializedObject.FindProperty(nameof(transparentQualityLevel)); + + cameraRigType = serializedObject.FindProperty(nameof(cameraRigType)); + defaultHeadHeight = serializedObject.FindProperty(nameof(defaultHeadHeight)); + bodyAdjustmentAngle = serializedObject.FindProperty(nameof(bodyAdjustmentAngle)); + bodyAdjustmentSpeed = serializedObject.FindProperty(nameof(bodyAdjustmentSpeed)); + } + + + public override void OnInspectorGUI() + { + RenderHeader("The Camera Data Provider Profile helps tweak camera settings no matter what platform you're building for."); + + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.LabelField("Platform Specific Settings:", EditorStyles.boldLabel); + + EditorGUILayout.PropertyField(isCameraPersistent); + EditorGUILayout.PropertyField(cameraRigType); + EditorGUILayout.PropertyField(defaultHeadHeight); + EditorGUILayout.PropertyField(bodyAdjustmentAngle); + EditorGUILayout.PropertyField(bodyAdjustmentSpeed); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Opaque Display Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(nearClipPlaneOpaqueDisplay, nearClipTitle); + EditorGUILayout.PropertyField(cameraClearFlagsOpaqueDisplay, clearFlagsTitle); + + if ((CameraClearFlags)cameraClearFlagsOpaqueDisplay.intValue == CameraClearFlags.Color) + { + backgroundColorOpaqueDisplay.colorValue = EditorGUILayout.ColorField("Background Color", backgroundColorOpaqueDisplay.colorValue); + } + + opaqueQualityLevel.intValue = EditorGUILayout.Popup("Quality Setting", opaqueQualityLevel.intValue, QualitySettings.names); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Transparent Display Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(nearClipPlaneTransparentDisplay, nearClipTitle); + EditorGUILayout.PropertyField(cameraClearFlagsTransparentDisplay, clearFlagsTitle); + + if ((CameraClearFlags)cameraClearFlagsTransparentDisplay.intValue == CameraClearFlags.Color) + { + backgroundColorTransparentDisplay.colorValue = EditorGUILayout.ColorField("Background Color", backgroundColorTransparentDisplay.colorValue); + } + + transparentQualityLevel.intValue = EditorGUILayout.Popup("Quality Setting", transparentQualityLevel.intValue, QualitySettings.names); + + serializedObject.ApplyModifiedProperties(); + + if (MixedRealityToolkit.IsInitialized && EditorGUI.EndChangeCheck()) + { + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetProfile(MixedRealityToolkit.Instance.ActiveProfile); + } + } + } +} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs.meta new file mode 100644 index 000000000..fcd216434 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ce93167e6994a64a8046f9943e86924 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta index c9c71f1e3..fe401aa54 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta @@ -1,3 +1,11 @@ -fileFormatVersion: 2 +fileFormatVersion: 2 guid: 90a8f941d0354a9889fac49e8369c9b8 -timeCreated: 1586624388 \ No newline at end of file +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs index 47fa6e702..5de4f1ff4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs @@ -78,7 +78,7 @@ protected override void OnEnable() { if (MixedRealityToolkit.CameraSystem != null) { - var playspace = MixedRealityToolkit.CameraSystem.CameraRig.PlayspaceTransform; + var playspace = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform; Debug.Assert(playspace != null); } diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs index 7ea63901c..ebc2895c8 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraDataProvider.cs @@ -8,5 +8,29 @@ namespace XRTK.Interfaces.CameraSystem /// public interface IMixedRealityCameraDataProvider : IMixedRealityDataProvider { + /// + /// Is the current camera displaying on an Opaque (AR) device or a VR / immersive device + /// + bool IsOpaque { get; } + + /// + /// Is the current camera displaying on a traditional 2d screen or a stereoscopic display? + /// + bool IsStereoscopic { get; } + + /// + /// The reference for this data provider. + /// + IMixedRealityCameraRig CameraRig { get; } + + /// + /// The default head height when a platform doesn't automatically set it. + /// + float DefaultHeadHeight { get; } + + /// + /// The current head height of the player + /// + float HeadHeight { get; set; } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs index d8bf74fc1..a9bc5ab2e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs @@ -11,33 +11,31 @@ namespace XRTK.Interfaces.CameraSystem public interface IMixedRealityCameraSystem : IMixedRealityService { /// - /// Is the current camera displaying on an Opaque (AR) device or a VR / immersive device - /// - bool IsOpaque { get; } - - /// - /// Is the current camera displaying on a traditional 2d screen or a stereoscopic display? + /// The list of s registered and running with the system. /// - bool IsStereoscopic { get; } + IReadOnlyCollection CameraDataProviders { get; } /// - /// The component used in the current configuration. + /// The reference to the attached to the Main Camera (typically this is the player's camera). /// - IMixedRealityCameraRig CameraRig { get; } + IMixedRealityCameraRig MainCameraRig { get; } /// - /// The default head height when a platform doesn't automatically set it. + /// Sets the on for the . /// - float DefaultHeadHeight { get; } + /// + void SetHeadHeight(float value); /// - /// The current head height of the player + /// Registers the with the . /// - float HeadHeight { get; set; } + /// + void RegisterCameraDataProvider(IMixedRealityCameraDataProvider dataProvider); /// - /// The list of s registered and running with the system. + /// UnRegisters the with the . /// - IReadOnlyCollection CameraDataProviders { get; } + /// + void UnRegisterCameraDataProvider(IMixedRealityCameraDataProvider dataProvider); } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs index 19b18ca3d..1dae5ad41 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs @@ -4,7 +4,7 @@ using UnityEngine; using UnityEngine.SpatialTracking; -namespace XRTK.Interfaces +namespace XRTK.Interfaces.CameraSystem { /// /// This interface is to be implemented by a and attached to the playspace root object. diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem.meta b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem.meta new file mode 100644 index 000000000..e9d620cee --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3f1ac8feca24f540838c9bab46b4c06 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs new file mode 100644 index 000000000..9d1ff4587 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -0,0 +1,339 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.CameraSystem; +using XRTK.Extensions; +using XRTK.Interfaces.CameraSystem; +using XRTK.Services; +using XRTK.Utilities; + +namespace XRTK.Providers.CameraSystem +{ + /// + /// Base class for all s can inherit from. + /// + public class BaseCameraDataProvider : BaseDataProvider, IMixedRealityCameraDataProvider + { + /// + public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCameraDataProviderProfile profile) + : base(name, priority) + { + if (profile == null) + { + throw new ArgumentException($"Missing the profile for {base.Name}!"); + } + + if (profile.CameraRigType?.Type == null) + { + throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); + } + + var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile; + + isCameraPersistent = profile.IsCameraPersistent != globalProfile.IsCameraPersistent + ? profile.IsCameraPersistent + : globalProfile.IsCameraPersistent; + cameraRigType = profile.CameraRigType.Type != globalProfile.CameraRigType.Type + ? profile.CameraRigType.Type + : globalProfile.CameraRigType.Type; + DefaultHeadHeight = !profile.DefaultHeadHeight.Approximately(globalProfile.DefaultHeadHeight, 0.01f) + ? profile.DefaultHeadHeight + : globalProfile.DefaultHeadHeight; + + nearClipPlaneOpaqueDisplay = !profile.NearClipPlaneOpaqueDisplay.Approximately(globalProfile.NearClipPlaneOpaqueDisplay, 0.01f) + ? profile.NearClipPlaneOpaqueDisplay + : globalProfile.NearClipPlaneOpaqueDisplay; + cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay != globalProfile.CameraClearFlagsOpaqueDisplay + ? profile.CameraClearFlagsOpaqueDisplay + : globalProfile.CameraClearFlagsOpaqueDisplay; + backgroundColorOpaqueDisplay = profile.BackgroundColorOpaqueDisplay != globalProfile.BackgroundColorOpaqueDisplay + ? profile.BackgroundColorOpaqueDisplay + : globalProfile.BackgroundColorOpaqueDisplay; + opaqueQualityLevel = profile.OpaqueQualityLevel != globalProfile.OpaqueQualityLevel + ? profile.OpaqueQualityLevel + : globalProfile.OpaqueQualityLevel; + + nearClipPlaneTransparentDisplay = !profile.NearClipPlaneTransparentDisplay.Approximately(globalProfile.NearClipPlaneTransparentDisplay, 0.01f) + ? profile.NearClipPlaneTransparentDisplay + : globalProfile.NearClipPlaneTransparentDisplay; + cameraClearFlagsTransparentDisplay = profile.CameraClearFlagsTransparentDisplay != globalProfile.CameraClearFlagsTransparentDisplay + ? profile.CameraClearFlagsTransparentDisplay + : globalProfile.CameraClearFlagsTransparentDisplay; + backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay != globalProfile.BackgroundColorTransparentDisplay + ? profile.BackgroundColorTransparentDisplay + : globalProfile.BackgroundColorTransparentDisplay; + transparentQualityLevel = profile.TransparentQualityLevel != globalProfile.TransparentQualityLevel + ? profile.TransparentQualityLevel + : globalProfile.TransparentQualityLevel; + + bodyAdjustmentAngle = !profile.BodyAdjustmentAngle.Approximately(globalProfile.BodyAdjustmentAngle, 0.01f) + ? profile.BodyAdjustmentAngle + : globalProfile.BodyAdjustmentAngle; + bodyAdjustmentSpeed = !profile.BodyAdjustmentSpeed.Approximately(globalProfile.BodyAdjustmentSpeed, 0.01f) + ? profile.BodyAdjustmentSpeed + : globalProfile.BodyAdjustmentSpeed; + } + + private readonly Type cameraRigType; + + private readonly bool isCameraPersistent; + + private readonly int opaqueQualityLevel; + private readonly int transparentQualityLevel; + + private readonly float nearClipPlaneOpaqueDisplay; + private readonly float nearClipPlaneTransparentDisplay; + + private readonly Color backgroundColorOpaqueDisplay; + private readonly Color backgroundColorTransparentDisplay; + + private readonly CameraClearFlags cameraClearFlagsOpaqueDisplay; + private readonly CameraClearFlags cameraClearFlagsTransparentDisplay; + + private readonly float bodyAdjustmentSpeed; + private readonly double bodyAdjustmentAngle; + + private bool cameraOpaqueLastFrame; + private DisplayType currentDisplayType; + + private enum DisplayType + { + Opaque = 0, + Transparent + } + + /// + public virtual bool IsOpaque + { + get + { + currentDisplayType = DisplayType.Opaque; +#if UNITY_WSA + if (!UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque) + { + currentDisplayType = DisplayType.Transparent; + } +#elif PLATFORM_LUMIN + currentDisplayType = DisplayType.Transparent; +#endif + return currentDisplayType == DisplayType.Opaque; + } + } + + /// + public virtual bool IsStereoscopic => UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRDevice.isPresent; + + /// + public IMixedRealityCameraRig CameraRig { get; private set; } + + /// + public float DefaultHeadHeight { get; } + + private float headHeight; + + /// + public float HeadHeight + { + get => headHeight; + set + { + if (value.Equals(headHeight)) + { + return; + } + + headHeight = value; + CameraRig.CameraPoseDriver.originPose = new Pose(new Vector3(0f, headHeight, 0f), Quaternion.identity); + } + } + + #region IMixedRealitySerivce Implementation + + /// + public override void Initialize() + { + base.Initialize(); + + cameraOpaqueLastFrame = IsOpaque; + + if (IsOpaque) + { + ApplySettingsForOpaqueDisplay(); + } + else + { + ApplySettingsForTransparentDisplay(); + } + + if (CameraRig == null) + { + // TODO Currently we get always get the main camera. Should we provide a tag to search for alts? + CameraRig = CameraCache.Main.gameObject.EnsureComponent(cameraRigType) as IMixedRealityCameraRig; + Debug.Assert(CameraRig != null); + ResetRigTransforms(); + } + + ApplySettingsForDefaultHeadHeight(); + + MixedRealityToolkit.CameraSystem.RegisterCameraDataProvider(this); + } + + /// + public override void Enable() + { + base.Enable(); + + ResetRigTransforms(); + + if (Application.isPlaying && + isCameraPersistent) + { + CameraRig.PlayerCamera.transform.root.DontDestroyOnLoad(); + } + + ApplySettingsForDefaultHeadHeight(); + } + + /// + public override void Update() + { + base.Update(); + + if (IsOpaque != cameraOpaqueLastFrame) + { + cameraOpaqueLastFrame = IsOpaque; + + if (IsOpaque) + { + ApplySettingsForOpaqueDisplay(); + } + else + { + ApplySettingsForTransparentDisplay(); + } + } + } + + /// + public override void LateUpdate() + { + base.LateUpdate(); + + SyncRigTransforms(); + } + + /// + public override void Disable() + { + base.Disable(); + + if (CameraRig == null) { return; } + + if (CameraRig.PlayerCamera != null && + CameraRig.PlayerCamera.transform != null) + { + CameraRig.PlayerCamera.transform.SetParent(null); + } + + if (CameraRig.PlayspaceTransform != null) + { + if (Application.isPlaying) + { + UnityEngine.Object.Destroy(CameraRig.PlayspaceTransform.gameObject); + } + else + { + UnityEngine.Object.DestroyImmediate(CameraRig.PlayspaceTransform.gameObject); + } + } + + if (CameraRig is Component component && + component is IMixedRealityCameraRig) + { + if (Application.isPlaying) + { + UnityEngine.Object.Destroy(component); + } + else + { + UnityEngine.Object.DestroyImmediate(component); + } + } + } + + /// + public override void Destroy() + { + base.Destroy(); + + MixedRealityToolkit.CameraSystem.UnRegisterCameraDataProvider(this); + } + + #endregion IMixedRealitySerivce Implementation + + /// + /// Depending on whether there is an XR device connected, + /// moves the camera to the setting from the camera profile. + /// + private void ApplySettingsForDefaultHeadHeight() + { + headHeight = DefaultHeadHeight; + ResetRigTransforms(); + } + + /// + /// Applies opaque settings from camera profile. + /// + private void ApplySettingsForOpaqueDisplay() + { + CameraRig.PlayerCamera.clearFlags = cameraClearFlagsOpaqueDisplay; + CameraRig.PlayerCamera.nearClipPlane = nearClipPlaneOpaqueDisplay; + CameraRig.PlayerCamera.backgroundColor = backgroundColorOpaqueDisplay; + QualitySettings.SetQualityLevel(opaqueQualityLevel, false); + } + + /// + /// Applies transparent settings from camera profile. + /// + private void ApplySettingsForTransparentDisplay() + { + CameraRig.PlayerCamera.clearFlags = cameraClearFlagsTransparentDisplay; + CameraRig.PlayerCamera.backgroundColor = backgroundColorTransparentDisplay; + CameraRig.PlayerCamera.nearClipPlane = nearClipPlaneTransparentDisplay; + QualitySettings.SetQualityLevel(transparentQualityLevel, false); + } + + private void ResetRigTransforms() + { + CameraRig.PlayspaceTransform.position = Vector3.zero; + CameraRig.PlayspaceTransform.rotation = Quaternion.identity; + CameraRig.CameraTransform.position = Vector3.zero; + CameraRig.CameraTransform.rotation = Quaternion.identity; + CameraRig.BodyTransform.position = Vector3.zero; + CameraRig.BodyTransform.rotation = Quaternion.identity; + } + + private void SyncRigTransforms() + { + var cameraPosition = CameraRig.CameraTransform.localPosition; + var bodyLocalPosition = CameraRig.BodyTransform.localPosition; + + bodyLocalPosition.x = cameraPosition.x; + bodyLocalPosition.y = cameraPosition.y - HeadHeight; + bodyLocalPosition.z = cameraPosition.z; + + CameraRig.BodyTransform.localPosition = bodyLocalPosition; + + var bodyRotation = CameraRig.BodyTransform.rotation; + var headRotation = CameraRig.CameraTransform.rotation; + var currentAngle = Mathf.Abs(Quaternion.Angle(bodyRotation, headRotation)); + + if (currentAngle > bodyAdjustmentAngle) + { + CameraRig.BodyTransform.rotation = Quaternion.Slerp(bodyRotation, headRotation, Time.deltaTime * bodyAdjustmentSpeed); + } + } + } +} diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs.meta new file mode 100644 index 000000000..555ef71da --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc4c80dbcfe9d674d8a7e0ca737dbff1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs index 65712e199..e6e253900 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs @@ -246,7 +246,7 @@ internal async Task TryRenderControllerModelAsync(Type controllerType, byte[] gl if (useSystemDefaultModels && gltfObject != null) { controllerModel.name = $"{controllerType.Name}_Visualization"; - controllerModel.transform.SetParent(MixedRealityToolkit.CameraSystem?.CameraRig.PlayspaceTransform); + controllerModel.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform); var visualizationType = visualizationProfile.GetControllerVisualizationTypeOverride(controllerType, ControllerHandedness) ?? visualizationProfile.ControllerVisualizationType; controllerModel.AddComponent(visualizationType.Type); @@ -255,7 +255,7 @@ internal async Task TryRenderControllerModelAsync(Type controllerType, byte[] gl //If the model was a prefab else { - var controllerObject = UnityEngine.Object.Instantiate(controllerModel, MixedRealityToolkit.CameraSystem?.CameraRig.PlayspaceTransform); + var controllerObject = UnityEngine.Object.Instantiate(controllerModel, MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform); controllerObject.name = $"{controllerType.Name}_Visualization"; Visualizer = controllerObject.GetComponent(); } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs index 1c41b1e99..27b2f0826 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs @@ -50,7 +50,7 @@ protected virtual IMixedRealityPointer[] RequestPointers(SystemType controllerTy if (((useSpecificType && pointerProfile.ControllerType.Type == controllerType.Type) || (!useSpecificType && pointerProfile.ControllerType.Type == null)) && (pointerProfile.Handedness == Handedness.Any || pointerProfile.Handedness == Handedness.Both || pointerProfile.Handedness == controllingHand)) { - var pointerObject = Object.Instantiate(pointerProfile.PointerPrefab, MixedRealityToolkit.CameraSystem?.CameraRig.PlayspaceTransform); + var pointerObject = Object.Instantiate(pointerProfile.PointerPrefab, MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform); var pointer = pointerObject.GetComponent(); if (pointer != null) diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs index 32e87925b..9a5cb573c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs @@ -328,9 +328,9 @@ private void HandleSimulationInput(MixedRealityPose rootPoseDelta) // Apply mouse delta x/y in screen space, but depth offset in world space screenPosition.x += rootPoseDelta.Position.x; screenPosition.y += rootPoseDelta.Position.y; - Vector3 newWorldPoint = MixedRealityToolkit.CameraSystem.CameraRig.PlayerCamera.ScreenToWorldPoint(ScreenPosition); - newWorldPoint += MixedRealityToolkit.CameraSystem.CameraRig.PlayerCamera.transform.forward * rootPoseDelta.Position.z; - screenPosition = MixedRealityToolkit.CameraSystem.CameraRig.PlayerCamera.WorldToScreenPoint(newWorldPoint); + Vector3 newWorldPoint = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.ScreenToWorldPoint(ScreenPosition); + newWorldPoint += MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.forward * rootPoseDelta.Position.z; + screenPosition = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.WorldToScreenPoint(newWorldPoint); HandRotateEulerAngles += rootPoseDelta.Rotation.eulerAngles; JitterOffset = Random.insideUnitSphere * simulatedHandControllerDataProvider.JitterAmount; @@ -349,7 +349,7 @@ private void UpdatePoseFrame() currentPoseBlending = TargetPoseBlending; var rotation = Quaternion.Euler(HandRotateEulerAngles); - var position = MixedRealityToolkit.CameraSystem.CameraRig.PlayerCamera.ScreenToWorldPoint(ScreenPosition + JitterOffset); + var position = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.ScreenToWorldPoint(ScreenPosition + JitterOffset); Pose.ComputeJointPoses(ControllerHandedness, rotation, position, HandData.Joints); } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs index f0173c596..946753636 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs @@ -298,7 +298,7 @@ private GameObject BoundaryVisualizationParent } var visualizationParent = new GameObject("Boundary System Visualizations"); - visualizationParent.transform.parent = MixedRealityToolkit.CameraSystem?.CameraRig.PlayspaceTransform; + visualizationParent.transform.parent = MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform; return boundaryVisualizationParent = visualizationParent; } } @@ -599,7 +599,7 @@ public bool Contains(Vector3 location, Boundary.Type boundaryType = Boundary.Typ } // Handle the user teleporting (boundary moves with them). - location = MixedRealityToolkit.CameraSystem.CameraRig.PlayspaceTransform.InverseTransformPoint(location); + location = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.InverseTransformPoint(location); if (FloorHeight.Value > location.y || BoundaryHeight < location.y) @@ -638,7 +638,7 @@ public bool TryGetRectangularBoundsParams(out Vector2 center, out float angle, o } // Handle the user teleporting (boundary moves with them). - var transformedCenter = MixedRealityToolkit.CameraSystem.CameraRig.PlayspaceTransform.TransformPoint( + var transformedCenter = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.TransformPoint( new Vector3(rectangularBounds.Center.x, 0f, rectangularBounds.Center.y)); center = new Vector2(transformedCenter.x, transformedCenter.z); @@ -665,7 +665,7 @@ public GameObject GetFloorVisualization() } var floorScale = FloorScale; - var position = MixedRealityToolkit.CameraSystem.CameraRig.PlayspaceTransform.position; + var position = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position; // Render the floor. currentFloorObject = GameObject.CreatePrimitive(PrimitiveType.Cube); @@ -752,7 +752,7 @@ public GameObject GetTrackedAreaVisualization() layer = DefaultIgnoreRaycastLayer }; - var position = MixedRealityToolkit.CameraSystem.CameraRig.PlayspaceTransform.position; + var position = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position; currentTrackedAreaObject.AddComponent(); currentTrackedAreaObject.transform.Translate( diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs index 8862cc11c..f768f7163 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs @@ -4,7 +4,7 @@ using UnityEngine; using UnityEngine.SpatialTracking; using XRTK.Extensions; -using XRTK.Interfaces; +using XRTK.Interfaces.CameraSystem; using XRTK.Utilities; namespace XRTK.Services.CameraSystem diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 7cc1e9f9a..2d1475f4d 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -1,12 +1,8 @@ // Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. -using System; using System.Collections.Generic; -using UnityEngine; using XRTK.Definitions.CameraSystem; -using XRTK.Extensions; -using XRTK.Interfaces; using XRTK.Interfaces.CameraSystem; using XRTK.Utilities; @@ -17,303 +13,65 @@ namespace XRTK.Services.CameraSystem /// public class MixedRealityCameraSystem : BaseSystem, IMixedRealityCameraSystem { - /// - /// Constructor. - /// - /// + /// public MixedRealityCameraSystem(MixedRealityCameraSystemProfile profile) : base(profile) { - if (profile.CameraRigType?.Type == null) - { - throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); - } - - isCameraPersistent = profile.IsCameraPersistent; - cameraRigType = profile.CameraRigType.Type; - - DefaultHeadHeight = profile.DefaultHeadHeight; - - nearClipPlaneOpaqueDisplay = profile.NearClipPlaneOpaqueDisplay; - cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay; - backgroundColorOpaqueDisplay = profile.BackgroundColorOpaqueDisplay; - opaqueQualityLevel = profile.OpaqueQualityLevel; - - nearClipPlaneTransparentDisplay = profile.NearClipPlaneTransparentDisplay; - cameraClearFlagsTransparentDisplay = profile.CameraClearFlagsTransparentDisplay; - backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay; - transparentQualityLevel = profile.TransparentQualityLevel; - - bodyAdjustmentAngle = profile.BodyAdjustmentAngle; - bodyAdjustmentSpeed = profile.BodyAdjustmentSpeed; } - private readonly Type cameraRigType; - - private readonly bool isCameraPersistent; - - private readonly int opaqueQualityLevel; - private readonly int transparentQualityLevel; - - private readonly float nearClipPlaneOpaqueDisplay; - private readonly float nearClipPlaneTransparentDisplay; - - private readonly Color backgroundColorOpaqueDisplay; - private readonly Color backgroundColorTransparentDisplay; - - private readonly CameraClearFlags cameraClearFlagsOpaqueDisplay; - private readonly CameraClearFlags cameraClearFlagsTransparentDisplay; - - private readonly float bodyAdjustmentSpeed; - private readonly double bodyAdjustmentAngle; - - private bool cameraOpaqueLastFrame; - private DisplayType currentDisplayType; - - private enum DisplayType - { - Opaque = 0, - Transparent - } - - #region IMixedRealityCameraSystem Impelementation + #region IMixedRealityService Implementation /// - public bool IsOpaque + public override void Enable() { - get + base.Enable(); + + foreach (var dataProvider in cameraDataProviders) { - currentDisplayType = DisplayType.Opaque; -#if UNITY_WSA - if (!UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque) + if (dataProvider.CameraRig.PlayerCamera == CameraCache.Main) { - currentDisplayType = DisplayType.Transparent; + MainCameraRig = dataProvider.CameraRig; } -#elif PLATFORM_LUMIN - currentDisplayType = DisplayType.Transparent; -#endif - return currentDisplayType == DisplayType.Opaque; } } - /// - public bool IsStereoscopic => UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRDevice.isPresent; - - /// - public IMixedRealityCameraRig CameraRig { get; private set; } - - /// - public float DefaultHeadHeight { get; } - - private float headHeight; + #endregion IMixedRealityService Implementation - /// - public float HeadHeight - { - get => headHeight; - set - { - if (value.Equals(headHeight)) - { - return; - } - - headHeight = value; - CameraRig.CameraPoseDriver.originPose = new Pose(new Vector3(0f, headHeight, 0f), Quaternion.identity); - } - } + #region IMixedRealityCameraSystem Impelementation private readonly HashSet cameraDataProviders = new HashSet(); /// public IReadOnlyCollection CameraDataProviders => cameraDataProviders; - #endregion IMixedRealityCameraSystem Impelementation - - #region IMixedRealitySerivce Implementation - - /// - public override void Initialize() - { - base.Initialize(); - - cameraOpaqueLastFrame = IsOpaque; - - if (IsOpaque) - { - ApplySettingsForOpaqueDisplay(); - } - else - { - ApplySettingsForTransparentDisplay(); - } - - if (CameraRig == null) - { - CameraRig = CameraCache.Main.gameObject.EnsureComponent(cameraRigType) as IMixedRealityCameraRig; - Debug.Assert(CameraRig != null); - ResetRigTransforms(); - } - - ApplySettingsForDefaultHeadHeight(); - } - /// - public override void Enable() - { - base.Enable(); - - ResetRigTransforms(); - - if (Application.isPlaying && - isCameraPersistent) - { - CameraCache.Main.transform.root.DontDestroyOnLoad(); - } - - ApplySettingsForDefaultHeadHeight(); - } + public IMixedRealityCameraRig MainCameraRig { get; private set; } /// - public override void Update() + public void SetHeadHeight(float value) { - base.Update(); - - if (IsOpaque != cameraOpaqueLastFrame) + foreach (var dataProvider in cameraDataProviders) { - cameraOpaqueLastFrame = IsOpaque; - - if (IsOpaque) - { - ApplySettingsForOpaqueDisplay(); - } - else + if (dataProvider.CameraRig == MainCameraRig) { - ApplySettingsForTransparentDisplay(); + dataProvider.HeadHeight = value; + break; } } } /// - public override void LateUpdate() + public void RegisterCameraDataProvider(IMixedRealityCameraDataProvider dataProvider) { - base.LateUpdate(); - - SyncRigTransforms(); + cameraDataProviders.Add(dataProvider); } /// - public override void Disable() + public void UnRegisterCameraDataProvider(IMixedRealityCameraDataProvider dataProvider) { - base.Disable(); - - var camera = CameraCache.Main; - - if (camera != null) - { - camera.transform.SetParent(null); - } - - if (CameraRig == null) { return; } - - if (CameraRig.PlayspaceTransform != null) - { - if (Application.isPlaying) - { - UnityEngine.Object.Destroy(CameraRig.PlayspaceTransform.gameObject); - } - else - { - UnityEngine.Object.DestroyImmediate(CameraRig.PlayspaceTransform.gameObject); - } - } - - if (CameraRig is Component component && - component is IMixedRealityCameraRig) - { - if (Application.isPlaying) - { - UnityEngine.Object.Destroy(component); - } - else - { - UnityEngine.Object.DestroyImmediate(component); - } - } - } - - #endregion IMixedRealitySerivce Implementation - - /// - /// Depending on whether there is an XR device connected, - /// moves the camera to the setting from the camera profile. - /// - private void ApplySettingsForDefaultHeadHeight() - { - if (!IsStereoscopic) - { - // If not device attached we'll just use the default head height setting. - CameraRig.CameraTransform.Translate(0f, DefaultHeadHeight, 0f); - } - else - { - // If we have a stereoscopic device attached we'll leave - // height control to the device itself and reset everything to origin. - ResetRigTransforms(); - } - } - - /// - /// Applies opaque settings from camera profile. - /// - private void ApplySettingsForOpaqueDisplay() - { - CameraCache.Main.clearFlags = cameraClearFlagsOpaqueDisplay; - CameraCache.Main.nearClipPlane = nearClipPlaneOpaqueDisplay; - CameraCache.Main.backgroundColor = backgroundColorOpaqueDisplay; - QualitySettings.SetQualityLevel(opaqueQualityLevel, false); - } - - /// - /// Applies transparent settings from camera profile. - /// - private void ApplySettingsForTransparentDisplay() - { - CameraCache.Main.clearFlags = cameraClearFlagsTransparentDisplay; - CameraCache.Main.backgroundColor = backgroundColorTransparentDisplay; - CameraCache.Main.nearClipPlane = nearClipPlaneTransparentDisplay; - QualitySettings.SetQualityLevel(transparentQualityLevel, false); + cameraDataProviders.Remove(dataProvider); } - private void ResetRigTransforms() - { - CameraRig.PlayspaceTransform.position = Vector3.zero; - CameraRig.PlayspaceTransform.rotation = Quaternion.identity; - CameraRig.CameraTransform.position = Vector3.zero; - CameraRig.CameraTransform.rotation = Quaternion.identity; - CameraRig.BodyTransform.position = Vector3.zero; - CameraRig.BodyTransform.rotation = Quaternion.identity; - } - - private void SyncRigTransforms() - { - var cameraPosition = CameraRig.CameraTransform.localPosition; - var bodyLocalPosition = CameraRig.BodyTransform.localPosition; - - bodyLocalPosition.x = cameraPosition.x; - bodyLocalPosition.y = cameraPosition.y - HeadHeight; - bodyLocalPosition.z = cameraPosition.z; - - CameraRig.BodyTransform.localPosition = bodyLocalPosition; - - var bodyRotation = CameraRig.BodyTransform.rotation; - var headRotation = CameraRig.CameraTransform.rotation; - var currentAngle = Mathf.Abs(Quaternion.Angle(bodyRotation, headRotation)); - - if (currentAngle > bodyAdjustmentAngle) - { - CameraRig.BodyTransform.rotation = Quaternion.Slerp(bodyRotation, headRotation, Time.deltaTime * bodyAdjustmentSpeed); - } - } + #endregion IMixedRealityCameraSystem Impelementation } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs.meta index 294c7058d..0ef1b2574 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs.meta +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} userData: assetBundleName: assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs index 4553134aa..608ee0653 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs @@ -124,7 +124,7 @@ public Transform DiagnosticsRoot if (diagnosticsRoot == null) { diagnosticsRoot = new GameObject("Diagnostics").transform; - diagnosticsRoot.parent = MixedRealityToolkit.CameraSystem?.CameraRig.PlayspaceTransform; + diagnosticsRoot.parent = MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform; } return diagnosticsRoot; diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs index 57dc52752..1453dba9f 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs @@ -45,7 +45,7 @@ private GameObject CreateSpatialAwarenessParent get { var spatialAwarenessSystemObject = new GameObject("Spatial Awareness System"); - spatialAwarenessSystemObject.transform.parent = MixedRealityToolkit.CameraSystem?.CameraRig.PlayspaceTransform; + spatialAwarenessSystemObject.transform.parent = MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform; return spatialAwarenessSystemObject; } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs index 59c981bb2..6ffc6f17e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs @@ -213,7 +213,7 @@ private void ProcessTeleportationRequest(TeleportEventData eventData) var cameraTransform = MixedRealityToolkit.CameraSystem == null ? CameraCache.Main.transform - : MixedRealityToolkit.CameraSystem.CameraRig.CameraTransform; + : MixedRealityToolkit.CameraSystem.MainCameraRig.CameraTransform; var cameraPosition = cameraTransform.position; var cameraParent = cameraTransform.parent; Debug.Assert(cameraParent != null, "Teleport system requires that the camera be parented under another object."); diff --git a/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/Orbital.cs b/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/Orbital.cs index d815113be..20d00af7f 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/Orbital.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/Orbital.cs @@ -129,7 +129,7 @@ private Quaternion CalculateDesiredRotation(Vector3 desiredPos) var desiredRot = Quaternion.identity; var cameraTransform = MixedRealityToolkit.CameraSystem == null ? CameraCache.Main.transform - : MixedRealityToolkit.CameraSystem.CameraRig.CameraTransform; + : MixedRealityToolkit.CameraSystem.MainCameraRig.CameraTransform; switch (orientationType) { diff --git a/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/SolverHandler.cs b/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/SolverHandler.cs index dde40ff14..30cf2746a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/SolverHandler.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Utilities/Solvers/SolverHandler.cs @@ -215,7 +215,7 @@ protected virtual void AttachToNewTrackedObject() switch (TrackedObjectToReference) { case TrackedObjectType.Head: - TrackTransform(MixedRealityToolkit.CameraSystem.CameraRig.CameraTransform); + TrackTransform(MixedRealityToolkit.CameraSystem.MainCameraRig.CameraTransform); break; case TrackedObjectType.LeftHandOrController: Handedness = Handedness.Left; @@ -224,10 +224,10 @@ protected virtual void AttachToNewTrackedObject() Handedness = Handedness.Right; break; case TrackedObjectType.Body: - TrackTransform(MixedRealityToolkit.CameraSystem.CameraRig.BodyTransform); + TrackTransform(MixedRealityToolkit.CameraSystem.MainCameraRig.BodyTransform); break; case TrackedObjectType.Playspace: - TrackTransform(MixedRealityToolkit.CameraSystem.CameraRig.PlayspaceTransform); + TrackTransform(MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform); break; default: throw new ArgumentOutOfRangeException(); diff --git a/XRTK-Core/ProjectSettings/QualitySettings.asset b/XRTK-Core/ProjectSettings/QualitySettings.asset index ed75edc02..1ff7efed5 100644 --- a/XRTK-Core/ProjectSettings/QualitySettings.asset +++ b/XRTK-Core/ProjectSettings/QualitySettings.asset @@ -4,7 +4,7 @@ QualitySettings: m_ObjectHideFlags: 0 serializedVersion: 5 - m_CurrentQuality: 5 + m_CurrentQuality: 0 m_QualitySettings: - serializedVersion: 2 name: Very Low From deea211e6715db7a782d9a7274af7316ffb9cc7a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 17:48:07 -0400 Subject: [PATCH 05/73] updated how we applied the head height --- Submodules/Oculus | 2 +- Submodules/SDK | 2 +- .../CameraSystem/BaseCameraDataProvider.cs | 80 +++++++++++-------- .../CameraSystem/MixedRealityCameraSystem.cs | 9 +++ 4 files changed, 57 insertions(+), 36 deletions(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index 510179839..b8472ee4f 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 510179839feb76ec1a697f325f6718ff149d0863 +Subproject commit b8472ee4f71a3a4fc8e076f40fbf52978a52cebd diff --git a/Submodules/SDK b/Submodules/SDK index b8c90bab1..34bc85e20 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit b8c90bab1cf3d7bb024d2bc0902b90dc6d189e63 +Subproject commit 34bc85e20ce3965e1dcd4387c2b3c3f0f4ef2d7f diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 9d1ff4587..33a4a4a3a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -20,58 +20,63 @@ public class BaseCameraDataProvider : BaseDataProvider, IMixedRealityCameraDataP public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCameraDataProviderProfile profile) : base(name, priority) { - if (profile == null) + var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile; + + if (profile != null) { - throw new ArgumentException($"Missing the profile for {base.Name}!"); + if (profile.CameraRigType?.Type == null) + { + throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); + } } - - if (profile.CameraRigType?.Type == null) + else { - throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); + if (globalProfile.CameraRigType?.Type == null) + { + throw new Exception($"{nameof(globalProfile.CameraRigType)} cannot be null!"); + } } - var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile; - - isCameraPersistent = profile.IsCameraPersistent != globalProfile.IsCameraPersistent + isCameraPersistent = profile != null ? profile.IsCameraPersistent : globalProfile.IsCameraPersistent; - cameraRigType = profile.CameraRigType.Type != globalProfile.CameraRigType.Type + cameraRigType = profile != null ? profile.CameraRigType.Type : globalProfile.CameraRigType.Type; - DefaultHeadHeight = !profile.DefaultHeadHeight.Approximately(globalProfile.DefaultHeadHeight, 0.01f) + DefaultHeadHeight = profile != null ? profile.DefaultHeadHeight : globalProfile.DefaultHeadHeight; - nearClipPlaneOpaqueDisplay = !profile.NearClipPlaneOpaqueDisplay.Approximately(globalProfile.NearClipPlaneOpaqueDisplay, 0.01f) + nearClipPlaneOpaqueDisplay = profile != null ? profile.NearClipPlaneOpaqueDisplay : globalProfile.NearClipPlaneOpaqueDisplay; - cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay != globalProfile.CameraClearFlagsOpaqueDisplay + cameraClearFlagsOpaqueDisplay = profile != null ? profile.CameraClearFlagsOpaqueDisplay : globalProfile.CameraClearFlagsOpaqueDisplay; - backgroundColorOpaqueDisplay = profile.BackgroundColorOpaqueDisplay != globalProfile.BackgroundColorOpaqueDisplay + backgroundColorOpaqueDisplay = profile != null ? profile.BackgroundColorOpaqueDisplay : globalProfile.BackgroundColorOpaqueDisplay; - opaqueQualityLevel = profile.OpaqueQualityLevel != globalProfile.OpaqueQualityLevel + opaqueQualityLevel = profile != null ? profile.OpaqueQualityLevel : globalProfile.OpaqueQualityLevel; - nearClipPlaneTransparentDisplay = !profile.NearClipPlaneTransparentDisplay.Approximately(globalProfile.NearClipPlaneTransparentDisplay, 0.01f) + nearClipPlaneTransparentDisplay = profile != null ? profile.NearClipPlaneTransparentDisplay : globalProfile.NearClipPlaneTransparentDisplay; - cameraClearFlagsTransparentDisplay = profile.CameraClearFlagsTransparentDisplay != globalProfile.CameraClearFlagsTransparentDisplay + cameraClearFlagsTransparentDisplay = profile != null ? profile.CameraClearFlagsTransparentDisplay : globalProfile.CameraClearFlagsTransparentDisplay; - backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay != globalProfile.BackgroundColorTransparentDisplay + backgroundColorTransparentDisplay = profile != null ? profile.BackgroundColorTransparentDisplay : globalProfile.BackgroundColorTransparentDisplay; - transparentQualityLevel = profile.TransparentQualityLevel != globalProfile.TransparentQualityLevel + transparentQualityLevel = profile != null ? profile.TransparentQualityLevel : globalProfile.TransparentQualityLevel; - bodyAdjustmentAngle = !profile.BodyAdjustmentAngle.Approximately(globalProfile.BodyAdjustmentAngle, 0.01f) + bodyAdjustmentAngle = profile != null ? profile.BodyAdjustmentAngle : globalProfile.BodyAdjustmentAngle; - bodyAdjustmentSpeed = !profile.BodyAdjustmentSpeed.Approximately(globalProfile.BodyAdjustmentSpeed, 0.01f) + bodyAdjustmentSpeed = profile != null ? profile.BodyAdjustmentSpeed : globalProfile.BodyAdjustmentSpeed; } @@ -156,6 +161,14 @@ public override void Initialize() { base.Initialize(); + if (CameraRig == null) + { + // TODO Currently we get always get the main camera. Should we provide a tag to search for alts? + CameraRig = CameraCache.Main.gameObject.EnsureComponent(cameraRigType) as IMixedRealityCameraRig; + Debug.Assert(CameraRig != null); + } + + ApplySettingsForDefaultHeadHeight(); cameraOpaqueLastFrame = IsOpaque; if (IsOpaque) @@ -167,16 +180,6 @@ public override void Initialize() ApplySettingsForTransparentDisplay(); } - if (CameraRig == null) - { - // TODO Currently we get always get the main camera. Should we provide a tag to search for alts? - CameraRig = CameraCache.Main.gameObject.EnsureComponent(cameraRigType) as IMixedRealityCameraRig; - Debug.Assert(CameraRig != null); - ResetRigTransforms(); - } - - ApplySettingsForDefaultHeadHeight(); - MixedRealityToolkit.CameraSystem.RegisterCameraDataProvider(this); } @@ -185,8 +188,6 @@ public override void Enable() { base.Enable(); - ResetRigTransforms(); - if (Application.isPlaying && isCameraPersistent) { @@ -201,6 +202,8 @@ public override void Update() { base.Update(); + if (!Application.isPlaying) { return; } + if (IsOpaque != cameraOpaqueLastFrame) { cameraOpaqueLastFrame = IsOpaque; @@ -221,6 +224,8 @@ public override void LateUpdate() { base.LateUpdate(); + if (!Application.isPlaying) { return; } + SyncRigTransforms(); } @@ -231,10 +236,15 @@ public override void Disable() if (CameraRig == null) { return; } + ResetRigTransforms(); + if (CameraRig.PlayerCamera != null && CameraRig.PlayerCamera.transform != null) { - CameraRig.PlayerCamera.transform.SetParent(null); + var cameraTransform = CameraRig.PlayerCamera.transform; + cameraTransform.SetParent(null); + cameraTransform.position = Vector3.one; + cameraTransform.rotation = Quaternion.identity; } if (CameraRig.PlayspaceTransform != null) @@ -279,8 +289,10 @@ public override void Destroy() /// private void ApplySettingsForDefaultHeadHeight() { - headHeight = DefaultHeadHeight; + HeadHeight = DefaultHeadHeight; ResetRigTransforms(); + SyncRigTransforms(); + CameraRig.PlayspaceTransform.Translate(0f, HeadHeight, 0f); } /// diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 2d1475f4d..ec38f0ce4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System.Collections.Generic; +using UnityEngine; using XRTK.Definitions.CameraSystem; using XRTK.Interfaces.CameraSystem; using XRTK.Utilities; @@ -35,6 +36,14 @@ public override void Enable() } } + /// + public override void Destroy() + { + base.Destroy(); + + Debug.Assert(cameraDataProviders.Count == 0, "Failed to clean up camera data provider references!"); + } + #endregion IMixedRealityService Implementation #region IMixedRealityCameraSystem Impelementation From b67173d4013474facbe50804cc41f4d913e12a01 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 17:52:00 -0400 Subject: [PATCH 06/73] Fixed a race condition after we've reset the profile and started re-initialization Fixed platforms so they only return true outside of the editor --- Submodules/Lumin | 2 +- .../Definitions/Platforms/OSXPlatform.cs | 2 +- .../Platforms/WindowsStandalonePlatform.cs | 2 +- ...MixedRealityToolkitRootProfileInspector.cs | 2 -- .../Services/MixedRealityToolkit.cs | 35 +++++++++++++++---- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index 2414774e5..108a80402 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 2414774e55dce3b8c736f0021339d37453760482 +Subproject commit 108a804024dd92fd0545db5ded5e7d9e46e9ac4f diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs index 1e10eb093..6ba096937 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs @@ -14,7 +14,7 @@ public override bool IsAvailable get { #if UNITY_STANDALONE_OSX - return true; + return !UnityEngine.Application.isEditor; #else return false; #endif diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs index 3d97c851c..a0a3e129a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs @@ -14,7 +14,7 @@ public override bool IsAvailable get { #if UNITY_STANDALONE_WIN - return true; + return !UnityEngine.Application.isEditor; #else return false; #endif diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs index 8cec8fd87..60ed8cb6d 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityToolkitRootProfileInspector.cs @@ -134,8 +134,6 @@ public override void OnInspectorGUI() MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); serializedObject.Update(); - if (!MixedRealityToolkit.IsInitialized) { return; } - var previousLabelWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 160f; EditorGUI.BeginChangeCheck(); diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 6849ead2a..2b1691ae5 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -1799,7 +1799,10 @@ public static IMixedRealityCameraSystem CameraSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsCameraSystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (cameraSystem != null) @@ -1831,7 +1834,10 @@ public static IMixedRealityInputSystem InputSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsInputSystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (inputSystem != null) @@ -1863,7 +1869,10 @@ public static IMixedRealityBoundarySystem BoundarySystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsBoundarySystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (boundarySystem != null) @@ -1895,7 +1904,10 @@ public static IMixedRealitySpatialAwarenessSystem SpatialAwarenessSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsSpatialAwarenessSystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (spatialAwarenessSystem != null) @@ -1927,7 +1939,10 @@ public static IMixedRealityTeleportSystem TeleportSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsTeleportSystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (teleportSystem != null) @@ -1959,7 +1974,10 @@ public static IMixedRealityNetworkingSystem NetworkingSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsNetworkingSystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (networkingSystem != null) @@ -1991,7 +2009,10 @@ public static IMixedRealityDiagnosticsSystem DiagnosticsSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsDiagnosticsSystemEnabled) { - return null; + if (!isResetting && isInitializing) + { + return null; + } } if (diagnosticsSystem != null) From afb7eec040eafb305f6e39ab959cd60c8d1b518a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 18:28:53 -0400 Subject: [PATCH 07/73] reverted some changes --- .../Services/MixedRealityToolkit.cs | 35 ++++--------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 2b1691ae5..6849ead2a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -1799,10 +1799,7 @@ public static IMixedRealityCameraSystem CameraSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsCameraSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (cameraSystem != null) @@ -1834,10 +1831,7 @@ public static IMixedRealityInputSystem InputSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsInputSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (inputSystem != null) @@ -1869,10 +1863,7 @@ public static IMixedRealityBoundarySystem BoundarySystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsBoundarySystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (boundarySystem != null) @@ -1904,10 +1895,7 @@ public static IMixedRealitySpatialAwarenessSystem SpatialAwarenessSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsSpatialAwarenessSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (spatialAwarenessSystem != null) @@ -1939,10 +1927,7 @@ public static IMixedRealityTeleportSystem TeleportSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsTeleportSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (teleportSystem != null) @@ -1974,10 +1959,7 @@ public static IMixedRealityNetworkingSystem NetworkingSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsNetworkingSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (networkingSystem != null) @@ -2009,10 +1991,7 @@ public static IMixedRealityDiagnosticsSystem DiagnosticsSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsDiagnosticsSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (diagnosticsSystem != null) From 7cad6b8d71b5003d41bd27f6498f67746a8f4dd6 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 19:49:05 -0400 Subject: [PATCH 08/73] added GameObject reference to camera rig --- .../Interfaces/IMixedRealityCameraRig.cs | 5 ++++ .../CameraSystem/BaseCameraDataProvider.cs | 2 +- .../Services/CameraSystem/DefaultCameraRig.cs | 17 +++++++++++ .../CameraSystem/MixedRealityCameraSystem.cs | 5 ++++ .../Services/MixedRealityToolkit.cs | 30 ++++--------------- 5 files changed, 34 insertions(+), 25 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs index 1dae5ad41..b2aa7f75f 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs @@ -11,6 +11,11 @@ namespace XRTK.Interfaces.CameraSystem /// public interface IMixedRealityCameraRig { + /// + /// The reference for this camera rig. + /// + GameObject GameObject { get; } + /// /// The root playspace transform that serves as the root of the camera rig. /// diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 33a4a4a3a..373a87de7 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -234,7 +234,7 @@ public override void Disable() { base.Disable(); - if (CameraRig == null) { return; } + if (CameraRig.GameObject == null) { return; } ResetRigTransforms(); diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs index f768f7163..1394bd88b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/DefaultCameraRig.cs @@ -1,6 +1,7 @@ // Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using System; using UnityEngine; using UnityEngine.SpatialTracking; using XRTK.Extensions; @@ -23,6 +24,22 @@ public class DefaultCameraRig : MonoBehaviour, IMixedRealityCameraRig [SerializeField] private Transform playspaceTransform = null; + /// + public GameObject GameObject + { + get + { + try + { + return gameObject; + } + catch + { + return null; + } + } + } + /// public Transform PlayspaceTransform { diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index ec38f0ce4..04f351b3c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -72,6 +72,11 @@ public void SetHeadHeight(float value) /// public void RegisterCameraDataProvider(IMixedRealityCameraDataProvider dataProvider) { + if (dataProvider.CameraRig.PlayerCamera == CameraCache.Main) + { + MainCameraRig = dataProvider.CameraRig; + } + cameraDataProviders.Add(dataProvider); } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 2bc05244c..c19a64dab 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -1846,10 +1846,7 @@ public static IMixedRealityInputSystem InputSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsInputSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (inputSystem != null) @@ -1881,10 +1878,7 @@ public static IMixedRealityBoundarySystem BoundarySystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsBoundarySystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (boundarySystem != null) @@ -1916,10 +1910,7 @@ public static IMixedRealitySpatialAwarenessSystem SpatialAwarenessSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsSpatialAwarenessSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (spatialAwarenessSystem != null) @@ -1951,10 +1942,7 @@ public static IMixedRealityTeleportSystem TeleportSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsTeleportSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (teleportSystem != null) @@ -1986,10 +1974,7 @@ public static IMixedRealityNetworkingSystem NetworkingSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsNetworkingSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (networkingSystem != null) @@ -2021,10 +2006,7 @@ public static IMixedRealityDiagnosticsSystem DiagnosticsSystem instance.activeProfile == null || instance.activeProfile != null && !instance.activeProfile.IsDiagnosticsSystemEnabled) { - if (!isResetting && isInitializing) - { - return null; - } + return null; } if (diagnosticsSystem != null) From 70cfdfff5c579eafd9a2d3784aa5e42e3bdb5e3c Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 19:54:56 -0400 Subject: [PATCH 09/73] updated sdk --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index 34bc85e20..b919fc5fd 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 34bc85e20ce3965e1dcd4387c2b3c3f0f4ef2d7f +Subproject commit b919fc5fd9efbba8a5525de0f36a5938c7856681 From 6be4816c81148cb412ee9034783736a03c10f8f3 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 19:58:21 -0400 Subject: [PATCH 10/73] reverted quality settings change --- XRTK-Core/ProjectSettings/QualitySettings.asset | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XRTK-Core/ProjectSettings/QualitySettings.asset b/XRTK-Core/ProjectSettings/QualitySettings.asset index 1ff7efed5..ed75edc02 100644 --- a/XRTK-Core/ProjectSettings/QualitySettings.asset +++ b/XRTK-Core/ProjectSettings/QualitySettings.asset @@ -4,7 +4,7 @@ QualitySettings: m_ObjectHideFlags: 0 serializedVersion: 5 - m_CurrentQuality: 0 + m_CurrentQuality: 5 m_QualitySettings: - serializedVersion: 2 name: Very Low From b0faadc08ac587136bb955ea80d5e4f1b6fa2aaa Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 11 Apr 2020 20:04:39 -0400 Subject: [PATCH 11/73] updated sdk --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index b919fc5fd..c40df233f 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit b919fc5fd9efbba8a5525de0f36a5938c7856681 +Subproject commit c40df233fadae4b6220ac7bac0a76759d6108a3e From 8bc489c0fedc24187889e5020d88fd4ff02868d4 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 10:45:55 -0400 Subject: [PATCH 12/73] updated lumin checkout --- Submodules/Lumin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index aaf8b56ac..00f442929 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit aaf8b56ac941b6d478c09ef1ffa41039ab543801 +Subproject commit 00f442929dfcae25f2e6bb74deb0a4a5d2ae668f From 1b429b0cbf9aac6238596dc9e11f2e9e276c1b2a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 11:06:51 -0400 Subject: [PATCH 13/73] removed extra line --- .../CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs index 374dd3e8a..038acfc07 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs @@ -23,7 +23,6 @@ public class BaseMixedRealityCameraDataProviderProfile : BaseMixedRealityProfile /// public bool IsCameraPersistent => isCameraPersistent; - [SerializeField] [Tooltip("The near clipping plane distance for an opaque display.")] private float nearClipPlaneOpaqueDisplay = 0.1f; From 561efd3fdbbe24bcbe2222870dcdd40d39db7588 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 11:29:48 -0400 Subject: [PATCH 14/73] Added a reference to the camera system since the toolkit static accessor comes back null when the application is either quitting or resetting --- .../Providers/CameraSystem/BaseCameraDataProvider.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 373a87de7..6f3f99ea6 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -20,6 +20,7 @@ public class BaseCameraDataProvider : BaseDataProvider, IMixedRealityCameraDataP public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCameraDataProviderProfile profile) : base(name, priority) { + cameraSystem = MixedRealityToolkit.CameraSystem; var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile; if (profile != null) @@ -103,6 +104,8 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera private bool cameraOpaqueLastFrame; private DisplayType currentDisplayType; + private IMixedRealityCameraSystem cameraSystem = null; + private enum DisplayType { Opaque = 0, @@ -180,7 +183,7 @@ public override void Initialize() ApplySettingsForTransparentDisplay(); } - MixedRealityToolkit.CameraSystem.RegisterCameraDataProvider(this); + cameraSystem.RegisterCameraDataProvider(this); } /// @@ -278,7 +281,7 @@ public override void Destroy() { base.Destroy(); - MixedRealityToolkit.CameraSystem.UnRegisterCameraDataProvider(this); + cameraSystem.UnRegisterCameraDataProvider(this); } #endregion IMixedRealitySerivce Implementation From 6325305a2662cd2bddb520c7d92ebb37b5f79c00 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 11:42:46 -0400 Subject: [PATCH 15/73] Added an optional flag to set the head height on all registered providers --- .../CameraSystem/IMixedRealityCameraSystem.cs | 9 ++++++--- .../Services/CameraSystem/MixedRealityCameraSystem.cs | 11 ++++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs index a9bc5ab2e..8764c07fd 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs @@ -21,10 +21,13 @@ public interface IMixedRealityCameraSystem : IMixedRealityService IMixedRealityCameraRig MainCameraRig { get; } /// - /// Sets the on for the . + /// Sets the . If is true, then it's set + /// for all , otherwise it only sets the . /// - /// - void SetHeadHeight(float value); + /// The height value to set. + /// If is true, then it's set + /// for all , otherwise it only sets the . + void SetHeadHeight(float value, bool setForAllCameraProviders = false); /// /// Registers the with the . diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 04f351b3c..e3f48d387 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -57,14 +57,19 @@ public override void Destroy() public IMixedRealityCameraRig MainCameraRig { get; private set; } /// - public void SetHeadHeight(float value) + public void SetHeadHeight(float value, bool setForAllCameraProviders = false) { foreach (var dataProvider in cameraDataProviders) { - if (dataProvider.CameraRig == MainCameraRig) + if (setForAllCameraProviders || + dataProvider.CameraRig == MainCameraRig) { dataProvider.HeadHeight = value; - break; + + if (!setForAllCameraProviders) + { + break; + } } } } From d8d1a53bd3ef1a390a810319941525765248c8b7 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 11:53:32 -0400 Subject: [PATCH 16/73] moved logic about how we get main camera rig into the getter property itself instead of having it set on registration --- .../CameraSystem/MixedRealityCameraSystem.cs | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index e3f48d387..6ae2d0b1b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -53,8 +53,27 @@ public override void Destroy() /// public IReadOnlyCollection CameraDataProviders => cameraDataProviders; + private IMixedRealityCameraRig mainCameraRig = null; + /// - public IMixedRealityCameraRig MainCameraRig { get; private set; } + public IMixedRealityCameraRig MainCameraRig + { + get + { + if (mainCameraRig == null) + { + foreach (var dataProvider in cameraDataProviders) + { + if (dataProvider.CameraRig.PlayerCamera == CameraCache.Main) + { + mainCameraRig = dataProvider.CameraRig; + } + } + } + + return mainCameraRig; + } + } /// public void SetHeadHeight(float value, bool setForAllCameraProviders = false) @@ -77,11 +96,6 @@ public void SetHeadHeight(float value, bool setForAllCameraProviders = false) /// public void RegisterCameraDataProvider(IMixedRealityCameraDataProvider dataProvider) { - if (dataProvider.CameraRig.PlayerCamera == CameraCache.Main) - { - MainCameraRig = dataProvider.CameraRig; - } - cameraDataProviders.Add(dataProvider); } From 5fa43a6228a6e097f7203d0aac0109a477176dbc Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 11:55:23 -0400 Subject: [PATCH 17/73] removed the Enable call searching for main camera. Not lives in property accessor --- .../CameraSystem/MixedRealityCameraSystem.cs | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 6ae2d0b1b..f2a6f3343 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -22,20 +22,6 @@ public MixedRealityCameraSystem(MixedRealityCameraSystemProfile profile) #region IMixedRealityService Implementation - /// - public override void Enable() - { - base.Enable(); - - foreach (var dataProvider in cameraDataProviders) - { - if (dataProvider.CameraRig.PlayerCamera == CameraCache.Main) - { - MainCameraRig = dataProvider.CameraRig; - } - } - } - /// public override void Destroy() { From c5147ca13048e334de143c69ceb15516933afd72 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 12:07:12 -0400 Subject: [PATCH 18/73] updated wmr checkout --- Submodules/WindowsMixedReality | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 2975676ab..42c1ef4bd 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 2975676abeb41faca27b3812d5780445422b4fb1 +Subproject commit 42c1ef4bd04a283b2517227fcc778ac4b777adc1 From f5ddf300d8eb35c40e5e51745d49f57f9fbdcfeb Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 12:25:57 -0400 Subject: [PATCH 19/73] updated boundary system to utilize enable and disable properly --- .../MixedRealityBoundarySystem.cs | 41 +++++++++++++++---- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs index f0173c596..bc6870e33 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs @@ -54,9 +54,23 @@ public override void Initialize() { base.Initialize(); - if (!Application.isPlaying) { return; } + if (!Application.isPlaying) + { + return; + } boundaryEventData = new BoundaryEventData(EventSystem.current); + } + + /// + public override void Enable() + { + base.Enable(); + + if (!Application.isPlaying) + { + return; + } CalculateBoundaryBounds(); Boundary.visible = true; @@ -89,6 +103,24 @@ public override void Initialize() RaiseBoundaryVisualizationChanged(); } + /// + public override void Disable() + { + base.Disable(); + + if (!Application.isPlaying) + { + return; + } + + showFloor = false; + showPlayArea = false; + showTrackedArea = false; + showBoundaryWalls = false; + showCeiling = false; + Boundary.visible = false; + } + /// public override void Destroy() { @@ -96,7 +128,6 @@ public override void Destroy() // and clean up the parent. if (boundaryVisualizationParent != null) { - if (Application.isEditor) { Object.DestroyImmediate(boundaryVisualizationParent); @@ -181,12 +212,6 @@ public override void Destroy() currentCeilingObject = null; } - showFloor = false; - showPlayArea = false; - showTrackedArea = false; - showBoundaryWalls = false; - showCeiling = false; - RaiseBoundaryVisualizationChanged(); } From 65f62a37b92a8d84fa49f672ed45ccc9fdab54b0 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 12 Apr 2020 20:33:14 -0400 Subject: [PATCH 20/73] updated base camera provider --- Submodules/Lumin | 2 +- Submodules/WindowsMixedReality | 2 +- ...seMixedRealityCameraDataProviderProfile.cs | 1 + .../MixedRealityCameraSystemProfile.cs | 3 +- .../Interfaces/IMixedRealityCameraRig.cs | 12 ++-- .../CameraSystem/BaseCameraDataProvider.cs | 68 +++++++++---------- 6 files changed, 41 insertions(+), 47 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index 00f442929..3fb5675b1 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 00f442929dfcae25f2e6bb74deb0a4a5d2ae668f +Subproject commit 3fb5675b1c378399c9d5653cb9dafed94ff8fd50 diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 42c1ef4bd..846c22d7f 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 42c1ef4bd04a283b2517227fcc778ac4b777adc1 +Subproject commit 846c22d7fcd36c6f6c45b966f5c32492868a4683 diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs index 038acfc07..6f93daa28 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs @@ -113,6 +113,7 @@ public SystemType CameraRigType internal set => cameraRigType = value; } + [Range(0f, 3f)] [SerializeField] [Tooltip("The default head height the rig will start at if a platform doesn't automatically adjust the height for you.")] private float defaultHeadHeight = 1.6f; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs index 4f437349b..5290ea228 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs @@ -125,6 +125,7 @@ public SystemType CameraRigType internal set => cameraRigType = value; } + [Range(0f, 3f)] [SerializeField] [Tooltip("The default head height the rig will start at if a platform doesn't automatically adjust the height for you.")] private float defaultHeadHeight = 1.6f; @@ -135,7 +136,7 @@ public SystemType CameraRigType public float DefaultHeadHeight => defaultHeadHeight; [SerializeField] - [UnityEngine.Range(0f, 180f)] + [Range(0f, 180f)] [Tooltip("This is the angle that will be used to adjust the player's body rotation in relation to their head position.")] private float bodyAdjustmentAngle = 60f; diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs index b2aa7f75f..a2bdf539e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs @@ -17,12 +17,10 @@ public interface IMixedRealityCameraRig GameObject GameObject { get; } /// - /// The root playspace transform that serves as the root of the camera rig. - /// - /// - /// This transform serves as a virtual representation of the physical space. + /// The root playspace transform that serves as the root of the camera rig. + /// This transform serves as a virtual representation of the physical space. /// All physical objects that have digital twins will use this frame of reference to synchronize their transform data. - /// + /// Transform PlayspaceTransform { get; } /// @@ -31,7 +29,7 @@ public interface IMixedRealityCameraRig Transform CameraTransform { get; } /// - /// The player's reference. + /// The player's reference, located at their tracked head position. /// Camera PlayerCamera { get; } @@ -41,7 +39,7 @@ public interface IMixedRealityCameraRig TrackedPoseDriver CameraPoseDriver { get; } /// - /// The player's body transform. + /// The player's body transform, located at the player's feet. /// /// /// This is synced to the player's head camera X & Z values diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 6f3f99ea6..698a3875d 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -82,6 +82,8 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera : globalProfile.BodyAdjustmentSpeed; } + private readonly IMixedRealityCameraSystem cameraSystem = null; + private readonly Type cameraRigType; private readonly bool isCameraPersistent; @@ -102,36 +104,12 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera private readonly double bodyAdjustmentAngle; private bool cameraOpaqueLastFrame; - private DisplayType currentDisplayType; - - private IMixedRealityCameraSystem cameraSystem = null; - - private enum DisplayType - { - Opaque = 0, - Transparent - } /// - public virtual bool IsOpaque - { - get - { - currentDisplayType = DisplayType.Opaque; -#if UNITY_WSA - if (!UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque) - { - currentDisplayType = DisplayType.Transparent; - } -#elif PLATFORM_LUMIN - currentDisplayType = DisplayType.Transparent; -#endif - return currentDisplayType == DisplayType.Opaque; - } - } + public virtual bool IsOpaque => true; /// - public virtual bool IsStereoscopic => UnityEngine.XR.XRSettings.enabled && UnityEngine.XR.XRDevice.isPresent; + public virtual bool IsStereoscopic => CameraRig.PlayerCamera.stereoEnabled; /// public IMixedRealityCameraRig CameraRig { get; private set; } @@ -290,18 +268,17 @@ public override void Destroy() /// Depending on whether there is an XR device connected, /// moves the camera to the setting from the camera profile. /// - private void ApplySettingsForDefaultHeadHeight() + protected virtual void ApplySettingsForDefaultHeadHeight() { HeadHeight = DefaultHeadHeight; ResetRigTransforms(); SyncRigTransforms(); - CameraRig.PlayspaceTransform.Translate(0f, HeadHeight, 0f); } /// /// Applies opaque settings from camera profile. /// - private void ApplySettingsForOpaqueDisplay() + protected virtual void ApplySettingsForOpaqueDisplay() { CameraRig.PlayerCamera.clearFlags = cameraClearFlagsOpaqueDisplay; CameraRig.PlayerCamera.nearClipPlane = nearClipPlaneOpaqueDisplay; @@ -312,7 +289,7 @@ private void ApplySettingsForOpaqueDisplay() /// /// Applies transparent settings from camera profile. /// - private void ApplySettingsForTransparentDisplay() + protected virtual void ApplySettingsForTransparentDisplay() { CameraRig.PlayerCamera.clearFlags = cameraClearFlagsTransparentDisplay; CameraRig.PlayerCamera.backgroundColor = backgroundColorTransparentDisplay; @@ -320,24 +297,41 @@ private void ApplySettingsForTransparentDisplay() QualitySettings.SetQualityLevel(transparentQualityLevel, false); } - private void ResetRigTransforms() + /// + /// Resets the , , + /// and poses. + /// + protected virtual void ResetRigTransforms() { CameraRig.PlayspaceTransform.position = Vector3.zero; CameraRig.PlayspaceTransform.rotation = Quaternion.identity; - CameraRig.CameraTransform.position = Vector3.zero; + CameraRig.CameraTransform.position = IsStereoscopic ? Vector3.zero : new Vector3(0f, HeadHeight, 0f); CameraRig.CameraTransform.rotation = Quaternion.identity; CameraRig.BodyTransform.position = Vector3.zero; CameraRig.BodyTransform.rotation = Quaternion.identity; } - private void SyncRigTransforms() + /// + /// Called each to the sync the , , + /// and poses. + /// + protected virtual void SyncRigTransforms() { - var cameraPosition = CameraRig.CameraTransform.localPosition; + var cameraLocalPosition = CameraRig.CameraTransform.localPosition; var bodyLocalPosition = CameraRig.BodyTransform.localPosition; - bodyLocalPosition.x = cameraPosition.x; - bodyLocalPosition.y = cameraPosition.y - HeadHeight; - bodyLocalPosition.z = cameraPosition.z; + bodyLocalPosition.x = cameraLocalPosition.x; + + if (HeadHeight > 0f) + { + bodyLocalPosition.y = cameraLocalPosition.y - HeadHeight; + } + else + { + bodyLocalPosition.y = cameraLocalPosition.y - 1.6f; + } + + bodyLocalPosition.z = cameraLocalPosition.z; CameraRig.BodyTransform.localPosition = bodyLocalPosition; From 7d2c446c6125284435d073dac5a2aaa5fe4acd45 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 09:08:52 -0400 Subject: [PATCH 21/73] refactored the platforms to include IsBuildTargetAvailible and IsBuildTargetActive Added configuration flag to determine if more than one data provider can be registered with a service per platform --- Submodules/Lumin | 2 +- Submodules/SDK | 2 +- .../BaseMixedRealityServiceProfile.cs | 13 ++++ .../Definitions/Platforms/AllPlatforms.cs | 5 +- .../Definitions/Platforms/AndroidPlatform.cs | 15 ++++- .../Definitions/Platforms/BasePlatform.cs | 5 +- .../Platforms/CurrentBuildTargetPlatform.cs | 52 ++++++++++++++++ .../CurrentBuildTargetPlatform.cs.meta | 11 ++++ .../Definitions/Platforms/EditorPlatform.cs | 7 ++- .../Definitions/Platforms/IOSPlatform.cs | 15 ++++- .../Definitions/Platforms/OSXPlatform.cs | 15 ++++- .../Platforms/UniversalWindowsPlatform.cs | 16 ++++- .../Definitions/Platforms/WebGlPlatform.cs | 15 ++++- .../Platforms/WindowsStandalonePlatform.cs | 16 ++++- .../PlatformEntryPropertyDrawer.cs | 62 +++++++++++++++++-- .../Interfaces/IMixedRealityPlatform.cs | 12 +++- .../Services/MixedRealityToolkit.cs | 62 +++++++++++++------ 17 files changed, 285 insertions(+), 40 deletions(-) create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs create mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta diff --git a/Submodules/Lumin b/Submodules/Lumin index 108a80402..69a2e929e 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 108a804024dd92fd0545db5ded5e7d9e46e9ac4f +Subproject commit 69a2e929e9149d494ddf1e00d6e762b1aaccb620 diff --git a/Submodules/SDK b/Submodules/SDK index 740a34bd1..47037f685 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 740a34bd10b17752a6681420e33f4db7ffaac217 +Subproject commit 47037f685000b1f987766f9f7dd30dc11bd251b1 diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs index 6005d8055..0ea2ff5d0 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs @@ -15,6 +15,19 @@ namespace XRTK.Definitions /// public abstract class BaseMixedRealityServiceProfile : BaseMixedRealityProfile where TService : IMixedRealityService { + [SerializeField] + [Tooltip("Only registers one configuration based on the first active platform found.")] + private bool onlyRegisterSinglePlatform = true; + + /// + /// Only registers one configuration based on the first active platform found. + /// + /// + /// This doesn't prevent multiple services from being manually registered in the service locator, it only prevents the profile + /// from registering multiple services based on the platforms defined in the whole collection of . + /// + public bool OnlyRegisterSinglePlatform => onlyRegisterSinglePlatform; + [SerializeField] private MixedRealityServiceConfiguration[] configurations = new MixedRealityServiceConfiguration[0]; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs index 2750c2aa6..df22879b9 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs @@ -9,6 +9,9 @@ namespace XRTK.Definitions.Platforms public sealed class AllPlatforms : BasePlatform { /// - public override bool IsAvailable => true; + public override bool IsActive => true; + + /// + public override bool IsBuildTargetAvailable => true; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs index e6383b9cb..e7c6ebcaf 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class AndroidPlatform : BasePlatform { /// - public override bool IsAvailable + public override bool IsActive { get { @@ -17,6 +17,19 @@ public override bool IsAvailable return !UnityEngine.Application.isEditor; #else return false; +#endif + } + } + + /// + public override bool IsBuildTargetAvailable + { + get + { +#if UNITY_EDITOR + return UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.Android; +#else + return false; #endif } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs index b65047be3..68e12e62c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs @@ -13,6 +13,9 @@ namespace XRTK.Definitions.Platforms public abstract class BasePlatform : IMixedRealityPlatform { /// - public virtual bool IsAvailable => false; + public virtual bool IsActive => false; + + /// + public virtual bool IsBuildTargetAvailable => false; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs new file mode 100644 index 000000000..3d8869d37 --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs @@ -0,0 +1,52 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Interfaces; + +namespace XRTK.Definitions.Platforms +{ + /// + /// Used by the XRTK to signal that the feature is only available when the current built target matches the platform target. + /// + public sealed class CurrentBuildTargetPlatform : BasePlatform + { + /// + public override bool IsActive => Application.isEditor; + + /// + /// Checks to see if the current build target is available for the list of provided platform. + /// + /// + /// True, if any build target is active. + public static bool IsBuildTargetActive(List platforms) + { + var isEditor = false; + var isBuildTargetActive = false; + var isEditorPlatformActive = false; + + for (var i = 0; i < platforms.Count; i++) + { + var platform = platforms[i]; + + if (platform is AllPlatforms) + { + return true; + } + + if (platform is CurrentBuildTargetPlatform) + { + isEditor = true; + isEditorPlatformActive = platform.IsActive; + } + else + { + isBuildTargetActive |= platform.IsBuildTargetAvailable; + } + } + + return !isEditor || isBuildTargetActive && isEditorPlatformActive; + } + } +} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta new file mode 100644 index 000000000..4c325f0cf --- /dev/null +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa7e3a2b603b24c439c10a7f32544de4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs index 7aaa16f30..92cfdba95 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs @@ -6,7 +6,7 @@ namespace XRTK.Definitions.Platforms { /// - /// Used by the XRTK to signal that the feature is available in the Unity Editor. + /// Used by the XRTK to signal that the feature is available in the Unity Editor. /// /// /// Defines any editor platform for Win, OSX, and Linux. @@ -14,6 +14,9 @@ namespace XRTK.Definitions.Platforms public sealed class EditorPlatform : BasePlatform { /// - public override bool IsAvailable => Application.isEditor; + public override bool IsActive => Application.isEditor; + + /// + public override bool IsBuildTargetAvailable => false; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs index 2ca0b0b2b..65ff0bf18 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class IOSPlatform : BasePlatform { /// - public override bool IsAvailable + public override bool IsActive { get { @@ -17,6 +17,19 @@ public override bool IsAvailable return !UnityEngine.Application.isEditor; #else return false; +#endif + } + } + + /// + public override bool IsBuildTargetAvailable + { + get + { +#if UNITY_EDITOR + return UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.iOS; +#else + return false; #endif } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs index 6ba096937..e23b1707c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class OSXPlatform : BasePlatform { /// - public override bool IsAvailable + public override bool IsActive { get { @@ -17,6 +17,19 @@ public override bool IsAvailable return !UnityEngine.Application.isEditor; #else return false; +#endif + } + } + + /// + public override bool IsBuildTargetAvailable + { + get + { +#if UNITY_EDITOR + return UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.StandaloneOSX; +#else + return false; #endif } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs index 5cab6f3f9..686cb73cc 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs @@ -9,12 +9,24 @@ namespace XRTK.Definitions.Platforms public class UniversalWindowsPlatform : BasePlatform { /// - public override bool IsAvailable + public override bool IsActive { get { #if WINDOWS_UWP - return true; + return !UnityEngine.Application.isEditor; +#else + return false; +#endif + } + } + + public override bool IsBuildTargetAvailable + { + get + { +#if UNITY_EDITOR + return UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WSAPlayer; #else return false; #endif diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs index 3c6416af0..23a43346c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class WebGlPlatform : BasePlatform { /// - public override bool IsAvailable + public override bool IsActive { get { @@ -17,6 +17,19 @@ public override bool IsAvailable return !UnityEngine.Application.isEditor; #else return false; +#endif + } + } + + /// + public override bool IsBuildTargetAvailable + { + get + { +#if UNITY_EDITOR + return UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.WebGL; +#else + return false; #endif } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs index a0a3e129a..b21efed5e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class WindowsStandalonePlatform : BasePlatform { /// - public override bool IsAvailable + public override bool IsActive { get { @@ -17,6 +17,20 @@ public override bool IsAvailable return !UnityEngine.Application.isEditor; #else return false; +#endif + } + } + + /// + public override bool IsBuildTargetAvailable + { + get + { +#if UNITY_EDITOR + return UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.StandaloneWindows || + UnityEditor.EditorUserBuildSettings.activeBuildTarget == UnityEditor.BuildTarget.StandaloneWindows64; +#else + return false; #endif } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs index a7451d397..29e7263c0 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs @@ -144,7 +144,7 @@ void OnEverythingSelected(object _) for (int i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) { - AddPlatformReference(SystemType.GetReference(MixedRealityToolkit.AvailablePlatforms[i].GetType())); + AddPlatformReference(SystemType.GetReference(MixedRealityToolkit.AvailablePlatforms[i].GetType()), true); } runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); @@ -158,14 +158,15 @@ void OnSelectedTypeName(object typeRef) if (!TryRemovePlatformReference(selectedReference)) { - if (selectedPlatformType != null) + if (runtimePlatformsProperty.arraySize + 2 == MixedRealityToolkit.AvailablePlatforms.Count) { - AddPlatformReference(selectedReference); + OnEverythingSelected(null); + return; } - if (runtimePlatformsProperty.arraySize + 1 == MixedRealityToolkit.AvailablePlatforms.Count) + if (selectedPlatformType != null) { - AddPlatformReference(SystemType.GetReference(typeof(AllPlatforms))); + AddPlatformReference(selectedReference); } } @@ -198,8 +199,57 @@ bool IsPlatformActive(Type platformType) return false; } - void AddPlatformReference(string classReference) + void AddPlatformReference(string classReference, bool forceAdd = false) { + if (!forceAdd) + { + var selectedPlatformType = TypeExtensions.ResolveType(classReference); + + for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) + { + var typeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); + var refProperty = typeProperty.FindPropertyRelative("reference"); + var referenceType = TypeExtensions.ResolveType(refProperty.stringValue); + + if (selectedPlatformType == referenceType) + { + return; + } + + if (selectedPlatformType == typeof(CurrentBuildTargetPlatform) && + referenceType == typeof(EditorPlatform) || + selectedPlatformType == typeof(EditorPlatform) && + referenceType == typeof(CurrentBuildTargetPlatform)) + { + TryRemovePlatformReference(refProperty.stringValue); + } + } + + if (selectedPlatformType == typeof(CurrentBuildTargetPlatform)) + { + for (int i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) + { + var activeBuildTarget = MixedRealityToolkit.AvailablePlatforms[i]; + + if (activeBuildTarget.IsBuildTargetAvailable) + { + var activePlatformType = activeBuildTarget.GetType(); + + if (activePlatformType != typeof(AllPlatforms) && + activePlatformType != typeof(EditorPlatform) && + activePlatformType != typeof(CurrentBuildTargetPlatform)) + { + AddPlatformReference(SystemType.GetReference(activePlatformType)); + } + } + } + } + else if (selectedPlatformType == typeof(EditorPlatform)) + { + TryRemovePlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); + } + } + var index = runtimePlatformsProperty.arraySize; runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); runtimePlatformsProperty.InsertArrayElementAtIndex(index); diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs index 12e72e2f6..f2dabb263 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs @@ -9,8 +9,16 @@ namespace XRTK.Interfaces public interface IMixedRealityPlatform { /// - /// Is this platform currently available? + /// Is this platform currently active? /// - bool IsAvailable { get; } + bool IsActive { get; } + + /// + /// The this platform build target available? + /// + /// + /// Only returns true in editor. + /// + bool IsBuildTargetAvailable { get; } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 6849ead2a..f64f4fdef 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -485,7 +485,7 @@ private void InitializeServiceLocator() { if (CreateAndRegisterService(ActiveProfile.DiagnosticsSystemSystemType, ActiveProfile.DiagnosticsSystemProfile) && DiagnosticsSystem != null) { - RegisterServices(ActiveProfile.DiagnosticsSystemProfile.RegisteredServiceConfigurations); + RegisterServices(ActiveProfile.DiagnosticsSystemProfile.RegisteredServiceConfigurations, false); } else { @@ -506,7 +506,7 @@ private void InitializeServiceLocator() // Nothing break; case BaseMixedRealityExtensionServiceProfile extensionServiceProfile: - RegisterServices(extensionServiceProfile.RegisteredServiceConfigurations); + RegisterServices(extensionServiceProfile.RegisteredServiceConfigurations, extensionServiceProfile.OnlyRegisterSinglePlatform); break; default: Debug.LogError($"{configuration.Profile.name} does not derive from {nameof(BaseMixedRealityExtensionServiceProfile)}"); @@ -574,7 +574,8 @@ private static void EnsureMixedRealityRequirements() availablePlatforms.Add(platformInstance); - if (platformInstance.IsAvailable) + if (platformInstance.IsActive || + platformInstance.IsBuildTargetAvailable) { activePlatforms.Add(platformInstance); } @@ -755,9 +756,10 @@ private void OnApplicationPause(bool pause) /// Registers all the services defined in the provided configuration collection. /// /// - /// + /// The list of s + /// Only registers the first successful service created. /// True, if all configurations successfully created and registered their services. - public static bool RegisterServices(MixedRealityServiceConfiguration[] configurations) where T : IMixedRealityService + public static bool RegisterServices(MixedRealityServiceConfiguration[] configurations, bool registerFirstFound = true) where T : IMixedRealityService { bool anyFailed = false; @@ -772,11 +774,18 @@ public static bool RegisterServices(MixedRealityServiceConfiguration[] con continue; } - if (!CreateAndRegisterService(configuration)) + if (CreateAndRegisterService(configuration)) { - Debug.LogError($"Failed to start {configuration.Name}!"); - anyFailed = true; + if (registerFirstFound) + { + break; + } + + continue; } + + Debug.LogError($"Failed to start {configuration.Name}!"); + anyFailed = true; } return !anyFailed; @@ -849,28 +858,33 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< return false; } - bool canRunOnPlatform = false; + var platforms = new List(); - Debug.Assert(ActivePlatforms.Count > 0); + Debug.Assert(AvailablePlatforms.Count > 0); for (var i = 0; i < runtimePlatforms?.Count; i++) { - for (var j = 0; j < ActivePlatforms.Count; j++) + var runtimePlatform = runtimePlatforms[i].GetType(); + + if (runtimePlatform == typeof(AllPlatforms)) { - if (ActivePlatforms[j].GetType() == runtimePlatforms[i].GetType()) - { - canRunOnPlatform = true; - break; - } + platforms.Add(runtimePlatforms[i]); + break; } - if (canRunOnPlatform) + for (var j = 0; j < AvailablePlatforms.Count; j++) { - break; + var activePlatform = AvailablePlatforms[j].GetType(); + + if (activePlatform == runtimePlatform) + { + platforms.Add(runtimePlatforms[i]); + break; + } } } - if (!canRunOnPlatform) + if (platforms.Count == 0) { // We return true so we don't raise en error. // Even though we did not register the service, @@ -892,6 +906,16 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< return false; } + if (!CurrentBuildTargetPlatform.IsBuildTargetActive(platforms)) + { + // We return true so we don't raise en error. + // Even though we did not register the service, + // it's expected that this is the intended behavior + // when there isn't a valid build target active to run the service on. + + return true; + } + if (!typeof(IMixedRealityService).IsAssignableFrom(concreteType)) { Debug.LogError($"Unable to register the {concreteType.Name} service. It does not implement {typeof(IMixedRealityService)}."); From 31c2a0999d2a532e3b536425cd2940f043c367f8 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 09:23:41 -0400 Subject: [PATCH 22/73] Better inspector --- .../Profiles/MixedRealityServiceProviderProfileInspector.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs index d3ceca2e2..6e0e027ae 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs @@ -22,6 +22,7 @@ public class MixedRealityServiceProfileInspector : BaseMixedRealityProfileInspec private int currentlySelectedConfigurationOption; private SerializedProperty configurations; + private SerializedProperty onlyRegisterSinglePlatform; /// /// Gets the service constraint used to filter options listed in the @@ -35,6 +36,7 @@ protected override void OnEnable() base.OnEnable(); configurations = serializedObject.FindProperty(nameof(configurations)); + onlyRegisterSinglePlatform = serializedObject.FindProperty(nameof(onlyRegisterSinglePlatform)); Debug.Assert(configurations != null); var baseType = ThisProfile.GetType().BaseType; @@ -55,8 +57,12 @@ protected override void OnEnable() public override void OnInspectorGUI() { + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Configuration Options", EditorStyles.boldLabel); EditorGUILayout.Space(); serializedObject.Update(); + onlyRegisterSinglePlatform.boolValue = EditorGUILayout.ToggleLeft("Only register the first valid configuration.", onlyRegisterSinglePlatform.boolValue); + EditorGUILayout.Space(); configurationList.DoLayoutList(); if (configurations == null || configurations.arraySize == 0) From fde9cfe608034a4b130895f53609a87a3c4bc2cf Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 11:56:56 -0400 Subject: [PATCH 23/73] reverted single service per platform --- .../BaseMixedRealityServiceProfile.cs | 13 ------------ .../Services/MixedRealityToolkit.cs | 20 ++++++------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs index 0ea2ff5d0..6005d8055 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/BaseMixedRealityServiceProfile.cs @@ -15,19 +15,6 @@ namespace XRTK.Definitions /// public abstract class BaseMixedRealityServiceProfile : BaseMixedRealityProfile where TService : IMixedRealityService { - [SerializeField] - [Tooltip("Only registers one configuration based on the first active platform found.")] - private bool onlyRegisterSinglePlatform = true; - - /// - /// Only registers one configuration based on the first active platform found. - /// - /// - /// This doesn't prevent multiple services from being manually registered in the service locator, it only prevents the profile - /// from registering multiple services based on the platforms defined in the whole collection of . - /// - public bool OnlyRegisterSinglePlatform => onlyRegisterSinglePlatform; - [SerializeField] private MixedRealityServiceConfiguration[] configurations = new MixedRealityServiceConfiguration[0]; diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index f64f4fdef..29dbd330b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -485,7 +485,7 @@ private void InitializeServiceLocator() { if (CreateAndRegisterService(ActiveProfile.DiagnosticsSystemSystemType, ActiveProfile.DiagnosticsSystemProfile) && DiagnosticsSystem != null) { - RegisterServices(ActiveProfile.DiagnosticsSystemProfile.RegisteredServiceConfigurations, false); + RegisterServices(ActiveProfile.DiagnosticsSystemProfile.RegisteredServiceConfigurations); } else { @@ -506,7 +506,7 @@ private void InitializeServiceLocator() // Nothing break; case BaseMixedRealityExtensionServiceProfile extensionServiceProfile: - RegisterServices(extensionServiceProfile.RegisteredServiceConfigurations, extensionServiceProfile.OnlyRegisterSinglePlatform); + RegisterServices(extensionServiceProfile.RegisteredServiceConfigurations); break; default: Debug.LogError($"{configuration.Profile.name} does not derive from {nameof(BaseMixedRealityExtensionServiceProfile)}"); @@ -757,9 +757,8 @@ private void OnApplicationPause(bool pause) /// /// /// The list of s - /// Only registers the first successful service created. /// True, if all configurations successfully created and registered their services. - public static bool RegisterServices(MixedRealityServiceConfiguration[] configurations, bool registerFirstFound = true) where T : IMixedRealityService + public static bool RegisterServices(MixedRealityServiceConfiguration[] configurations) where T : IMixedRealityService { bool anyFailed = false; @@ -774,18 +773,11 @@ public static bool RegisterServices(MixedRealityServiceConfiguration[] con continue; } - if (CreateAndRegisterService(configuration)) + if (!CreateAndRegisterService(configuration)) { - if (registerFirstFound) - { - break; - } - - continue; + Debug.LogError($"Failed to start {configuration.Name}!"); + anyFailed = true; } - - Debug.LogError($"Failed to start {configuration.Name}!"); - anyFailed = true; } return !anyFailed; From f286ad67f66431fb72da1990abd968fd47e6c3b6 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 11:59:42 -0400 Subject: [PATCH 24/73] updated Icon --- .../Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta index 4c325f0cf..c5e69361e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs.meta @@ -5,7 +5,7 @@ MonoImporter: serializedVersion: 2 defaultReferences: [] executionOrder: 0 - icon: {instanceID: 0} + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} userData: assetBundleName: assetBundleVariant: From e48fda04963e6635b4418117df6d1d4e2bcba392 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 12:15:36 -0400 Subject: [PATCH 25/73] updated submodules --- Submodules/Lumin | 2 +- Submodules/WindowsMixedReality | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index 3fb5675b1..c5efa56b1 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 3fb5675b1c378399c9d5653cb9dafed94ff8fd50 +Subproject commit c5efa56b18b0611e893a4eab8b3ed2c25ceec88f diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 846c22d7f..1ab384202 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 846c22d7fcd36c6f6c45b966f5c32492868a4683 +Subproject commit 1ab38420272dc18fcc02a715f072f74f9371baca From 2dd692648ae7df44b6c5aaaf906e4c73b1ef7e18 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 12:34:00 -0400 Subject: [PATCH 26/73] reverted inspector changes --- Submodules/SDK | 2 +- .../Profiles/MixedRealityServiceProviderProfileInspector.cs | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/Submodules/SDK b/Submodules/SDK index 47037f685..6da9bdbbf 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 47037f685000b1f987766f9f7dd30dc11bd251b1 +Subproject commit 6da9bdbbfd79ccf91cb17fcf0bb4dcf68a9df710 diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs index 6e0e027ae..bc8febabd 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs @@ -22,7 +22,6 @@ public class MixedRealityServiceProfileInspector : BaseMixedRealityProfileInspec private int currentlySelectedConfigurationOption; private SerializedProperty configurations; - private SerializedProperty onlyRegisterSinglePlatform; /// /// Gets the service constraint used to filter options listed in the @@ -36,7 +35,6 @@ protected override void OnEnable() base.OnEnable(); configurations = serializedObject.FindProperty(nameof(configurations)); - onlyRegisterSinglePlatform = serializedObject.FindProperty(nameof(onlyRegisterSinglePlatform)); Debug.Assert(configurations != null); var baseType = ThisProfile.GetType().BaseType; @@ -61,7 +59,6 @@ public override void OnInspectorGUI() EditorGUILayout.LabelField("Configuration Options", EditorStyles.boldLabel); EditorGUILayout.Space(); serializedObject.Update(); - onlyRegisterSinglePlatform.boolValue = EditorGUILayout.ToggleLeft("Only register the first valid configuration.", onlyRegisterSinglePlatform.boolValue); EditorGUILayout.Space(); configurationList.DoLayoutList(); From 5afc829398b677e296779738270a94adc6e60ccd Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 12:34:50 -0400 Subject: [PATCH 27/73] fixed sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index 6da9bdbbf..d8a44d04d 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 6da9bdbbfd79ccf91cb17fcf0bb4dcf68a9df710 +Subproject commit d8a44d04d53be5534836781ec6ac70765e4802c4 From 5c6392248fae81b52b69316afc90268c99766320 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 12:53:05 -0400 Subject: [PATCH 28/73] updated submodules --- Submodules/Lumin | 2 +- Submodules/SDK | 2 +- Submodules/WindowsMixedReality | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index c5efa56b1..967370014 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit c5efa56b18b0611e893a4eab8b3ed2c25ceec88f +Subproject commit 9673700145bf095a698e3e8212558cef5cca73ff diff --git a/Submodules/SDK b/Submodules/SDK index c62720b02..7ab729cfc 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit c62720b025e98a628880fff2b8d437aecdedd579 +Subproject commit 7ab729cfcb74c15f224cb80b993ed862a90278d6 diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 1ab384202..45ae978e0 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 1ab38420272dc18fcc02a715f072f74f9371baca +Subproject commit 45ae978e0085cb4aa0959ebcff6ee8c8a4804a86 From 24aca02bb459022648ae9fb8d3f3653549825d1c Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 17:48:04 -0400 Subject: [PATCH 29/73] better dropdown menu --- .../PlatformEntryPropertyDrawer.cs | 377 +++++++++++------- .../Services/MixedRealityToolkit.cs | 16 +- 2 files changed, 248 insertions(+), 145 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs index 29e7263c0..21c2c5cde 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs @@ -2,12 +2,14 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System; +using System.Collections.Generic; using UnityEditor; using UnityEngine; using XRTK.Definitions; using XRTK.Definitions.Platforms; using XRTK.Definitions.Utilities; using XRTK.Extensions; +using XRTK.Interfaces; using XRTK.Services; namespace XRTK.Inspectors.PropertyDrawers @@ -27,6 +29,8 @@ public class PlatformEntryPropertyDrawer : PropertyDrawer private static int selectionControlId; private static int arraySize = 0; + private static GUIContent editorContent; + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { position = EditorGUI.PrefixLabel(position, RuntimePlatformContent); @@ -82,31 +86,7 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty r break; case EventType.Repaint: - switch (runtimePlatformsProperty.arraySize) - { - case 0: - TempContent.text = Nothing; - break; - case 1: - // Remove assembly name and namespace from content of popup control. - var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(0); - var classRefProperty = systemTypeProperty.FindPropertyRelative("reference"); - var classRefParts = classRefProperty.stringValue.Split(','); - var className = classRefParts[0].Trim(); - className = className.Substring(className.LastIndexOf(".", StringComparison.Ordinal) + 1); - TempContent.text = className.Replace("Platform", "").ToProperCase(); - - if (TempContent.text == string.Empty) - { - TempContent.text = Nothing; - } - - break; - default: - TempContent.text = runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count ? "Everything" : "Multiple..."; - break; - } - + TempContent.text = GetDropdownContentText(); EditorStyles.popup.Draw(position, TempContent, controlId); break; } @@ -118,179 +98,304 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty r var menu = new GenericMenu(); + var editorIsActive = IsPlatformActive(typeof(EditorPlatform)); + var isAllPlatformsActive = IsPlatformActive(typeof(AllPlatforms)); + var editorBuildTargetIsActive = IsPlatformActive(typeof(CurrentBuildTargetPlatform)); + + if (editorIsActive || editorBuildTargetIsActive) + { + Debug.Assert(editorIsActive != editorBuildTargetIsActive); + } + menu.AddItem(NothingContent, arraySize == 0, OnNothingSelected, null); - menu.AddItem(EverythingContent, arraySize == MixedRealityToolkit.AvailablePlatforms.Count, OnEverythingSelected, null); + menu.AddItem(EverythingContent, isAllPlatformsActive, OnEverythingSelected, null); + + if (!isAllPlatformsActive) + { + menu.AddItem(new GUIContent("Editor Only"), editorIsActive, () => + { + if (!TryRemovePlatformReference(SystemType.GetReference(typeof(EditorPlatform)))) + { + runtimePlatformsProperty.ClearArray(); + TryAddPlatformReference(SystemType.GetReference(typeof(EditorPlatform))); + } + }); + } + + menu.AddItem(isAllPlatformsActive ? new GUIContent("Editor") : new GUIContent("Editor Build Target"), isAllPlatformsActive || editorBuildTargetIsActive, OnEditorSelected, null); + menu.AddSeparator(""); for (var i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) { var platform = MixedRealityToolkit.AvailablePlatforms[i]; var platformType = platform.GetType(); - if (platformType == typeof(AllPlatforms)) { continue; } - menu.AddItem(new GUIContent(platformType.Name.Replace("Platform", "").ToProperCase()), IsPlatformActive(platformType), OnSelectedTypeName, platformType); + + if (platformType == typeof(AllPlatforms) || + platformType == typeof(EditorPlatform) || + platformType == typeof(CurrentBuildTargetPlatform)) + { + continue; + } + + menu.AddItem(new GUIContent(platformType.Name.Replace("Platform", "").ToProperCase()), IsPlatformActive(platformType) || isAllPlatformsActive, OnSelectedTypeName, platformType); } menu.DropDown(position); + } + + bool IsPlatformActive(Type platformType) + { + var isActive = false; - void OnNothingSelected(object _) + for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) { - runtimePlatformsProperty.ClearArray(); - runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); - EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); + var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); + var referenceProperty = systemTypeProperty.FindPropertyRelative("reference"); + var referenceType = TypeExtensions.ResolveType(referenceProperty.stringValue); + + // Clean up any broken references + if (referenceType == null) + { + Debug.LogError($"Failed to resolve {referenceProperty.stringValue}! Removing from runtime platform entry..."); + runtimePlatformsProperty.DeleteArrayElementAtIndex(i); + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + continue; + } + + if (platformType == referenceType) + { + isActive = true; + } } - void OnEverythingSelected(object _) + return isActive; + } + + string GetDropdownContentText() + { + if (runtimePlatformsProperty.arraySize == 0) { - runtimePlatformsProperty.ClearArray(); + return Nothing; + } - for (int i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) + if (runtimePlatformsProperty.arraySize == 1) + { + if (IsPlatformActive(typeof(AllPlatforms))) { - AddPlatformReference(SystemType.GetReference(MixedRealityToolkit.AvailablePlatforms[i].GetType()), true); + return "Everything"; } - runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); - EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); + // Remove assembly name and namespace from content of popup control. + var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(0); + var classRefProperty = systemTypeProperty.FindPropertyRelative("reference"); + var classRefParts = classRefProperty.stringValue.Split(','); + var className = classRefParts[0].Trim(); + className = className.Substring(className.LastIndexOf(".", StringComparison.Ordinal) + 1); + var contentText = className.Replace("Platform", "").ToProperCase(); + + if (contentText == string.Empty) + { + contentText = Nothing; + } + + return contentText; } - void OnSelectedTypeName(object typeRef) + return "Multiple..."; + } + + void OnNothingSelected(object _) + { + runtimePlatformsProperty.ClearArray(); + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); + } + + void OnEverythingSelected(object _) + { + runtimePlatformsProperty.ClearArray(); + TryAddPlatformReference(SystemType.GetReference(typeof(AllPlatforms))); + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); + } + + void OnEditorSelected(object _) + { + var isAllPlatformsActive = false; + var isCurrentBuildTargetPlatformActive = false; + + for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) { - var selectedPlatformType = typeRef as Type; - var selectedReference = SystemType.GetReference(selectedPlatformType); + var typeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); + var refProperty = typeProperty.FindPropertyRelative("reference"); + var referenceType = TypeExtensions.ResolveType(refProperty.stringValue); - if (!TryRemovePlatformReference(selectedReference)) + if (referenceType == typeof(CurrentBuildTargetPlatform)) { - if (runtimePlatformsProperty.arraySize + 2 == MixedRealityToolkit.AvailablePlatforms.Count) - { - OnEverythingSelected(null); - return; - } - - if (selectedPlatformType != null) - { - AddPlatformReference(selectedReference); - } + isCurrentBuildTargetPlatformActive = true; } - EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); + if (referenceType == typeof(AllPlatforms)) + { + isAllPlatformsActive = true; + } } - bool IsPlatformActive(Type platformType) + if (isAllPlatformsActive) { - for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) + runtimePlatformsProperty.ClearArray(); + + for (int i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) { - var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); - var referenceProperty = systemTypeProperty.FindPropertyRelative("reference"); - var referenceType = TypeExtensions.ResolveType(referenceProperty.stringValue); + var platformType = MixedRealityToolkit.AvailablePlatforms[i].GetType(); - // Clean up any broken references - if (referenceType == null) + if (platformType == typeof(AllPlatforms) || + platformType == typeof(EditorPlatform) || + platformType == typeof(CurrentBuildTargetPlatform)) { - Debug.LogError($"Failed to resolve {referenceProperty.stringValue}! Removing from runtime platform entry..."); - runtimePlatformsProperty.DeleteArrayElementAtIndex(i); - runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); continue; } - if (platformType == referenceType) - { - return true; - } + TryAddPlatformReference(SystemType.GetReference(platformType)); } - return false; + return; } - void AddPlatformReference(string classReference, bool forceAdd = false) + if (isCurrentBuildTargetPlatformActive) { - if (!forceAdd) + TryRemovePlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); + + if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 3) { - var selectedPlatformType = TypeExtensions.ResolveType(classReference); + OnEverythingSelected(null); + } + } + else + { + TryAddPlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); - for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) + foreach (var platform in MixedRealityToolkit.AvailablePlatforms) + { + if (platform is AllPlatforms || + platform is EditorPlatform || + platform is CurrentBuildTargetPlatform) { - var typeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); - var refProperty = typeProperty.FindPropertyRelative("reference"); - var referenceType = TypeExtensions.ResolveType(refProperty.stringValue); - - if (selectedPlatformType == referenceType) - { - return; - } - - if (selectedPlatformType == typeof(CurrentBuildTargetPlatform) && - referenceType == typeof(EditorPlatform) || - selectedPlatformType == typeof(EditorPlatform) && - referenceType == typeof(CurrentBuildTargetPlatform)) - { - TryRemovePlatformReference(refProperty.stringValue); - } + continue; } - if (selectedPlatformType == typeof(CurrentBuildTargetPlatform)) - { - for (int i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) - { - var activeBuildTarget = MixedRealityToolkit.AvailablePlatforms[i]; - - if (activeBuildTarget.IsBuildTargetAvailable) - { - var activePlatformType = activeBuildTarget.GetType(); - - if (activePlatformType != typeof(AllPlatforms) && - activePlatformType != typeof(EditorPlatform) && - activePlatformType != typeof(CurrentBuildTargetPlatform)) - { - AddPlatformReference(SystemType.GetReference(activePlatformType)); - } - } - } - } - else if (selectedPlatformType == typeof(EditorPlatform)) + if (platform.IsBuildTargetAvailable) { - TryRemovePlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); + TryAddPlatformReference(SystemType.GetReference(platform.GetType())); } } - var index = runtimePlatformsProperty.arraySize; - runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); - runtimePlatformsProperty.InsertArrayElementAtIndex(index); - var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(index); - var referenceProperty = systemTypeProperty.FindPropertyRelative("reference"); - referenceProperty.stringValue = classReference; - runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 2) + { + OnEverythingSelected(null); + } } + } - bool TryRemovePlatformReference(string classReference) + void OnSelectedTypeName(object typeRef) + { + var selectedPlatformType = typeRef as Type; + var selectedReference = SystemType.GetReference(selectedPlatformType); + + if (!TryRemovePlatformReference(selectedReference)) { - var selectedPlatformType = TypeExtensions.ResolveType(classReference); + if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 3) + { + OnEverythingSelected(null); + } + else + { + TryAddPlatformReference(selectedReference); + } + } - for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) + EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); + } + + bool TryAddPlatformReference(string classReference) + { + if (TryRemovePlatformReference(SystemType.GetReference(typeof(EditorPlatform)))) + { + TryAddPlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); + } + + var selectedPlatformType = TypeExtensions.ResolveType(classReference); + + for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) + { + var existingSystemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); + var existingReferenceProperty = existingSystemTypeProperty.FindPropertyRelative("reference"); + var existingPlatformType = TypeExtensions.ResolveType(existingReferenceProperty.stringValue); + + if (selectedPlatformType == existingPlatformType) + { + return false; + } + } + + var index = runtimePlatformsProperty.arraySize; + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + runtimePlatformsProperty.InsertArrayElementAtIndex(index); + var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(index); + var referenceProperty = systemTypeProperty.FindPropertyRelative("reference"); + referenceProperty.stringValue = classReference; + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + return true; + } + + bool TryRemovePlatformReference(string classReference) + { + var selectedPlatformType = TypeExtensions.ResolveType(classReference); + + if (IsPlatformActive(typeof(AllPlatforms))) + { + runtimePlatformsProperty.ClearArray(); + + for (int j = 0; j < MixedRealityToolkit.AvailablePlatforms.Count; j++) { - var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); - var referenceProperty = systemTypeProperty.FindPropertyRelative("reference"); - var referenceType = TypeExtensions.ResolveType(referenceProperty.stringValue); + var platformType = MixedRealityToolkit.AvailablePlatforms[j].GetType(); - if (selectedPlatformType == referenceType) + if (platformType != selectedPlatformType && + platformType != typeof(AllPlatforms) && + platformType != typeof(EditorPlatform)) { - bool removeEveryPlatform = selectedPlatformType != typeof(AllPlatforms) && - runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count; + TryAddPlatformReference(SystemType.GetReference(platformType)); + } + } - runtimePlatformsProperty.DeleteArrayElementAtIndex(i); + return true; + } - if (removeEveryPlatform) - { - TryRemovePlatformReference(SystemType.GetReference(typeof(AllPlatforms))); - } - else - { - runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); - } + for (int i = 0; i < runtimePlatformsProperty.arraySize; i++) + { + var systemTypeProperty = runtimePlatformsProperty.GetArrayElementAtIndex(i); + var referenceProperty = systemTypeProperty.FindPropertyRelative("reference"); + var referenceType = TypeExtensions.ResolveType(referenceProperty.stringValue); + if (selectedPlatformType == referenceType) + { + if (runtimePlatformsProperty.arraySize == 2 && + IsPlatformActive(typeof(CurrentBuildTargetPlatform)) && + selectedPlatformType != typeof(CurrentBuildTargetPlatform)) + { + runtimePlatformsProperty.ClearArray(); + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + TryAddPlatformReference(SystemType.GetReference(typeof(EditorPlatform))); return true; } - } - return false; + runtimePlatformsProperty.DeleteArrayElementAtIndex(i); + runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); + return true; + } } + + return false; } } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 29dbd330b..838214609 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -852,7 +852,7 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< var platforms = new List(); - Debug.Assert(AvailablePlatforms.Count > 0); + Debug.Assert(ActivePlatforms.Count > 0); for (var i = 0; i < runtimePlatforms?.Count; i++) { @@ -864,9 +864,9 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< break; } - for (var j = 0; j < AvailablePlatforms.Count; j++) + for (var j = 0; j < ActivePlatforms.Count; j++) { - var activePlatform = AvailablePlatforms[j].GetType(); + var activePlatform = ActivePlatforms[j].GetType(); if (activePlatform == runtimePlatform) { @@ -878,17 +878,16 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< if (platforms.Count == 0) { - // We return true so we don't raise en error. - // Even though we did not register the service, - // it's expected that this is the intended behavior - // when there isn't a valid platform to run the service on. - if (runtimePlatforms == null || runtimePlatforms.Count == 0) { Debug.LogWarning($"No runtime platforms defined for the {concreteType?.Name} service."); } + // We return true so we don't raise en error. + // Even though we did not register the service, + // it's expected that this is the intended behavior + // when there isn't a valid platform to run the service on. return true; } @@ -904,7 +903,6 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< // Even though we did not register the service, // it's expected that this is the intended behavior // when there isn't a valid build target active to run the service on. - return true; } From 465baf43388cbf4d017c7acf11f627e6f02cf5e3 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 18:03:11 -0400 Subject: [PATCH 30/73] optimized and made sure we call gui changed correctly --- .../PlatformEntryPropertyDrawer.cs | 128 ++++++++++-------- 1 file changed, 71 insertions(+), 57 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs index 21c2c5cde..fa0d13e83 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs @@ -9,7 +9,6 @@ using XRTK.Definitions.Platforms; using XRTK.Definitions.Utilities; using XRTK.Extensions; -using XRTK.Interfaces; using XRTK.Services; namespace XRTK.Inspectors.PropertyDrawers @@ -18,19 +17,31 @@ namespace XRTK.Inspectors.PropertyDrawers public class PlatformEntryPropertyDrawer : PropertyDrawer { private const string Nothing = "Nothing"; + private const string Everything = "Everything"; + private const string Platform = "Platform"; private const string TypeReferenceUpdated = "TypeReferenceUpdated"; + private static readonly GUIContent TempContent = new GUIContent(); + private static readonly GUIContent EditorContent = new GUIContent("Editor"); private static readonly GUIContent NothingContent = new GUIContent(Nothing); - private static readonly GUIContent EverythingContent = new GUIContent("Everything"); + private static readonly GUIContent EverythingContent = new GUIContent(Everything); + private static readonly GUIContent EditorOnlyContent = new GUIContent("Editor Only"); private static readonly GUIContent RuntimePlatformContent = new GUIContent("Runtime Platforms"); - private static readonly GUIContent TempContent = new GUIContent(); + private static readonly GUIContent EditorBuildTargetContent = new GUIContent("Editor Build Target"); + private static readonly int ControlHint = typeof(PlatformEntryPropertyDrawer).GetHashCode(); + private static readonly Type AllPlatformsType = typeof(AllPlatforms); + private static readonly Type EditorPlatformType = typeof(EditorPlatform); + private static readonly Type EditorBuildTargetType = typeof(CurrentBuildTargetPlatform); + + private static readonly string AllPlatformTypeReference = SystemType.GetReference(AllPlatformsType); + private static readonly string EditorPlatformTypeReference = SystemType.GetReference(EditorPlatformType); + private static readonly string EditorBuildTargetTypeReference = SystemType.GetReference(EditorBuildTargetType); + private static int selectionControlId; private static int arraySize = 0; - private static GUIContent editorContent; - public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { position = EditorGUI.PrefixLabel(position, RuntimePlatformContent); @@ -98,9 +109,9 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty r var menu = new GenericMenu(); - var editorIsActive = IsPlatformActive(typeof(EditorPlatform)); - var isAllPlatformsActive = IsPlatformActive(typeof(AllPlatforms)); - var editorBuildTargetIsActive = IsPlatformActive(typeof(CurrentBuildTargetPlatform)); + var editorIsActive = IsPlatformActive(EditorPlatformType); + var isAllPlatformsActive = IsPlatformActive(AllPlatformsType); + var editorBuildTargetIsActive = IsPlatformActive(EditorBuildTargetType); if (editorIsActive || editorBuildTargetIsActive) { @@ -112,32 +123,33 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty r if (!isAllPlatformsActive) { - menu.AddItem(new GUIContent("Editor Only"), editorIsActive, () => + menu.AddItem(EditorOnlyContent, editorIsActive, () => { - if (!TryRemovePlatformReference(SystemType.GetReference(typeof(EditorPlatform)))) + if (!TryRemovePlatformReference(EditorPlatformTypeReference)) { runtimePlatformsProperty.ClearArray(); - TryAddPlatformReference(SystemType.GetReference(typeof(EditorPlatform))); + TryAddPlatformReference(EditorPlatformTypeReference); + EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); } }); } - menu.AddItem(isAllPlatformsActive ? new GUIContent("Editor") : new GUIContent("Editor Build Target"), isAllPlatformsActive || editorBuildTargetIsActive, OnEditorSelected, null); - menu.AddSeparator(""); + menu.AddItem(isAllPlatformsActive ? EditorContent : EditorBuildTargetContent, isAllPlatformsActive || editorBuildTargetIsActive, OnEditorSelected, null); + menu.AddSeparator(string.Empty); for (var i = 0; i < MixedRealityToolkit.AvailablePlatforms.Count; i++) { var platform = MixedRealityToolkit.AvailablePlatforms[i]; var platformType = platform.GetType(); - if (platformType == typeof(AllPlatforms) || - platformType == typeof(EditorPlatform) || - platformType == typeof(CurrentBuildTargetPlatform)) + if (platformType == AllPlatformsType || + platformType == EditorPlatformType || + platformType == EditorBuildTargetType) { continue; } - menu.AddItem(new GUIContent(platformType.Name.Replace("Platform", "").ToProperCase()), IsPlatformActive(platformType) || isAllPlatformsActive, OnSelectedTypeName, platformType); + menu.AddItem(new GUIContent(platformType.Name.Replace(Platform, string.Empty).ToProperCase()), IsPlatformActive(platformType) || isAllPlatformsActive, OnSelectedTypeName, platformType); } menu.DropDown(position); @@ -180,7 +192,7 @@ string GetDropdownContentText() if (runtimePlatformsProperty.arraySize == 1) { - if (IsPlatformActive(typeof(AllPlatforms))) + if (IsPlatformActive(AllPlatformsType)) { return "Everything"; } @@ -214,7 +226,7 @@ void OnNothingSelected(object _) void OnEverythingSelected(object _) { runtimePlatformsProperty.ClearArray(); - TryAddPlatformReference(SystemType.GetReference(typeof(AllPlatforms))); + TryAddPlatformReference(AllPlatformTypeReference); runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); } @@ -230,12 +242,12 @@ void OnEditorSelected(object _) var refProperty = typeProperty.FindPropertyRelative("reference"); var referenceType = TypeExtensions.ResolveType(refProperty.stringValue); - if (referenceType == typeof(CurrentBuildTargetPlatform)) + if (referenceType == EditorBuildTargetType) { isCurrentBuildTargetPlatformActive = true; } - if (referenceType == typeof(AllPlatforms)) + if (referenceType == AllPlatformsType) { isAllPlatformsActive = true; } @@ -249,52 +261,54 @@ void OnEditorSelected(object _) { var platformType = MixedRealityToolkit.AvailablePlatforms[i].GetType(); - if (platformType == typeof(AllPlatforms) || - platformType == typeof(EditorPlatform) || - platformType == typeof(CurrentBuildTargetPlatform)) + if (platformType == AllPlatformsType || + platformType == EditorPlatformType || + platformType == EditorBuildTargetType) { continue; } TryAddPlatformReference(SystemType.GetReference(platformType)); } - - return; - } - - if (isCurrentBuildTargetPlatformActive) - { - TryRemovePlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); - - if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 3) - { - OnEverythingSelected(null); - } } else { - TryAddPlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); - - foreach (var platform in MixedRealityToolkit.AvailablePlatforms) + if (isCurrentBuildTargetPlatformActive) { - if (platform is AllPlatforms || - platform is EditorPlatform || - platform is CurrentBuildTargetPlatform) + TryRemovePlatformReference(EditorBuildTargetTypeReference); + + if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 3) { - continue; + OnEverythingSelected(null); } + } + else + { + TryAddPlatformReference(EditorBuildTargetTypeReference); - if (platform.IsBuildTargetAvailable) + foreach (var platform in MixedRealityToolkit.AvailablePlatforms) { - TryAddPlatformReference(SystemType.GetReference(platform.GetType())); + if (platform is AllPlatforms || + platform is EditorPlatform || + platform is CurrentBuildTargetPlatform) + { + continue; + } + + if (platform.IsBuildTargetAvailable) + { + TryAddPlatformReference(SystemType.GetReference(platform.GetType())); + } } - } - if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 2) - { - OnEverythingSelected(null); + if (runtimePlatformsProperty.arraySize == MixedRealityToolkit.AvailablePlatforms.Count - 2) + { + OnEverythingSelected(null); + } } } + + EditorWindow.focusedWindow.SendEvent(EditorGUIUtility.CommandEvent(TypeReferenceUpdated)); } void OnSelectedTypeName(object typeRef) @@ -319,9 +333,9 @@ void OnSelectedTypeName(object typeRef) bool TryAddPlatformReference(string classReference) { - if (TryRemovePlatformReference(SystemType.GetReference(typeof(EditorPlatform)))) + if (TryRemovePlatformReference(EditorPlatformTypeReference)) { - TryAddPlatformReference(SystemType.GetReference(typeof(CurrentBuildTargetPlatform))); + TryAddPlatformReference(EditorBuildTargetTypeReference); } var selectedPlatformType = TypeExtensions.ResolveType(classReference); @@ -352,7 +366,7 @@ bool TryRemovePlatformReference(string classReference) { var selectedPlatformType = TypeExtensions.ResolveType(classReference); - if (IsPlatformActive(typeof(AllPlatforms))) + if (IsPlatformActive(AllPlatformsType)) { runtimePlatformsProperty.ClearArray(); @@ -361,8 +375,8 @@ bool TryRemovePlatformReference(string classReference) var platformType = MixedRealityToolkit.AvailablePlatforms[j].GetType(); if (platformType != selectedPlatformType && - platformType != typeof(AllPlatforms) && - platformType != typeof(EditorPlatform)) + platformType != AllPlatformsType && + platformType != EditorPlatformType) { TryAddPlatformReference(SystemType.GetReference(platformType)); } @@ -380,12 +394,12 @@ bool TryRemovePlatformReference(string classReference) if (selectedPlatformType == referenceType) { if (runtimePlatformsProperty.arraySize == 2 && - IsPlatformActive(typeof(CurrentBuildTargetPlatform)) && - selectedPlatformType != typeof(CurrentBuildTargetPlatform)) + IsPlatformActive(EditorBuildTargetType) && + selectedPlatformType != EditorBuildTargetType) { runtimePlatformsProperty.ClearArray(); runtimePlatformsProperty.serializedObject.ApplyModifiedProperties(); - TryAddPlatformReference(SystemType.GetReference(typeof(EditorPlatform))); + TryAddPlatformReference(EditorPlatformTypeReference); return true; } From b2692b0b2fdcdca503119e91fa181dbb9b4cac89 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 18:06:52 -0400 Subject: [PATCH 31/73] updated sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index 7ab729cfc..6ba229c0b 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 7ab729cfcb74c15f224cb80b993ed862a90278d6 +Subproject commit 6ba229c0bfce8319dd49bbb7ee49005af9727abc From 7c76a46c62d010743fdae4fc3a1ebba3a0384e62 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 13 Apr 2020 18:35:49 -0400 Subject: [PATCH 32/73] reverted name change --- Submodules/Lumin | 2 +- .../com.xrtk.core/Definitions/Platforms/AllPlatforms.cs | 2 +- .../com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs | 2 +- .../com.xrtk.core/Definitions/Platforms/BasePlatform.cs | 2 +- .../Definitions/Platforms/CurrentBuildTargetPlatform.cs | 4 ++-- .../com.xrtk.core/Definitions/Platforms/EditorPlatform.cs | 2 +- .../com.xrtk.core/Definitions/Platforms/IOSPlatform.cs | 2 +- .../com.xrtk.core/Definitions/Platforms/OSXPlatform.cs | 2 +- .../Definitions/Platforms/UniversalWindowsPlatform.cs | 2 +- .../com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs | 2 +- .../Definitions/Platforms/WindowsStandalonePlatform.cs | 2 +- .../com.xrtk.core/Interfaces/IMixedRealityPlatform.cs | 4 ++-- .../Packages/com.xrtk.core/Services/MixedRealityToolkit.cs | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index 69a2e929e..d0e7b2610 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 69a2e929e9149d494ddf1e00d6e762b1aaccb620 +Subproject commit d0e7b2610b7ec8c1b601574f3c758805a228d981 diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs index df22879b9..be6ed4ee5 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AllPlatforms.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public sealed class AllPlatforms : BasePlatform { /// - public override bool IsActive => true; + public override bool IsAvailable => true; /// public override bool IsBuildTargetAvailable => true; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs index e7c6ebcaf..e71f5a35a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/AndroidPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class AndroidPlatform : BasePlatform { /// - public override bool IsActive + public override bool IsAvailable { get { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs index 68e12e62c..717fcbd77 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs @@ -13,7 +13,7 @@ namespace XRTK.Definitions.Platforms public abstract class BasePlatform : IMixedRealityPlatform { /// - public virtual bool IsActive => false; + public virtual bool IsAvailable => false; /// public virtual bool IsBuildTargetAvailable => false; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs index 3d8869d37..517fbe2bf 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs @@ -13,7 +13,7 @@ namespace XRTK.Definitions.Platforms public sealed class CurrentBuildTargetPlatform : BasePlatform { /// - public override bool IsActive => Application.isEditor; + public override bool IsAvailable => Application.isEditor; /// /// Checks to see if the current build target is available for the list of provided platform. @@ -38,7 +38,7 @@ public static bool IsBuildTargetActive(List platforms) if (platform is CurrentBuildTargetPlatform) { isEditor = true; - isEditorPlatformActive = platform.IsActive; + isEditorPlatformActive = platform.IsAvailable; } else { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs index 92cfdba95..f2b179a03 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/EditorPlatform.cs @@ -14,7 +14,7 @@ namespace XRTK.Definitions.Platforms public sealed class EditorPlatform : BasePlatform { /// - public override bool IsActive => Application.isEditor; + public override bool IsAvailable => Application.isEditor; /// public override bool IsBuildTargetAvailable => false; diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs index 65ff0bf18..f31b70768 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/IOSPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class IOSPlatform : BasePlatform { /// - public override bool IsActive + public override bool IsAvailable { get { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs index e23b1707c..d9dd30af5 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/OSXPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class OSXPlatform : BasePlatform { /// - public override bool IsActive + public override bool IsAvailable { get { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs index 686cb73cc..69afc1efb 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/UniversalWindowsPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class UniversalWindowsPlatform : BasePlatform { /// - public override bool IsActive + public override bool IsAvailable { get { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs index 23a43346c..ac2bda9d4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WebGlPlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class WebGlPlatform : BasePlatform { /// - public override bool IsActive + public override bool IsAvailable { get { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs index b21efed5e..a9c17a2a0 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/WindowsStandalonePlatform.cs @@ -9,7 +9,7 @@ namespace XRTK.Definitions.Platforms public class WindowsStandalonePlatform : BasePlatform { /// - public override bool IsActive + public override bool IsAvailable { get { diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs index f2dabb263..a29161264 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs @@ -9,9 +9,9 @@ namespace XRTK.Interfaces public interface IMixedRealityPlatform { /// - /// Is this platform currently active? + /// Is this platform currently available? /// - bool IsActive { get; } + bool IsAvailable { get; } /// /// The this platform build target available? diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 838214609..c7e794ac0 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -574,7 +574,7 @@ private static void EnsureMixedRealityRequirements() availablePlatforms.Add(platformInstance); - if (platformInstance.IsActive || + if (platformInstance.IsAvailable || platformInstance.IsBuildTargetAvailable) { activePlatforms.Add(platformInstance); From 069eca52ee80cb1ebad377de9daa5bf34b869460 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 00:32:53 -0400 Subject: [PATCH 33/73] Updated Service Locator Added IMixedRealityDataProvider.ParentService Added IMixedRealityService partent to all data provider constructors Updated IMixedRealityDataProvider.Priority to also include the parent's priority so it's ordered better in the registry Added Try prefix to all registration methods to conform to industry standard naming conventions Updated tests --- Submodules/Lumin | 2 +- Submodules/Oculus | 2 +- Submodules/WindowsMixedReality | 2 +- ...TestFixture_01_MixedRealityToolkitTests.cs | 368 +++++++++++------- .../TestFixture_03_InputSystemTests.cs | 6 +- .../Services/ITestExtensionDataProvider1.cs | 2 + .../XRTK.Tests/Services/TestDataProvider1.cs | 8 +- .../XRTK.Tests/Services/TestDataProvider2.cs | 10 +- .../Services/TestExtensionDataProvider2.cs | 32 ++ .../TestExtensionDataProvider2.cs.meta | 11 + .../Services/TestExtensionService1.cs | 5 +- .../Services/TestExtensionService2.cs | 2 +- .../Services/TestExtensionServiceProvider1.cs | 3 +- .../XRTK.Tests/Services/TestService1.cs | 28 ++ .../XRTK.Tests/Services/TestService1.cs.meta | 11 + .../Interfaces/IMixedRealityDataProvider.cs | 5 +- .../Controllers/BaseControllerDataProvider.cs | 11 +- .../Hands/BaseHandControllerDataProvider.cs | 12 +- .../Controllers/OpenVR/OpenVRDataProvider.cs | 12 +- .../BaseSimulatedControllerDataProvider.cs | 5 +- .../SimulatedHandControllerDataProvider.cs | 5 +- .../UnityInput/MouseDataProvider.cs | 11 +- .../UnityInput/UnityJoystickDataProvider.cs | 12 +- .../UnityInput/UnityTouchDataProvider.cs | 11 +- .../WebRTC/MixedRealityWebRtcDataProvider.cs | 5 +- .../BaseMixedRealitySpatialMeshObserver.cs | 12 +- ...MixedRealitySpatialObserverDataProvider.cs | 12 +- .../BaseMixedRealitySurfaceObserver.cs | 12 +- .../Speech/BaseDictationDataProvider.cs | 12 +- .../Speech/BaseSpeechDataProvider.cs | 12 +- .../Speech/WindowsDictationDataProvider.cs | 11 +- .../Speech/WindowsSpeechDataProvider.cs | 11 +- .../Services/BaseDataProvider.cs | 30 +- .../Services/BaseExtensionDataProvider.cs | 14 +- ...BaseMixedRealityDiagnosticsDataProvider.cs | 11 +- ...edRealityConsoleDiagnosticsDataProvider.cs | 12 +- ...ixedRealityFrameDiagnosticsDataProvider.cs | 12 +- ...xedRealityMemoryDiagnosticsDataProvider.cs | 12 +- .../Services/InputSystem/FocusProvider.cs | 4 + .../Services/MixedRealityToolkit.cs | 214 +++++++--- 40 files changed, 587 insertions(+), 385 deletions(-) create mode 100644 XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs create mode 100644 XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs.meta create mode 100644 XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs create mode 100644 XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs.meta diff --git a/Submodules/Lumin b/Submodules/Lumin index 108a80402..3298634cc 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 108a804024dd92fd0545db5ded5e7d9e46e9ac4f +Subproject commit 3298634cce3c506e3a5a8dd22027b0f68ca72bb5 diff --git a/Submodules/Oculus b/Submodules/Oculus index 8f9ffd2b7..2badc3f6b 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 8f9ffd2b741a3e0137bac1090257f823f107bafe +Subproject commit 2badc3f6bb620940774e3fa08dc5e0b50e6eca4d diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 2975676ab..f7e95a8ff 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 2975676abeb41faca27b3812d5780445422b4fb1 +Subproject commit f7e95a8ff99a8009d0c9bd8bfe97462fa68b4d55 diff --git a/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs b/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs index dc53b4e72..430f83614 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs @@ -63,53 +63,80 @@ public void Test_03_CreateMixedRealityToolkit() #endregion Service Locator Tests - #region IMixedRealityDataprovider Tests + #region IMixedRealityService Tests [Test] - public void Test_04_01_RegisterMixedRealityDataProvider() + public void Test_04_01_RegisterMixedRealityServiceAndDataProvider() { TestUtilities.InitializeMixedRealityToolkitScene(false); + var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; + var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; + // Register - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); + MixedRealityToolkit.TryRegisterService(new TestService1()); // Retrieve - var extensionService1 = MixedRealityToolkit.GetService(); + var testService1 = MixedRealityToolkit.GetService(); + + // Register + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); + + // Retrieve + var dataProvider1 = MixedRealityToolkit.GetService(); // Tests - Assert.IsEmpty(MixedRealityToolkit.ActiveSystems); - Assert.AreEqual(1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsNotNull(testService1); + Assert.IsNotNull(dataProvider1); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 2 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); // Tests - Assert.IsNotNull(extensionService1); + Assert.IsNotNull(dataProvider1); } [Test] - public void Test_04_02_01_UnregisterMixedRealityDataProviderByType() + public void Test_04_02_01_UnregisterMixedRealityServiceAndDataProviderByType() { TestUtilities.InitializeMixedRealityToolkitScene(false); + var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; + var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; + // Register - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); + MixedRealityToolkit.TryRegisterService(new TestService1()); // Retrieve - var extensionService1 = MixedRealityToolkit.GetService(); + var testService1 = MixedRealityToolkit.GetService(); + + // Register + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); + + // Retrieve + var dataProvider1 = MixedRealityToolkit.GetService(); // Tests - Assert.IsNotNull(extensionService1); - Assert.IsEmpty(MixedRealityToolkit.ActiveSystems); - Assert.AreEqual(1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsNotNull(testService1); + Assert.IsNotNull(dataProvider1); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 2 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - var success = MixedRealityToolkit.UnregisterServicesOfType(); + // Unregister + var successService = MixedRealityToolkit.TryUnregisterServicesOfType(); + var successDataProvider = MixedRealityToolkit.TryUnregisterServicesOfType(); // Validate non-existent service - var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + var isDataProviderRegistered = MixedRealityToolkit.IsServiceRegistered(); // Tests - Assert.IsTrue(success); + Assert.IsTrue(successService); + Assert.IsTrue(successDataProvider); Assert.IsFalse(isServiceRegistered); - Assert.IsEmpty(MixedRealityToolkit.ActiveSystems); - Assert.IsEmpty(MixedRealityToolkit.RegisteredMixedRealityServices); + Assert.IsFalse(isDataProviderRegistered); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); } @@ -118,33 +145,45 @@ public void Test_04_02_02_UnregisterMixedRealityDataProviderByTypeAndName() { TestUtilities.InitializeMixedRealityToolkitScene(false); + var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; + var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; + // Register - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); + MixedRealityToolkit.TryRegisterService(new TestService1()); // Retrieve - var extensionService1 = MixedRealityToolkit.GetService(); + var testService1 = MixedRealityToolkit.GetService(); // Tests - Assert.IsNotNull(extensionService1); - Assert.IsEmpty(MixedRealityToolkit.ActiveSystems); - Assert.AreEqual(1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsNotNull(testService1); - // Retrieve service - var dataProvider = MixedRealityToolkit.GetService(); + // Register + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); - // Validate - Assert.IsNotNull(dataProvider); + // Retrieve + var dataProvider1 = MixedRealityToolkit.GetService(); - var success = MixedRealityToolkit.UnregisterService(dataProvider.Name); + // Tests + Assert.IsNotNull(dataProvider1); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 2 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); + + // Unregister + var successService = MixedRealityToolkit.TryUnregisterService(testService1.Name); + var successDataProvider = MixedRealityToolkit.TryUnregisterService(dataProvider1.Name); // Validate non-existent service - var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + var isDataProviderRegistered = MixedRealityToolkit.IsServiceRegistered(); // Tests - Assert.IsTrue(success); + Assert.IsTrue(successService); + Assert.IsTrue(successDataProvider); Assert.IsFalse(isServiceRegistered); - Assert.IsEmpty(MixedRealityToolkit.ActiveSystems); - Assert.IsEmpty(MixedRealityToolkit.RegisteredMixedRealityServices); + Assert.IsFalse(isDataProviderRegistered); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); } @@ -153,18 +192,26 @@ public void Test_04_03_RegisterMixedRealityDataProviders() { TestUtilities.InitializeMixedRealityToolkitScene(false); - // Add test ExtensionService - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); - MixedRealityToolkit.RegisterService(new TestDataProvider2("Test Data Provider 2")); + var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; + var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; - // Retrieve all registered IMixedRealityExtensionServices + // Register + MixedRealityToolkit.TryRegisterService(new TestService1()); + + // Retrieve + var testService1 = MixedRealityToolkit.GetService(); + + // Register + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); + MixedRealityToolkit.TryRegisterService(new TestDataProvider2(testService1)); + + // Retrieve all registered IMixedRealityDataProviders var extensionServices = MixedRealityToolkit.GetActiveServices(); // Tests - Assert.IsNotNull(MixedRealityToolkit.Instance.ActiveProfile); - Assert.IsEmpty(MixedRealityToolkit.ActiveSystems); - Assert.AreEqual(2, MixedRealityToolkit.RegisteredMixedRealityServices.Count); - Assert.AreEqual(extensionServices.Count, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsNotEmpty(extensionServices); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 3 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); } [Test] @@ -175,18 +222,26 @@ public void Test_04_04_UnregisterMixedRealityDataProvidersByType() var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; - // Add test ExtensionService - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); - MixedRealityToolkit.RegisterService(new TestDataProvider2("Test Data Provider 2")); + // Register + MixedRealityToolkit.TryRegisterService(new TestService1()); - // Retrieve all registered IMixedRealityExtensionServices - var extensionServices = MixedRealityToolkit.GetActiveServices(); + // Retrieve + var testService1 = MixedRealityToolkit.GetService(); + + // Validate + Assert.IsNotNull(testService1); + + // Register + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); + MixedRealityToolkit.TryRegisterService(new TestDataProvider2(testService1)); + + // Retrieve all data providers + var dataProviders = MixedRealityToolkit.GetActiveServices(); // Tests - Assert.IsNotNull(MixedRealityToolkit.Instance.ActiveProfile); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + 2, MixedRealityToolkit.RegisteredMixedRealityServices.Count); - Assert.AreEqual(extensionServices.Count, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsNotEmpty(dataProviders); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 3 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); // Retrieve services var extensionService1 = MixedRealityToolkit.GetService(); @@ -196,20 +251,26 @@ public void Test_04_04_UnregisterMixedRealityDataProvidersByType() Assert.IsNotNull(extensionService1); Assert.IsNotNull(extensionService2); - var success1 = MixedRealityToolkit.UnregisterServicesOfType(); - var success2 = MixedRealityToolkit.UnregisterServicesOfType(); + // Unregister + var successService = MixedRealityToolkit.TryUnregisterServicesOfType(); + var successDataProvider1 = MixedRealityToolkit.TryUnregisterServicesOfType(); + var successDataProvider2 = MixedRealityToolkit.TryUnregisterServicesOfType(); // Validate non-existent service + var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); var isService1Registered = MixedRealityToolkit.IsServiceRegistered(); var isService2Registered = MixedRealityToolkit.IsServiceRegistered(); // Tests - Assert.IsTrue(success1); - Assert.IsTrue(success2); + Assert.IsTrue(successService); + Assert.IsTrue(successDataProvider1); + Assert.IsTrue(successDataProvider2); + Assert.IsFalse(isServiceRegistered); Assert.IsFalse(isService1Registered); Assert.IsFalse(isService2Registered); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider2).Name} service."); } @@ -219,10 +280,15 @@ public void Test_04_05_MixedRealityDataProviderDoesNotExist() { TestUtilities.InitializeMixedRealityToolkitScene(false); + // Register + MixedRealityToolkit.TryRegisterService(new TestService1()); + + var testService1 = MixedRealityToolkit.GetService(); + // Add test data provider 1 - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); - // Validate non-existent data provider + // Validate non-existent data provider 2 var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); // Tests @@ -231,17 +297,22 @@ public void Test_04_05_MixedRealityDataProviderDoesNotExist() } [Test] - public void Test_04_06_MixedRealityDataProviderDoesNotReturn() + public void Test_04_06_MixedRealityDataProviderNameDoesNotReturn() { TestUtilities.InitializeMixedRealityToolkitScene(false); + // Register + MixedRealityToolkit.TryRegisterService(new TestService1()); + + var testService1 = MixedRealityToolkit.GetService(); + const string serviceName = "Test Data Provider"; // Add test test data provider - MixedRealityToolkit.RegisterService(new TestDataProvider1(serviceName)); + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1, serviceName)); - // Validate non-existent ExtensionService - MixedRealityToolkit.GetService(serviceName); + // Validate non-existent data provider + MixedRealityToolkit.GetService(serviceName); // Tests LogAssert.Expect(LogType.Error, $"Unable to find {serviceName} service."); @@ -252,16 +323,19 @@ public void Test_04_07_ValidateMixedRealityDataProviderName() { TestUtilities.InitializeMixedRealityToolkitScene(false); - var testName1 = "Test04-07-1"; - var testName2 = "Test04-07-2"; + MixedRealityToolkit.TryRegisterService(new TestService1()); + var testService1 = MixedRealityToolkit.GetService(); + + const string testName1 = "Test04-07-1"; + const string testName2 = "Test04-07-2"; // Add test data providers - MixedRealityToolkit.RegisterService(new TestDataProvider1(testName1)); - MixedRealityToolkit.RegisterService(new TestDataProvider2(testName2)); + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1, testName1)); + MixedRealityToolkit.TryRegisterService(new TestDataProvider2(testService1, testName2)); - // Retrieve - var dataProvider1 = (TestDataProvider1)MixedRealityToolkit.GetService(testName1); - var dataProvider2 = (TestDataProvider2)MixedRealityToolkit.GetService(testName2); + // Retrieve + var dataProvider1 = MixedRealityToolkit.GetService(testName1); + var dataProvider2 = MixedRealityToolkit.GetService(testName2); // Tests Assert.AreEqual(testName1, dataProvider1.Name); @@ -274,40 +348,25 @@ public void Test_04_08_GetMixedRealityDataProviderCollectionByInterface() TestUtilities.InitializeMixedRealityToolkitScene(false); // Add test data provider 1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test04-08-1")); + MixedRealityToolkit.TryRegisterService(new TestService1("Test04-08-1")); + var testService1 = MixedRealityToolkit.GetService(); + + var failService = new TestDataProvider1(testService1, "Test04-08-2.1"); // Add test data provider 2 - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test04-08-2.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test04-08-2.2")); + MixedRealityToolkit.TryRegisterService(failService); + LogAssert.Expect(LogType.Error, $"{failService.Name} does not implement {typeof(ITestDataProvider2).Name}"); + + MixedRealityToolkit.TryRegisterService(new TestDataProvider2(testService1, "Test04-08-2.2")); // Retrieve all ITestDataProvider2 services var test2DataProviderServices = MixedRealityToolkit.GetActiveServices(); // Tests - Assert.AreEqual(2, test2DataProviderServices.Count); + Assert.IsTrue(1 == test2DataProviderServices.Count); } - [Test] - public void Test_04_09_GetAllMixedRealityDataProviders() - { - TestUtilities.InitializeMixedRealityToolkitScene(false); - - // Add test 1 services - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test16-1.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test16-1.2")); - - // Add test 2 services - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test16-2.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test16-2.2")); - - // Retrieve all extension services. - var allExtensionServices = MixedRealityToolkit.GetActiveServices(); - - // Tests - Assert.AreEqual(4, allExtensionServices.Count); - } - - #endregion IMixedRealityDataprovider Tests + #endregion IMixedRealityService Tests #region IMixedRealityExtensionService Tests @@ -319,15 +378,15 @@ public void Test_05_01_RegisterMixedRealityExtensionService() var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; // Register ITestExtensionService1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test ExtensionService 1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test ExtensionService 1")); // Retrieve ITestExtensionService1 var extensionService1 = MixedRealityToolkit.GetService(); // Tests Assert.IsNotNull(extensionService1); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + 1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 1 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); } [Test] @@ -338,17 +397,17 @@ public void Test_05_02_01_UnregisterMixedRealityExtensionServiceByType() var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; // Register ITestExtensionService1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test ExtensionService 1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test ExtensionService 1")); // Retrieve ITestExtensionService1 var extensionService1 = MixedRealityToolkit.GetService(); // Tests Assert.IsNotNull(extensionService1); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + 1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 1 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - var success = MixedRealityToolkit.UnregisterServicesOfType(); + var success = MixedRealityToolkit.TryUnregisterServicesOfType(); // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); @@ -356,8 +415,8 @@ public void Test_05_02_01_UnregisterMixedRealityExtensionServiceByType() // Tests Assert.IsTrue(success); Assert.IsFalse(isServiceRegistered); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); } @@ -369,17 +428,17 @@ public void Test_05_02_02_UnregisterMixedRealityExtensionServiceByTypeAndName() var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; // Register ITestExtensionService1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test ExtensionService 1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test ExtensionService 1")); // Retrieve ITestExtensionService1 var extensionService1 = MixedRealityToolkit.GetService(); // Tests Assert.IsNotNull(extensionService1); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + 1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 1 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - var success = MixedRealityToolkit.UnregisterService(extensionService1.Name); + var success = MixedRealityToolkit.TryUnregisterService(extensionService1.Name); // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); @@ -387,8 +446,8 @@ public void Test_05_02_02_UnregisterMixedRealityExtensionServiceByTypeAndName() // Tests Assert.IsTrue(success); Assert.IsFalse(isServiceRegistered); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); } @@ -400,16 +459,16 @@ public void Test_05_03_RegisterMixedRealityExtensionServices() var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; // Add test ExtensionService - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test ExtensionService 1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test ExtensionService 2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test ExtensionService 1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test ExtensionService 2")); // Retrieve all registered IMixedRealityExtensionServices var extensionServices = MixedRealityToolkit.GetActiveServices(); // Tests Assert.IsNotNull(MixedRealityToolkit.Instance.ActiveProfile); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + extensionServices.Count, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + extensionServices.Count == MixedRealityToolkit.RegisteredMixedRealityServices.Count); } [Test] @@ -420,16 +479,16 @@ public void Test_05_04_UnregisterMixedRealityExtensionServicesByType() var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; // Add test ExtensionService - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test ExtensionService 1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test ExtensionService 2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test ExtensionService 1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test ExtensionService 2")); // Retrieve all registered IMixedRealityExtensionServices var extensionServices = MixedRealityToolkit.GetActiveServices(); // Tests Assert.IsNotNull(MixedRealityToolkit.Instance.ActiveProfile); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + extensionServices.Count, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + extensionServices.Count == MixedRealityToolkit.RegisteredMixedRealityServices.Count); // Retrieve services var extensionService1 = MixedRealityToolkit.GetService(); @@ -439,7 +498,7 @@ public void Test_05_04_UnregisterMixedRealityExtensionServicesByType() Assert.IsNotNull(extensionService1); Assert.IsNotNull(extensionService2); - var success = MixedRealityToolkit.UnregisterServicesOfType(); + var success = MixedRealityToolkit.TryUnregisterServicesOfType(); // Validate non-existent service var isService1Registered = MixedRealityToolkit.IsServiceRegistered(); @@ -449,8 +508,8 @@ public void Test_05_04_UnregisterMixedRealityExtensionServicesByType() Assert.IsTrue(success); Assert.IsFalse(isService1Registered); Assert.IsFalse(isService2Registered); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService2).Name} service."); } @@ -461,7 +520,7 @@ public void Test_05_05_MixedRealityExtensionService2DoesNotExist() TestUtilities.InitializeMixedRealityToolkitScene(false); // Add test ExtensionService 1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test ExtensionService 1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test ExtensionService 1")); // Validate non-existent ExtensionService var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); @@ -479,7 +538,7 @@ public void Test_05_06_MixedRealityExtensionServiceDoesNotReturnByName() const string serviceName = "Test ExtensionService 1"; // Add test ITestExtensionService1 - MixedRealityToolkit.RegisterService(new TestExtensionService1(serviceName)); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1(serviceName)); // Validate non-existent ExtensionService MixedRealityToolkit.GetService(serviceName); @@ -494,10 +553,10 @@ public void Test_05_07_ValidateExtensionServiceName() TestUtilities.InitializeMixedRealityToolkitScene(false); // Add test ExtensionService 1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test14-1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test14-1")); // Add test ExtensionService 2 - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test14-2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test14-2")); // Retrieve Test ExtensionService 2-2 var extensionService2 = (TestExtensionService2)MixedRealityToolkit.GetService("Test14-2"); @@ -518,11 +577,11 @@ public void Test_05_08_GetMixedRealityExtensionServiceCollectionByInterface() TestUtilities.InitializeMixedRealityToolkitScene(false); // Add test ExtensionService 1 - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test15-1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test15-1")); // Add test ExtensionServices 2 - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test15-2.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test15-2.2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test15-2.1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test15-2.2")); // Retrieve ExtensionService 2 var extensionServices = MixedRealityToolkit.GetActiveServices(); @@ -537,23 +596,23 @@ public void Test_05_09_GetAllMixedRealityExtensionServices() TestUtilities.InitializeMixedRealityToolkitScene(false); // Add test 1 services - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test16-1.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test16-1.2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test16-1.1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1("Test16-1.2")); // Add test 2 services - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test16-2.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test16-2.2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test16-2.1")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2("Test16-2.2")); // Retrieve all extension services. var allExtensionServices = MixedRealityToolkit.GetActiveServices(); // Tests - Assert.AreEqual(4, allExtensionServices.Count); + Assert.IsTrue(allExtensionServices.Count == 4); } #endregion IMixedRealityExtensionService Tests - #region TryServiceRetrieval Tests + #region Service Retrieval Tests [Test] public void Test_06_01_TryRegisterMixedRealityDataProvider() @@ -562,15 +621,18 @@ public void Test_06_01_TryRegisterMixedRealityDataProvider() var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; + MixedRealityToolkit.TryRegisterService(new TestService1()); + var testService1 = MixedRealityToolkit.GetService(); + // Register - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); // Retrieve var result = MixedRealityToolkit.TryGetService(out var extensionService1); // Tests - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + 1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 2 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); // Tests Assert.IsTrue(result); @@ -591,8 +653,8 @@ public void Test_06_02_TryRegisterMixedRealityDataProviderFail() LogAssert.Expect(LogType.Error, $"Unable to find {nameof(ITestDataProvider1)} service."); Assert.IsFalse(result); Assert.IsNull(extensionService1); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); } [Test] @@ -602,8 +664,11 @@ public void Test_06_03_TryRegisterMixedRealityDataProviderByName() var activeSystemCount = MixedRealityToolkit.ActiveSystems.Count; var activeServiceCount = MixedRealityToolkit.RegisteredMixedRealityServices.Count; + MixedRealityToolkit.TryRegisterService(new TestService1()); + var testService1 = MixedRealityToolkit.GetService(); + // Register - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test Data Provider 1")); + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); // Retrieve var resultTrue = MixedRealityToolkit.TryGetService("Test Data Provider 1", out var extensionService1); @@ -612,8 +677,8 @@ public void Test_06_03_TryRegisterMixedRealityDataProviderByName() // Tests LogAssert.Expect(LogType.Error, "Unable to find Test Data Provider 2 service."); - Assert.AreEqual(activeSystemCount, MixedRealityToolkit.ActiveSystems.Count); - Assert.AreEqual(activeServiceCount + 1, MixedRealityToolkit.RegisteredMixedRealityServices.Count); + Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); + Assert.IsTrue(activeServiceCount + 2 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); // Tests Assert.IsTrue(resultTrue, "Test Data Provider 1 found"); @@ -622,7 +687,7 @@ public void Test_06_03_TryRegisterMixedRealityDataProviderByName() Assert.IsNull(extensionService2, "Test Data Provider 2 service not found"); } - #endregion TryServiceRetrieval Tests + #endregion Service Retrieval Tests Tests #region Service Enable/Disable Tests @@ -631,13 +696,16 @@ public void Test_07_01_EnableServicesByType() { TestUtilities.InitializeMixedRealityToolkitScene(false); + MixedRealityToolkit.TryRegisterService(new TestService1()); + var testService1 = MixedRealityToolkit.GetService(); + // Add test 1 services - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test07-01-1.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test07-01-1.2")); + MixedRealityToolkit.TryRegisterService(new TestDataProvider1(testService1)); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1()); // Add test 2 services - MixedRealityToolkit.RegisterService(new TestDataProvider2("Test07-01-2.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test07-01-2.2")); + MixedRealityToolkit.TryRegisterService(new TestDataProvider2(testService1)); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2()); // Enable all test services MixedRealityToolkit.EnableAllServicesOfType(); @@ -658,12 +726,14 @@ public void Test_07_02_DisableServicesByType() TestUtilities.InitializeMixedRealityToolkitScene(false); // Add test 1 services - MixedRealityToolkit.RegisterService(new TestDataProvider1("Test07-01-1.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService1("Test07-01-1.2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService1()); + var testService1 = MixedRealityToolkit.GetService(); + MixedRealityToolkit.TryRegisterService(new TestExtensionDataProvider1(testService1)); // Add test 2 services - MixedRealityToolkit.RegisterService(new TestDataProvider2("Test07-01-2.1")); - MixedRealityToolkit.RegisterService(new TestExtensionService2("Test07-01-2.2")); + MixedRealityToolkit.TryRegisterService(new TestExtensionService2()); + var testService2 = MixedRealityToolkit.GetService(); + MixedRealityToolkit.TryRegisterService(new TestExtensionDataProvider2(testService2)); // Enable all test services MixedRealityToolkit.EnableAllServicesOfType(); diff --git a/XRTK-Core/Assets/XRTK.Tests/InputSystem/TestFixture_03_InputSystemTests.cs b/XRTK-Core/Assets/XRTK.Tests/InputSystem/TestFixture_03_InputSystemTests.cs index 19ebfeb0e..c805f9bbf 100644 --- a/XRTK-Core/Assets/XRTK.Tests/InputSystem/TestFixture_03_InputSystemTests.cs +++ b/XRTK-Core/Assets/XRTK.Tests/InputSystem/TestFixture_03_InputSystemTests.cs @@ -21,7 +21,7 @@ public void Test01_CreateMixedRealityInputSystem() // Add Input System MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile = InputSystemTestUtilities.SetupInputSystemProfile(); - MixedRealityToolkit.RegisterService(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile)); + MixedRealityToolkit.TryRegisterService(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile)); // Tests Assert.IsNotEmpty(MixedRealityToolkit.ActiveSystems); @@ -36,7 +36,7 @@ public void Test02_TestGetMixedRealityInputSystem() // Add Input System MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile = InputSystemTestUtilities.SetupInputSystemProfile(); - MixedRealityToolkit.RegisterService(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile)); + MixedRealityToolkit.TryRegisterService(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile)); // Retrieve Input System var inputSystem = MixedRealityToolkit.GetService(); @@ -67,7 +67,7 @@ public void Test04_TestMixedRealityInputSystemExists() // Add Input System MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile = InputSystemTestUtilities.SetupInputSystemProfile(); - MixedRealityToolkit.RegisterService(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile)); + MixedRealityToolkit.TryRegisterService(new MixedRealityInputSystem(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile)); // Check for Input System var inputSystemExists = MixedRealityToolkit.IsServiceRegistered(); diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/ITestExtensionDataProvider1.cs b/XRTK-Core/Assets/XRTK.Tests/Services/ITestExtensionDataProvider1.cs index aa35601b6..19ab8814a 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/ITestExtensionDataProvider1.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/ITestExtensionDataProvider1.cs @@ -6,4 +6,6 @@ namespace XRTK.Tests.Services { interface ITestExtensionDataProvider1 : IMixedRealityExtensionDataProvider, ITestService { } + + interface ITestExtensionDataProvider2 : IMixedRealityExtensionDataProvider, ITestService { } } \ No newline at end of file diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider1.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider1.cs index 82e85221b..28ed0399b 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider1.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider1.cs @@ -1,13 +1,17 @@ // Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using XRTK.Definitions; using XRTK.Services; namespace XRTK.Tests.Services { - internal class TestDataProvider1 : BaseServiceWithConstructor, ITestDataProvider1 + internal class TestDataProvider1 : BaseDataProvider, ITestDataProvider1 { - public TestDataProvider1(string name, uint priority = 10) : base(name, priority) { } + public TestDataProvider1(ITestService parentService, string name = "Test Data Provider 1", uint priority = 1, BaseMixedRealityProfile profile = null) + : base(name, priority, profile, parentService) + { + } public bool IsEnabled { get; private set; } diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider2.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider2.cs index 247562882..64b7f7527 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider2.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestDataProvider2.cs @@ -1,13 +1,17 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using XRTK.Definitions; using XRTK.Services; namespace XRTK.Tests.Services { - internal class TestDataProvider2 : BaseServiceWithConstructor, ITestDataProvider2 + internal class TestDataProvider2 : BaseDataProvider, ITestDataProvider2 { - public TestDataProvider2(string name, uint priority = 10) : base(name, priority) { } + public TestDataProvider2(ITestService parentService, string name = "Test Data Provider 2", uint priority = 2, BaseMixedRealityProfile profile = null) + : base(name, priority, profile, parentService) + { + } public bool IsEnabled { get; private set; } diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs new file mode 100644 index 000000000..2405c4076 --- /dev/null +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs @@ -0,0 +1,32 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions; +using XRTK.Services; + +namespace XRTK.Tests.Services +{ + internal class TestExtensionDataProvider2 : BaseExtensionDataProvider, ITestExtensionDataProvider2 + { + public TestExtensionDataProvider2(ITestExtensionService2 parentService, string name = "Test Extension Data Provider 2", uint priority = 10, BaseMixedRealityExtensionDataProviderProfile profile = null) + : base(name, priority, profile, parentService) + { + } + + public bool IsEnabled { get; private set; } + + public override void Enable() + { + base.Enable(); + + IsEnabled = true; + } + + public override void Disable() + { + base.Disable(); + + IsEnabled = false; + } + } +} \ No newline at end of file diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs.meta b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs.meta new file mode 100644 index 000000000..8ef26fc26 --- /dev/null +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionDataProvider2.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2edb57ee9d4c4574bbf98866db51458e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService1.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService1.cs index d7fd3b2eb..78bf6afc3 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService1.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService1.cs @@ -8,7 +8,10 @@ namespace XRTK.Tests.Services { internal class TestExtensionService1 : BaseExtensionService, ITestExtensionService1 { - public TestExtensionService1(string name, uint priority = 10, BaseMixedRealityExtensionServiceProfile profile = null) : base(name, priority, profile) { } + public TestExtensionService1(string name = "Test Extension Service 1", uint priority = 10, BaseMixedRealityExtensionServiceProfile profile = null) + : base(name, priority, profile) + { + } public bool IsEnabled { get; private set; } diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService2.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService2.cs index 70c88b2c5..689fbae8a 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService2.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionService2.cs @@ -7,7 +7,7 @@ namespace XRTK.Tests.Services { internal class TestExtensionService2 : BaseExtensionService, ITestExtensionService2 { - public TestExtensionService2(string name) : base(name, 5, null) { } + public TestExtensionService2(string name = "Test Extension Service 2", uint priority = 10) : base(name, priority, null) { } public bool IsEnabled { get; private set; } diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionServiceProvider1.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionServiceProvider1.cs index d6f62f8b9..98d24a651 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionServiceProvider1.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestExtensionServiceProvider1.cs @@ -8,7 +8,8 @@ namespace XRTK.Tests.Services { internal class TestExtensionDataProvider1 : BaseExtensionDataProvider, ITestExtensionDataProvider1 { - public TestExtensionDataProvider1(string name, uint priority = 10, BaseMixedRealityExtensionDataProviderProfile profile = null) : base(name, priority, profile) + public TestExtensionDataProvider1(ITestExtensionService1 parentService, string name = "Test Extension Data Provider 1", uint priority = 10, BaseMixedRealityExtensionDataProviderProfile profile = null) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs b/XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs new file mode 100644 index 000000000..69a9634d9 --- /dev/null +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs @@ -0,0 +1,28 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Services; + +namespace XRTK.Tests.Services +{ + internal class TestService1 : BaseServiceWithConstructor, ITestService + { + public TestService1(string name = "Test Service 1", uint priority = 0) + : base(name, priority) + { + } + + /// + public bool IsEnabled { get; private set; } + + public override void Enable() + { + IsEnabled = true; + } + + public override void Disable() + { + IsEnabled = false; + } + } +} \ No newline at end of file diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs.meta b/XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs.meta new file mode 100644 index 000000000..306587988 --- /dev/null +++ b/XRTK-Core/Assets/XRTK.Tests/Services/TestService1.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 177746c63f1e44589f7b1cd4d48f7252 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityDataProvider.cs index 3e85695de..6b7ca86d6 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityDataProvider.cs @@ -8,6 +8,9 @@ namespace XRTK.Interfaces /// public interface IMixedRealityDataProvider : IMixedRealityService { - // Reserved for future use. + /// + /// The this data provider is registered with. + /// + IMixedRealityService ParentService { get; } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs index 1c41b1e99..bb430f792 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs @@ -17,14 +17,9 @@ namespace XRTK.Providers.Controllers /// public abstract class BaseControllerDataProvider : BaseDataProvider, IMixedRealityControllerDataProvider { - /// - /// Creates a new instance of the data provider. - /// - /// Name of the data provider as assigned in the configuration profile. - /// Data provider priority controls the order in the service registry. - /// Controller data provider profile assigned to the provider instance in the configuration inspector. - public BaseControllerDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority) + /// + protected BaseControllerDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Hands/BaseHandControllerDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Hands/BaseHandControllerDataProvider.cs index f013b1ea8..9c0911b46 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Hands/BaseHandControllerDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Hands/BaseHandControllerDataProvider.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using XRTK.Definitions.Controllers.Hands; +using XRTK.Interfaces.InputSystem; using XRTK.Interfaces.Providers.Controllers.Hands; using XRTK.Services; @@ -12,14 +13,9 @@ namespace XRTK.Providers.Controllers.Hands /// public abstract class BaseHandControllerDataProvider : BaseControllerDataProvider, IMixedRealityHandControllerDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public BaseHandControllerDataProvider(string name, uint priority, BaseHandControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + protected BaseHandControllerDataProvider(string name, uint priority, BaseHandControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { var globalSettingsProfile = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.HandTrackingProfile; diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/OpenVR/OpenVRDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/OpenVR/OpenVRDataProvider.cs index b29067cc2..e99bf9793 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/OpenVR/OpenVRDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/OpenVR/OpenVRDataProvider.cs @@ -6,6 +6,7 @@ using XRTK.Definitions.Controllers; using XRTK.Definitions.Devices; using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; using XRTK.Providers.Controllers.UnityInput; using XRTK.Services; @@ -16,14 +17,9 @@ namespace XRTK.Providers.Controllers.OpenVR /// public class OpenVRDataProvider : UnityJoystickDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public OpenVRDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + public OpenVRDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/BaseSimulatedControllerDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/BaseSimulatedControllerDataProvider.cs index 9f6bad12c..70a49c164 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/BaseSimulatedControllerDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/BaseSimulatedControllerDataProvider.cs @@ -5,6 +5,7 @@ using UnityEngine; using XRTK.Definitions.Controllers.Simulation; using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; using XRTK.Interfaces.Providers.Controllers; using XRTK.Services; using XRTK.Utilities; @@ -17,8 +18,8 @@ namespace XRTK.Providers.Controllers.Simulation public abstract class BaseSimulatedControllerDataProvider : BaseControllerDataProvider, ISimulatedControllerDataProvider { /// - public BaseSimulatedControllerDataProvider(string name, uint priority, SimulatedControllerDataProviderProfile profile) - : base(name, priority, profile) + protected BaseSimulatedControllerDataProvider(string name, uint priority, SimulatedControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { if (profile == null) { diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandControllerDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandControllerDataProvider.cs index 7c7e38516..ae8251187 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandControllerDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandControllerDataProvider.cs @@ -6,6 +6,7 @@ using XRTK.Definitions.Controllers.Simulation.Hands; using XRTK.Definitions.Devices; using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; using XRTK.Interfaces.Providers.Controllers.Hands; using XRTK.Services; @@ -17,8 +18,8 @@ namespace XRTK.Providers.Controllers.Simulation.Hands public class SimulatedHandControllerDataProvider : BaseSimulatedControllerDataProvider, ISimulatedHandControllerDataProvider { /// - public SimulatedHandControllerDataProvider(string name, uint priority, SimulatedHandControllerDataProviderProfile profile) - : base(name, priority, profile) + public SimulatedHandControllerDataProvider(string name, uint priority, SimulatedHandControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { var poseDefinitions = profile.PoseDefinitions; handPoseDefinitions = new List(poseDefinitions.Count); diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/MouseDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/MouseDataProvider.cs index 0c4bf27d0..7e058e832 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/MouseDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/MouseDataProvider.cs @@ -16,14 +16,9 @@ namespace XRTK.Providers.Controllers.UnityInput /// public class MouseDataProvider : BaseControllerDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public MouseDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + public MouseDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs index 402b1a12a..64b57867d 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs @@ -7,6 +7,7 @@ using XRTK.Definitions.Controllers; using XRTK.Definitions.Devices; using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; using XRTK.Services; namespace XRTK.Providers.Controllers.UnityInput @@ -16,14 +17,9 @@ namespace XRTK.Providers.Controllers.UnityInput /// public class UnityJoystickDataProvider : BaseControllerDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public UnityJoystickDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + public UnityJoystickDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs index f7cef075d..c009d7ef2 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs @@ -17,14 +17,9 @@ namespace XRTK.Providers.Controllers.UnityInput /// public class UnityTouchDataProvider : BaseControllerDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public UnityTouchDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + public UnityTouchDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs index 7e2c37374..5e015ca6e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs @@ -6,6 +6,7 @@ using System.Collections.Generic; using System.Text; using UnityEngine; +using XRTK.Definitions; using XRTK.Extensions; using XRTK.Interfaces.NetworkingSystem; using XRTK.Services; @@ -34,8 +35,8 @@ public Frame(string messageType, byte[] message) } /// - public MixedRealityWebRtcDataProvider(string name, uint priority) - : base(name, priority) + public MixedRealityWebRtcDataProvider(string name, uint priority, BaseMixedRealityProfile profile, IMixedRealityNetworkingSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs index 6e1d00d7b..37003a99f 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs @@ -8,6 +8,7 @@ using XRTK.Definitions.SpatialAwarenessSystem; using XRTK.Extensions; using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Interfaces.SpatialAwarenessSystem; using XRTK.Services; using XRTK.Utilities.Async; @@ -18,14 +19,9 @@ namespace XRTK.Providers.SpatialObservers /// public abstract class BaseMixedRealitySpatialMeshObserver : BaseMixedRealitySpatialObserverDataProvider, IMixedRealitySpatialMeshObserver { - /// - /// Constructor. - /// - /// - /// - /// - protected BaseMixedRealitySpatialMeshObserver(string name, uint priority, BaseMixedRealitySpatialMeshObserverProfile profile) - : base(name, priority, profile) + /// + protected BaseMixedRealitySpatialMeshObserver(string name, uint priority, BaseMixedRealitySpatialMeshObserverProfile profile, IMixedRealitySpatialAwarenessSystem parentService) + : base(name, priority, profile, parentService) { MeshPhysicsLayerOverride = profile.MeshPhysicsLayerOverride; MeshLevelOfDetail = profile.MeshLevelOfDetail; diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs index df3c300d3..95c95c600 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs @@ -6,6 +6,7 @@ using UnityEngine; using XRTK.Definitions.Utilities; using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Interfaces.SpatialAwarenessSystem; using XRTK.Services; namespace XRTK.Providers.SpatialObservers @@ -15,14 +16,9 @@ namespace XRTK.Providers.SpatialObservers /// public abstract class BaseMixedRealitySpatialObserverDataProvider : BaseDataProvider, IMixedRealitySpatialObserverDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - protected BaseMixedRealitySpatialObserverDataProvider(string name, uint priority, BaseMixedRealitySpatialObserverProfile profile) - : base(name, priority) + /// + protected BaseMixedRealitySpatialObserverDataProvider(string name, uint priority, BaseMixedRealitySpatialObserverProfile profile, IMixedRealitySpatialAwarenessSystem parentService) + : base(name, priority, profile, parentService) { if (profile == null) { diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs index f394f40c8..eb32548f8 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using UnityEngine; using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Interfaces.SpatialAwarenessSystem; namespace XRTK.Providers.SpatialObservers { @@ -12,14 +13,9 @@ namespace XRTK.Providers.SpatialObservers /// public abstract class BaseMixedRealitySurfaceObserver : BaseMixedRealitySpatialObserverDataProvider, IMixedRealitySurfaceObserver { - /// - /// Constructor. - /// - /// - /// - /// - protected BaseMixedRealitySurfaceObserver(string name, uint priority, BaseMixedRealitySurfaceObserverProfile profile) - : base(name, priority, profile) + /// + protected BaseMixedRealitySurfaceObserver(string name, uint priority, BaseMixedRealitySurfaceObserverProfile profile, IMixedRealitySpatialAwarenessSystem parentService) + : base(name, priority, profile, parentService) { SurfacePhysicsLayerOverride = profile.SurfacePhysicsLayerOverride; SurfaceFindingMinimumArea = profile.SurfaceFindingMinimumArea; diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseDictationDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseDictationDataProvider.cs index 274ddc381..55fa30315 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseDictationDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseDictationDataProvider.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using UnityEngine; using XRTK.Definitions.Controllers; +using XRTK.Interfaces.InputSystem; using XRTK.Interfaces.Providers.Speech; using XRTK.Services; @@ -14,14 +15,9 @@ namespace XRTK.Providers.Speech /// public abstract class BaseDictationDataProvider : BaseDataProvider, IMixedRealityDictationDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - protected BaseDictationDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority) + /// + protected BaseDictationDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseSpeechDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseSpeechDataProvider.cs index 0a80bf143..b76a3eb83 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseSpeechDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/BaseSpeechDataProvider.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using XRTK.Definitions.Controllers; +using XRTK.Interfaces.InputSystem; using XRTK.Interfaces.Providers.Speech; using XRTK.Services; @@ -12,14 +13,9 @@ namespace XRTK.Providers.Speech /// public abstract class BaseSpeechDataProvider : BaseDataProvider, IMixedRealitySpeechDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - protected BaseSpeechDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority) + /// + protected BaseSpeechDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsDictationDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsDictationDataProvider.cs index fe0bcbcd1..78d33f042 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsDictationDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsDictationDataProvider.cs @@ -20,14 +20,9 @@ namespace XRTK.Providers.Speech /// public class WindowsDictationDataProvider : BaseDictationDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public WindowsDictationDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + public WindowsDictationDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { #if UNITY_STANDALONE_WIN || UNITY_WSA || UNITY_EDITOR_WIN if (dictationRecognizer == null) diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsSpeechDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsSpeechDataProvider.cs index 17c3c2509..f91670277 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsSpeechDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Speech/WindowsSpeechDataProvider.cs @@ -20,14 +20,9 @@ namespace XRTK.Providers.Speech /// public class WindowsSpeechDataProvider : BaseSpeechDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public WindowsSpeechDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) - : base(name, priority, profile) + /// + public WindowsSpeechDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile, IMixedRealityInputSystem parentService) + : base(name, priority, profile, parentService) { if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile == null) { diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/BaseDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/BaseDataProvider.cs index 10a3942ec..1b3571169 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/BaseDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/BaseDataProvider.cs @@ -1,6 +1,8 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) XRTK. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using System; +using XRTK.Definitions; using XRTK.Interfaces; namespace XRTK.Services @@ -8,16 +10,30 @@ namespace XRTK.Services /// /// The base data provider implements and provides default properties for all data providers. /// - /// - /// Empty, but reserved for future use, in case additional properties or methods are assigned. - /// public abstract class BaseDataProvider : BaseServiceWithConstructor, IMixedRealityDataProvider { /// /// Constructor. /// - /// - /// - public BaseDataProvider(string name, uint priority) : base(name, priority) { } + /// The name of the service. + /// The priority of the service. + /// The optional for the data provider. + /// The that this is assigned to. + protected BaseDataProvider(string name, uint priority, BaseMixedRealityProfile profile, IMixedRealityService parentService) : base(name, priority) + { + ParentService = parentService ?? throw new ArgumentNullException($"{nameof(parentService)} cannot be null"); + } + + /// + public IMixedRealityService ParentService { get; } + + private uint priority; + + /// + public override uint Priority + { + get => priority + ParentService.Priority; + protected set => priority = value; + } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/BaseExtensionDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/BaseExtensionDataProvider.cs index b4c88eb24..362aa04e9 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/BaseExtensionDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/BaseExtensionDataProvider.cs @@ -12,14 +12,12 @@ namespace XRTK.Services /// /// Empty, but reserved for future use, in case additional properties or methods are assigned. /// - public abstract class BaseExtensionDataProvider : BaseServiceWithConstructor, IMixedRealityExtensionDataProvider + public abstract class BaseExtensionDataProvider : BaseDataProvider, IMixedRealityExtensionDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public BaseExtensionDataProvider(string name, uint priority, BaseMixedRealityExtensionDataProviderProfile profile) : base(name, priority) { } + /// + protected BaseExtensionDataProvider(string name, uint priority, BaseMixedRealityExtensionDataProviderProfile profile, IMixedRealityService parentService) + : base(name, priority, profile, parentService) + { + } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/BaseMixedRealityDiagnosticsDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/BaseMixedRealityDiagnosticsDataProvider.cs index 5a6b650e5..7d3201ad4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/BaseMixedRealityDiagnosticsDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/BaseMixedRealityDiagnosticsDataProvider.cs @@ -12,14 +12,9 @@ namespace XRTK.Services.DiagnosticsSystem /// public abstract class BaseMixedRealityDiagnosticsDataProvider : BaseDataProvider, IMixedRealityDiagnosticsDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - protected BaseMixedRealityDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile) - : base(name, priority) + /// + protected BaseMixedRealityDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile, IMixedRealityDiagnosticsSystem parentService) + : base(name, priority, profile, parentService) { } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityConsoleDiagnosticsDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityConsoleDiagnosticsDataProvider.cs index 175c3a3cd..49925c5a9 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityConsoleDiagnosticsDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityConsoleDiagnosticsDataProvider.cs @@ -3,6 +3,7 @@ using UnityEngine; using XRTK.Definitions; +using XRTK.Interfaces.DiagnosticsSystem; namespace XRTK.Services.DiagnosticsSystem { @@ -12,14 +13,9 @@ namespace XRTK.Services.DiagnosticsSystem /// public class MixedRealityConsoleDiagnosticsDataProvider : BaseMixedRealityDiagnosticsDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public MixedRealityConsoleDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile) - : base(name, priority, profile) + /// + public MixedRealityConsoleDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile, IMixedRealityDiagnosticsSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityFrameDiagnosticsDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityFrameDiagnosticsDataProvider.cs index ac1167297..c4e53f688 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityFrameDiagnosticsDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityFrameDiagnosticsDataProvider.cs @@ -4,6 +4,7 @@ using System.Diagnostics; using UnityEngine; using XRTK.Definitions; +using XRTK.Interfaces.DiagnosticsSystem; namespace XRTK.Services.DiagnosticsSystem { @@ -13,14 +14,9 @@ namespace XRTK.Services.DiagnosticsSystem /// public class MixedRealityFrameDiagnosticsDataProvider : BaseMixedRealityDiagnosticsDataProvider { - /// - /// Constructor. - /// - /// - /// - /// - public MixedRealityFrameDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile) - : base(name, priority, profile) + /// + public MixedRealityFrameDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile, IMixedRealityDiagnosticsSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityMemoryDiagnosticsDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityMemoryDiagnosticsDataProvider.cs index dfcd00020..d68f518be 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityMemoryDiagnosticsDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityMemoryDiagnosticsDataProvider.cs @@ -4,6 +4,7 @@ using UnityEngine.Profiling; using XRTK.Definitions; using XRTK.Definitions.DiagnosticsSystem; +using XRTK.Interfaces.DiagnosticsSystem; namespace XRTK.Services.DiagnosticsSystem { @@ -12,14 +13,9 @@ namespace XRTK.Services.DiagnosticsSystem /// public class MixedRealityMemoryDiagnosticsDataProvider : BaseMixedRealityDiagnosticsDataProvider { - /// - /// Constructor. - /// - /// The name of the data provider as assigned in configuration. - /// The priority of the data provider. - /// - public MixedRealityMemoryDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile) - : base(name, priority, profile) + /// + public MixedRealityMemoryDiagnosticsDataProvider(string name, uint priority, BaseMixedRealityProfile profile, IMixedRealityDiagnosticsSystem parentService) + : base(name, priority, profile, parentService) { } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/InputSystem/FocusProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Services/InputSystem/FocusProvider.cs index 0047f5edb..2503b1e45 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/InputSystem/FocusProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/InputSystem/FocusProvider.cs @@ -8,6 +8,7 @@ using XRTK.Definitions.Physics; using XRTK.EventDatum.Input; using XRTK.Extensions; +using XRTK.Interfaces; using XRTK.Interfaces.InputSystem; using XRTK.Utilities; using XRTK.Utilities.Physics; @@ -1171,5 +1172,8 @@ public void OnSourceLost(SourceStateEventData eventData) } #endregion ISourceState Implementation + + /// + public IMixedRealityService ParentService => MixedRealityToolkit.InputSystem; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 6849ead2a..49cc00a36 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -386,7 +386,7 @@ private void InitializeServiceLocator() #region Services Registration if (ActiveProfile.IsCameraSystemEnabled && - (!CreateAndRegisterService(ActiveProfile.CameraSystemType, ActiveProfile.CameraProfile) || + (!TryCreateAndRegisterService(ActiveProfile.CameraSystemType, out _, ActiveProfile.CameraProfile) || CameraSystem == null)) { Debug.LogError("Failed to start the Camera System!"); @@ -399,13 +399,13 @@ private void InitializeServiceLocator() Utilities.Editor.InputMappingAxisUtility.CheckUnityInputManagerMappings(Definitions.Devices.ControllerMappingLibrary.UnityInputManagerAxes); #endif - if (CreateAndRegisterService(ActiveProfile.InputSystemType, ActiveProfile.InputSystemProfile) && InputSystem != null) + if (TryCreateAndRegisterService(ActiveProfile.InputSystemType, out var service, ActiveProfile.InputSystemProfile) && InputSystem != null) { - if (CreateAndRegisterService(ActiveProfile.InputSystemProfile.FocusProviderType)) + if (TryCreateAndRegisterService(ActiveProfile.InputSystemProfile.FocusProviderType, out _)) { if (ActiveProfile.InputSystemProfile.InputDataProvidersProfile != null) { - RegisterServices(ActiveProfile.InputSystemProfile.InputDataProvidersProfile.RegisteredServiceConfigurations); + TryRegisterDataProviderConfigurations(ActiveProfile.InputSystemProfile.InputDataProvidersProfile.RegisteredServiceConfigurations, service); } } else @@ -428,7 +428,7 @@ private void InitializeServiceLocator() if (ActiveProfile.IsBoundarySystemEnabled) { - if (!CreateAndRegisterService(ActiveProfile.BoundarySystemSystemType, ActiveProfile.BoundaryVisualizationProfile) || BoundarySystem == null) + if (!TryCreateAndRegisterService(ActiveProfile.BoundarySystemSystemType, out _, ActiveProfile.BoundaryVisualizationProfile) || BoundarySystem == null) { Debug.LogError("Failed to start the Boundary System!"); } @@ -441,9 +441,9 @@ private void InitializeServiceLocator() LayerExtensions.SetupLayer(31, Definitions.SpatialAwarenessSystem.MixedRealitySpatialAwarenessSystemProfile.SpatialAwarenessMeshesLayerName); LayerExtensions.SetupLayer(30, Definitions.SpatialAwarenessSystem.MixedRealitySpatialAwarenessSystemProfile.SpatialAwarenessSurfacesLayerName); #endif - if (CreateAndRegisterService(ActiveProfile.SpatialAwarenessSystemSystemType, ActiveProfile.SpatialAwarenessProfile) && SpatialAwarenessSystem != null) + if (TryCreateAndRegisterService(ActiveProfile.SpatialAwarenessSystemSystemType, out var service, ActiveProfile.SpatialAwarenessProfile) && SpatialAwarenessSystem != null) { - RegisterServices(ActiveProfile.SpatialAwarenessProfile.RegisteredServiceConfigurations); + TryRegisterDataProviderConfigurations(ActiveProfile.SpatialAwarenessProfile.RegisteredServiceConfigurations, service); } else { @@ -463,7 +463,7 @@ private void InitializeServiceLocator() // Note: The Teleport system doesn't have a profile, but might in the future. var dummyProfile = ScriptableObject.CreateInstance(); - if (!CreateAndRegisterService(ActiveProfile.TeleportSystemSystemType, dummyProfile) || TeleportSystem == null) + if (!TryCreateAndRegisterService(ActiveProfile.TeleportSystemSystemType, out _, dummyProfile) || TeleportSystem == null) { Debug.LogError("Failed to start the Teleport System!"); } @@ -471,9 +471,9 @@ private void InitializeServiceLocator() if (ActiveProfile.IsNetworkingSystemEnabled) { - if (CreateAndRegisterService(ActiveProfile.NetworkingSystemSystemType, ActiveProfile.NetworkingSystemProfile) && NetworkingSystem != null) + if (TryCreateAndRegisterService(ActiveProfile.NetworkingSystemSystemType, out var service, ActiveProfile.NetworkingSystemProfile) && NetworkingSystem != null) { - RegisterServices(ActiveProfile.NetworkingSystemProfile.RegisteredServiceConfigurations); + TryRegisterDataProviderConfigurations(ActiveProfile.NetworkingSystemProfile.RegisteredServiceConfigurations, service); } else { @@ -483,9 +483,9 @@ private void InitializeServiceLocator() if (ActiveProfile.IsDiagnosticsSystemEnabled) { - if (CreateAndRegisterService(ActiveProfile.DiagnosticsSystemSystemType, ActiveProfile.DiagnosticsSystemProfile) && DiagnosticsSystem != null) + if (TryCreateAndRegisterService(ActiveProfile.DiagnosticsSystemSystemType, out var service, ActiveProfile.DiagnosticsSystemProfile) && DiagnosticsSystem != null) { - RegisterServices(ActiveProfile.DiagnosticsSystemProfile.RegisteredServiceConfigurations); + TryRegisterDataProviderConfigurations(ActiveProfile.DiagnosticsSystemProfile.RegisteredServiceConfigurations, service); } else { @@ -498,7 +498,7 @@ private void InitializeServiceLocator() { foreach (var configuration in ActiveProfile.RegisteredServiceProvidersProfile.RegisteredServiceConfigurations) { - if (CreateAndRegisterService(configuration)) + if (TryCreateAndRegisterService(configuration, out var service)) { switch (configuration.Profile) { @@ -506,7 +506,7 @@ private void InitializeServiceLocator() // Nothing break; case BaseMixedRealityExtensionServiceProfile extensionServiceProfile: - RegisterServices(extensionServiceProfile.RegisteredServiceConfigurations); + TryRegisterDataProviderConfigurations(extensionServiceProfile.RegisteredServiceConfigurations, service); break; default: Debug.LogError($"{configuration.Profile.name} does not derive from {nameof(BaseMixedRealityExtensionServiceProfile)}"); @@ -529,7 +529,7 @@ private void InitializeServiceLocator() foreach (var system in orderedCoreSystems) { - RegisterService(system.Key, system.Value); + TryRegisterServiceInternal(system.Key, system.Value); } var orderedServices = registeredMixedRealityServices.OrderBy(service => service.Item2.Priority).ToArray(); @@ -537,7 +537,7 @@ private void InitializeServiceLocator() foreach (var (interfaceType, mixedRealityService) in orderedServices) { - RegisterService(interfaceType, mixedRealityService); + TryRegisterServiceInternal(interfaceType, mixedRealityService); } InitializeAllServices(); @@ -752,12 +752,12 @@ private void OnApplicationPause(bool pause) #region Registration /// - /// Registers all the services defined in the provided configuration collection. + /// Registers all the s defined in the provided configuration collection. /// - /// - /// + /// The interface type for the to be registered. + /// The list of s. /// True, if all configurations successfully created and registered their services. - public static bool RegisterServices(MixedRealityServiceConfiguration[] configurations) where T : IMixedRealityService + public static bool TryRegisterServiceConfigurations(MixedRealityServiceConfiguration[] configurations) where T : IMixedRealityService { bool anyFailed = false; @@ -772,64 +772,114 @@ public static bool RegisterServices(MixedRealityServiceConfiguration[] con continue; } - if (!CreateAndRegisterService(configuration)) + if (TryCreateAndRegisterService(configuration, out var serviceInstance)) { - Debug.LogError($"Failed to start {configuration.Name}!"); - anyFailed = true; + if (configuration.Profile is BaseMixedRealityServiceProfile profile) + { + TryRegisterDataProviderConfigurations(profile.RegisteredServiceConfigurations, serviceInstance); + } + + continue; } + + Debug.LogError($"Failed to start {configuration.Name}!"); + anyFailed = true; } return !anyFailed; } /// - /// Add a service instance to the Mixed Reality Toolkit active service registry. + /// Registers all the s defined in the provided configuration collection. /// - /// - /// - /// True, if the service was successfully registered. - public static bool RegisterService(IMixedRealityService serviceInstance) where T : IMixedRealityService + /// The interface type for the to be registered. + /// The list of s. + /// The that the will be assigned to. + /// True, if all configurations successfully created and registered their data providers. + public static bool TryRegisterDataProviderConfigurations(MixedRealityServiceConfiguration[] configurations, IMixedRealityService serviceParent) where T : IMixedRealityDataProvider { - return RegisterServiceInternal(typeof(T), serviceInstance); + bool anyFailed = false; + + for (var i = 0; i < configurations?.Length; i++) + { + var configuration = configurations[i]; + + if (configuration.InstancedType.Type == null) + { + anyFailed = true; + Debug.LogWarning($"Could not load the {configuration.Name} configuration's {nameof(configuration.InstancedType)}."); + continue; + } + + if (!TryCreateAndRegisterDataProvider(configuration, serviceParent)) + { + Debug.LogError($"Failed to start {configuration.Name}!"); + anyFailed = true; + } + } + + return !anyFailed; } /// /// Add a service instance to the Mixed Reality Toolkit active service registry. /// - /// The interface type for the system to be registered. E.G. InputSystem, BoundarySystem - /// The Instance of the service class to register + /// The interface type for the to be registered. + /// Instance of the to register. /// True, if the service was successfully registered. - private static bool RegisterService(Type interfaceType, IMixedRealityService serviceInstance) + public static bool TryRegisterService(IMixedRealityService serviceInstance) where T : IMixedRealityService { - return RegisterServiceInternal(interfaceType, serviceInstance); + return TryRegisterServiceInternal(typeof(T), serviceInstance); } /// /// Creates a new instance of a service and registers it to the Mixed Reality Toolkit service registry for the specified platform. /// - /// - /// + /// The interface type for the to be registered. + /// The to use to create and register the service. + /// If successful, then the new instance will be passed back out. /// True, if the service was successfully created and registered. - public static bool CreateAndRegisterService(IMixedRealityServiceConfiguration configuration) where T : IMixedRealityService + public static bool TryCreateAndRegisterService(IMixedRealityServiceConfiguration configuration, out IMixedRealityService service) where T : IMixedRealityService { - return CreateAndRegisterService( + return TryCreateAndRegisterService( configuration.InstancedType, configuration.RuntimePlatforms, + out service, configuration.Name, configuration.Priority, configuration.Profile); } + /// + /// Creates a new instance of a data provider and registers it to the Mixed Reality Toolkit service registry for the specified platform. + /// + /// The interface type for the to be registered. + /// The to use to create and register the service. + /// The that the will be assigned to. + /// True, if the service was successfully created and registered. + public static bool TryCreateAndRegisterDataProvider(IMixedRealityServiceConfiguration configuration, IMixedRealityService serviceParent) where T : IMixedRealityDataProvider + { + return TryCreateAndRegisterService( + configuration.InstancedType, + configuration.RuntimePlatforms, + out _, + configuration.Name, + configuration.Priority, + configuration.Profile, + serviceParent); + } + /// /// Creates a new instance of a service and registers it to the Mixed Reality Toolkit service registry for the specified platform. /// - /// The interface type for the system to be registered. - /// The concrete type to instantiate. + /// The interface type for the to be registered. + /// The concrete class type to instantiate. + /// If successful, then the new instance will be passed back out. /// Optional arguments used when instantiating the concrete type. /// True, if the service was successfully created and registered. - public static bool CreateAndRegisterService(Type concreteType, params object[] args) where T : IMixedRealityService + public static bool TryCreateAndRegisterService(Type concreteType, out IMixedRealityService service, params object[] args) where T : IMixedRealityService { - return CreateAndRegisterService(concreteType, AllPlatforms, args); + return TryCreateAndRegisterService(concreteType, AllPlatforms, out service, args); } private static readonly IMixedRealityPlatform[] AllPlatforms = { new AllPlatforms() }; @@ -837,13 +887,16 @@ public static bool CreateAndRegisterService(Type concreteType, params object[ /// /// Creates a new instance of a service and registers it to the Mixed Reality Toolkit service registry for the specified platform. /// - /// The interface type for the system to be registered. - /// The concrete type to instantiate. + /// The interface type for the to be registered. + /// The concrete class type to instantiate. /// The runtime platform to check against when registering. + /// If successful, then the new instance will be passed back out. /// Optional arguments used when instantiating the concrete type. /// True, if the service was successfully created and registered. - public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList runtimePlatforms, params object[] args) where T : IMixedRealityService + public static bool TryCreateAndRegisterService(Type concreteType, IReadOnlyList runtimePlatforms, out IMixedRealityService serviceInstance, params object[] args) where T : IMixedRealityService { + serviceInstance = null; + if (IsApplicationQuitting) { return false; @@ -898,8 +951,6 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< return false; } - IMixedRealityService serviceInstance; - try { serviceInstance = Activator.CreateInstance(concreteType, args) as IMixedRealityService; @@ -921,16 +972,16 @@ public static bool CreateAndRegisterService(Type concreteType, IReadOnlyList< return false; } - return RegisterServiceInternal(typeof(T), serviceInstance); + return TryRegisterServiceInternal(typeof(T), serviceInstance); } /// /// Internal service registration. /// - /// The interface type for the system to be registered. - /// Instance of the service. + /// The interface type for the to be registered. + /// Instance of the to register. /// True if registration is successful, false otherwise. - private static bool RegisterServiceInternal(Type interfaceType, IMixedRealityService serviceInstance) + private static bool TryRegisterServiceInternal(Type interfaceType, IMixedRealityService serviceInstance) { if (serviceInstance == null) { @@ -938,6 +989,18 @@ private static bool RegisterServiceInternal(Type interfaceType, IMixedRealitySer return false; } + if (!interfaceType.IsInstanceOfType(serviceInstance)) + { + Debug.LogError($"{serviceInstance.Name} does not implement {interfaceType.Name}"); + return false; + } + + if (string.IsNullOrWhiteSpace(serviceInstance.Name)) + { + Debug.LogError($"{serviceInstance.GetType().Name} doesn't have a valid name!"); + return false; + } + if (!CanGetService(interfaceType, serviceInstance.Name)) { return false; } if (GetServiceByNameInternal(interfaceType, serviceInstance.Name, out var preExistingService)) @@ -979,18 +1042,27 @@ private static bool RegisterServiceInternal(Type interfaceType, IMixedRealitySer /// /// Remove all services from the Mixed Reality Toolkit active service registry for a given type /// - public static bool UnregisterServicesOfType() where T : IMixedRealityService + public static bool TryUnregisterServicesOfType() where T : IMixedRealityService + { + return TryUnregisterServiceInternal(typeof(T), string.Empty); + } + + /// + /// Removes a specific service with the provided name. + /// + /// The instance of the to remove. + public static bool TryUnregisterService(T serviceInstance) where T : IMixedRealityService { - return UnregisterServiceInternal(typeof(T), string.Empty); + return TryUnregisterServiceInternal(typeof(T), serviceInstance.Name); } /// /// Removes a specific service with the provided name. /// /// The name of the service to be removed. (Only for runtime services) - public static bool UnregisterService(string serviceName) where T : IMixedRealityService + public static bool TryUnregisterService(string serviceName) where T : IMixedRealityService { - return UnregisterServiceInternal(typeof(T), serviceName); + return TryUnregisterServiceInternal(typeof(T), serviceName); } /// @@ -999,7 +1071,7 @@ public static bool UnregisterService(string serviceName) where T : IMixedReal /// /// The interface type for the system to be removed. E.G. InputSystem, BoundarySystem /// The name of the service to be removed. (Only for runtime services) - private static bool UnregisterServiceInternal(Type interfaceType, string serviceName) + private static bool TryUnregisterServiceInternal(Type interfaceType, string serviceName) { if (interfaceType == null) { @@ -1009,7 +1081,16 @@ private static bool UnregisterServiceInternal(Type interfaceType, string service if (string.IsNullOrEmpty(serviceName)) { - return GetActiveServices(interfaceType).Aggregate(true, (current, service) => current & UnregisterServiceInternal(interfaceType, service.Name)); + bool result = true; + + var activeServices = GetActiveServices(interfaceType); + + for (var i = 0; i < activeServices.Count; i++) + { + result &= TryUnregisterServiceInternal(interfaceType, activeServices[i].Name); + } + + return result; } if (GetServiceByNameInternal(interfaceType, serviceName, out var serviceInstance)) @@ -1031,7 +1112,18 @@ private static bool UnregisterServiceInternal(Type interfaceType, string service return true; } - Tuple registryInstance = registeredMixedRealityServices.FirstOrDefault(service => service.Item2.Name == serviceName); + Tuple registryInstance = null; + + for (var i = 0; i < registeredMixedRealityServices.Count; i++) + { + var service = registeredMixedRealityServices[i]; + + if (service.Item2.Name == serviceName) + { + registryInstance = service; + break; + } + } if (registeredMixedRealityServices.Contains(registryInstance)) { @@ -1595,7 +1687,7 @@ public static T GetService(string serviceName, bool showLogs = true) where T } /// - /// Generic function used to retrieve a service from the Mixed Reality Toolkit active service registry + /// Generic function used to retrieve a service from the Mixed Reality Toolkit active service registry. /// /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem. /// *Note type should be the Interface of the system to be retrieved and not the class itself @@ -1751,12 +1843,6 @@ private static bool CheckServiceMatch(Type interfaceType, string serviceName, Ty return false; } - /// - /// Checks if the system is ready to get a service. - /// - /// - /// - /// private static bool CanGetService(Type interfaceType, string serviceName) { if (IsApplicationQuitting) From 399085010f4baa348924ba14c1424bced240a19a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 11:19:34 -0400 Subject: [PATCH 34/73] updated sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index d1c78420f..5bc06f091 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit d1c78420f6b3a29900981bf55b0efff081d4ea61 +Subproject commit 5bc06f091590a8db7f1b86626034306a8c9adbf7 From e46a0c98ca61d3bee687711ab7c6601e48a699be Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 11:42:31 -0400 Subject: [PATCH 35/73] updated usage for TryRegisterServiceConfigurations --- .../Services/MixedRealityToolkit.cs | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 09f842fc7..2ec0da03b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -496,28 +496,7 @@ private void InitializeServiceLocator() if (ActiveProfile.RegisteredServiceProvidersProfile != null && ActiveProfile.RegisteredServiceProvidersProfile.RegisteredServiceConfigurations != null) { - foreach (var configuration in ActiveProfile.RegisteredServiceProvidersProfile.RegisteredServiceConfigurations) - { - if (TryCreateAndRegisterService(configuration, out var service)) - { - switch (configuration.Profile) - { - case null: - // Nothing - break; - case BaseMixedRealityExtensionServiceProfile extensionServiceProfile: - TryRegisterDataProviderConfigurations(extensionServiceProfile.RegisteredServiceConfigurations, service); - break; - default: - Debug.LogError($"{configuration.Profile.name} does not derive from {nameof(BaseMixedRealityExtensionServiceProfile)}"); - break; - } - } - else - { - Debug.LogError($"Failed to register {configuration.Name} extension service!"); - } - } + TryRegisterServiceConfigurations(ActiveProfile.RegisteredServiceProvidersProfile.RegisteredServiceConfigurations); } #endregion Service Registration From 1d31e783fffe9283b0d87dc6253ef592b67a5ad7 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 11:45:18 -0400 Subject: [PATCH 36/73] removed unused reference --- .../Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs index fa0d13e83..b0ecb5982 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/PropertyDrawers/PlatformEntryPropertyDrawer.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System; -using System.Collections.Generic; using UnityEditor; using UnityEngine; using XRTK.Definitions; From 4d0655dbbb2be5a8d5feac459b0eb1351615bcd3 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 12:45:18 -0400 Subject: [PATCH 37/73] Updated TryUnregisterService to also unregister any data providers it's a parent of Updated Unit Test to reflect changes --- ...TestFixture_01_MixedRealityToolkitTests.cs | 56 +++++++------- .../XRTK.Tests/Services/ITestDataProvider2.cs | 2 +- .../Services/MixedRealityToolkit.cs | 74 +++++++++++++------ 3 files changed, 81 insertions(+), 51 deletions(-) diff --git a/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs b/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs index 430f83614..0a0e42aa4 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Core/TestFixture_01_MixedRealityToolkitTests.cs @@ -123,7 +123,10 @@ public void Test_04_02_01_UnregisterMixedRealityServiceAndDataProviderByType() // Unregister var successService = MixedRealityToolkit.TryUnregisterServicesOfType(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); + var successDataProvider = MixedRealityToolkit.TryUnregisterServicesOfType(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); @@ -131,13 +134,11 @@ public void Test_04_02_01_UnregisterMixedRealityServiceAndDataProviderByType() // Tests Assert.IsTrue(successService); - Assert.IsTrue(successDataProvider); + Assert.IsFalse(successDataProvider); Assert.IsFalse(isServiceRegistered); Assert.IsFalse(isDataProviderRegistered); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); } [Test] @@ -170,7 +171,9 @@ public void Test_04_02_02_UnregisterMixedRealityDataProviderByTypeAndName() // Unregister var successService = MixedRealityToolkit.TryUnregisterService(testService1.Name); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); var successDataProvider = MixedRealityToolkit.TryUnregisterService(dataProvider1.Name); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); @@ -178,13 +181,11 @@ public void Test_04_02_02_UnregisterMixedRealityDataProviderByTypeAndName() // Tests Assert.IsTrue(successService); - Assert.IsTrue(successDataProvider); + Assert.IsFalse(successDataProvider); Assert.IsFalse(isServiceRegistered); Assert.IsFalse(isDataProviderRegistered); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); } [Test] @@ -239,7 +240,7 @@ public void Test_04_04_UnregisterMixedRealityDataProvidersByType() var dataProviders = MixedRealityToolkit.GetActiveServices(); // Tests - Assert.IsNotEmpty(dataProviders); + Assert.IsTrue(dataProviders.Count == 2); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount + 3 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); @@ -256,23 +257,25 @@ public void Test_04_04_UnregisterMixedRealityDataProvidersByType() var successDataProvider1 = MixedRealityToolkit.TryUnregisterServicesOfType(); var successDataProvider2 = MixedRealityToolkit.TryUnregisterServicesOfType(); + // Tests + Assert.IsTrue(successService); + Assert.IsFalse(successDataProvider1); + Assert.IsFalse(successDataProvider2); + // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); var isService1Registered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); var isService2Registered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider2).Name} service."); // Tests - Assert.IsTrue(successService); - Assert.IsTrue(successDataProvider1); - Assert.IsTrue(successDataProvider2); Assert.IsFalse(isServiceRegistered); Assert.IsFalse(isService1Registered); Assert.IsFalse(isService2Registered); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestService).Name} service."); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider1).Name} service."); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider2).Name} service."); } [Test] @@ -292,8 +295,8 @@ public void Test_04_05_MixedRealityDataProviderDoesNotExist() var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); // Tests - Assert.IsFalse(isServiceRegistered); LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestDataProvider2).Name} service."); + Assert.IsFalse(isServiceRegistered); } [Test] @@ -411,13 +414,13 @@ public void Test_05_02_01_UnregisterMixedRealityExtensionServiceByType() // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); // Tests Assert.IsTrue(success); Assert.IsFalse(isServiceRegistered); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); } [Test] @@ -442,13 +445,13 @@ public void Test_05_02_02_UnregisterMixedRealityExtensionServiceByTypeAndName() // Validate non-existent service var isServiceRegistered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); // Tests Assert.IsTrue(success); Assert.IsFalse(isServiceRegistered); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); } [Test] @@ -502,7 +505,9 @@ public void Test_05_04_UnregisterMixedRealityExtensionServicesByType() // Validate non-existent service var isService1Registered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); var isService2Registered = MixedRealityToolkit.IsServiceRegistered(); + LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService2).Name} service."); // Tests Assert.IsTrue(success); @@ -510,8 +515,6 @@ public void Test_05_04_UnregisterMixedRealityExtensionServicesByType() Assert.IsFalse(isService2Registered); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService1).Name} service."); - LogAssert.Expect(LogType.Error, $"Unable to find {typeof(ITestExtensionService2).Name} service."); } [Test] @@ -648,9 +651,9 @@ public void Test_06_02_TryRegisterMixedRealityDataProviderFail() // Retrieve var result = MixedRealityToolkit.TryGetService(out var extensionService1); + LogAssert.Expect(LogType.Error, $"Unable to find {nameof(ITestDataProvider1)} service."); // Tests - LogAssert.Expect(LogType.Error, $"Unable to find {nameof(ITestDataProvider1)} service."); Assert.IsFalse(result); Assert.IsNull(extensionService1); Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); @@ -676,11 +679,8 @@ public void Test_06_03_TryRegisterMixedRealityDataProviderByName() // Tests LogAssert.Expect(LogType.Error, "Unable to find Test Data Provider 2 service."); - Assert.IsTrue(activeSystemCount == MixedRealityToolkit.ActiveSystems.Count); Assert.IsTrue(activeServiceCount + 2 == MixedRealityToolkit.RegisteredMixedRealityServices.Count); - - // Tests Assert.IsTrue(resultTrue, "Test Data Provider 1 found"); Assert.IsFalse(resultFalse, "Test Data Provider 2 not found"); Assert.IsNotNull(extensionService1, "Test Data Provider 1 service found"); @@ -715,8 +715,8 @@ public void Test_07_01_EnableServicesByType() foreach (var service in testServices) { - Assert.IsTrue(service is ITestService); - Assert.IsTrue((service as ITestService).IsEnabled); + Assert.IsTrue(service != null); + Assert.IsTrue(service.IsEnabled); } } @@ -743,8 +743,8 @@ public void Test_07_02_DisableServicesByType() foreach (var service in testServices) { - Assert.IsTrue(service is ITestService); - Assert.IsTrue((service as ITestService).IsEnabled); + Assert.IsTrue(service != null); + Assert.IsTrue(service.IsEnabled); } // Enable all test services @@ -752,8 +752,8 @@ public void Test_07_02_DisableServicesByType() foreach (var service in testServices) { - Assert.IsTrue(service is ITestService); - Assert.IsFalse((service as ITestService).IsEnabled); + Assert.IsTrue(service != null); + Assert.IsFalse(service.IsEnabled); } } diff --git a/XRTK-Core/Assets/XRTK.Tests/Services/ITestDataProvider2.cs b/XRTK-Core/Assets/XRTK.Tests/Services/ITestDataProvider2.cs index a84c6b147..8c3158fb6 100644 --- a/XRTK-Core/Assets/XRTK.Tests/Services/ITestDataProvider2.cs +++ b/XRTK-Core/Assets/XRTK.Tests/Services/ITestDataProvider2.cs @@ -5,7 +5,7 @@ namespace XRTK.Tests.Services { - internal interface ITestDataProvider2 : IMixedRealityDataProvider, ITestService + internal interface ITestDataProvider2 : IMixedRealityDataProvider { } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 2ec0da03b..95c61b400 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -1032,12 +1032,16 @@ private static bool TryRegisterServiceInternal(Type interfaceType, IMixedReality return true; } + #endregion Registration + + #region Unregistration + /// /// Remove all services from the Mixed Reality Toolkit active service registry for a given type /// public static bool TryUnregisterServicesOfType() where T : IMixedRealityService { - return TryUnregisterServiceInternal(typeof(T), string.Empty); + return TryUnregisterServiceInternal(typeof(T), string.Empty); } /// @@ -1046,7 +1050,7 @@ public static bool TryUnregisterServicesOfType() where T : IMixedRealityServi /// The instance of the to remove. public static bool TryUnregisterService(T serviceInstance) where T : IMixedRealityService { - return TryUnregisterServiceInternal(typeof(T), serviceInstance.Name); + return TryUnregisterServiceInternal(typeof(T), serviceInstance.Name); } /// @@ -1055,7 +1059,7 @@ public static bool TryUnregisterService(T serviceInstance) where T : IMixedRe /// The name of the service to be removed. (Only for runtime services) public static bool TryUnregisterService(string serviceName) where T : IMixedRealityService { - return TryUnregisterServiceInternal(typeof(T), serviceName); + return TryUnregisterServiceInternal(typeof(T), serviceName); } /// @@ -1064,7 +1068,7 @@ public static bool TryUnregisterService(string serviceName) where T : IMixedR /// /// The interface type for the system to be removed. E.G. InputSystem, BoundarySystem /// The name of the service to be removed. (Only for runtime services) - private static bool TryUnregisterServiceInternal(Type interfaceType, string serviceName) + private static bool TryUnregisterServiceInternal(Type interfaceType, string serviceName) where T : IMixedRealityService { if (interfaceType == null) { @@ -1076,11 +1080,17 @@ private static bool TryUnregisterServiceInternal(Type interfaceType, string serv { bool result = true; - var activeServices = GetActiveServices(interfaceType); + var activeServices = GetActiveServices(interfaceType); + + if (activeServices.Count == 0) + { + Debug.LogWarning($"No {nameof(IMixedRealityService)}s registered that implement {typeof(T).Name}."); + return false; + } for (var i = 0; i < activeServices.Count; i++) { - result &= TryUnregisterServiceInternal(interfaceType, activeServices[i].Name); + result &= TryUnregisterServiceInternal(interfaceType, activeServices[i].Name); } return result; @@ -1088,6 +1098,25 @@ private static bool TryUnregisterServiceInternal(Type interfaceType, string serv if (GetServiceByNameInternal(interfaceType, serviceName, out var serviceInstance)) { + var activeDataProviders = GetActiveServices(); + + bool result = true; + + for (int i = 0; i < activeDataProviders.Count; i++) + { + var dataProvider = activeDataProviders[i]; + + if (dataProvider.ParentService.Equals(serviceInstance)) + { + result &= TryUnregisterService(dataProvider); + } + } + + if (!result) + { + Debug.LogError($"Failed to unregister all the {nameof(IMixedRealityDataProvider)}s for this {serviceInstance.Name}!"); + } + try { serviceInstance.Disable(); @@ -1130,7 +1159,7 @@ private static bool TryUnregisterServiceInternal(Type interfaceType, string serv return false; } - #endregion Registration + #endregion Unregistration #region Multiple Service Management @@ -1235,9 +1264,9 @@ private static void DisableAllServicesByTypeAndName(Type interfaceType, string s /// /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem. /// An array of services that meet the search criteria - public static List GetActiveServices() where T : IMixedRealityService + public static List GetActiveServices() where T : IMixedRealityService { - return GetActiveServices(typeof(T)); + return GetActiveServices(typeof(T)); } /// @@ -1245,9 +1274,9 @@ public static List GetActiveServices() where T : IMixed /// /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem /// An array of services that meet the search criteria - private static List GetActiveServices(Type interfaceType) + private static List GetActiveServices(Type interfaceType) where T : IMixedRealityService { - return GetActiveServices(interfaceType, string.Empty); + return GetActiveServices(interfaceType, string.Empty); } /// @@ -1256,9 +1285,9 @@ private static List GetActiveServices(Type interfaceType) /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem /// Name of the specific service /// An array of services that meet the search criteria - private static List GetActiveServices(Type interfaceType, string serviceName) + private static List GetActiveServices(Type interfaceType, string serviceName) where T : IMixedRealityService { - var services = new List(); + var services = new List(); if (interfaceType == null) { @@ -1272,7 +1301,7 @@ private static List GetActiveServices(Type interfaceType, { if (system.Key.Name == interfaceType.Name) { - services.Add(system.Value); + services.Add((T)system.Value); } } } @@ -1748,7 +1777,7 @@ private static bool GetServiceByNameInternal(Type interfaceType, string serviceN } else { - var foundServices = GetActiveServices(interfaceType, serviceName); + var foundServices = GetActiveServices(interfaceType, serviceName); switch (foundServices.Count) { @@ -1771,9 +1800,9 @@ private static bool GetServiceByNameInternal(Type interfaceType, string serviceN /// /// The interface type to search for. /// Memory reference value of the service list to update. - private static void GetAllServicesInternal(Type interfaceType, ref List services) + private static void GetAllServicesInternal(Type interfaceType, ref List services) where T : IMixedRealityService { - GetAllServicesByNameInternal(interfaceType, string.Empty, ref services); + GetAllServicesByNameInternal(interfaceType, string.Empty, ref services); } /// @@ -1782,7 +1811,7 @@ private static void GetAllServicesInternal(Type interfaceType, ref ListThe interface type to search for. /// The name of the service to search for. If the string is empty than any matching will be added to the list. /// Memory reference value of the service list to update. - private static void GetAllServicesByNameInternal(Type interfaceType, string serviceName, ref List services) + private static void GetAllServicesByNameInternal(Type interfaceType, string serviceName, ref List services) where T : IMixedRealityService { if (!CanGetService(interfaceType, serviceName)) { return; } @@ -1791,7 +1820,7 @@ private static void GetAllServicesByNameInternal(Type interfaceType, string serv if (GetServiceByNameInternal(interfaceType, serviceName, out var serviceInstance) && CheckServiceMatch(interfaceType, serviceName, interfaceType, serviceInstance)) { - services.Add(serviceInstance); + services.Add((T)serviceInstance); } } else @@ -1800,7 +1829,7 @@ private static void GetAllServicesByNameInternal(Type interfaceType, string serv { if (CheckServiceMatch(interfaceType, serviceName, registeredMixedRealityServices[i].Item1, registeredMixedRealityServices[i].Item2)) { - services.Add(registeredMixedRealityServices[i].Item2); + services.Add((T)registeredMixedRealityServices[i].Item2); } } } @@ -1818,14 +1847,15 @@ private static bool CheckServiceMatch(Type interfaceType, string serviceName, Ty { bool isValid = string.IsNullOrEmpty(serviceName) || serviceInstance.Name == serviceName; - if ((registeredInterfaceType.Name == interfaceType.Name || serviceInstance.GetType().Name == interfaceType.Name) && isValid) + if ((registeredInterfaceType.Name == interfaceType.Name || + serviceInstance.GetType().Name == interfaceType.Name) && isValid) { return true; } var interfaces = serviceInstance.GetType().GetInterfaces(); - for (int i = 0; i < interfaces?.Length; i++) + for (int i = 0; i < interfaces.Length; i++) { if (interfaces[i].Name == interfaceType.Name && isValid) { From 9fbcb26431afbbe0102bd05994fbd34e7d8e33d1 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 15:30:37 -0400 Subject: [PATCH 38/73] fixed head height for services that start at the origin --- Submodules/Lumin | 2 +- Submodules/SDK | 2 +- .../Providers/CameraSystem/BaseCameraDataProvider.cs | 7 ++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index 91f4ae02c..667a65d30 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 91f4ae02cf1f0763629b1cfa00e0e7b98eb417cb +Subproject commit 667a65d306925f7517ec0ece169d6889856b284b diff --git a/Submodules/SDK b/Submodules/SDK index 5bc06f091..00a484d15 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 5bc06f091590a8db7f1b86626034306a8c9adbf7 +Subproject commit 00a484d1590e1271a26045f33f403c42e1a30332 diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 51f5b6f2f..94dab2cd4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -185,7 +185,7 @@ public override void Update() if (!Application.isPlaying) { return; } - if (IsOpaque != cameraOpaqueLastFrame) + if (cameraOpaqueLastFrame != IsOpaque) { cameraOpaqueLastFrame = IsOpaque; @@ -273,6 +273,11 @@ protected virtual void ApplySettingsForDefaultHeadHeight() HeadHeight = DefaultHeadHeight; ResetRigTransforms(); SyncRigTransforms(); + + if (HeadHeight.Approximately(0f, 0.1f)) + { + CameraRig.PlayspaceTransform.Translate(-CameraRig.BodyTransform.position); + } } /// From 8aafc230b0a3c0fff3d2cad6dac282340f7880be Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Tue, 14 Apr 2020 15:31:14 -0400 Subject: [PATCH 39/73] Added priority override to camera system --- .../Services/CameraSystem/MixedRealityCameraSystem.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index f2a6f3343..89d1f7810 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -22,6 +22,9 @@ public MixedRealityCameraSystem(MixedRealityCameraSystemProfile profile) #region IMixedRealityService Implementation + /// + public override uint Priority => 1; + /// public override void Destroy() { From 231ad262296ac6ee1903a9ea0344b56636603f75 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Wed, 15 Apr 2020 10:19:03 -0400 Subject: [PATCH 40/73] optimized Check Service Match --- .../Services/MixedRealityToolkit.cs | 22 +++---------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 95c61b400..2663ba01f 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -1845,25 +1845,9 @@ private static void GetAllServicesByNameInternal(Type interfaceType, string s /// True, if the registered service contains the interface type and name. private static bool CheckServiceMatch(Type interfaceType, string serviceName, Type registeredInterfaceType, IMixedRealityService serviceInstance) { - bool isValid = string.IsNullOrEmpty(serviceName) || serviceInstance.Name == serviceName; - - if ((registeredInterfaceType.Name == interfaceType.Name || - serviceInstance.GetType().Name == interfaceType.Name) && isValid) - { - return true; - } - - var interfaces = serviceInstance.GetType().GetInterfaces(); - - for (int i = 0; i < interfaces.Length; i++) - { - if (interfaces[i].Name == interfaceType.Name && isValid) - { - return true; - } - } - - return false; + bool isNameValid = string.IsNullOrEmpty(serviceName) || serviceInstance.Name == serviceName; + bool isInstanceValid = interfaceType == registeredInterfaceType || interfaceType.IsInstanceOfType(serviceInstance); + return isNameValid && isInstanceValid; } private static bool CanGetService(Type interfaceType, string serviceName) From 639dee76414259a59cfb48e1072ae359579ee138 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Wed, 15 Apr 2020 10:32:43 -0400 Subject: [PATCH 41/73] removed redundant type arg --- .../Packages/com.xrtk.core/Services/MixedRealityToolkit.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 2663ba01f..208abf9ef 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -1802,7 +1802,7 @@ private static bool GetServiceByNameInternal(Type interfaceType, string serviceN /// Memory reference value of the service list to update. private static void GetAllServicesInternal(Type interfaceType, ref List services) where T : IMixedRealityService { - GetAllServicesByNameInternal(interfaceType, string.Empty, ref services); + GetAllServicesByNameInternal(interfaceType, string.Empty, ref services); } /// From 9e2ef67943fdd96d5b13ffc6bb04bef6831573bd Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 16 Apr 2020 17:58:41 -0400 Subject: [PATCH 42/73] updated wmr checkout --- Submodules/WindowsMixedReality | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 2ec0286fd..fcbe40226 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 2ec0286fdc12033e768d78e14d5e7285475742ed +Subproject commit fcbe40226b7f4b56a4abdf5f407445e782091656 From ce3b404c1814a172c8c11972f3451b04220f1a34 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 12:16:39 -0400 Subject: [PATCH 43/73] Apply the default head height settings if the camera's opacity flag changes --- Submodules/WindowsMixedReality | 2 +- .../Providers/CameraSystem/BaseCameraDataProvider.cs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index fcbe40226..205d8f9cc 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit fcbe40226b7f4b56a4abdf5f407445e782091656 +Subproject commit 205d8f9cc190a6e16f5295d026c42e2b364dcf9a diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 94dab2cd4..a3528a9ec 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -189,6 +189,8 @@ public override void Update() { cameraOpaqueLastFrame = IsOpaque; + ApplySettingsForDefaultHeadHeight(); + if (IsOpaque) { ApplySettingsForOpaqueDisplay(); @@ -215,7 +217,11 @@ public override void Disable() { base.Disable(); - if (CameraRig.GameObject == null) { return; } + if (CameraRig == null || + CameraRig.GameObject == null) + { + return; + } ResetRigTransforms(); @@ -310,6 +316,7 @@ protected virtual void ResetRigTransforms() { CameraRig.PlayspaceTransform.position = Vector3.zero; CameraRig.PlayspaceTransform.rotation = Quaternion.identity; + // If the camera is a 2d camera when we can adjust the camera's height to match the head height. CameraRig.CameraTransform.position = IsStereoscopic ? Vector3.zero : new Vector3(0f, HeadHeight, 0f); CameraRig.CameraTransform.rotation = Quaternion.identity; CameraRig.BodyTransform.position = Vector3.zero; From 5786b42350b15630e86e8b05326c02db9ebed5b7 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 21:45:18 -0400 Subject: [PATCH 44/73] Made sure we're resetting the transforms of the visualizations for each system Fixed teleportation height --- .../Services/BoundarySystem/MixedRealityBoundarySystem.cs | 2 +- .../DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs | 2 +- .../MixedRealitySpatialAwarenessSystem.cs | 2 +- .../Services/TeleportSystem/MixedRealityTeleportSystem.cs | 7 ++++++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs index d66afe113..5e956addb 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs @@ -323,7 +323,7 @@ private GameObject BoundaryVisualizationParent } var visualizationParent = new GameObject("Boundary System Visualizations"); - visualizationParent.transform.parent = MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform; + visualizationParent.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform, false); return boundaryVisualizationParent = visualizationParent; } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs index 608ee0653..f15e6af93 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs @@ -124,7 +124,7 @@ public Transform DiagnosticsRoot if (diagnosticsRoot == null) { diagnosticsRoot = new GameObject("Diagnostics").transform; - diagnosticsRoot.parent = MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform; + diagnosticsRoot.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform, false); } return diagnosticsRoot; diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs index 1453dba9f..eb6a98bf4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs @@ -45,7 +45,7 @@ private GameObject CreateSpatialAwarenessParent get { var spatialAwarenessSystemObject = new GameObject("Spatial Awareness System"); - spatialAwarenessSystemObject.transform.parent = MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform; + spatialAwarenessSystemObject.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform, false); return spatialAwarenessSystemObject; } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs index 6ffc6f17e..594853bba 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs @@ -216,9 +216,14 @@ private void ProcessTeleportationRequest(TeleportEventData eventData) : MixedRealityToolkit.CameraSystem.MainCameraRig.CameraTransform; var cameraPosition = cameraTransform.position; var cameraParent = cameraTransform.parent; - Debug.Assert(cameraParent != null, "Teleport system requires that the camera be parented under another object."); + Debug.Assert(cameraParent != null, "The Teleport System requires that the camera be parented under another object."); var height = targetPosition.y; + if (MixedRealityToolkit.CameraSystem != null) + { + height += MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position.y; // + MixedRealityToolkit.CameraSystem.MainCameraRig.BodyTransform.position.y; + } + targetPosition -= cameraPosition - cameraParent.position; targetPosition.y = height; cameraParent.position = targetPosition; From b2256c79df754706280ca36efc01993a42607639 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 21:45:38 -0400 Subject: [PATCH 45/73] updated some documentation --- .../com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs index a2bdf539e..657ec7283 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityCameraRig.cs @@ -42,8 +42,8 @@ public interface IMixedRealityCameraRig /// The player's body transform, located at the player's feet. /// /// - /// This is synced to the player's head camera X & Z values - /// and the 's Y value. + /// This is synced to the player's head camera X & Z values. + /// Y value is set using current . /// Transform BodyTransform { get; } } From fe7fc09e010ae402cc653c1b473cceddc16ebbfe Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 21:46:15 -0400 Subject: [PATCH 46/73] updated wmr and sdk checkouts --- Submodules/SDK | 2 +- Submodules/WindowsMixedReality | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Submodules/SDK b/Submodules/SDK index 00a484d15..a7ba1c19b 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 00a484d1590e1271a26045f33f403c42e1a30332 +Subproject commit a7ba1c19bfcb9a48d61fc48e81a32b633f72daf8 diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 205d8f9cc..0a4a3171d 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 205d8f9cc190a6e16f5295d026c42e2b364dcf9a +Subproject commit 0a4a3171db88e55c56240315e476ec2a1a7f19a5 From 32863831ecfc6d692d00f727537589b15235b36a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 23:14:15 -0400 Subject: [PATCH 47/73] removed oculus head height getting set in the controllers --- Submodules/Oculus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index 0a9477dc5..6d029ef4b 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 0a9477dc5aec5e65e7fab2bd670a74a5c8eabcf0 +Subproject commit 6d029ef4bbec7fa00ce0a5e07eb03948104bf252 From 16fc55989d77f064354ba6270e740bc5a2906173 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 23:14:55 -0400 Subject: [PATCH 48/73] removed adjustment of plays pace transform in ApplySettingsForDefaultHeadHeight when head height == 0 --- .../Providers/CameraSystem/BaseCameraDataProvider.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index a3528a9ec..56e4356a3 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -279,11 +279,6 @@ protected virtual void ApplySettingsForDefaultHeadHeight() HeadHeight = DefaultHeadHeight; ResetRigTransforms(); SyncRigTransforms(); - - if (HeadHeight.Approximately(0f, 0.1f)) - { - CameraRig.PlayspaceTransform.Translate(-CameraRig.BodyTransform.position); - } } /// From 2abe09056f508489cb320eba7a0fb980731db6b9 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 18 Apr 2020 23:59:20 -0400 Subject: [PATCH 49/73] updated lumin checkout added virtual HeadHeight property --- Submodules/Lumin | 2 +- .../Providers/CameraSystem/BaseCameraDataProvider.cs | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index 667a65d30..cef1965a1 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit 667a65d306925f7517ec0ece169d6889856b284b +Subproject commit cef1965a11c6a338f228cda1a34fd49b4bf2b571 diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 56e4356a3..38cfc778e 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -120,7 +120,7 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera private float headHeight; /// - public float HeadHeight + public virtual float HeadHeight { get => headHeight; set @@ -319,8 +319,8 @@ protected virtual void ResetRigTransforms() } /// - /// Called each to the sync the , , - /// and poses. + /// Called each to the sync the , + /// , and poses. /// protected virtual void SyncRigTransforms() { From 8844030476c86650c28a731aefda35eb20ce66f9 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 01:02:00 -0400 Subject: [PATCH 50/73] updated lumin checkout --- Submodules/Lumin | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index cef1965a1..bcfcbf39e 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit cef1965a11c6a338f228cda1a34fd49b4bf2b571 +Subproject commit bcfcbf39ec033e4b9720865466fcdd6cb0889a53 From 6061141c2b7c8716dad34c7f4113750ab31bcc71 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 01:02:25 -0400 Subject: [PATCH 51/73] updated sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index a7ba1c19b..26ee6cc7e 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit a7ba1c19bfcb9a48d61fc48e81a32b633f72daf8 +Subproject commit 26ee6cc7ed8680b6be6721e04a8a7444b3611771 From 9ce115a7f300aa2eee186eb534948f8db4b5bc70 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 04:01:29 -0400 Subject: [PATCH 52/73] removed comment --- .../Services/TeleportSystem/MixedRealityTeleportSystem.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs index 594853bba..89ffe4402 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs @@ -221,7 +221,7 @@ private void ProcessTeleportationRequest(TeleportEventData eventData) if (MixedRealityToolkit.CameraSystem != null) { - height += MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position.y; // + MixedRealityToolkit.CameraSystem.MainCameraRig.BodyTransform.position.y; + height += MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position.y; } targetPosition -= cameraPosition - cameraParent.position; From 9b348f928133b039aa18d42ed3d6f1df9baa7f37 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 10:47:15 -0400 Subject: [PATCH 53/73] updated sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index 26ee6cc7e..b461a32be 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 26ee6cc7ed8680b6be6721e04a8a7444b3611771 +Subproject commit b461a32bedf71bab3049b2ed804991241f5dcb86 From 9f74f8f421de88dd33fd0fcde1b58022f970a296 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 12:05:00 -0400 Subject: [PATCH 54/73] updated oculus checkout --- Submodules/Oculus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index 6d029ef4b..4c8873da1 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 6d029ef4bbec7fa00ce0a5e07eb03948104bf252 +Subproject commit 4c8873da11d6fc9278022abf3128ba9c4e41a298 From 5cbf736efa3b7af833fef554865b8d0464275ec8 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 12:46:59 -0400 Subject: [PATCH 55/73] updated submodule checkouts --- Submodules/Lumin | 2 +- Submodules/Oculus | 2 +- Submodules/WindowsMixedReality | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index bcfcbf39e..dd380f865 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit bcfcbf39ec033e4b9720865466fcdd6cb0889a53 +Subproject commit dd380f8659d3a88799ebaa89954b9e582ddc9c67 diff --git a/Submodules/Oculus b/Submodules/Oculus index 4c8873da1..0485f95bb 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 4c8873da11d6fc9278022abf3128ba9c4e41a298 +Subproject commit 0485f95bbdee4c43ca28292e5880baeca62f273d diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 0a4a3171d..245e5bd2e 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 0a4a3171db88e55c56240315e476ec2a1a7f19a5 +Subproject commit 245e5bd2e2b5ee8928311cfea1cfd1064b3a2bc4 From e8ba5541cc239167c62a4bfdf051fa5814a7e083 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 13:11:47 -0400 Subject: [PATCH 56/73] Removed duplicated serialized fields for the camera data provider global settings. Instead we'll just create a default camera data provider profile and use it as our global settings --- Submodules/SDK | 2 +- .../MixedRealityCameraSystemProfile.cs | 137 +----------------- ...ixedRealityCameraSystemProfileInspector.cs | 73 +--------- .../CameraSystem/BaseCameraDataProvider.cs | 2 +- 4 files changed, 13 insertions(+), 201 deletions(-) diff --git a/Submodules/SDK b/Submodules/SDK index b461a32be..08c50dd51 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit b461a32bedf71bab3049b2ed804991241f5dcb86 +Subproject commit 08c50dd51a3b52a089d5a343958a2f4f7a9e134d diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs index 5290ea228..43cdb628b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs @@ -2,9 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using UnityEngine; -using XRTK.Attributes; using XRTK.Definitions.Utilities; -using XRTK.Services.CameraSystem; using XRTK.Interfaces.CameraSystem; namespace XRTK.Definitions.CameraSystem @@ -18,140 +16,21 @@ namespace XRTK.Definitions.CameraSystem public class MixedRealityCameraSystemProfile : BaseMixedRealityProfile { [SerializeField] - [Tooltip("The list of registered Camera Data Providers for each platform.")] - private MixedRealityCameraDataProvidersProfile cameraDataProvidersProfile = null; - - /// - /// The The list of registered s for each platform. - /// - public MixedRealityCameraDataProvidersProfile CameraDataProvidersProfile => cameraDataProvidersProfile; - - [SerializeField] - private bool isCameraPersistent = false; - - /// - /// Should the camera be reused in each scene? - /// If so, then the camera's root will be flagged so it is not destroyed when the scene is unloaded. - /// - public bool IsCameraPersistent => isCameraPersistent; - - [SerializeField] - [Tooltip("The near clipping plane distance for an opaque display.")] - private float nearClipPlaneOpaqueDisplay = 0.1f; - - /// - /// The near clipping plane distance for an opaque display. - /// - public float NearClipPlaneOpaqueDisplay - { - get => nearClipPlaneOpaqueDisplay; - internal set => nearClipPlaneOpaqueDisplay = value; - } - - [SerializeField] - [Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")] - private CameraClearFlags cameraClearFlagsOpaqueDisplay = CameraClearFlags.Skybox; - - /// - /// Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display. - /// - public CameraClearFlags CameraClearFlagsOpaqueDisplay => cameraClearFlagsOpaqueDisplay; - - [SerializeField] - [Tooltip("Background color for a transparent display.")] - private Color backgroundColorOpaqueDisplay = Color.black; - - /// - /// Background color for a transparent display. - /// - public Color BackgroundColorOpaqueDisplay => backgroundColorOpaqueDisplay; - - [SerializeField] - [Tooltip("Set the desired quality for your application for opaque display.")] - private int opaqueQualityLevel = 0; - - /// - /// Set the desired quality for your application for opaque display. - /// - public int OpaqueQualityLevel => opaqueQualityLevel; - - [SerializeField] - [Tooltip("The near clipping plane distance for a transparent display.")] - private float nearClipPlaneTransparentDisplay = 0.85f; + [Tooltip("The Global Camera Profile Settings.")] + private BaseMixedRealityCameraDataProviderProfile globalCameraProfile = null; /// - /// The near clipping plane distance for a transparent display. + /// The default camera data provider profile s will use if no profile is assigned. /// - public float NearClipPlaneTransparentDisplay => nearClipPlaneTransparentDisplay; + public BaseMixedRealityCameraDataProviderProfile GlobalCameraProfile => globalCameraProfile; [SerializeField] - [Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")] - private CameraClearFlags cameraClearFlagsTransparentDisplay = CameraClearFlags.SolidColor; - - /// - /// Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display. - /// - public CameraClearFlags CameraClearFlagsTransparentDisplay => cameraClearFlagsTransparentDisplay; - - [SerializeField] - [Tooltip("Background color for a transparent display.")] - private Color backgroundColorTransparentDisplay = Color.clear; - - /// - /// Background color for a transparent display. - /// - public Color BackgroundColorTransparentDisplay => backgroundColorTransparentDisplay; - - [SerializeField] - [Tooltip("Set the desired quality for your application for transparent display.")] - private int transparentQualityLevel = 0; - - /// - /// Set the desired quality for your application for transparent display. - /// - public int TransparentQualityLevel => transparentQualityLevel; - - [SerializeField] - [Tooltip("The concrete type to use for the camera rig.")] - [Implements(typeof(IMixedRealityCameraRig), TypeGrouping.ByNamespaceFlat)] - private SystemType cameraRigType = new SystemType(typeof(DefaultCameraRig)); - - /// - /// The concrete type to use for the camera rig. - /// - public SystemType CameraRigType - { - get => cameraRigType; - internal set => cameraRigType = value; - } - - [Range(0f, 3f)] - [SerializeField] - [Tooltip("The default head height the rig will start at if a platform doesn't automatically adjust the height for you.")] - private float defaultHeadHeight = 1.6f; - - /// - /// The default head height the rig will start at if a platform doesn't automatically adjust the height for you. - /// - public float DefaultHeadHeight => defaultHeadHeight; - - [SerializeField] - [Range(0f, 180f)] - [Tooltip("This is the angle that will be used to adjust the player's body rotation in relation to their head position.")] - private float bodyAdjustmentAngle = 60f; - - /// - /// /// This is the angle that will be used to adjust the player's body rotation in relation to their head position. - /// - public float BodyAdjustmentAngle => bodyAdjustmentAngle; - - [SerializeField] - [Tooltip("The speed at which the body transform will sync it's rotation with the head transform.")] - private float bodyAdjustmentSpeed = 1f; + [Tooltip("The list of registered Camera Data Providers for each platform.")] + private MixedRealityCameraDataProvidersProfile cameraDataProvidersProfile = null; /// - /// The speed at which the body transform will sync it's rotation with the head transform. + /// The list of registered s for each platform. /// - public float BodyAdjustmentSpeed => bodyAdjustmentSpeed; + public MixedRealityCameraDataProvidersProfile CameraDataProvidersProfile => cameraDataProvidersProfile; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs index c2b74a56c..1c10d3d53 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using UnityEditor; -using UnityEngine; using XRTK.Definitions.CameraSystem; using XRTK.Services; @@ -11,49 +10,15 @@ namespace XRTK.Inspectors.Profiles.CameraSystem [CustomEditor(typeof(MixedRealityCameraSystemProfile))] public class MixedRealityCameraSystemProfileInspector : BaseMixedRealityProfileInspector { + private SerializedProperty globalCameraProfile; private SerializedProperty cameraDataProvidersProfile; - private SerializedProperty isCameraPersistent; - - private SerializedProperty nearClipPlaneOpaqueDisplay; - private SerializedProperty cameraClearFlagsOpaqueDisplay; - private SerializedProperty backgroundColorOpaqueDisplay; - private SerializedProperty opaqueQualityLevel; - - private SerializedProperty nearClipPlaneTransparentDisplay; - private SerializedProperty cameraClearFlagsTransparentDisplay; - private SerializedProperty backgroundColorTransparentDisplay; - private SerializedProperty transparentQualityLevel; - - private SerializedProperty cameraRigType; - private SerializedProperty defaultHeadHeight; - private SerializedProperty bodyAdjustmentAngle; - private SerializedProperty bodyAdjustmentSpeed; - - private readonly GUIContent nearClipTitle = new GUIContent("Near Clip"); - private readonly GUIContent clearFlagsTitle = new GUIContent("Clear Flags"); - protected override void OnEnable() { base.OnEnable(); + globalCameraProfile = serializedObject.FindProperty(nameof(globalCameraProfile)); cameraDataProvidersProfile = serializedObject.FindProperty(nameof(cameraDataProvidersProfile)); - - isCameraPersistent = serializedObject.FindProperty(nameof(isCameraPersistent)); - nearClipPlaneOpaqueDisplay = serializedObject.FindProperty(nameof(nearClipPlaneOpaqueDisplay)); - cameraClearFlagsOpaqueDisplay = serializedObject.FindProperty(nameof(cameraClearFlagsOpaqueDisplay)); - backgroundColorOpaqueDisplay = serializedObject.FindProperty(nameof(backgroundColorOpaqueDisplay)); - opaqueQualityLevel = serializedObject.FindProperty(nameof(opaqueQualityLevel)); - - nearClipPlaneTransparentDisplay = serializedObject.FindProperty(nameof(nearClipPlaneTransparentDisplay)); - cameraClearFlagsTransparentDisplay = serializedObject.FindProperty(nameof(cameraClearFlagsTransparentDisplay)); - backgroundColorTransparentDisplay = serializedObject.FindProperty(nameof(backgroundColorTransparentDisplay)); - transparentQualityLevel = serializedObject.FindProperty(nameof(transparentQualityLevel)); - - cameraRigType = serializedObject.FindProperty(nameof(cameraRigType)); - defaultHeadHeight = serializedObject.FindProperty(nameof(defaultHeadHeight)); - bodyAdjustmentAngle = serializedObject.FindProperty(nameof(bodyAdjustmentAngle)); - bodyAdjustmentSpeed = serializedObject.FindProperty(nameof(bodyAdjustmentSpeed)); } public override void OnInspectorGUI() @@ -65,39 +30,7 @@ public override void OnInspectorGUI() EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(cameraDataProvidersProfile); - - EditorGUILayout.Space(); - EditorGUILayout.LabelField("Global Settings:", EditorStyles.boldLabel); - - EditorGUILayout.PropertyField(isCameraPersistent); - EditorGUILayout.PropertyField(cameraRigType); - EditorGUILayout.PropertyField(defaultHeadHeight); - EditorGUILayout.PropertyField(bodyAdjustmentAngle); - EditorGUILayout.PropertyField(bodyAdjustmentSpeed); - - EditorGUILayout.Space(); - EditorGUILayout.LabelField("Opaque Display Settings:", EditorStyles.boldLabel); - EditorGUILayout.PropertyField(nearClipPlaneOpaqueDisplay, nearClipTitle); - EditorGUILayout.PropertyField(cameraClearFlagsOpaqueDisplay, clearFlagsTitle); - - if ((CameraClearFlags)cameraClearFlagsOpaqueDisplay.intValue == CameraClearFlags.Color) - { - backgroundColorOpaqueDisplay.colorValue = EditorGUILayout.ColorField("Background Color", backgroundColorOpaqueDisplay.colorValue); - } - - opaqueQualityLevel.intValue = EditorGUILayout.Popup("Quality Setting", opaqueQualityLevel.intValue, QualitySettings.names); - - EditorGUILayout.Space(); - EditorGUILayout.LabelField("Transparent Display Settings:", EditorStyles.boldLabel); - EditorGUILayout.PropertyField(nearClipPlaneTransparentDisplay, nearClipTitle); - EditorGUILayout.PropertyField(cameraClearFlagsTransparentDisplay, clearFlagsTitle); - - if ((CameraClearFlags)cameraClearFlagsTransparentDisplay.intValue == CameraClearFlags.Color) - { - backgroundColorTransparentDisplay.colorValue = EditorGUILayout.ColorField("Background Color", backgroundColorTransparentDisplay.colorValue); - } - - transparentQualityLevel.intValue = EditorGUILayout.Popup("Quality Setting", transparentQualityLevel.intValue, QualitySettings.names); + EditorGUILayout.PropertyField(globalCameraProfile); serializedObject.ApplyModifiedProperties(); diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 38cfc778e..e11df7b79 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -21,7 +21,7 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera : base(name, priority, profile, parentService) { cameraSystem = MixedRealityToolkit.CameraSystem; - var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile; + var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile.GlobalCameraProfile; if (profile != null) { From 09ff3d93ddd86f5a84d414ab4b86d3071f462e5e Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 15:35:26 -0400 Subject: [PATCH 57/73] added configuration foldout --- ...dRealityServiceProviderProfileInspector.cs | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs index bc8febabd..c3310dcf3 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs @@ -18,11 +18,14 @@ namespace XRTK.Inspectors.Profiles public class MixedRealityServiceProfileInspector : BaseMixedRealityProfileInspector { private readonly GUIContent profileContent = new GUIContent("Profile", "The settings profile for this service."); + private readonly GUIContent configurationContent = new GUIContent("Configuration Options"); private ReorderableList configurationList; private int currentlySelectedConfigurationOption; private SerializedProperty configurations; + private bool showConfigurationFoldout = true; + /// /// Gets the service constraint used to filter options listed in the /// instance type dropdown. Set after @@ -56,18 +59,21 @@ protected override void OnEnable() public override void OnInspectorGUI() { EditorGUILayout.Space(); - EditorGUILayout.LabelField("Configuration Options", EditorStyles.boldLabel); - EditorGUILayout.Space(); - serializedObject.Update(); - EditorGUILayout.Space(); - configurationList.DoLayoutList(); + showConfigurationFoldout = EditorGUILayout.Foldout(showConfigurationFoldout, configurationContent, true); - if (configurations == null || configurations.arraySize == 0) + if (showConfigurationFoldout) { - EditorGUILayout.HelpBox("Register a new Service Configuration", MessageType.Warning); - } + serializedObject.Update(); + EditorGUILayout.Space(); + configurationList.DoLayoutList(); - serializedObject.ApplyModifiedProperties(); + if (configurations == null || configurations.arraySize == 0) + { + EditorGUILayout.HelpBox($"Register a new {ServiceConstraint.Name} Configuration", MessageType.Warning); + } + + serializedObject.ApplyModifiedProperties(); + } } private void DrawConfigurationOptionElement(Rect rect, int index, bool isActive, bool isFocused) From 1f2951ef009e11d4b61812cc3d2cd70283bf786e Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 15:59:34 -0400 Subject: [PATCH 58/73] updated foldout label content to include the interface type this configuration expects --- .../Profiles/MixedRealityServiceProviderProfileInspector.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs index c3310dcf3..770fde9c6 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityServiceProviderProfileInspector.cs @@ -18,7 +18,6 @@ namespace XRTK.Inspectors.Profiles public class MixedRealityServiceProfileInspector : BaseMixedRealityProfileInspector { private readonly GUIContent profileContent = new GUIContent("Profile", "The settings profile for this service."); - private readonly GUIContent configurationContent = new GUIContent("Configuration Options"); private ReorderableList configurationList; private int currentlySelectedConfigurationOption; @@ -59,7 +58,7 @@ protected override void OnEnable() public override void OnInspectorGUI() { EditorGUILayout.Space(); - showConfigurationFoldout = EditorGUILayout.Foldout(showConfigurationFoldout, configurationContent, true); + showConfigurationFoldout = EditorGUILayout.Foldout(showConfigurationFoldout, new GUIContent($"{ServiceConstraint.Name} Configuration Options"), true); if (showConfigurationFoldout) { From c9e02252ca9a834b54d033414e5042dc1396c89d Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 16:04:25 -0400 Subject: [PATCH 59/73] updated sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index 08c50dd51..411a77e76 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 08c50dd51a3b52a089d5a343958a2f4f7a9e134d +Subproject commit 411a77e7658c7123389049e9919380a0c9449f63 From 37aaaa548d33c41711cb50a65b92adbf5902c3b9 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sun, 19 Apr 2020 17:42:49 -0400 Subject: [PATCH 60/73] updated usage with configuration foldout --- Submodules/SDK | 2 +- .../MixedRealityCameraDataProvidersProfile.cs | 14 -------------- ...dRealityCameraDataProvidersProfile.cs.meta | 11 ----------- .../MixedRealityCameraSystemProfile.cs | 11 +---------- ...lityCameraDataProvidersProfileInspector.cs | 19 ------------------- ...ameraDataProvidersProfileInspector.cs.meta | 11 ----------- ...ixedRealityCameraSystemProfileInspector.cs | 7 +++---- .../Services/MixedRealityToolkit.cs | 9 +-------- 8 files changed, 6 insertions(+), 78 deletions(-) delete mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs delete mode 100644 XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs.meta delete mode 100644 XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs delete mode 100644 XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta diff --git a/Submodules/SDK b/Submodules/SDK index 411a77e76..49abf7868 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 411a77e7658c7123389049e9919380a0c9449f63 +Subproject commit 49abf786820cc498e5e38bd5cffe99382077ab29 diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs deleted file mode 100644 index 4b9935cbb..000000000 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright (c) XRTK. All rights reserved. -// Licensed under the MIT License. See LICENSE in the project root for license information. - -using UnityEngine; -using XRTK.Definitions.Utilities; -using XRTK.Interfaces.CameraSystem; - -namespace XRTK.Definitions.CameraSystem -{ - [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera System/Data Providers Profile", fileName = "MixedRealityCameraDataProvidersProfile", order = (int)CreateProfileMenuItemIndices.Camera)] - public class MixedRealityCameraDataProvidersProfile : BaseMixedRealityServiceProfile - { - } -} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs.meta deleted file mode 100644 index 1071f8f2c..000000000 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraDataProvidersProfile.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 6392e72d9fe0498d862d829cd68490f2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs index 43cdb628b..4ecc200d9 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs @@ -13,7 +13,7 @@ namespace XRTK.Definitions.CameraSystem /// Based on those values, you can customize your camera and quality settings. /// [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera System Profile", fileName = "MixedRealityCameraSystemProfile", order = (int)CreateProfileMenuItemIndices.Camera)] - public class MixedRealityCameraSystemProfile : BaseMixedRealityProfile + public class MixedRealityCameraSystemProfile : BaseMixedRealityServiceProfile { [SerializeField] [Tooltip("The Global Camera Profile Settings.")] @@ -23,14 +23,5 @@ public class MixedRealityCameraSystemProfile : BaseMixedRealityProfile /// The default camera data provider profile s will use if no profile is assigned. /// public BaseMixedRealityCameraDataProviderProfile GlobalCameraProfile => globalCameraProfile; - - [SerializeField] - [Tooltip("The list of registered Camera Data Providers for each platform.")] - private MixedRealityCameraDataProvidersProfile cameraDataProvidersProfile = null; - - /// - /// The list of registered s for each platform. - /// - public MixedRealityCameraDataProvidersProfile CameraDataProvidersProfile => cameraDataProvidersProfile; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs deleted file mode 100644 index 6de46fd97..000000000 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) XRTK. All rights reserved. -// Licensed under the MIT License. See LICENSE in the project root for license information. - -using UnityEditor; -using XRTK.Definitions.CameraSystem; - -namespace XRTK.Inspectors.Profiles.CameraSystem -{ - [CustomEditor(typeof(MixedRealityCameraDataProvidersProfile))] - public class MixedRealityCameraDataProvidersProfileInspector : MixedRealityServiceProfileInspector - { - public override void OnInspectorGUI() - { - RenderHeader("Use this profile to define and control camera sources in your application.\n\nBelow is a list of registered Camera Data Providers for each platform."); - - base.OnInspectorGUI(); - } - } -} \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta deleted file mode 100644 index fe401aa54..000000000 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraDataProvidersProfileInspector.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 90a8f941d0354a9889fac49e8369c9b8 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} - userData: - assetBundleName: - assetBundleVariant: diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs index 1c10d3d53..25a7a5172 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs @@ -8,17 +8,15 @@ namespace XRTK.Inspectors.Profiles.CameraSystem { [CustomEditor(typeof(MixedRealityCameraSystemProfile))] - public class MixedRealityCameraSystemProfileInspector : BaseMixedRealityProfileInspector + public class MixedRealityCameraSystemProfileInspector : MixedRealityServiceProfileInspector { private SerializedProperty globalCameraProfile; - private SerializedProperty cameraDataProvidersProfile; protected override void OnEnable() { base.OnEnable(); globalCameraProfile = serializedObject.FindProperty(nameof(globalCameraProfile)); - cameraDataProvidersProfile = serializedObject.FindProperty(nameof(cameraDataProvidersProfile)); } public override void OnInspectorGUI() @@ -29,11 +27,12 @@ public override void OnInspectorGUI() EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(cameraDataProvidersProfile); EditorGUILayout.PropertyField(globalCameraProfile); serializedObject.ApplyModifiedProperties(); + base.OnInspectorGUI(); + if (MixedRealityToolkit.IsInitialized && EditorGUI.EndChangeCheck()) { EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetProfile(MixedRealityToolkit.Instance.ActiveProfile); diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index f11a79b4c..635f668e2 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -389,14 +389,7 @@ private void InitializeServiceLocator() { if (TryCreateAndRegisterService(ActiveProfile.CameraSystemType, out var service, ActiveProfile.CameraSystemProfile) && CameraSystem != null) { - if (activeProfile.CameraSystemProfile.CameraDataProvidersProfile != null) - { - TryRegisterDataProviderConfigurations(ActiveProfile.CameraSystemProfile.CameraDataProvidersProfile.RegisteredServiceConfigurations, service); - } - else - { - Debug.LogError("Missing required Camera Data Providers Profile for the Camera System!"); - } + TryRegisterDataProviderConfigurations(ActiveProfile.CameraSystemProfile.RegisteredServiceConfigurations, service); } else { From 5d0f8645896d4ef73c7f8e4cd9d2773aeb5959c0 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 20 Apr 2020 11:55:22 -0400 Subject: [PATCH 61/73] updated oculus checkout --- Submodules/Oculus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index 0485f95bb..247f1a00c 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 0485f95bbdee4c43ca28292e5880baeca62f273d +Subproject commit 247f1a00c16d8fa46b55b32d64ed2c7f0953180f From 2ee12b907edf0e5e5a4b4ac276c492a12c3c2b3e Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 20 Apr 2020 13:28:35 -0400 Subject: [PATCH 62/73] updated oculus and sdk checkouts --- Submodules/Oculus | 2 +- Submodules/SDK | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index 247f1a00c..309fc6659 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 247f1a00c16d8fa46b55b32d64ed2c7f0953180f +Subproject commit 309fc66590c65305531fd2e92ed5093c5d1c76d2 diff --git a/Submodules/SDK b/Submodules/SDK index 49abf7868..b567e2f3b 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 49abf786820cc498e5e38bd5cffe99382077ab29 +Subproject commit b567e2f3b8b9e91c03045913ec7d17efbd129d40 From e407b599b916f3fa3701cec6ea6f68d20ea554bb Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 20 Apr 2020 13:37:38 -0400 Subject: [PATCH 63/73] Added platform overrides --- .../Definitions/Platforms/BasePlatform.cs | 3 + .../Platforms/CurrentBuildTargetPlatform.cs | 28 ++++----- .../Interfaces/IMixedRealityPlatform.cs | 5 ++ .../Services/MixedRealityToolkit.cs | 59 +++++++++++++------ 4 files changed, 62 insertions(+), 33 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs index 717fcbd77..3845119c1 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/BasePlatform.cs @@ -17,5 +17,8 @@ public abstract class BasePlatform : IMixedRealityPlatform /// public virtual bool IsBuildTargetAvailable => false; + + /// + public virtual IMixedRealityPlatform[] PlatformOverrides { get; } = new IMixedRealityPlatform[0]; } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs index 517fbe2bf..64f18bfda 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Platforms/CurrentBuildTargetPlatform.cs @@ -22,27 +22,25 @@ public sealed class CurrentBuildTargetPlatform : BasePlatform /// True, if any build target is active. public static bool IsBuildTargetActive(List platforms) { + if (!Application.isEditor) { return false; } + var isEditor = false; var isBuildTargetActive = false; var isEditorPlatformActive = false; - for (var i = 0; i < platforms.Count; i++) + foreach (var platform in platforms) { - var platform = platforms[i]; - - if (platform is AllPlatforms) - { - return true; - } - - if (platform is CurrentBuildTargetPlatform) - { - isEditor = true; - isEditorPlatformActive = platform.IsAvailable; - } - else + switch (platform) { - isBuildTargetActive |= platform.IsBuildTargetAvailable; + case AllPlatforms _: + return true; + case CurrentBuildTargetPlatform _: + isEditor = true; + isEditorPlatformActive = platform.IsAvailable; + break; + default: + isBuildTargetActive |= platform.IsBuildTargetAvailable; + break; } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs index a29161264..61ee4a9cd 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Interfaces/IMixedRealityPlatform.cs @@ -20,5 +20,10 @@ public interface IMixedRealityPlatform /// Only returns true in editor. /// bool IsBuildTargetAvailable { get; } + + /// + /// The list of platforms that this specific platform will override and make the others return not available. + /// + IMixedRealityPlatform[] PlatformOverrides { get; } } } \ No newline at end of file diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index 208abf9ef..b0803ce92 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -536,27 +536,56 @@ private static void EnsureMixedRealityRequirements() .Where(type => typeof(IMixedRealityPlatform).IsAssignableFrom(type) && type.IsClass && !type.IsAbstract) .OrderBy(type => type.Name); + var platformOverrides = new List(); + + Debug.Log("Available Platforms:"); foreach (var platformType in platformTypes) { - IMixedRealityPlatform platformInstance = null; + IMixedRealityPlatform platform = null; try { - platformInstance = Activator.CreateInstance(platformType) as IMixedRealityPlatform; + platform = Activator.CreateInstance(platformType) as IMixedRealityPlatform; } catch (Exception e) { Debug.LogError(e); } - if (platformInstance == null) { continue; } + if (platform == null) { continue; } + + availablePlatforms.Add(platform); + Debug.Log($"{platform.GetType().Name} | {platform.IsAvailable} | {platform.IsBuildTargetAvailable}"); + + if (platform.IsAvailable || + platform.IsBuildTargetAvailable) + { + foreach (var platformOverride in platform.PlatformOverrides) + { + platformOverrides.Add(platformOverride.GetType()); + } + } + } + + Debug.LogWarning("Platform Overrides:"); + foreach (var platform in platformOverrides) + { + Debug.LogWarning(platform.Name); + } - availablePlatforms.Add(platformInstance); + Debug.LogError("Active Platforms:"); + foreach (var platform in availablePlatforms) + { + if (platformOverrides.Contains(platform.GetType())) + { + continue; + } - if (platformInstance.IsAvailable || - platformInstance.IsBuildTargetAvailable) + if (platform.IsAvailable || + platform.IsBuildTargetAvailable) { - activePlatforms.Add(platformInstance); + Debug.LogError(platform.GetType().Name); + activePlatforms.Add(platform); } } @@ -886,23 +915,17 @@ public static bool TryCreateAndRegisterService(Type concreteType, IReadOnlyLi Debug.Assert(ActivePlatforms.Count > 0); - for (var i = 0; i < runtimePlatforms?.Count; i++) + for (var i = 0; i < ActivePlatforms.Count; i++) { - var runtimePlatform = runtimePlatforms[i].GetType(); - - if (runtimePlatform == typeof(AllPlatforms)) - { - platforms.Add(runtimePlatforms[i]); - break; - } + var activePlatform = ActivePlatforms[i].GetType(); - for (var j = 0; j < ActivePlatforms.Count; j++) + for (var j = 0; j < runtimePlatforms?.Count; j++) { - var activePlatform = ActivePlatforms[j].GetType(); + var runtimePlatform = runtimePlatforms[j].GetType(); if (activePlatform == runtimePlatform) { - platforms.Add(runtimePlatforms[i]); + platforms.Add(runtimePlatforms[j]); break; } } From 2912fd42f2e80a43cce32130d3dd5a8a4a7bcd1b Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 20 Apr 2020 13:42:03 -0400 Subject: [PATCH 64/73] removed debug --- .../com.xrtk.core/Services/MixedRealityToolkit.cs | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs index b0803ce92..957f0ec88 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/MixedRealityToolkit.cs @@ -538,7 +538,6 @@ private static void EnsureMixedRealityRequirements() var platformOverrides = new List(); - Debug.Log("Available Platforms:"); foreach (var platformType in platformTypes) { IMixedRealityPlatform platform = null; @@ -555,7 +554,6 @@ private static void EnsureMixedRealityRequirements() if (platform == null) { continue; } availablePlatforms.Add(platform); - Debug.Log($"{platform.GetType().Name} | {platform.IsAvailable} | {platform.IsBuildTargetAvailable}"); if (platform.IsAvailable || platform.IsBuildTargetAvailable) @@ -567,13 +565,6 @@ private static void EnsureMixedRealityRequirements() } } - Debug.LogWarning("Platform Overrides:"); - foreach (var platform in platformOverrides) - { - Debug.LogWarning(platform.Name); - } - - Debug.LogError("Active Platforms:"); foreach (var platform in availablePlatforms) { if (platformOverrides.Contains(platform.GetType())) @@ -584,7 +575,6 @@ private static void EnsureMixedRealityRequirements() if (platform.IsAvailable || platform.IsBuildTargetAvailable) { - Debug.LogError(platform.GetType().Name); activePlatforms.Add(platform); } } From f96b7605f12115d76dba91a59cce4b839aa1ea50 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Mon, 20 Apr 2020 14:01:42 -0400 Subject: [PATCH 65/73] updated oculus checkout --- Submodules/Oculus | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index 309fc6659..6fa6ecac6 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit 309fc66590c65305531fd2e92ed5093c5d1c76d2 +Subproject commit 6fa6ecac630ac9195be4b83e897e2ffbb75e82a3 From 9e5f7969375fae489205f2255e5b9f86ec6c1a42 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 00:33:13 -0400 Subject: [PATCH 66/73] updated sdk checkout --- Submodules/SDK | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Submodules/SDK b/Submodules/SDK index b567e2f3b..9b92f9ca6 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit b567e2f3b8b9e91c03045913ec7d17efbd129d40 +Subproject commit 9b92f9ca64bdb9bdd357671132a71bd570692314 From f5cc4f795e796fca047b696807f59b1451150873 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 01:47:27 -0400 Subject: [PATCH 67/73] updated oculus checkout and fixed platform definitions for all configurations --- Submodules/Oculus | 2 +- Submodules/SDK | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Submodules/Oculus b/Submodules/Oculus index ec13e7a14..0ee9f162c 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit ec13e7a147f9e138dba459f2a77bbaaca1ad451d +Subproject commit 0ee9f162ca27a945754c7f216ed3e42799adac01 diff --git a/Submodules/SDK b/Submodules/SDK index 740a34bd1..b8d7b0e02 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 740a34bd10b17752a6681420e33f4db7ffaac217 +Subproject commit b8d7b0e0282469ba80875ab4293c410151bc1c15 From d5bd383d938dceee594d53357b9733e9582810c6 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 14:14:58 -0400 Subject: [PATCH 68/73] used camera parent transform instead of querying for camera system playspace --- .../TeleportSystem/MixedRealityTeleportSystem.cs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs index 89ffe4402..f81c2315c 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/TeleportSystem/MixedRealityTeleportSystem.cs @@ -216,15 +216,10 @@ private void ProcessTeleportationRequest(TeleportEventData eventData) : MixedRealityToolkit.CameraSystem.MainCameraRig.CameraTransform; var cameraPosition = cameraTransform.position; var cameraParent = cameraTransform.parent; + var parentPosition = cameraParent.position; Debug.Assert(cameraParent != null, "The Teleport System requires that the camera be parented under another object."); - var height = targetPosition.y; - - if (MixedRealityToolkit.CameraSystem != null) - { - height += MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position.y; - } - - targetPosition -= cameraPosition - cameraParent.position; + var height = targetPosition.y + parentPosition.y; + targetPosition -= cameraPosition - parentPosition; targetPosition.y = height; cameraParent.position = targetPosition; cameraParent.RotateAround(cameraPosition, Vector3.up, targetRotation.y - cameraTransform.eulerAngles.y); From dd3260f2994a6b13860220aaf93b467ccf970dee Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 18:22:37 -0400 Subject: [PATCH 69/73] updated submodules --- Submodules/Lumin | 2 +- Submodules/Oculus | 2 +- Submodules/SDK | 2 +- Submodules/WindowsMixedReality | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Submodules/Lumin b/Submodules/Lumin index dd380f865..5c3e62f24 160000 --- a/Submodules/Lumin +++ b/Submodules/Lumin @@ -1 +1 @@ -Subproject commit dd380f8659d3a88799ebaa89954b9e582ddc9c67 +Subproject commit 5c3e62f245b5366f8866eb6ccb11248e961b9e27 diff --git a/Submodules/Oculus b/Submodules/Oculus index e5f5d6d6b..bb259f097 160000 --- a/Submodules/Oculus +++ b/Submodules/Oculus @@ -1 +1 @@ -Subproject commit e5f5d6d6bb8d73608c7fe7d59827cce035bd4d13 +Subproject commit bb259f097541295fa37b17ff7299e5595ca79eec diff --git a/Submodules/SDK b/Submodules/SDK index 3a9247577..a7c827acf 160000 --- a/Submodules/SDK +++ b/Submodules/SDK @@ -1 +1 @@ -Subproject commit 3a92475778727efc447b08af86f3c4c528c36ec3 +Subproject commit a7c827acf297604717a1c75dfb515339f7c515e8 diff --git a/Submodules/WindowsMixedReality b/Submodules/WindowsMixedReality index 245e5bd2e..2f89d88d1 160000 --- a/Submodules/WindowsMixedReality +++ b/Submodules/WindowsMixedReality @@ -1 +1 @@ -Subproject commit 245e5bd2e2b5ee8928311cfea1cfd1064b3a2bc4 +Subproject commit 2f89d88d1f6ffabc1a46ae46525142b46c346812 From f87bf0d86772da6618b8e59ceb9e9e60b4eb7114 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 18:53:50 -0400 Subject: [PATCH 70/73] cleaned up docs cleaned up profile value assignments cleaned up magic numbers --- ...seMixedRealityCameraDataProviderProfile.cs | 2 +- .../MixedRealityCameraSystemProfile.cs | 4 +- .../CameraSystem/BaseCameraDataProvider.cs | 78 +++++++------------ 3 files changed, 29 insertions(+), 55 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs index 6f93daa28..ac17bc9de 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/BaseMixedRealityCameraDataProviderProfile.cs @@ -10,7 +10,7 @@ namespace XRTK.Definitions.CameraSystem { /// - /// Provides additional configuration options for camera data providers. + /// Provides configuration options for s. /// public class BaseMixedRealityCameraDataProviderProfile : BaseMixedRealityProfile { diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs index 4ecc200d9..4b426511a 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/CameraSystem/MixedRealityCameraSystemProfile.cs @@ -8,9 +8,7 @@ namespace XRTK.Definitions.CameraSystem { /// - /// This tells you if your head mounted display (HMD) - /// is a transparent device or an occluded device. - /// Based on those values, you can customize your camera and quality settings. + /// This to configuring your applications s. /// [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera System Profile", fileName = "MixedRealityCameraSystemProfile", order = (int)CreateProfileMenuItemIndices.Camera)] public class MixedRealityCameraSystemProfile : BaseMixedRealityServiceProfile diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index e11df7b79..69eb92774 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -32,56 +32,37 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera } else { - if (globalProfile.CameraRigType?.Type == null) + profile = globalProfile; + + if (profile.CameraRigType?.Type == null) { throw new Exception($"{nameof(globalProfile.CameraRigType)} cannot be null!"); } } - isCameraPersistent = profile != null - ? profile.IsCameraPersistent - : globalProfile.IsCameraPersistent; - cameraRigType = profile != null - ? profile.CameraRigType.Type - : globalProfile.CameraRigType.Type; - DefaultHeadHeight = profile != null - ? profile.DefaultHeadHeight - : globalProfile.DefaultHeadHeight; - - nearClipPlaneOpaqueDisplay = profile != null - ? profile.NearClipPlaneOpaqueDisplay - : globalProfile.NearClipPlaneOpaqueDisplay; - cameraClearFlagsOpaqueDisplay = profile != null - ? profile.CameraClearFlagsOpaqueDisplay - : globalProfile.CameraClearFlagsOpaqueDisplay; - backgroundColorOpaqueDisplay = profile != null - ? profile.BackgroundColorOpaqueDisplay - : globalProfile.BackgroundColorOpaqueDisplay; - opaqueQualityLevel = profile != null - ? profile.OpaqueQualityLevel - : globalProfile.OpaqueQualityLevel; - - nearClipPlaneTransparentDisplay = profile != null - ? profile.NearClipPlaneTransparentDisplay - : globalProfile.NearClipPlaneTransparentDisplay; - cameraClearFlagsTransparentDisplay = profile != null - ? profile.CameraClearFlagsTransparentDisplay - : globalProfile.CameraClearFlagsTransparentDisplay; - backgroundColorTransparentDisplay = profile != null - ? profile.BackgroundColorTransparentDisplay - : globalProfile.BackgroundColorTransparentDisplay; - transparentQualityLevel = profile != null - ? profile.TransparentQualityLevel - : globalProfile.TransparentQualityLevel; - - bodyAdjustmentAngle = profile != null - ? profile.BodyAdjustmentAngle - : globalProfile.BodyAdjustmentAngle; - bodyAdjustmentSpeed = profile != null - ? profile.BodyAdjustmentSpeed - : globalProfile.BodyAdjustmentSpeed; + isCameraPersistent = profile.IsCameraPersistent; + cameraRigType = profile.CameraRigType.Type; + DefaultHeadHeight = profile.DefaultHeadHeight; + + nearClipPlaneOpaqueDisplay = profile.NearClipPlaneOpaqueDisplay; + cameraClearFlagsOpaqueDisplay = profile.CameraClearFlagsOpaqueDisplay; + backgroundColorOpaqueDisplay = profile.BackgroundColorOpaqueDisplay; + opaqueQualityLevel = profile.OpaqueQualityLevel; + + nearClipPlaneTransparentDisplay = profile.NearClipPlaneTransparentDisplay; + cameraClearFlagsTransparentDisplay = profile.CameraClearFlagsTransparentDisplay; + backgroundColorTransparentDisplay = profile.BackgroundColorTransparentDisplay; + transparentQualityLevel = profile.TransparentQualityLevel; + + bodyAdjustmentAngle = profile.BodyAdjustmentAngle; + bodyAdjustmentSpeed = profile.BodyAdjustmentSpeed; } + /// + /// The fallback value if the is zero. + /// + private const float BodyHeightFallback = 1.6f; + private readonly IMixedRealityCameraSystem cameraSystem = null; private readonly Type cameraRigType; @@ -329,14 +310,9 @@ protected virtual void SyncRigTransforms() bodyLocalPosition.x = cameraLocalPosition.x; - if (HeadHeight > 0f) - { - bodyLocalPosition.y = cameraLocalPosition.y - HeadHeight; - } - else - { - bodyLocalPosition.y = cameraLocalPosition.y - 1.6f; - } + bodyLocalPosition.y = HeadHeight > 0f + ? cameraLocalPosition.y - HeadHeight + : cameraLocalPosition.y - BodyHeightFallback; bodyLocalPosition.z = cameraLocalPosition.z; From 82befc54890cdf8b701d35ba754f8997c699f2f9 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 19:17:06 -0400 Subject: [PATCH 71/73] Changed from input system refactor --- ...ixedRealityCameraSystemProfileInspector.cs | 4 ++-- .../CameraSystem/BaseCameraDataProvider.cs | 21 +++++++------------ .../CameraSystem/MixedRealityCameraSystem.cs | 2 +- 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs index 25a7a5172..efd1c0389 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/MixedRealityCameraSystemProfileInspector.cs @@ -29,10 +29,10 @@ public override void OnInspectorGUI() EditorGUILayout.PropertyField(globalCameraProfile); - serializedObject.ApplyModifiedProperties(); - base.OnInspectorGUI(); + serializedObject.ApplyModifiedProperties(); + if (MixedRealityToolkit.IsInitialized && EditorGUI.EndChangeCheck()) { EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetProfile(MixedRealityToolkit.Instance.ActiveProfile); diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs index 69eb92774..7b24a07ca 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/CameraSystem/BaseCameraDataProvider.cs @@ -21,23 +21,15 @@ public BaseCameraDataProvider(string name, uint priority, BaseMixedRealityCamera : base(name, priority, profile, parentService) { cameraSystem = MixedRealityToolkit.CameraSystem; - var globalProfile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile.GlobalCameraProfile; - if (profile != null) + if (profile == null) { - if (profile.CameraRigType?.Type == null) - { - throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); - } + profile = MixedRealityToolkit.Instance.ActiveProfile.CameraSystemProfile.GlobalCameraProfile; } - else - { - profile = globalProfile; - if (profile.CameraRigType?.Type == null) - { - throw new Exception($"{nameof(globalProfile.CameraRigType)} cannot be null!"); - } + if (profile.CameraRigType?.Type == null) + { + throw new Exception($"{nameof(profile.CameraRigType)} cannot be null!"); } isCameraPersistent = profile.IsCameraPersistent; @@ -118,6 +110,9 @@ public virtual float HeadHeight #region IMixedRealitySerivce Implementation + /// + public override uint Priority => 0; + /// public override void Initialize() { diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs index 89d1f7810..21483492b 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -23,7 +23,7 @@ public MixedRealityCameraSystem(MixedRealityCameraSystemProfile profile) #region IMixedRealityService Implementation /// - public override uint Priority => 1; + public override uint Priority => 0; /// public override void Destroy() From bad525fb8b788b4e23b23ae74e856a10f735b263 Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 19:21:16 -0400 Subject: [PATCH 72/73] Update XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs --- .../BaseMixedRealityCameraDataProviderProfileInspector.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs index 0c97aad6a..3b81f8117 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs @@ -51,7 +51,6 @@ protected override void OnEnable() bodyAdjustmentSpeed = serializedObject.FindProperty(nameof(bodyAdjustmentSpeed)); } - public override void OnInspectorGUI() { RenderHeader("The Camera Data Provider Profile helps tweak camera settings no matter what platform you're building for."); @@ -100,4 +99,4 @@ public override void OnInspectorGUI() } } } -} \ No newline at end of file +} From 83612ed247386d91c909f27921e77331b85d092a Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Thu, 23 Apr 2020 21:58:27 -0400 Subject: [PATCH 73/73] added camera cache fallbacks --- .../Hands/SimulatedHandControllerPose.cs | 9 ++++++-- ...alityCameraDataProviderProfileInspector.cs | 1 + .../Providers/Controllers/BaseController.cs | 13 +++++++---- .../Controllers/BaseControllerDataProvider.cs | 6 ++++- .../Hands/SimulatedHandController.cs | 15 ++++++++---- .../MixedRealityBoundarySystem.cs | 23 +++++++++++++++---- .../MixedRealityDiagnosticsSystem.cs | 6 ++++- .../MixedRealitySpatialAwarenessSystem.cs | 6 ++++- 8 files changed, 61 insertions(+), 18 deletions(-) diff --git a/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs b/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs index f8ad29d78..238bfb1a7 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Definitions/Controllers/Simulation/Hands/SimulatedHandControllerPose.cs @@ -8,6 +8,7 @@ using XRTK.Definitions.Controllers.Hands; using XRTK.Definitions.Utilities; using XRTK.Services; +using XRTK.Utilities; namespace XRTK.Definitions.Controllers.Simulation.Hands { @@ -151,7 +152,9 @@ private static void OffsetJointsRelativeToOpenPosePalmPosition(SimulatedHandCont /// public void ComputeJointPoses(Handedness handedness, Quaternion rotation, Vector3 position, MixedRealityPose[] jointsOut) { - Quaternion cameraRotation = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.rotation; + Quaternion cameraRotation = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.rotation + : CameraCache.Main.transform.rotation; for (int i = 0; i < HandData.JointCount; i++) { @@ -185,7 +188,9 @@ public void ComputeJointPoses(Handedness handedness, Quaternion rotation, Vector public void ParseFromJointPoses(MixedRealityPose[] joints, Handedness handedness, Quaternion rotation, Vector3 position) { var invRotation = Quaternion.Inverse(rotation); - var invCameraRotation = Quaternion.Inverse(MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.rotation); + var invCameraRotation = Quaternion.Inverse(MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.rotation + : CameraCache.Main.transform.rotation); for (int i = 0; i < HandData.JointCount; i++) { diff --git a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs index 3b81f8117..bbf28d793 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Inspectors/Profiles/BaseMixedRealityCameraDataProviderProfileInspector.cs @@ -30,6 +30,7 @@ public class BaseMixedRealityCameraDataProviderProfileInspector : BaseMixedReali private readonly GUIContent nearClipTitle = new GUIContent("Near Clip"); private readonly GUIContent clearFlagsTitle = new GUIContent("Clear Flags"); + protected override void OnEnable() { base.OnEnable(); diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs index e6e253900..87f3504a9 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseController.cs @@ -13,6 +13,7 @@ using XRTK.Interfaces.InputSystem.Handlers; using XRTK.Interfaces.Providers.Controllers; using XRTK.Services; +using XRTK.Utilities; using XRTK.Utilities.Gltf.Schema; using XRTK.Utilities.Gltf.Serialization; @@ -242,20 +243,24 @@ internal async Task TryRenderControllerModelAsync(Type controllerType, byte[] gl // If we've got a controller model, then place it in the scene and get/attach the visualizer. if (controllerModel != null) { - //If the model was loaded from a system template + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + + // If the model was loaded from a system template if (useSystemDefaultModels && gltfObject != null) { controllerModel.name = $"{controllerType.Name}_Visualization"; - controllerModel.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform); + controllerModel.transform.SetParent(playspaceTransform); var visualizationType = visualizationProfile.GetControllerVisualizationTypeOverride(controllerType, ControllerHandedness) ?? visualizationProfile.ControllerVisualizationType; controllerModel.AddComponent(visualizationType.Type); Visualizer = controllerModel.GetComponent(); } - //If the model was a prefab else { - var controllerObject = UnityEngine.Object.Instantiate(controllerModel, MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform); + // If the model was a prefab + var controllerObject = UnityEngine.Object.Instantiate(controllerModel, playspaceTransform); controllerObject.name = $"{controllerType.Name}_Visualization"; Visualizer = controllerObject.GetComponent(); } diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs index 0106f2d21..ac4cdff88 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/BaseControllerDataProvider.cs @@ -8,6 +8,7 @@ using XRTK.Interfaces.InputSystem; using XRTK.Interfaces.Providers.Controllers; using XRTK.Services; +using XRTK.Utilities; using Object = UnityEngine.Object; namespace XRTK.Providers.Controllers @@ -45,7 +46,10 @@ protected virtual IMixedRealityPointer[] RequestPointers(SystemType controllerTy if (((useSpecificType && pointerProfile.ControllerType.Type == controllerType.Type) || (!useSpecificType && pointerProfile.ControllerType.Type == null)) && (pointerProfile.Handedness == Handedness.Any || pointerProfile.Handedness == Handedness.Both || pointerProfile.Handedness == controllingHand)) { - var pointerObject = Object.Instantiate(pointerProfile.PointerPrefab, MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform); + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + var pointerObject = Object.Instantiate(pointerProfile.PointerPrefab, playspaceTransform); var pointer = pointerObject.GetComponent(); if (pointer != null) diff --git a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs index 9a5cb573c..8c462e0dc 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Providers/Controllers/Simulation/Hands/SimulatedHandController.cs @@ -328,9 +328,13 @@ private void HandleSimulationInput(MixedRealityPose rootPoseDelta) // Apply mouse delta x/y in screen space, but depth offset in world space screenPosition.x += rootPoseDelta.Position.x; screenPosition.y += rootPoseDelta.Position.y; - Vector3 newWorldPoint = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.ScreenToWorldPoint(ScreenPosition); - newWorldPoint += MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.transform.forward * rootPoseDelta.Position.z; - screenPosition = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.WorldToScreenPoint(newWorldPoint); + + var camera = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera + : CameraCache.Main; + Vector3 newWorldPoint = camera.ScreenToWorldPoint(ScreenPosition); + newWorldPoint += camera.transform.forward * rootPoseDelta.Position.z; + screenPosition = camera.WorldToScreenPoint(newWorldPoint); HandRotateEulerAngles += rootPoseDelta.Rotation.eulerAngles; JitterOffset = Random.insideUnitSphere * simulatedHandControllerDataProvider.JitterAmount; @@ -349,7 +353,10 @@ private void UpdatePoseFrame() currentPoseBlending = TargetPoseBlending; var rotation = Quaternion.Euler(HandRotateEulerAngles); - var position = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera.ScreenToWorldPoint(ScreenPosition + JitterOffset); + var camera = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayerCamera + : CameraCache.Main; + var position = camera.ScreenToWorldPoint(ScreenPosition + JitterOffset); Pose.ComputeJointPoses(ControllerHandedness, rotation, position, HandData.Joints); } } diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs index 5e956addb..c5009fa03 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/BoundarySystem/MixedRealityBoundarySystem.cs @@ -323,7 +323,10 @@ private GameObject BoundaryVisualizationParent } var visualizationParent = new GameObject("Boundary System Visualizations"); - visualizationParent.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform, false); + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + visualizationParent.transform.SetParent(playspaceTransform, false); return boundaryVisualizationParent = visualizationParent; } } @@ -624,7 +627,10 @@ public bool Contains(Vector3 location, Boundary.Type boundaryType = Boundary.Typ } // Handle the user teleporting (boundary moves with them). - location = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.InverseTransformPoint(location); + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + location = playspaceTransform.InverseTransformPoint(location); if (FloorHeight.Value > location.y || BoundaryHeight < location.y) @@ -663,7 +669,10 @@ public bool TryGetRectangularBoundsParams(out Vector2 center, out float angle, o } // Handle the user teleporting (boundary moves with them). - var transformedCenter = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.TransformPoint( + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + var transformedCenter = playspaceTransform.TransformPoint( new Vector3(rectangularBounds.Center.x, 0f, rectangularBounds.Center.y)); center = new Vector2(transformedCenter.x, transformedCenter.z); @@ -690,7 +699,9 @@ public GameObject GetFloorVisualization() } var floorScale = FloorScale; - var position = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position; + var position = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position + : CameraCache.Main.transform.parent.position; // Render the floor. currentFloorObject = GameObject.CreatePrimitive(PrimitiveType.Cube); @@ -779,7 +790,9 @@ public GameObject GetTrackedAreaVisualization() layer = DefaultIgnoreRaycastLayer }; - var position = MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position; + var position = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform.position + : CameraCache.Main.transform.parent.position; currentTrackedAreaObject.AddComponent(); currentTrackedAreaObject.transform.Translate( diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs index f15e6af93..6c2e142a4 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs @@ -8,6 +8,7 @@ using XRTK.EventDatum.DiagnosticsSystem; using XRTK.Interfaces.DiagnosticsSystem; using XRTK.Interfaces.DiagnosticsSystem.Handlers; +using XRTK.Utilities; using Object = UnityEngine.Object; namespace XRTK.Services.DiagnosticsSystem @@ -124,7 +125,10 @@ public Transform DiagnosticsRoot if (diagnosticsRoot == null) { diagnosticsRoot = new GameObject("Diagnostics").transform; - diagnosticsRoot.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform, false); + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + diagnosticsRoot.transform.SetParent(playspaceTransform, false); } return diagnosticsRoot; diff --git a/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs b/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs index eb6a98bf4..6515ae1bd 100644 --- a/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs +++ b/XRTK-Core/Packages/com.xrtk.core/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs @@ -10,6 +10,7 @@ using XRTK.Interfaces.SpatialAwarenessSystem; using XRTK.Interfaces.SpatialAwarenessSystem.Handlers; using XRTK.Providers.SpatialObservers; +using XRTK.Utilities; namespace XRTK.Services.SpatialAwarenessSystem { @@ -45,7 +46,10 @@ private GameObject CreateSpatialAwarenessParent get { var spatialAwarenessSystemObject = new GameObject("Spatial Awareness System"); - spatialAwarenessSystemObject.transform.SetParent(MixedRealityToolkit.CameraSystem?.MainCameraRig.PlayspaceTransform, false); + var playspaceTransform = MixedRealityToolkit.CameraSystem != null + ? MixedRealityToolkit.CameraSystem.MainCameraRig.PlayspaceTransform + : CameraCache.Main.transform.parent; + spatialAwarenessSystemObject.transform.SetParent(playspaceTransform, false); return spatialAwarenessSystemObject; } }