Skip to content

Commit 24db6e3

Browse files
author
David Kline
authored
Merge pull request #3667 from davidkline-ms/serviceregistrar.2.1
Service Registration (#3545) - Part 2 [Breaking Change for Service Implementors]
2 parents 1439b5c + 5ed24ec commit 24db6e3

35 files changed

+495
-347
lines changed

Assets/MixedRealityToolkit.Providers/OpenVR/OpenVRDeviceManager.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.MixedReality.Toolkit.Core.Definitions;
66
using Microsoft.MixedReality.Toolkit.Core.Definitions.Devices;
77
using Microsoft.MixedReality.Toolkit.Core.Definitions.Utilities;
8+
using Microsoft.MixedReality.Toolkit.Core.Interfaces;
89
using Microsoft.MixedReality.Toolkit.Core.Interfaces.InputSystem;
910
using Microsoft.MixedReality.Toolkit.Core.Providers.UnityInput;
1011
using Microsoft.MixedReality.Toolkit.Core.Services;
@@ -24,10 +25,16 @@ public class OpenVRDeviceManager : UnityJoystickManager
2425
/// <summary>
2526
/// Constructor.
2627
/// </summary>
28+
/// <param name="registrar">The <see cref="IMixedRealityServiceRegistrar"/> instance that loaded the service.</param>
29+
/// <param name="spatialAwarenessSystem">The <see cref="IMixedRealitySpatialAwarenessSystem"/> to which the observer is providing data.</param>
2730
/// <param name="name">Friendly name of the service.</param>
2831
/// <param name="priority">Service priority. Used to determine order of instantiation.</param>
2932
/// <param name="profile">The service's configuration profile.</param>
30-
public OpenVRDeviceManager(string name, uint priority, BaseMixedRealityProfile profile) : base(name, priority, profile) { }
33+
public OpenVRDeviceManager(
34+
IMixedRealityServiceRegistrar registrar,
35+
string name = null,
36+
uint priority = DefaultPriority,
37+
BaseMixedRealityProfile profile = null) : base(registrar, name, priority, profile) { }
3138

3239
#region Controller Utilities
3340

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityDeviceManager.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,15 @@ public class WindowsMixedRealityDeviceManager : BaseDeviceManager, IMixedReality
3131
/// <summary>
3232
/// Constructor.
3333
/// </summary>
34+
/// <param name="registrar">The <see cref="IMixedRealityServiceRegistrar"/> instance that loaded the service.</param>
3435
/// <param name="name">Friendly name of the service.</param>
3536
/// <param name="priority">Service priority. Used to determine order of instantiation.</param>
3637
/// <param name="profile">The service's configuration profile.</param>
37-
public WindowsMixedRealityDeviceManager(string name, uint priority, BaseMixedRealityProfile profile) : base(name, priority, profile) { }
38+
public WindowsMixedRealityDeviceManager(
39+
IMixedRealityServiceRegistrar registrar,
40+
string name = null,
41+
uint priority = DefaultPriority,
42+
BaseMixedRealityProfile profile = null) : base(registrar, name, priority, profile) { }
3843

3944
#if UNITY_WSA
4045

Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealitySpatialMeshObserver.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.MixedReality.Toolkit.Core.Definitions;
66
using Microsoft.MixedReality.Toolkit.Core.Definitions.SpatialAwarenessSystem;
77
using Microsoft.MixedReality.Toolkit.Core.Definitions.Utilities;
8+
using Microsoft.MixedReality.Toolkit.Core.Interfaces;
89
using Microsoft.MixedReality.Toolkit.Core.Interfaces.SpatialAwarenessSystem;
910
using Microsoft.MixedReality.Toolkit.Core.Interfaces.SpatialAwarenessSystem.Observers;
1011
using Microsoft.MixedReality.Toolkit.Core.Providers;
@@ -28,10 +29,16 @@ public class WindowsMixedRealitySpatialMeshObserver : BaseSpatialObserver, IMixe
2829
/// <summary>
2930
/// Constructor.
3031
/// </summary>
32+
/// <param name="registrar">The <see cref="IMixedRealityServiceRegistrar"/> instance that loaded the service.</param>
3133
/// <param name="name">Friendly name of the service.</param>
3234
/// <param name="priority">Service priority. Used to determine order of instantiation.</param>
3335
/// <param name="profile">The service's configuration profile.</param>
34-
public WindowsMixedRealitySpatialMeshObserver(string name, uint priority, BaseMixedRealityProfile profile) : base(name, priority, profile)
36+
public WindowsMixedRealitySpatialMeshObserver(
37+
IMixedRealityServiceRegistrar registrar,
38+
IMixedRealitySpatialAwarenessSystem spatialAwarenessSystem,
39+
string name = null,
40+
uint priority = DefaultPriority,
41+
BaseMixedRealityProfile profile = null) : base(registrar, spatialAwarenessSystem, name, priority, profile)
3542
{
3643
ReadProfile();
3744
}

Assets/MixedRealityToolkit.Providers/WindowsVoiceInput/WindowsDictationInputProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.MixedReality.Toolkit.Core.Attributes;
55
using Microsoft.MixedReality.Toolkit.Core.Definitions;
66
using Microsoft.MixedReality.Toolkit.Core.Definitions.Utilities;
7+
using Microsoft.MixedReality.Toolkit.Core.Interfaces;
78
using Microsoft.MixedReality.Toolkit.Core.Interfaces.Devices;
89
using Microsoft.MixedReality.Toolkit.Core.Interfaces.InputSystem;
910
using Microsoft.MixedReality.Toolkit.Core.Providers;
@@ -27,10 +28,15 @@ public class WindowsDictationInputProvider : BaseDeviceManager, IMixedRealityDic
2728
/// <summary>
2829
/// Constructor.
2930
/// </summary>
31+
/// <param name="registrar">The <see cref="IMixedRealityServiceRegistrar"/> instance that loaded the service.</param>
3032
/// <param name="name">Friendly name of the service.</param>
3133
/// <param name="priority">Service priority. Used to determine order of instantiation.</param>
3234
/// <param name="profile">The service's configuration profile.</param>
33-
public WindowsDictationInputProvider(string name, uint priority, BaseMixedRealityProfile profile) : base(name, priority, profile) { }
35+
public WindowsDictationInputProvider(
36+
IMixedRealityServiceRegistrar registrar,
37+
string name = null,
38+
uint priority = DefaultPriority,
39+
BaseMixedRealityProfile profile = null) : base(registrar, name, priority, profile) { }
3440

3541
/// <summary>
3642
/// Is the Dictation Manager currently running?

Assets/MixedRealityToolkit.Providers/WindowsVoiceInput/WindowsSpeechInputProvider.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using Microsoft.MixedReality.Toolkit.Core.Definitions;
66
using Microsoft.MixedReality.Toolkit.Core.Definitions.InputSystem;
77
using Microsoft.MixedReality.Toolkit.Core.Definitions.Utilities;
8+
using Microsoft.MixedReality.Toolkit.Core.Interfaces;
89
using Microsoft.MixedReality.Toolkit.Core.Interfaces.Devices;
910
using Microsoft.MixedReality.Toolkit.Core.Interfaces.InputSystem;
1011
using Microsoft.MixedReality.Toolkit.Core.Providers;
@@ -26,10 +27,15 @@ public class WindowsSpeechInputProvider : BaseDeviceManager, IMixedRealitySpeech
2627
/// <summary>
2728
/// Constructor.
2829
/// </summary>
30+
/// <param name="registrar">The <see cref="IMixedRealityServiceRegistrar"/> instance that loaded the service.</param>
2931
/// <param name="name">Friendly name of the service.</param>
3032
/// <param name="priority">Service priority. Used to determine order of instantiation.</param>
3133
/// <param name="profile">The service's configuration profile.</param>
32-
public WindowsSpeechInputProvider(string name, uint priority, BaseMixedRealityProfile profile) : base(name, priority, profile) { }
34+
public WindowsSpeechInputProvider(
35+
IMixedRealityServiceRegistrar registrar,
36+
string name = null,
37+
uint priority = DefaultPriority,
38+
BaseMixedRealityProfile profile = null) : base(registrar, name, priority, profile) { }
3339

3440
/// <summary>
3541
/// The keywords to be recognized and optional keyboard shortcuts.

Assets/MixedRealityToolkit.Services/BoundarySystem/MixedRealityBoundarySystem.cs

Lines changed: 66 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.MixedReality.Toolkit.Core.Definitions.BoundarySystem;
55
using Microsoft.MixedReality.Toolkit.Core.Definitions.Utilities;
66
using Microsoft.MixedReality.Toolkit.Core.EventDatum.Boundary;
7+
using Microsoft.MixedReality.Toolkit.Core.Interfaces;
78
using Microsoft.MixedReality.Toolkit.Core.Interfaces.BoundarySystem;
89
using Microsoft.MixedReality.Toolkit.Core.Services;
910
using Microsoft.MixedReality.Toolkit.Core.Utilities;
@@ -19,8 +20,23 @@ namespace Microsoft.MixedReality.Toolkit.Services.BoundarySystem
1920
/// <summary>
2021
/// The Boundary system controls the presentation and display of the users boundary in a scene.
2122
/// </summary>
22-
public class MixedRealityBoundarySystem : BaseEventSystem, IMixedRealityBoundarySystem
23+
public class MixedRealityBoundarySystem : BaseCoreSystem, IMixedRealityBoundarySystem
2324
{
25+
public MixedRealityBoundarySystem(
26+
IMixedRealityServiceRegistrar registrar,
27+
MixedRealityBoundaryVisualizationProfile profile,
28+
Transform playspace,
29+
ExperienceScale scale) : base(registrar, profile)
30+
{
31+
Scale = scale;
32+
33+
if (playspace == null)
34+
{
35+
Debug.LogError("The MixedRealityBoundarySystem object requires a valid playspace Transform.");
36+
}
37+
Playspace = playspace;
38+
}
39+
2440
#region IMixedRealityService Implementation
2541

2642
private BoundaryEventData boundaryEventData = null;
@@ -30,25 +46,27 @@ public override void Initialize()
3046
{
3147
if (!Application.isPlaying) { return; }
3248

49+
MixedRealityBoundaryVisualizationProfile profile = ConfigurationProfile as MixedRealityBoundaryVisualizationProfile;
50+
if (profile == null) { return; }
51+
3352
boundaryEventData = new BoundaryEventData(EventSystem.current);
3453

35-
Scale = MixedRealityToolkit.Instance.ActiveProfile.TargetExperienceScale;
36-
BoundaryHeight = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.BoundaryHeight;
54+
BoundaryHeight = profile.BoundaryHeight;
3755

3856
SetTrackingSpace();
3957
CalculateBoundaryBounds();
4058
Boundary.visible = true;
4159

42-
ShowFloor = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.ShowFloor;
43-
FloorPhysicsLayer = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.FloorPhysicsLayer;
44-
ShowPlayArea = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.ShowPlayArea;
45-
PlayAreaPhysicsLayer = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.PlayAreaPhysicsLayer;
46-
ShowTrackedArea = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.ShowTrackedArea;
47-
TrackedAreaPhysicsLayer = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.TrackedAreaPhysicsLayer;
48-
ShowBoundaryWalls = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.ShowBoundaryWalls;
49-
BoundaryWallsPhysicsLayer = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.BoundaryWallsPhysicsLayer;
50-
ShowBoundaryCeiling = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.ShowBoundaryCeiling;
51-
CeilingPhysicsLayer = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.CeilingPhysicsLayer;
60+
ShowFloor = profile.ShowFloor;
61+
FloorPhysicsLayer = profile.FloorPhysicsLayer;
62+
ShowPlayArea = profile.ShowPlayArea;
63+
PlayAreaPhysicsLayer = profile.PlayAreaPhysicsLayer;
64+
ShowTrackedArea = profile.ShowTrackedArea;
65+
TrackedAreaPhysicsLayer = profile.TrackedAreaPhysicsLayer;
66+
ShowBoundaryWalls = profile.ShowBoundaryWalls;
67+
BoundaryWallsPhysicsLayer = profile.BoundaryWallsPhysicsLayer;
68+
ShowBoundaryCeiling = profile.ShowBoundaryCeiling;
69+
CeilingPhysicsLayer = profile.CeilingPhysicsLayer;
5270

5371
if (ShowFloor)
5472
{
@@ -245,6 +263,13 @@ public int GetHashCode(object obj)
245263

246264
#region IMixedRealityBoundarySystem Implementation
247265

266+
/// <summary>
267+
/// The transform of the playspace scene object. We use this transform to parent
268+
/// boundary visualizations that teleport with the user and to perform calculations
269+
/// to ensure proper alignment with the world.
270+
/// </summary>
271+
private Transform Playspace = null;
272+
248273
/// <summary>
249274
/// The thickness of three dimensional generated boundary objects.
250275
/// </summary>
@@ -273,7 +298,7 @@ private GameObject BoundaryVisualizationParent
273298
}
274299

275300
var visualizationParent = new GameObject("Boundary System Visualizations");
276-
visualizationParent.transform.parent = MixedRealityToolkit.Instance.MixedRealityPlayspace;
301+
visualizationParent.transform.parent = Playspace;
277302
return boundaryVisualizationParent = visualizationParent;
278303
}
279304
}
@@ -570,7 +595,7 @@ public bool Contains(Vector3 location, Boundary.Type boundaryType = Boundary.Typ
570595
}
571596

572597
// Handle the user teleporting (boundary moves with them).
573-
location = MixedRealityToolkit.Instance.MixedRealityPlayspace.InverseTransformPoint(location);
598+
location = Playspace.InverseTransformPoint(location);
574599

575600
if (FloorHeight.Value > location.y ||
576601
BoundaryHeight < location.y)
@@ -613,7 +638,7 @@ public bool TryGetRectangularBoundsParams(out Vector2 center, out float angle, o
613638
}
614639

615640
// Handle the user teleporting (boundary moves with them).
616-
Vector3 transformedCenter = MixedRealityToolkit.Instance.MixedRealityPlayspace.TransformPoint(
641+
Vector3 transformedCenter = Playspace.TransformPoint(
617642
new Vector3(rectangularBounds.Center.x, 0f, rectangularBounds.Center.y));
618643

619644
center = new Vector2(transformedCenter.x, transformedCenter.z);
@@ -633,24 +658,27 @@ public GameObject GetFloorVisualization()
633658
return currentFloorObject;
634659
}
635660

661+
MixedRealityBoundaryVisualizationProfile profile = ConfigurationProfile as MixedRealityBoundaryVisualizationProfile;
662+
if (profile == null) { return null; }
663+
636664
if (!FloorHeight.HasValue)
637665
{
638666
// We were unable to locate the floor.
639667
return null;
640668
}
641669

642-
Vector2 floorScale = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.FloorScale;
670+
Vector2 floorScale = profile.FloorScale;
643671

644672
// Render the floor.
645673
currentFloorObject = GameObject.CreatePrimitive(PrimitiveType.Cube);
646674
currentFloorObject.name = "Boundary System Floor";
647675
currentFloorObject.transform.localScale = new Vector3(floorScale.x, boundaryObjectThickness, floorScale.y);
648676
currentFloorObject.transform.Translate(new Vector3(
649-
MixedRealityToolkit.Instance.MixedRealityPlayspace.position.x,
677+
Playspace.position.x,
650678
FloorHeight.Value - (currentFloorObject.transform.localScale.y * 0.5f),
651-
MixedRealityToolkit.Instance.MixedRealityPlayspace.position.z));
679+
Playspace.position.z));
652680
currentFloorObject.layer = FloorPhysicsLayer;
653-
currentFloorObject.GetComponent<Renderer>().sharedMaterial = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.FloorMaterial;
681+
currentFloorObject.GetComponent<Renderer>().sharedMaterial = profile.FloorMaterial;
654682

655683
return currentFloorObject;
656684
}
@@ -665,6 +693,9 @@ public GameObject GetPlayAreaVisualization()
665693
return currentPlayAreaObject;
666694
}
667695

696+
MixedRealityBoundaryVisualizationProfile profile = ConfigurationProfile as MixedRealityBoundaryVisualizationProfile;
697+
if (profile == null) { return null; }
698+
668699
// Get the rectangular bounds.
669700
Vector2 center;
670701
float angle;
@@ -690,7 +721,7 @@ public GameObject GetPlayAreaVisualization()
690721
currentPlayAreaObject.transform.Translate(new Vector3(center.x, boundaryObjectRenderOffset, center.y));
691722
currentPlayAreaObject.transform.Rotate(new Vector3(90, -angle, 0));
692723
currentPlayAreaObject.transform.localScale = new Vector3(width, height, 1.0f);
693-
currentPlayAreaObject.GetComponent<Renderer>().sharedMaterial = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.PlayAreaMaterial;
724+
currentPlayAreaObject.GetComponent<Renderer>().sharedMaterial = profile.PlayAreaMaterial;
694725

695726
currentPlayAreaObject.transform.parent = BoundaryVisualizationParent.transform;
696727

@@ -707,6 +738,9 @@ public GameObject GetTrackedAreaVisualization()
707738
return currentTrackedAreaObject;
708739
}
709740

741+
MixedRealityBoundaryVisualizationProfile profile = ConfigurationProfile as MixedRealityBoundaryVisualizationProfile;
742+
if (profile == null) { return null; }
743+
710744
if (Bounds.Length == 0)
711745
{
712746
// If we do not have boundary edges, we cannot render them.
@@ -727,15 +761,15 @@ public GameObject GetTrackedAreaVisualization()
727761
currentTrackedAreaObject.layer = ignoreRaycastLayerValue;
728762
currentTrackedAreaObject.AddComponent<LineRenderer>();
729763
currentTrackedAreaObject.transform.Translate(new Vector3(
730-
MixedRealityToolkit.Instance.MixedRealityPlayspace.position.x,
764+
Playspace.position.x,
731765
boundaryObjectRenderOffset,
732-
MixedRealityToolkit.Instance.MixedRealityPlayspace.position.z));
766+
Playspace.position.z));
733767
currentPlayAreaObject.layer = TrackedAreaPhysicsLayer;
734768

735769
// Configure the renderer properties.
736770
float lineWidth = 0.01f;
737771
LineRenderer lineRenderer = currentTrackedAreaObject.GetComponent<LineRenderer>();
738-
lineRenderer.sharedMaterial = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.TrackedAreaMaterial;
772+
lineRenderer.sharedMaterial = profile.TrackedAreaMaterial;
739773
lineRenderer.useWorldSpace = false;
740774
lineRenderer.startWidth = lineWidth;
741775
lineRenderer.endWidth = lineWidth;
@@ -757,6 +791,9 @@ public GameObject GetBoundaryWallVisualization()
757791
return currentBoundaryWallObject;
758792
}
759793

794+
MixedRealityBoundaryVisualizationProfile profile = ConfigurationProfile as MixedRealityBoundaryVisualizationProfile;
795+
if (profile == null) { return null; }
796+
760797
if (!FloorHeight.HasValue)
761798
{
762799
// We need a floor on which to place the walls.
@@ -778,7 +815,7 @@ public GameObject GetBoundaryWallVisualization()
778815
{
779816
GameObject wall = GameObject.CreatePrimitive(PrimitiveType.Cube);
780817
wall.name = $"Wall {i}";
781-
wall.GetComponent<Renderer>().sharedMaterial = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.BoundaryWallMaterial;
818+
wall.GetComponent<Renderer>().sharedMaterial = profile.BoundaryWallMaterial;
782819
wall.transform.localScale = new Vector3((Bounds[i].PointB - Bounds[i].PointA).magnitude, BoundaryHeight, wallDepth);
783820
wall.layer = ignoreRaycastLayerValue;
784821

@@ -806,6 +843,9 @@ public GameObject GetBoundaryCeilingVisualization()
806843
return currentCeilingObject;
807844
}
808845

846+
MixedRealityBoundaryVisualizationProfile profile = ConfigurationProfile as MixedRealityBoundaryVisualizationProfile;
847+
if (profile == null) { return null; }
848+
809849
if (Bounds.Length == 0)
810850
{
811851
// If we do not have boundary edges, we cannot render a ceiling.
@@ -830,7 +870,7 @@ public GameObject GetBoundaryCeilingVisualization()
830870
boundaryBoundingBox.center.x,
831871
BoundaryHeight + (currentCeilingObject.transform.localScale.y * 0.5f),
832872
boundaryBoundingBox.center.z));
833-
currentCeilingObject.GetComponent<Renderer>().sharedMaterial = MixedRealityToolkit.Instance.ActiveProfile.BoundaryVisualizationProfile.BoundaryCeilingMaterial;
873+
currentCeilingObject.GetComponent<Renderer>().sharedMaterial = profile.BoundaryCeilingMaterial;
834874
currentCeilingObject.layer = CeilingPhysicsLayer;
835875
currentCeilingObject.transform.parent = BoundaryVisualizationParent.transform;
836876

0 commit comments

Comments
 (0)