From e8f19a380b7e057dc42076c73d01a1719208d53e Mon Sep 17 00:00:00 2001 From: Alexander Seeck Date: Sun, 17 Mar 2019 17:19:36 +0100 Subject: [PATCH 001/183] reduces redundant code --- .../Services/MixedRealityToolkit.cs | 110 ++++-------------- 1 file changed, 21 insertions(+), 89 deletions(-) diff --git a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs index fb89ab71dee..6d557cea479 100644 --- a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs +++ b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs @@ -56,6 +56,8 @@ public bool HasActiveProfile } } + private bool HasProfileAndIsInitialized => activeProfile != null && IsInitialized; + /// /// The active profile of the Mixed Reality Toolkit which controls which services are active and their initial configuration. /// *Note configuration is used on project initialization or replacement, changes to properties while it is running has no effect. @@ -137,7 +139,7 @@ public void ResetConfiguration(MixedRealityToolkitConfigurationProfile profile) /// public bool RegisterService(T serviceInstance) where T : IMixedRealityService { - return RegisterServiceInternal(serviceInstance); + return RegisterServiceInternal(serviceInstance); } /// @@ -891,129 +893,60 @@ public void DisableAllServicesByTypeAndName(Type interfaceType, string serviceNa private void InitializeAllServices() { - // If the Mixed Reality Toolkit is not configured, stop. - if (activeProfile == null) { return; } - // Initialize all systems - foreach (var system in activeSystems) - { - system.Value.Initialize(); - } - - // Initialize all registered runtime services - foreach (var service in registeredMixedRealityServices) - { - service.Item2.Initialize(); - } + ExecuteOnAllServices(service => service.Initialize()); } private void ResetAllServices() { - // If the Mixed Reality Toolkit is not configured, stop. - if (activeProfile == null) { return; } - - // If the Mixed Reality Toolkit is not initialized, stop. - if (!IsInitialized) { return; } - // Reset all systems - foreach (var system in activeSystems) - { - system.Value.Reset(); - } - - // Reset all registered runtime services - foreach (var service in registeredMixedRealityServices) - { - service.Item2.Reset(); - } + ExecuteOnAllServices(service => service.Reset()); } private void EnableAllServices() { - // If the Mixed Reality Toolkit is not configured, stop. - if (activeProfile == null) { return; } - - // If the Mixed Reality Toolkit is not initialized, stop. - if (!IsInitialized) { return; } - // Enable all systems - foreach (var system in activeSystems) - { - system.Value.Enable(); - } - - // Reset all registered runtime services - foreach (var service in registeredMixedRealityServices) - { - service.Item2.Enable(); - } + ExecuteOnAllServices(service => service.Enable()); } private void UpdateAllServices() { - // If the Mixed Reality Toolkit is not configured, stop. - if (activeProfile == null) { return; } - - // If the Mixed Reality Toolkit is not initialized, stop. - if (!IsInitialized) { return; } - // Update all systems - foreach (var system in activeSystems) - { - system.Value.Update(); - } - - // Update all registered runtime services - foreach (var service in registeredMixedRealityServices) - { - service.Item2.Update(); - } + ExecuteOnAllServices(service => service.Update()); } private void DisableAllServices() { - // If the Mixed Reality Toolkit is not configured, stop. - if (activeProfile == null) { return; } - - // If the Mixed Reality Toolkit is not initialized, stop. - if (!IsInitialized) { return; } - // Disable all systems - foreach (var system in activeSystems) - { - system.Value.Disable(); - } - - // Disable all registered runtime services - foreach (var service in registeredMixedRealityServices) - { - service.Item2.Disable(); - } + ExecuteOnAllServices(service => service.Disable()); } private void DestroyAllServices() { - // If the Mixed Reality Toolkit is not configured, stop. - if (activeProfile == null) { return; } + if (!ExecuteOnAllServices(service => service.Destroy())) { return; } - // If the Mixed Reality Toolkit is not initialized, stop. - if (!IsInitialized) { return; } + activeSystems.Clear(); + registeredMixedRealityServices.Clear(); + } + + private bool ExecuteOnAllServices(Action execute) + { + // If the Mixed Reality Toolkit is not configured, stop. + if (!HasProfileAndIsInitialized) { return false; } - // Destroy all systems foreach (var system in activeSystems) { - system.Value.Destroy(); + execute(system.Value); } activeSystems.Clear(); - // Destroy all registered runtime services foreach (var service in registeredMixedRealityServices) { - service.Item2.Destroy(); + execute(service.Item2); } - registeredMixedRealityServices.Clear(); + return true; } #endregion Multiple Service Management @@ -1064,10 +997,9 @@ private IMixedRealityService GetServiceByNameInternal(Type interfaceType, string { if (!CanGetService(interfaceType)) { return null; } - IMixedRealityService serviceInstance = null; - if (IsCoreSystem(interfaceType)) { + IMixedRealityService serviceInstance; if (activeSystems.TryGetValue(interfaceType, out serviceInstance)) { if (CheckServiceMatch(interfaceType, serviceName, interfaceType, serviceInstance)) From eb6046fb916aa309b9a3a7399aef8dfa48c527f6 Mon Sep 17 00:00:00 2001 From: Alexander Seeck Date: Tue, 19 Mar 2019 21:13:23 +0100 Subject: [PATCH 002/183] removed wrong code --- Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs index 6d557cea479..6303d0450c1 100644 --- a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs +++ b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs @@ -939,8 +939,6 @@ private bool ExecuteOnAllServices(Action execute) execute(system.Value); } - activeSystems.Clear(); - foreach (var service in registeredMixedRealityServices) { execute(service.Item2); From d8b784a6a782bbbaf8485b1bc69d765004ae7f8c Mon Sep 17 00:00:00 2001 From: "REDMOND\\witian" Date: Mon, 1 Apr 2019 16:12:06 +0100 Subject: [PATCH 003/183] Added the Game Object Pool classes from Longbow into MRTK. --- .../Utilities/GameObjectManagement.meta | 8 + .../GameObjectManagement/GameObjectCreator.cs | 55 +++++ .../GameObjectCreator.cs.meta | 11 + .../GameObjectManagement/GameObjectPool.cs | 195 ++++++++++++++++++ .../GameObjectPool.cs.meta | 11 + .../GenericPrefabInstanceCreator.cs | 30 +++ .../GenericPrefabInstanceCreator.cs.meta | 11 + .../IGameObjectCreatorHandler.cs | 25 +++ .../IGameObjectCreatorHandler.cs.meta | 11 + 9 files changed, 357 insertions(+) create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement.meta create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs.meta create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs.meta create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs.meta create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs.meta diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement.meta b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement.meta new file mode 100644 index 00000000000..650e6b5ec4f --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 075ac3d1f48798f428e8ae0c24fc4495 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs new file mode 100644 index 00000000000..56857c6cd01 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement +{ + /// + /// An abstract class used by the GameObjectPool for creating and recycling game objects. + /// + public abstract class GameObjectCreator + { + /// + /// Creates a GameObject for the GameObjectPool. The position and rotation of the GameObject + /// is set by the GameObjectPool when GetGameObject is called. + /// + /// An instantiated GameObject. + public abstract GameObject Instantiate(); + + /// + /// Called when the GameObject is about to be recycled by the GameObjectPool. This allows you to potentially free + /// up any resources before it is deactivated by the GameObjectPool. If the GameObject has a component that implements + /// the IGameObjectCreatorHandler interface, it will call its PrepareForRecycle function; + /// + /// The GameObject that is about to be recycled. + public virtual void PrepareForRecycle(GameObject obj) + { + var components = obj.GetComponents(); + foreach (var component in components) + { + if (component is IGameObjectCreatorHandler) + { + (component as IGameObjectCreatorHandler).PrepareForRecycle(); + } + } + } + + /// + /// Called before the GameObject's position and rotation are set (as well as it's active state) by the GameObjectPool + /// when GetGameObject is called. If the GameObject has a component that implements + /// the IGameObjectCreatorHandler interface, it will call its PrepareForUse function; + /// + /// The GameObject that is about to be used. + public virtual void PrepareForUse(GameObject obj) + { + var components = obj.GetComponents(); + foreach (var component in components) + { + if (component is IGameObjectCreatorHandler) + { + (component as IGameObjectCreatorHandler).PrepareForUse(); + } + } + } + } +} diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs.meta b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs.meta new file mode 100644 index 00000000000..7c848c911aa --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e26ff0bd9425254caccab5080151659 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs new file mode 100644 index 00000000000..79f2f276e6e --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs @@ -0,0 +1,195 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +using UnityEngine; +using System.Collections.Generic; + +namespace Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement +{ + /// + /// Used to recycle Unity GameObjects. When ever you create GameObjects during runtime some overhead is incurred. Additionally + /// memory can become highly fragment as well as possibly causing the garbage collector to perform a collection (which is also + /// a performance hit). This is especially prevelant when you are spawning and destroying GameObjects of the same type + /// very quickly in large quantities (such as bullets). The GameObject pool allows you to recycle objects so they can be + /// reused upon request. + /// + /// + /// Setup code for using the generic prefab instance creator: + /// + /// GameObjectPool pool = new GameObjectPool(); + /// GenericPrefabInstanceCreator creator = new GenericPrefabInstanceCreator(); + /// creator.Prefab = MyProjectilePrefab; + /// pool.AddCreator(creator, "projectile1"); + /// + /// Requesting a game object from the pool: + /// + /// var myProjectileObj = pool.GetGameObject("projectile1"); + /// + /// Recycling the game object: + /// + /// pool.Recycle(myProjectileObj, "projectile1"); + /// + /// + /// Note that the GameObjectPool is not thread safe. It should only be used in Unity's main thread. + public class GameObjectPool + { + /// + /// Initializes a new instance of the class. + /// + public GameObjectPool() + { + _pool = new Dictionary>(); + _creators = new Dictionary(); + } + + /// + /// GameObjects are created by an implementation of IGameObjectCreator in this GameObjectPool. This + /// method adds your implemenation of the IGameObjectCreator to use for objects that share a specific + /// object identifier. + /// + /// The implementation of IGameObjectCreator to use for GameObjects associated with the objectIdentifier. + /// The identifier you want to use to identify the kind of game objects you want to create. + public void AddCreator(GameObjectCreator creator, string objectIdentifier) + { + _creators.Add(objectIdentifier, creator); + } + + /// + /// Adds a game object under a specific object identifier to the GameObjectPool. + /// + /// The GameObject to recycle. + /// The identifier you want to use to identify the kind of game object you are recycling. + public void Recycle(GameObject gameObject, string objectIdentifier) + { + EnsureListForObjectID(objectIdentifier); + + if (_creators.ContainsKey(objectIdentifier)) + { + _creators[objectIdentifier].PrepareForRecycle(gameObject); + } + + gameObject.SetActive(false); + _pool[objectIdentifier].Enqueue(gameObject); + } + + /// + /// Gets a game object for a specific object identifier from the GameObjectPool. If the kind of game object + /// being requested is not in the pool, then it will get created by a IGameObjectCreator that was + /// added to the pool for handling objects associated with the objectIdentifier. + /// + /// The identifier you want to use to identifiy the kind of game object you want to retrieve. + /// The position that the game object should have before it is activated. + /// The rotation that the game object should have before it is activated. + /// + public GameObject GetGameObject(string objectIdentifier, Vector3 position, Quaternion rotation) + { + GameObject obj = null; + GameObjectCreator creator = null; + if (_creators.ContainsKey(objectIdentifier)) + { + creator = _creators[objectIdentifier]; + } + else + { + Debug.Log("Unable to create a GameObject for object ID '" + objectIdentifier + "' because no IGameObjectCreator implementation can be found for it."); + return null; + } + + EnsureListForObjectID(objectIdentifier); + + Queue objects = _pool[objectIdentifier]; + + if (objects.Count > 0) + { + obj = objects.Dequeue(); + } + else + { + obj = creator.Instantiate(); + } + + if (obj != null) + { + creator.PrepareForUse(obj); + obj.SetActive(true); + } + + return obj; + } + + /// + /// Same as calling GetGameObject(objectIdentifier, Vector3.zero, Quaternion.identity) + /// + /// The identifier you want to use to identifiy the kind of game object you want to retrieve. + /// + public GameObject GetGameObject(string objectIdentifier) + { + return GetGameObject(objectIdentifier, Vector3.zero, Quaternion.identity); + } + + /// + /// Gets the number of game objects in the pool for a specific identifier. + /// + /// + /// + public int Count(string objectIdentifier) + { + EnsureListForObjectID(objectIdentifier); + + return _pool[objectIdentifier].Count; + } + + /// + /// Removes and destroys all game objects in the pool associated with the specified objectIdentifier. + /// + /// The identifier you want to use to identify the kind of game objects to remove from the pool. + public void EmptyPool(string objectIdentifier) + { + EnsureListForObjectID(objectIdentifier); + + Queue objects = _pool[objectIdentifier]; + foreach (GameObject obj in objects) + { + GameObject.Destroy(obj); + } + objects.Clear(); + } + + /// + /// Removes and destroys all game objects in the pool. + /// + public void EmptyPool() + { + foreach (string objectID in _pool.Keys) + { + EmptyPool(objectID); + } + _pool.Clear(); + } + + #region Private + + /// + /// The pool for game objects + /// + private Dictionary> _pool; + + /// + /// All creators that this pool can handle by identifier + /// + private Dictionary _creators; + + /// + /// Ensures there is a list for the specified identifier + /// + /// + private void EnsureListForObjectID(string objectIdentifier) + { + if (!_pool.ContainsKey(objectIdentifier)) + { + _pool.Add(objectIdentifier, new Queue()); + } + } + + #endregion + } +} diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs.meta b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs.meta new file mode 100644 index 00000000000..83e53774bf3 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectPool.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acd60cb61e2609d44a2d25cb5a5a2ec9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs new file mode 100644 index 00000000000..e40b1d47122 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement +{ + /// + /// Creator for making prefab instances + /// + /// + public class GenericPrefabInstanceCreator : GameObjectCreator + { + /// + /// The prefab to instatiate + /// + public GameObject Prefab; + + /// + /// Creates a GameObject for the GameObjectPool. The position and rotation of the GameObject + /// is set by the GameObjectPool when GetGameObject is called. + /// + /// + /// An instantiated GameObject. + /// + public override GameObject Instantiate() + { + return GameObject.Instantiate(Prefab); + } + } +} diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs.meta b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs.meta new file mode 100644 index 00000000000..ca1afcd2855 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 528d1c667124faa4b8e9b20cdef68b1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs new file mode 100644 index 00000000000..ae6fc53ac1c --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement +{ + /// + /// Optional interface that GameObjects (instantiated and recycled by a + /// GameObjectPool) can implement in order to handle preparation for + /// recycling and reuse. + /// + public interface IGameObjectCreatorHandler + { + /// + /// Called when the GameObject is about to be recycled by the GameObjectPool. This allows you to potentially free + /// up any resources before it is deactivated by the GameObjectPool. + /// + void PrepareForRecycle(); + + /// + /// Called before the GameObject's position and rotation are set (as well as it's active state) by the GameObjectPool + /// when GetGameObject is called. + /// + void PrepareForUse(); + } +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs.meta b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs.meta new file mode 100644 index 00000000000..15d90024e4d --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 104552d6b436fbe468a6c10cef817e76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 8d088d3b1212c7bbcd44c902d52111d6e7f7d005 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Mon, 1 Apr 2019 11:01:15 -0700 Subject: [PATCH 004/183] Update TypeReferencePropertyDrawer.cs --- .../TypeReferencePropertyDrawer.cs | 52 +++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs index f0afc674c33..d6967ed2228 100644 --- a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs +++ b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs @@ -4,6 +4,7 @@ using Microsoft.MixedReality.Toolkit.Utilities; using System; using System.Collections.Generic; +using System.Linq; using UnityEditor; using UnityEditor.Compilation; using UnityEngine; @@ -122,7 +123,7 @@ private static Type ResolveType(string classRef) #region Control Drawing / Event Handling - private static string DrawTypeSelectionControl(Rect position, GUIContent label, string classRef, SystemTypeAttribute filter) + private static string DrawTypeSelectionControl(Rect position, GUIContent label, string classRef, SystemTypeAttribute filter, bool typeResolved) { if (label != null && label != GUIContent.none) { @@ -186,7 +187,7 @@ private static string DrawTypeSelectionControl(Rect position, GUIContent label, { TempContent.text = "(None)"; } - else if (ResolveType(classRef) == null) + else if (!typeResolved) { TempContent.text += " {Missing}"; } @@ -211,8 +212,25 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty p try { bool restoreShowMixedValue = EditorGUI.showMixedValue; + bool typeResolved = string.IsNullOrEmpty(property.stringValue) || ResolveType(property.stringValue) != null; EditorGUI.showMixedValue = property.hasMultipleDifferentValues; - property.stringValue = DrawTypeSelectionControl(position, label, property.stringValue, filter); + + if (typeResolved) + { + property.stringValue = DrawTypeSelectionControl(position, label, property.stringValue, filter, true); + } + else + { + Rect dropdownPosition = new Rect(position.x, position.y, position.width - 90, position.height); + Rect buttonPosition = new Rect(position.width - 75, position.y, 75, position.height); + + property.stringValue = DrawTypeSelectionControl(dropdownPosition, label, property.stringValue, filter, false); + if (GUI.Button(buttonPosition, "Try Repair", EditorStyles.miniButton)) + { + property.stringValue = TryRepairMissingReference(property.stringValue, filter); + } + } + EditorGUI.showMixedValue = restoreShowMixedValue; } finally @@ -221,6 +239,34 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty p } } + private static string TryRepairMissingReference(string classRef, SystemTypeAttribute filter) + { + string typeNameWithoutAssembly = classRef.Split(new string[] { "," }, StringSplitOptions.None)[0]; + string typeNameWithoutNamespace = System.Text.RegularExpressions.Regex.Replace(typeNameWithoutAssembly, @"[.\w]+\.(\w+)", "$1"); + + Type repairedType; + if (FindTypeByName(typeNameWithoutNamespace, filter, out repairedType)) + { + classRef = repairedType.AssemblyQualifiedName; + } + + return classRef; + } + + private static bool FindTypeByName(string typeName, SystemTypeAttribute filter, out Type type) + { + type = null; + foreach (Type t in GetFilteredTypes(filter)) + { + if (t.Name.Equals(typeName)) + { + type = t; + break; + } + } + return type != null; + } + private static void DisplayDropDown(Rect position, List types, Type selectedType, TypeGrouping grouping) { var menu = new GenericMenu(); From 3af1e8816c16bcecab15d58f896034f8aaa590cb Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Mon, 1 Apr 2019 13:20:18 -0700 Subject: [PATCH 005/183] Property drawer opens utility window to select from multiple available repair types --- .../TypeReferencePropertyDrawer.cs | 113 ++++++++++++++---- 1 file changed, 88 insertions(+), 25 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs index d6967ed2228..7a61710b769 100644 --- a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs +++ b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs @@ -24,6 +24,8 @@ public class SystemTypeReferencePropertyDrawer : PropertyDrawer private static readonly Dictionary TypeMap = new Dictionary(); private static readonly int ControlHint = typeof(SystemTypeReferencePropertyDrawer).GetHashCode(); private static readonly GUIContent TempContent = new GUIContent(); + private static readonly Color enabledColor = Color.white; + private static readonly Color disabledColor = Color.Lerp(Color.white, Color.clear, 0.5f); #region Type Filtering @@ -211,26 +213,53 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty p { try { + Color restoreColor = GUI.color; bool restoreShowMixedValue = EditorGUI.showMixedValue; bool typeResolved = string.IsNullOrEmpty(property.stringValue) || ResolveType(property.stringValue) != null; EditorGUI.showMixedValue = property.hasMultipleDifferentValues; + GUI.color = enabledColor; + if (typeResolved) { property.stringValue = DrawTypeSelectionControl(position, label, property.stringValue, filter, true); } else { - Rect dropdownPosition = new Rect(position.x, position.y, position.width - 90, position.height); - Rect buttonPosition = new Rect(position.width - 75, position.y, 75, position.height); - - property.stringValue = DrawTypeSelectionControl(dropdownPosition, label, property.stringValue, filter, false); - if (GUI.Button(buttonPosition, "Try Repair", EditorStyles.miniButton)) + if (SelectRepairedTypeWindow.WindowOpen) + { + GUI.color = disabledColor; + DrawTypeSelectionControl(position, label, property.stringValue, filter, false); + } + else { - property.stringValue = TryRepairMissingReference(property.stringValue, filter); + Rect dropdownPosition = new Rect(position.x, position.y, position.width - 90, position.height); + Rect buttonPosition = new Rect(position.width - 75, position.y, 75, position.height); + + property.stringValue = DrawTypeSelectionControl(dropdownPosition, label, property.stringValue, filter, false); + if (GUI.Button(buttonPosition, "Try Repair", EditorStyles.miniButton)) + { + string typeNameWithoutAssembly = property.stringValue.Split(new string[] { "," }, StringSplitOptions.None)[0]; + string typeNameWithoutNamespace = System.Text.RegularExpressions.Regex.Replace(typeNameWithoutAssembly, @"[.\w]+\.(\w+)", "$1"); + + Type[] repairedTypeOptions = FindTypesByName(typeNameWithoutNamespace, filter); + if (repairedTypeOptions.Length > 1) + { + SelectRepairedTypeWindow.Display(repairedTypeOptions, property); + } + else if (repairedTypeOptions.Length > 0) + { + property.stringValue = repairedTypeOptions[0].AssemblyQualifiedName; + } + else + { + EditorUtility.DisplayDialog("No types found", "No types with the name '" + typeNameWithoutNamespace + "' were found.", "OK"); + } + } } } + GUI.color = restoreColor; EditorGUI.showMixedValue = restoreShowMixedValue; } finally @@ -239,32 +268,17 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty p } } - private static string TryRepairMissingReference(string classRef, SystemTypeAttribute filter) - { - string typeNameWithoutAssembly = classRef.Split(new string[] { "," }, StringSplitOptions.None)[0]; - string typeNameWithoutNamespace = System.Text.RegularExpressions.Regex.Replace(typeNameWithoutAssembly, @"[.\w]+\.(\w+)", "$1"); - - Type repairedType; - if (FindTypeByName(typeNameWithoutNamespace, filter, out repairedType)) - { - classRef = repairedType.AssemblyQualifiedName; - } - - return classRef; - } - - private static bool FindTypeByName(string typeName, SystemTypeAttribute filter, out Type type) + private static Type[] FindTypesByName(string typeName, SystemTypeAttribute filter) { - type = null; + List types = new List(); foreach (Type t in GetFilteredTypes(filter)) { if (t.Name.Equals(typeName)) { - type = t; - break; + types.Add(t); } } - return type != null; + return types.ToArray(); } private static void DisplayDropDown(Rect position, List types, Type selectedType, TypeGrouping grouping) @@ -338,5 +352,54 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten { DrawTypeSelectionControl(position, property.FindPropertyRelative("reference"), label, attribute as SystemTypeAttribute); } + + #region popup window definition + + public class SelectRepairedTypeWindow : EditorWindow + { + private static Type[] repairedTypeOptions; + private static SerializedProperty property; + private static SelectRepairedTypeWindow window; + + public static bool WindowOpen { get { return window != null; } } + + public static void Display (Type[] repairedTypeOptions, SerializedProperty property) + { + if (window != null) + window.Close(); + + SelectRepairedTypeWindow.repairedTypeOptions = repairedTypeOptions; + SelectRepairedTypeWindow.property = property; + + window = ScriptableObject.CreateInstance(typeof(SelectRepairedTypeWindow)) as SelectRepairedTypeWindow; + window.titleContent = new GUIContent("Select repaired type"); + window.ShowUtility(); + } + + private void OnGUI() + { + for (int i = 0; i < repairedTypeOptions.Length; i++) + { + if (GUILayout.Button(repairedTypeOptions[i].FullName, EditorStyles.miniButton)) + { + property.stringValue = repairedTypeOptions[i].AssemblyQualifiedName; + property.serializedObject.ApplyModifiedProperties(); + Close(); + } + } + } + + private void OnDisable() + { + window = null; + } + + private void OnInspectorUpdate() + { + Repaint(); + } + } + + #endregion } } From a78eb56b8a1c330ce05fe2f340d686e6474112de Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Tue, 2 Apr 2019 08:51:33 -0700 Subject: [PATCH 006/183] Added icon, stopped using AssemblyQualifiedName --- .../PropertyDrawers/TypeReferencePropertyDrawer.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs index 7a61710b769..6202bad3d64 100644 --- a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs +++ b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs @@ -233,10 +233,14 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty p } else { + var errorContent = EditorGUIUtility.IconContent("d_console.erroricon.sml"); + GUI.Label(new Rect(position.width, position.y, position.width, position.height), errorContent); + Rect dropdownPosition = new Rect(position.x, position.y, position.width - 90, position.height); Rect buttonPosition = new Rect(position.width - 75, position.y, 75, position.height); property.stringValue = DrawTypeSelectionControl(dropdownPosition, label, property.stringValue, filter, false); + if (GUI.Button(buttonPosition, "Try Repair", EditorStyles.miniButton)) { string typeNameWithoutAssembly = property.stringValue.Split(new string[] { "," }, StringSplitOptions.None)[0]; @@ -249,7 +253,7 @@ private static void DrawTypeSelectionControl(Rect position, SerializedProperty p } else if (repairedTypeOptions.Length > 0) { - property.stringValue = repairedTypeOptions[0].AssemblyQualifiedName; + property.stringValue = SystemType.GetReference(repairedTypeOptions[0]); } else { @@ -382,7 +386,7 @@ private void OnGUI() { if (GUILayout.Button(repairedTypeOptions[i].FullName, EditorStyles.miniButton)) { - property.stringValue = repairedTypeOptions[i].AssemblyQualifiedName; + property.stringValue = SystemType.GetReference(repairedTypeOptions[i]); property.serializedObject.ApplyModifiedProperties(); Close(); } From 14137f71779820409dcda30d02d92990b2972549 Mon Sep 17 00:00:00 2001 From: johnppella Date: Wed, 3 Apr 2019 15:53:32 -0700 Subject: [PATCH 007/183] minor changes --- .../HandInteractionPanZoomExample.unity | 54 ++++++++++--------- .../Scripts/Slate/HandInteractionPanZoom.cs | 4 +- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity index ef115590dcb..55f0517fe56 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity @@ -218,18 +218,18 @@ MonoBehaviour: focusEnabled: 1 isEnabled: 1 enableZoom: 1 - panEventReceivers: - - {fileID: 663059241} lockHorizontal: 0 lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDamping: {x: 0.999, y: 0.999} - debugText: {fileID: 471121398} + velocityDampingX: 80 + velocityDampingY: 80 + panZoomSmoothing: 57.4 + panEventReceivers: + - {fileID: 663059241} reticle: {fileID: 228203322} leftPoint: {fileID: 1036401408} rightPoint: {fileID: 870499135} - panZoomSmoothing: 57.4 --- !u!64 &80106497 MeshCollider: m_ObjectHideFlags: 0 @@ -322,7 +322,7 @@ MonoBehaviour: eventsToReceive: 0 touchableSurface: 0 bounds: {x: 1, y: 1} - collider: {fileID: 80106497} + touchableCollider: {fileID: 80106497} --- !u!65 &80106502 BoxCollider: m_ObjectHideFlags: 0 @@ -512,7 +512,7 @@ MonoBehaviour: eventsToReceive: 0 touchableSurface: 0 bounds: {x: 1, y: 1} - collider: {fileID: 321658867} + touchableCollider: {fileID: 321658867} --- !u!114 &321658865 MonoBehaviour: m_ObjectHideFlags: 0 @@ -528,18 +528,17 @@ MonoBehaviour: focusEnabled: 1 isEnabled: 1 enableZoom: 0 - panEventReceivers: - - {fileID: 663059241} lockHorizontal: 0 lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDamping: {x: 0.999, y: 0.999} - debugText: {fileID: 883521361} + velocityDampingX: 90 + velocityDampingY: 90 + panZoomSmoothing: 95.2 + panEventReceivers: [] reticle: {fileID: 228203322} leftPoint: {fileID: 1036401408} rightPoint: {fileID: 870499135} - panZoomSmoothing: 95.2 --- !u!65 &321658866 BoxCollider: m_ObjectHideFlags: 0 @@ -758,7 +757,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 497356534} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.098, y: 0.19, z: 2.579} + m_LocalPosition: {x: 0.098, y: 0.19, z: 3.381} m_LocalScale: {x: 0.4815, y: 0.4815, z: 0.4815} m_Children: - {fileID: 80106500} @@ -1343,6 +1342,7 @@ MonoBehaviour: gazeTransform: {fileID: 0} minHeadVelocityThreshold: 0.5 maxHeadVelocityThreshold: 2 + preferEyeTracking: 0 --- !u!114 &1140877734 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1355,6 +1355,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7a21b486d0bb44444b1418aaa38b44de, type: 3} m_Name: m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 --- !u!114 &1140877735 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1475,7 +1482,7 @@ MonoBehaviour: eventsToReceive: 0 touchableSurface: 0 bounds: {x: 1, y: 1} - collider: {fileID: 1564430535} + touchableCollider: {fileID: 1564430535} --- !u!114 &1564430533 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1491,17 +1498,17 @@ MonoBehaviour: focusEnabled: 1 isEnabled: 1 enableZoom: 1 - panEventReceivers: [] lockHorizontal: 0 lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDamping: {x: 0.9, y: 0.9} - debugText: {fileID: 649754907} + velocityDampingX: 90 + velocityDampingY: 90 + panZoomSmoothing: 92.6 + panEventReceivers: [] reticle: {fileID: 228203322} leftPoint: {fileID: 1036401408} rightPoint: {fileID: 870499135} - panZoomSmoothing: 92.6 --- !u!65 &1564430534 BoxCollider: m_ObjectHideFlags: 0 @@ -1629,7 +1636,7 @@ MonoBehaviour: eventsToReceive: 0 touchableSurface: 0 bounds: {x: 1, y: 1} - collider: {fileID: 2129217976} + touchableCollider: {fileID: 2129217976} --- !u!114 &2129217974 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1645,18 +1652,17 @@ MonoBehaviour: focusEnabled: 1 isEnabled: 1 enableZoom: 1 - panEventReceivers: - - {fileID: 663059241} lockHorizontal: 0 lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDamping: {x: 0.999, y: 0.999} - debugText: {fileID: 577178231} + velocityDampingX: 90 + velocityDampingY: 90 + panZoomSmoothing: 0 + panEventReceivers: [] reticle: {fileID: 228203322} leftPoint: {fileID: 1036401408} rightPoint: {fileID: 870499135} - panZoomSmoothing: 0 --- !u!65 &2129217975 BoxCollider: m_ObjectHideFlags: 0 diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPanZoom.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPanZoom.cs index edda6a22ae9..1eb3ccdefce 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPanZoom.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPanZoom.cs @@ -51,10 +51,10 @@ protected class HandPanData [SerializeField] private bool velocityActive = false; [SerializeField] - [Range(0.0f, 99.0f)] + [Range(0.0f, 0.99f)] private float velocityDampingX = 0.9f; [SerializeField] - [Range(0.0f, 99.0f)] + [Range(0.0f, 0.99f)] private float velocityDampingY = 0.9f; [SerializeField] [Range(0.0f, 99.0f)] From 98af920fa01388a93b4eb3a8f195a07591c5ac19 Mon Sep 17 00:00:00 2001 From: johnppella Date: Wed, 3 Apr 2019 16:08:05 -0700 Subject: [PATCH 008/183] added slate with Pan script --- .../HandInteractionPanZoomExample.unity | 261 +++++++++++++++++- 1 file changed, 252 insertions(+), 9 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity index 55f0517fe56..10d60e73544 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity @@ -222,8 +222,8 @@ MonoBehaviour: lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDampingX: 80 - velocityDampingY: 80 + velocityDampingX: 0.9 + velocityDampingY: 0.9 panZoomSmoothing: 57.4 panEventReceivers: - {fileID: 663059241} @@ -532,8 +532,8 @@ MonoBehaviour: lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDampingX: 90 - velocityDampingY: 90 + velocityDampingX: 0.9 + velocityDampingY: 0.9 panZoomSmoothing: 95.2 panEventReceivers: [] reticle: {fileID: 228203322} @@ -757,7 +757,7 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 497356534} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.098, y: 0.19, z: 3.381} + m_LocalPosition: {x: 0.098, y: 0.537, z: 3.381} m_LocalScale: {x: 0.4815, y: 0.4815, z: 0.4815} m_Children: - {fileID: 80106500} @@ -765,6 +765,7 @@ Transform: - {fileID: 663059246} - {fileID: 2129217972} - {fileID: 321658863} + - {fileID: 1278228905} m_Father: {fileID: 0} m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1427,6 +1428,157 @@ Camera: m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 +--- !u!1 &1278228904 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1278228905} + - component: {fileID: 1278228911} + - component: {fileID: 1278228910} + - component: {fileID: 1278228909} + - component: {fileID: 1278228908} + - component: {fileID: 1278228907} + - component: {fileID: 1278228906} + m_Layer: 0 + m_Name: SlateApan + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1278228905 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.57, y: -1.57, z: -4.252} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1772854424} + m_Father: {fileID: 497356535} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1278228906 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} + m_Name: + m_EditorClassIdentifier: + localForward: {x: 0, y: 0, z: 1} + localUp: {x: 0, y: 1, z: 0} + localCenter: {x: 0, y: 0, z: 0.38319832} + eventsToReceive: 0 + touchableSurface: 0 + bounds: {x: 1, y: 1} + touchableCollider: {fileID: 1278228909} +--- !u!114 &1278228907 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a0d3fa6d0a45d1046aa0f0a2f2a93923, type: 3} + m_Name: + m_EditorClassIdentifier: + focusEnabled: 1 + touchType: 1 + panEventReceivers: [] + lockHorizontal: 0 + lockVertical: 0 + wrapTexture: 1 + velocityActive: 1 + velocityDamping: {x: 0.9, y: 0.9} + springActive: 0 + isEnabled: 1 + touchVisual: {fileID: 228203322} +--- !u!65 &1278228908 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 0.15195075} + m_Center: {x: 0, y: 0, z: 0.30722296} +--- !u!64 &1278228909 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1278228910 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d2a40ec9be92da646a18523f98205d0a, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1278228911 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1278228904} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &1564430529 GameObject: m_ObjectHideFlags: 0 @@ -1502,8 +1654,8 @@ MonoBehaviour: lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDampingX: 90 - velocityDampingY: 90 + velocityDampingX: 0.9 + velocityDampingY: 0.9 panZoomSmoothing: 92.6 panEventReceivers: [] reticle: {fileID: 228203322} @@ -1581,6 +1733,97 @@ MeshFilter: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1564430529} m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1772854423 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1772854424} + - component: {fileID: 1772854426} + - component: {fileID: 1772854425} + m_Layer: 0 + m_Name: New Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1772854424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772854423} + m_LocalRotation: {x: -0, y: -0, z: -1.25965e-10, w: 1} + m_LocalPosition: {x: -0.5225194, y: 0.65021986, z: 0.040342093} + m_LocalScale: {x: 0.032265346, y: 0.032263476, z: 0.03226534} + m_Children: [] + m_Father: {fileID: 1278228905} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!102 &1772854425 +TextMesh: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772854423} + m_Text: Pan script + m_OffsetZ: 0 + m_CharacterSize: 1 + m_LineSpacing: 1 + m_Anchor: 0 + m_Alignment: 0 + m_TabSize: 4 + m_FontSize: 40 + m_FontStyle: 0 + m_RichText: 1 + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_Color: + serializedVersion: 2 + rgba: 4294967295 +--- !u!23 &1772854426 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1772854423} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 --- !u!1 &2129217971 GameObject: m_ObjectHideFlags: 0 @@ -1656,8 +1899,8 @@ MonoBehaviour: lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDampingX: 90 - velocityDampingY: 90 + velocityDampingX: 0.9 + velocityDampingY: 0.9 panZoomSmoothing: 0 panEventReceivers: [] reticle: {fileID: 228203322} From d8c6d091413b15b1b502b3f1be2f7ace4397e188 Mon Sep 17 00:00:00 2001 From: Yoon Park Date: Wed, 3 Apr 2019 16:26:50 -0700 Subject: [PATCH 009/183] Updated meta files. --- .../Features/UX/Scripts/Slate}/HandInteractionPan.cs.meta | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/HandInteractionPan.cs.meta (83%) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/HandInteractionPan.cs.meta b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs.meta similarity index 83% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/HandInteractionPan.cs.meta rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs.meta index 648b11c219d..ba02de5b21c 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/HandInteractionPan.cs.meta +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a0d3fa6d0a45d1046aa0f0a2f2a93923 +guid: 719d5ec15dc67ac45bc3ed3b137abb06 MonoImporter: externalObjects: {} serializedVersion: 2 From 2e092ee22c5afe169bca84157c3e5f7ed8bc3f2d Mon Sep 17 00:00:00 2001 From: Yoon Park Date: Wed, 3 Apr 2019 16:39:58 -0700 Subject: [PATCH 010/183] Merged development branch. Updated Slate prefab's broken script link --- .../Demos/HandTracking/Prefabs/Slate.prefab | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab index 3c68a3d7a2b..cf450127afc 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab @@ -64,7 +64,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 006b19a3d56ab0d468466cdb4fad3027, type: 3} m_Name: m_EditorClassIdentifier: - panComponent: {fileID: 7779420038095343084} + panComponent: {fileID: 0} --- !u!114 &7779420037177669562 MonoBehaviour: m_ObjectHideFlags: 0 @@ -331,8 +331,8 @@ GameObject: - component: {fileID: 7779420038095343091} - component: {fileID: 7779420038095343090} - component: {fileID: 7779420038095343085} - - component: {fileID: 7779420038095343084} - component: {fileID: 7779420038095343089} + - component: {fileID: 7505582399050348638} m_Layer: 0 m_Name: ContentQuad m_TagString: Untagged @@ -425,7 +425,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: manipulatorToDisable: {fileID: 7779420037177669562} ---- !u!114 &7779420038095343084 +--- !u!114 &7779420038095343089 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -434,7 +434,26 @@ MonoBehaviour: m_GameObject: {fileID: 7779420038095343086} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0d3fa6d0a45d1046aa0f0a2f2a93923, type: 3} + m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} + m_Name: + m_EditorClassIdentifier: + localForward: {x: 0, y: 0, z: 1} + localUp: {x: 0, y: 1, z: 0} + localCenter: {x: -0.000000034743024, y: -0.00000047640293, z: 0.4771221} + eventsToReceive: 0 + touchableSurface: 0 + bounds: {x: 1, y: 0.99999946} + touchableCollider: {fileID: 7779420038095343090} +--- !u!114 &7505582399050348638 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7779420038095343086} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 719d5ec15dc67ac45bc3ed3b137abb06, type: 3} m_Name: m_EditorClassIdentifier: focusEnabled: 1 @@ -448,25 +467,6 @@ MonoBehaviour: springActive: 0 isEnabled: 1 touchVisual: {fileID: 0} ---- !u!114 &7779420038095343089 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7779420038095343086} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} - m_Name: - m_EditorClassIdentifier: - localForward: {x: 0, y: 0, z: 1} - localUp: {x: 0, y: 1, z: 0} - localCenter: {x: -0.000000034743024, y: -0.00000047640293, z: 0.4771221} - eventsToReceive: 0 - touchableSurface: 0 - bounds: {x: 1, y: 0.99999946} - touchableCollider: {fileID: 7779420038095343090} --- !u!1 &7779420038487776842 GameObject: m_ObjectHideFlags: 0 @@ -1096,18 +1096,6 @@ PrefabInstance: propertyPath: m_Name value: Pressable Button (1) objectReference: {fileID: 0} - - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} - propertyPath: minPressDepth - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} - propertyPath: withdrawActivationAmount - value: 0.0001 - objectReference: {fileID: 0} - - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} - propertyPath: buttonSizeRelativeToCollider - value: 0.5 - objectReference: {fileID: 0} - target: {fileID: 937783102, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} propertyPath: m_havePropertiesChanged value: 0 @@ -1227,6 +1215,18 @@ PrefabInstance: propertyPath: localCenter.z value: -0.008 objectReference: {fileID: 0} + - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} + propertyPath: minPressDepth + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} + propertyPath: withdrawActivationAmount + value: 0.0001 + objectReference: {fileID: 0} + - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} + propertyPath: buttonSizeRelativeToCollider + value: 0.5 + objectReference: {fileID: 0} - target: {fileID: 2951882602880698967, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} propertyPath: localCenter.z From 709ea404220dc6659bc13a7601ca44bdc5741e83 Mon Sep 17 00:00:00 2001 From: Yoon Park Date: Thu, 4 Apr 2019 16:33:19 -0700 Subject: [PATCH 011/183] Merged rc1 branch + Replaced Slate prefab to use new PanZoom script. --- .../Demos/HandTracking/Prefabs/Slate.prefab | 45 ++++++++++--------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab index cf450127afc..a945d4e6f04 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab @@ -332,7 +332,7 @@ GameObject: - component: {fileID: 7779420038095343090} - component: {fileID: 7779420038095343085} - component: {fileID: 7779420038095343089} - - component: {fileID: 7505582399050348638} + - component: {fileID: 6478522880476602763} m_Layer: 0 m_Name: ContentQuad m_TagString: Untagged @@ -444,7 +444,7 @@ MonoBehaviour: touchableSurface: 0 bounds: {x: 1, y: 0.99999946} touchableCollider: {fileID: 7779420038095343090} ---- !u!114 &7505582399050348638 +--- !u!114 &6478522880476602763 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -453,20 +453,23 @@ MonoBehaviour: m_GameObject: {fileID: 7779420038095343086} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 719d5ec15dc67ac45bc3ed3b137abb06, type: 3} + m_Script: {fileID: 11500000, guid: ef1a57c42d928dc49b7c947623b2b2ef, type: 3} m_Name: m_EditorClassIdentifier: focusEnabled: 1 - touchType: 0 - panEventReceivers: [] + isEnabled: 1 + enableZoom: 1 lockHorizontal: 1 lockVertical: 0 wrapTexture: 1 velocityActive: 1 - velocityDamping: {x: 0.9, y: 0.9} - springActive: 0 - isEnabled: 1 - touchVisual: {fileID: 0} + velocityDampingX: 0.9 + velocityDampingY: 0.9 + panZoomSmoothing: 80 + panEventReceivers: [] + reticle: {fileID: 0} + leftPoint: {fileID: 0} + rightPoint: {fileID: 0} --- !u!1 &7779420038487776842 GameObject: m_ObjectHideFlags: 0 @@ -1096,6 +1099,18 @@ PrefabInstance: propertyPath: m_Name value: Pressable Button (1) objectReference: {fileID: 0} + - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} + propertyPath: minPressDepth + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} + propertyPath: withdrawActivationAmount + value: 0.0001 + objectReference: {fileID: 0} + - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} + propertyPath: buttonSizeRelativeToCollider + value: 0.5 + objectReference: {fileID: 0} - target: {fileID: 937783102, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} propertyPath: m_havePropertiesChanged value: 0 @@ -1215,18 +1230,6 @@ PrefabInstance: propertyPath: localCenter.z value: -0.008 objectReference: {fileID: 0} - - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} - propertyPath: minPressDepth - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} - propertyPath: withdrawActivationAmount - value: 0.0001 - objectReference: {fileID: 0} - - target: {fileID: 316800721, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} - propertyPath: buttonSizeRelativeToCollider - value: 0.5 - objectReference: {fileID: 0} - target: {fileID: 2951882602880698967, guid: 45fd0ad89d6d17b4fbe68eb48dbe9de9, type: 3} propertyPath: localCenter.z From 2e326bfba113560ab5f843247ab7860926a52a65 Mon Sep 17 00:00:00 2001 From: Yoon Park Date: Thu, 4 Apr 2019 16:44:55 -0700 Subject: [PATCH 012/183] Updated the Slate's box collider to make it respond to hand-ray. Updated location of the scripts. --- .../Demos/HandTracking/Prefabs/Slate.prefab | 6 +- .../HandInteractionPanZoomExample.unity | 2887 +++++++++++------ .../Features/UX/Scripts/Slate}/DragEnabler.cs | 0 .../UX/Scripts/Slate}/DragEnabler.cs.meta | 0 .../UX/Scripts/Slate}/FollowMeToggle.cs | 0 .../UX/Scripts/Slate}/FollowMeToggle.cs.meta | 0 .../UX/Scripts/Slate}/SlateEnabler.cs | 0 .../UX/Scripts/Slate}/SlateEnabler.cs.meta | 0 8 files changed, 1939 insertions(+), 954 deletions(-) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/DragEnabler.cs (100%) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/DragEnabler.cs.meta (100%) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/FollowMeToggle.cs (100%) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/FollowMeToggle.cs.meta (100%) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/SlateEnabler.cs (100%) rename Assets/{MixedRealityToolkit.Examples/Demos/HandTracking/Script => MixedRealityToolkit.SDK/Features/UX/Scripts/Slate}/SlateEnabler.cs.meta (100%) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab index a945d4e6f04..2bc54a97113 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Slate.prefab @@ -410,8 +410,8 @@ BoxCollider: m_IsTrigger: 0 m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 0.99999946, z: 0.52428865} - m_Center: {x: -0.000000034743024, y: -0.00000047640293, z: 0.21497777} + m_Size: {x: 1, y: 0.99999946, z: 0.6223597} + m_Center: {x: -0.00000003580839, y: -0.00000047640293, z: 0.16594146} --- !u!114 &7779420038095343085 MonoBehaviour: m_ObjectHideFlags: 0 @@ -439,7 +439,7 @@ MonoBehaviour: m_EditorClassIdentifier: localForward: {x: 0, y: 0, z: 1} localUp: {x: 0, y: 1, z: 0} - localCenter: {x: -0.000000034743024, y: -0.00000047640293, z: 0.4771221} + localCenter: {x: -0.00000003580839, y: -0.00000047640293, z: 0.4771213} eventsToReceive: 0 touchableSurface: 0 bounds: {x: 1, y: 0.99999946} diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity index 10d60e73544..3a54a766986 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionPanZoomExample.unity @@ -26,7 +26,7 @@ RenderSettings: m_AmbientIntensity: 1 m_AmbientMode: 0 m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} - m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_SkyboxMaterial: {fileID: 0} m_HaloStrength: 0.5 m_FlareStrength: 1 m_FlareFadeSpeed: 3 @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -112,6 +112,206 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1001 &10894719 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1698852960} + m_Modifications: + - target: {fileID: 7779420039263858270, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Name + value: Slate (1) + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.843 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.14 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.261 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.y + value: 0.30070576 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.953717 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 35 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776846, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_text + value: Zoom disabled, Horizontal scroll + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.characterCount + value: 32 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.wordCount + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7779420038454193966, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420038454194000, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038454194000, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5373150653584304409, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 1484589536593882618, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1484589536593882618, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654425, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654375, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654375, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5373150654675824110, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 1484589535602960653, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1484589535602960653, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: enableZoom + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: lockHorizontal + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: lockVertical + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: reticle + value: + objectReference: {fileID: 228203322} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: leftPoint + value: + objectReference: {fileID: 1036401408} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: rightPoint + value: + objectReference: {fileID: 870499135} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 937ce507dd7ee334ba569554e24adbdd, type: 3} +--- !u!4 &10894720 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + m_PrefabInstance: {fileID: 10894719} + m_PrefabAsset: {fileID: 0} --- !u!1 &56915178 GameObject: m_ObjectHideFlags: 0 @@ -181,7 +381,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &80106495 +--- !u!1 &88779963 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -189,68 +389,38 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 80106500} - - component: {fileID: 80106499} - - component: {fileID: 80106498} - - component: {fileID: 80106497} - - component: {fileID: 80106502} - - component: {fileID: 80106496} - - component: {fileID: 80106501} + - component: {fileID: 88779964} + - component: {fileID: 88779967} + - component: {fileID: 88779966} + - component: {fileID: 88779965} m_Layer: 0 - m_Name: SlateA + m_Name: Rule m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &80106496 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ef1a57c42d928dc49b7c947623b2b2ef, type: 3} - m_Name: - m_EditorClassIdentifier: - focusEnabled: 1 - isEnabled: 1 - enableZoom: 1 - lockHorizontal: 0 - lockVertical: 0 - wrapTexture: 1 - velocityActive: 1 - velocityDampingX: 0.9 - velocityDampingY: 0.9 - panZoomSmoothing: 57.4 - panEventReceivers: - - {fileID: 663059241} - reticle: {fileID: 228203322} - leftPoint: {fileID: 1036401408} - rightPoint: {fileID: 870499135} ---- !u!64 &80106497 -MeshCollider: +--- !u!4 &88779964 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Convex: 0 - m_CookingOptions: 14 - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &80106498 + m_GameObject: {fileID: 88779963} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.0013, y: 0.369, z: -0.024082} + m_LocalScale: {x: 0.5497447, y: 0.0030726464, z: 1} + m_Children: [] + m_Father: {fileID: 516244410} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &88779965 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} + m_GameObject: {fileID: 88779963} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -258,10 +428,10 @@ MeshRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 + m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: d2a40ec9be92da646a18523f98205d0a, type: 2} + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -269,7 +439,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_PreserveUVs: 0 + m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 @@ -281,61 +451,28 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!33 &80106499 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &80106500 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -0.13940649, y: -0.17608066, z: -0.9790753} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 471121397} - m_Father: {fileID: 497356535} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &80106501 -MonoBehaviour: +--- !u!64 &88779966 +MeshCollider: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} + m_GameObject: {fileID: 88779963} + m_Material: {fileID: 0} + m_IsTrigger: 0 m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} - m_Name: - m_EditorClassIdentifier: - localForward: {x: 0, y: 0, z: 1} - localUp: {x: 0, y: 1, z: 0} - localCenter: {x: 0, y: 0, z: 0.38319832} - eventsToReceive: 0 - touchableSurface: 0 - bounds: {x: 1, y: 1} - touchableCollider: {fileID: 80106497} ---- !u!65 &80106502 -BoxCollider: + serializedVersion: 3 + m_Convex: 0 + m_CookingOptions: 14 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &88779967 +MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 80106495} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 0.15195075} - m_Center: {x: 0, y: 0, z: 0.30722296} + m_GameObject: {fileID: 88779963} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!1 &228203322 GameObject: m_ObjectHideFlags: 0 @@ -457,7 +594,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &321658862 +--- !u!1 &235445000 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -465,117 +602,179 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 321658863} - - component: {fileID: 321658869} - - component: {fileID: 321658868} - - component: {fileID: 321658867} - - component: {fileID: 321658866} - - component: {fileID: 321658865} - - component: {fileID: 321658864} + - component: {fileID: 235445001} + - component: {fileID: 235445005} + - component: {fileID: 235445004} + - component: {fileID: 235445003} + - component: {fileID: 235445002} m_Layer: 0 - m_Name: SlateA (2) + m_Name: Title m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &321658863 -Transform: +--- !u!224 &235445001 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: -1.112, y: -1.272, z: -0.9790753} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 883521360} - m_Father: {fileID: 497356535} - m_RootOrder: 4 + m_GameObject: {fileID: 235445000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0.126} + m_LocalScale: {x: 0.0064073736, y: 0.0064073736, z: 0.0064073736} + m_Children: [] + m_Father: {fileID: 1471801280} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &321658864 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} - m_Name: - m_EditorClassIdentifier: - localForward: {x: 0, y: 0, z: 1} - localUp: {x: 0, y: 1, z: 0} - localCenter: {x: 0, y: 0, z: 0.38319832} - eventsToReceive: 0 - touchableSurface: 0 - bounds: {x: 1, y: 1} - touchableCollider: {fileID: 321658867} ---- !u!114 &321658865 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.103, y: -0.0667} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &235445002 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} + m_GameObject: {fileID: 235445000} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ef1a57c42d928dc49b7c947623b2b2ef, type: 3} + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} m_Name: m_EditorClassIdentifier: - focusEnabled: 1 - isEnabled: 1 - enableZoom: 0 - lockHorizontal: 0 - lockVertical: 0 - wrapTexture: 1 - velocityActive: 1 - velocityDampingX: 0.9 - velocityDampingY: 0.9 - panZoomSmoothing: 95.2 - panEventReceivers: [] - reticle: {fileID: 228203322} - leftPoint: {fileID: 1036401408} - rightPoint: {fileID: 870499135} ---- !u!65 &321658866 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 0.15195075} - m_Center: {x: 0, y: 0, z: 0.30722296} ---- !u!64 &321658867 -MeshCollider: - m_ObjectHideFlags: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: Toggle Features + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 32 + m_fontSizeBase: 32 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: -24.667788, w: 0.1563147} + m_textInfo: + textComponent: {fileID: 235445002} + characterCount: 15 + spriteCount: 0 + spaceCount: 1 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 235445005} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!222 &235445003 +CanvasRenderer: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 235445000} + m_CullTransparentMesh: 0 +--- !u!33 &235445004 +MeshFilter: + m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Convex: 0 - m_CookingOptions: 14 - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &321658868 + m_GameObject: {fileID: 235445000} + m_Mesh: {fileID: 0} +--- !u!23 &235445005 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} + m_GameObject: {fileID: 235445000} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 @@ -583,7 +782,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: d2a40ec9be92da646a18523f98205d0a, type: 2} + - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -603,15 +802,202 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!33 &321658869 -MeshFilter: +--- !u!1001 &283354341 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1698852960} + m_Modifications: + - target: {fileID: 7779420039263858270, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Name + value: Slate (2) + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.882 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.14 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.z + value: -0.16 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.y + value: -0.30070576 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.953717 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_RootOrder + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: -35 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776846, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_text + value: Two hand zoomable, Free scroll + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.characterCount + value: 30 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.wordCount + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 7779420038454193966, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420038454194000, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038454194000, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5373150653584304409, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 1484589536593882618, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1484589536593882618, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654425, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654375, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654375, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5373150654675824110, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 1484589535602960653, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1484589535602960653, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: reticle + value: + objectReference: {fileID: 228203322} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: leftPoint + value: + objectReference: {fileID: 1036401408} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: rightPoint + value: + objectReference: {fileID: 870499135} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: enableZoom + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: lockHorizontal + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 937ce507dd7ee334ba569554e24adbdd, type: 3} +--- !u!4 &283354342 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + m_PrefabInstance: {fileID: 283354341} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 321658862} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &471121396 +--- !u!1 &334838242 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -619,59 +1005,55 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 471121397} - - component: {fileID: 471121399} - - component: {fileID: 471121398} + - component: {fileID: 334838243} + - component: {fileID: 334838247} + - component: {fileID: 334838246} + - component: {fileID: 334838245} + - component: {fileID: 334838244} m_Layer: 0 - m_Name: New Text + m_Name: Backpanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &471121397 +--- !u!4 &334838243 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 471121396} - m_LocalRotation: {x: -0, y: -0, z: -1.25965e-10, w: 1} - m_LocalPosition: {x: -0.5225194, y: 0.65021986, z: 0.040342093} - m_LocalScale: {x: 0.032265346, y: 0.032263476, z: 0.03226534} + m_GameObject: {fileID: 334838242} + m_LocalRotation: {x: -0, y: 0.7071068, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0.3257, z: -0.004582405} + m_LocalScale: {x: 0.013220016, y: 0.33324012, z: 0.61351055} m_Children: [] - m_Father: {fileID: 80106500} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!102 &471121398 -TextMesh: - serializedVersion: 3 + m_Father: {fileID: 886953617} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 180, z: 0} +--- !u!54 &334838244 +Rigidbody: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 471121396} - m_Text: smooth 57 - m_OffsetZ: 0 - m_CharacterSize: 1 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 40 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!23 &471121399 + m_GameObject: {fileID: 334838242} + serializedVersion: 2 + m_Mass: 100 + m_Drag: 0 + m_AngularDrag: 0.05 + m_UseGravity: 0 + m_IsKinematic: 1 + m_Interpolate: 0 + m_Constraints: 126 + m_CollisionDetection: 0 +--- !u!23 &334838245 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 471121396} + m_GameObject: {fileID: 334838242} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -679,10 +1061,10 @@ MeshRenderer: m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 + m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + - {fileID: 2100000, guid: a8de2758c4b4460cae694f0d50d94fbb, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -690,7 +1072,7 @@ MeshRenderer: m_ProbeAnchor: {fileID: 0} m_LightProbeVolumeOverride: {fileID: 0} m_ScaleInLightmap: 1 - m_PreserveUVs: 0 + m_PreserveUVs: 1 m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 @@ -702,6 +1084,217 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 +--- !u!65 &334838246 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334838242} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!33 &334838247 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 334838242} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1001 &355382936 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1698852960} + m_Modifications: + - target: {fileID: 7779420039263858270, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Name + value: Slate + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.004 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.14 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.05681032 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776846, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_text + value: Two hand zoomable, Vertical scroll + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.characterCount + value: 34 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 4 + objectReference: {fileID: 0} + - target: {fileID: 7779420038487776840, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_textInfo.wordCount + value: 5 + objectReference: {fileID: 0} + - target: {fileID: 7779420038454193966, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420038454194000, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420038454194000, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5373150653584304409, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 1484589536593882618, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1484589536593882618, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654425, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654375, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420037966654375, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5373150654675824110, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 1484589535602960653, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1484589535602960653, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7779420039263858272, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: m_Enabled + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: reticle + value: + objectReference: {fileID: 228203322} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: leftPoint + value: + objectReference: {fileID: 1036401408} + - target: {fileID: 6478522880476602763, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + propertyPath: rightPoint + value: + objectReference: {fileID: 870499135} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 937ce507dd7ee334ba569554e24adbdd, type: 3} +--- !u!4 &355382937 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 7779420039263858271, guid: 937ce507dd7ee334ba569554e24adbdd, + type: 3} + m_PrefabInstance: {fileID: 355382936} + m_PrefabAsset: {fileID: 0} --- !u!1 &483432261 GameObject: m_ObjectHideFlags: 0 @@ -733,7 +1326,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &497356534 +--- !u!1 &516244409 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -741,35 +1334,38 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 497356535} + - component: {fileID: 516244410} m_Layer: 0 - m_Name: SceneContent + m_Name: TextContent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &497356535 -Transform: +--- !u!224 &516244410 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 497356534} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.098, y: 0.537, z: 3.381} - m_LocalScale: {x: 0.4815, y: 0.4815, z: 0.4815} + m_GameObject: {fileID: 516244409} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 80106500} - - {fileID: 1564430530} - - {fileID: 663059246} - - {fileID: 2129217972} - - {fileID: 321658863} - - {fileID: 1278228905} - m_Father: {fileID: 0} - m_RootOrder: 3 + - {fileID: 1131124966} + - {fileID: 2045784224} + - {fileID: 88779964} + - {fileID: 533546422} + m_Father: {fileID: 886953617} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &577178229 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 1025, y: 648} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &533546421 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -777,70 +1373,47 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 577178230} - - component: {fileID: 577178232} - - component: {fileID: 577178231} + - component: {fileID: 533546422} + - component: {fileID: 533546423} m_Layer: 0 - m_Name: New Text + m_Name: MRTK_Logo m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &577178230 +--- !u!4 &533546422 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 577178229} - m_LocalRotation: {x: -0, y: -0, z: -1.25965e-10, w: 1} - m_LocalPosition: {x: -0.5225194, y: 0.65021986, z: 0.040342093} - m_LocalScale: {x: 0.032265346, y: 0.032263476, z: 0.03226534} + m_GameObject: {fileID: 533546421} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.1519, y: 0.4273, z: -0.019582} + m_LocalScale: {x: 0.026762437, y: 0.026762437, z: 0.026762437} m_Children: [] - m_Father: {fileID: 2129217972} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!102 &577178231 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 577178229} - m_Text: smooth 0 - m_OffsetZ: 0 - m_CharacterSize: 1 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 40 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!23 &577178232 -MeshRenderer: + m_Father: {fileID: 516244410} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!212 &533546423 +SpriteRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 577178229} + m_GameObject: {fileID: 533546421} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 + m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -852,15 +1425,26 @@ MeshRenderer: m_IgnoreNormalsForChartDetection: 0 m_ImportantGI: 0 m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 + m_SelectedEditorRenderState: 0 m_MinimumChartSize: 4 m_AutoUVMaxDistance: 0.5 m_AutoUVMaxAngle: 89 m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!1 &649754905 + m_SortingOrder: 10 + m_Sprite: {fileID: 21300000, guid: 84643a20fa6b4fa7969ef84ad2e40992, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 5.12, y: 2.24} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &700980065 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -868,59 +1452,54 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 649754906} - - component: {fileID: 649754908} - - component: {fileID: 649754907} + - component: {fileID: 700980066} m_Layer: 0 - m_Name: New Text + m_Name: SceneDescriptionPanel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &649754906 +--- !u!4 &700980066 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 649754905} - m_LocalRotation: {x: -0, y: -0, z: -1.25965e-10, w: 1} - m_LocalPosition: {x: -0.5225194, y: 0.65021986, z: 0.040342093} - m_LocalScale: {x: 0.032265346, y: 0.032263476, z: 0.03226534} - m_Children: [] - m_Father: {fileID: 1564430530} + m_GameObject: {fileID: 700980065} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.069, y: -0.07, z: 0.306} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 886953617} + m_Father: {fileID: 1698852960} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!102 &649754907 -TextMesh: - serializedVersion: 3 +--- !u!1 &870499135 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 649754905} - m_Text: smooth 0.92 - m_OffsetZ: 0 - m_CharacterSize: 1 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 40 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!23 &649754908 + serializedVersion: 6 + m_Component: + - component: {fileID: 870499139} + - component: {fileID: 870499138} + - component: {fileID: 870499137} + m_Layer: 0 + m_Name: rightTouch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &870499137 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 649754905} + m_GameObject: {fileID: 870499135} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -931,7 +1510,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} + - {fileID: 2100000, guid: a4f69d1689086fd4aa72e54c268c73c7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -951,7 +1530,29 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!1 &663059241 +--- !u!33 &870499138 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870499135} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &870499139 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 870499135} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.196, y: 0.125, z: 0.54308} + m_LocalScale: {x: 0.011130867, y: 0.011130867, z: 0.011130867} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &886953616 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -959,36 +1560,55 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 663059246} - - component: {fileID: 663059245} - - component: {fileID: 663059244} - - component: {fileID: 663059242} + - component: {fileID: 886953617} m_Layer: 0 - m_Name: Cube + m_Name: Panel1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &663059242 -MonoBehaviour: +--- !u!4 &886953617 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 663059241} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 75145c3c50bd11f4dab8b190479fcbcb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!23 &663059244 + m_GameObject: {fileID: 886953616} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.7, y: 0.7, z: 0.7} + m_Children: + - {fileID: 516244410} + - {fileID: 334838243} + m_Father: {fileID: 700980066} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1036401408 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1036401412} + - component: {fileID: 1036401411} + - component: {fileID: 1036401410} + m_Layer: 0 + m_Name: leftTouch + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1036401410 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 663059241} + m_GameObject: {fileID: 1036401408} m_Enabled: 1 m_CastShadows: 1 m_ReceiveShadows: 1 @@ -999,7 +1619,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + - {fileID: 2100000, guid: a4f69d1689086fd4aa72e54c268c73c7, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1019,106 +1639,29 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!33 &663059245 +--- !u!33 &1036401411 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 663059241} - m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &663059246 + m_GameObject: {fileID: 1036401408} + m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1036401412 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 663059241} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.19314641, y: 0.754513, z: -0.68535835} - m_LocalScale: {x: 0.28857738, y: 0.28857738, z: 0.28857738} - m_Children: [] - m_Father: {fileID: 497356535} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &870499135 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 870499139} - - component: {fileID: 870499138} - - component: {fileID: 870499137} - m_Layer: 0 - m_Name: rightTouch - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &870499137 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 870499135} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: a4f69d1689086fd4aa72e54c268c73c7, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &870499138 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 870499135} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &870499139 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 870499135} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.196, y: 0.125, z: 0.54308} - m_LocalScale: {x: 0.011130867, y: 0.011130867, z: 0.011130867} + m_GameObject: {fileID: 1036401408} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.196, y: 0.125, z: 0.54308} + m_LocalScale: {x: 0.011130867, y: 0.011130867, z: 0.011130867} m_Children: [] m_Father: {fileID: 0} - m_RootOrder: 6 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &883521359 +--- !u!1 &1131124965 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1126,117 +1669,179 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 883521360} - - component: {fileID: 883521362} - - component: {fileID: 883521361} + - component: {fileID: 1131124966} + - component: {fileID: 1131124970} + - component: {fileID: 1131124969} + - component: {fileID: 1131124968} + - component: {fileID: 1131124967} m_Layer: 0 - m_Name: New Text + m_Name: Title m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &883521360 -Transform: +--- !u!224 &1131124966 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 883521359} - m_LocalRotation: {x: -0, y: -0, z: -1.25965e-10, w: 1} - m_LocalPosition: {x: -0.5225194, y: 0.65021986, z: 0.040342093} - m_LocalScale: {x: 0.032265346, y: 0.032263476, z: 0.03226534} + m_GameObject: {fileID: 1131124965} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.0221} + m_LocalScale: {x: 0.009153391, y: 0.009153391, z: 0.009153391} m_Children: [] - m_Father: {fileID: 321658863} + m_Father: {fileID: 516244410} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!102 &883521361 -TextMesh: - serializedVersion: 3 + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.1856, y: 0.3426} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1131124967 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 883521359} - m_Text: no zoom - m_OffsetZ: 0 - m_CharacterSize: 1 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 40 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: + m_GameObject: {fileID: 1131124965} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: Hand Interaction Pan & Zoom + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: serializedVersion: 2 rgba: 4294967295 ---- !u!23 &883521362 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 883521359} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!1 &1036401408 -GameObject: - m_ObjectHideFlags: 0 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 43.62 + m_fontSizeBase: 43.62 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: -40.90899, w: 0} + m_textInfo: + textComponent: {fileID: 1131124967} + characterCount: 27 + spriteCount: 0 + spaceCount: 4 + wordCount: 4 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 1131124970} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!222 &1131124968 +CanvasRenderer: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1131124965} + m_CullTransparentMesh: 0 +--- !u!33 &1131124969 +MeshFilter: + m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1036401412} - - component: {fileID: 1036401411} - - component: {fileID: 1036401410} - m_Layer: 0 - m_Name: leftTouch - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!23 &1036401410 + m_GameObject: {fileID: 1131124965} + m_Mesh: {fileID: 0} +--- !u!23 &1131124970 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1036401408} + m_GameObject: {fileID: 1131124965} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 @@ -1244,7 +1849,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: a4f69d1689086fd4aa72e54c268c73c7, type: 2} + - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1264,28 +1869,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!33 &1036401411 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1036401408} - m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0} ---- !u!4 &1036401412 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1036401408} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0.196, y: 0.125, z: 0.54308} - m_LocalScale: {x: 0.011130867, y: 0.011130867, z: 0.011130867} - m_Children: [] - m_Father: {fileID: 0} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1140877731 GameObject: m_ObjectHideFlags: 0 @@ -1428,158 +2011,437 @@ Camera: m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!1 &1278228904 -GameObject: +--- !u!1001 &1275842390 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1278228905} - - component: {fileID: 1278228911} - - component: {fileID: 1278228910} - - component: {fileID: 1278228909} - - component: {fileID: 1278228908} - - component: {fileID: 1278228907} - - component: {fileID: 1278228906} - m_Layer: 0 - m_Name: SlateApan - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1278228905 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1471801280} + m_Modifications: + - target: {fileID: 2204069621426241315, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Name + value: ToggleProfilerButton + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992557, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_text + value: Profiler + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.characterCount + value: 8 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.wordCount + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.1428 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.111 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.1134 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_RootOrder + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.x + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.z + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 4607504470098667674, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_text + value: Say "Toggle Profiler" + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_firstOverflowCharacterIndex + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.characterCount + value: 21 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.wordCount + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.lineCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8779034279059886464, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1471801281} + - target: {fileID: 8779034279059886464, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OnToggleProfiler + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: Increment + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621426241341, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: InteractableOnClick + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1874729665501627384, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992593, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623052342153, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 85b164de2cfcb854cbbcb9c82670749d, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, type: 3} +--- !u!4 &1275842391 stripped Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0.57, y: -1.57, z: -4.252} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1772854424} - m_Father: {fileID: 497356535} - m_RootOrder: 5 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1278228906 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} - m_Name: - m_EditorClassIdentifier: - localForward: {x: 0, y: 0, z: 1} - localUp: {x: 0, y: 1, z: 0} - localCenter: {x: 0, y: 0, z: 0.38319832} - eventsToReceive: 0 - touchableSurface: 0 - bounds: {x: 1, y: 1} - touchableCollider: {fileID: 1278228909} ---- !u!114 &1278228907 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + m_PrefabInstance: {fileID: 1275842390} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: a0d3fa6d0a45d1046aa0f0a2f2a93923, type: 3} - m_Name: - m_EditorClassIdentifier: - focusEnabled: 1 - touchType: 1 - panEventReceivers: [] - lockHorizontal: 0 - lockVertical: 0 - wrapTexture: 1 - velocityActive: 1 - velocityDamping: {x: 0.9, y: 0.9} - springActive: 0 - isEnabled: 1 - touchVisual: {fileID: 228203322} ---- !u!65 &1278228908 -BoxCollider: +--- !u!1001 &1379056591 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 0.15195075} - m_Center: {x: 0, y: 0, z: 0.30722296} ---- !u!64 &1278228909 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Convex: 0 - m_CookingOptions: 14 - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &1278228910 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: d2a40ec9be92da646a18523f98205d0a, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1278228911 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} + m_Modification: + m_TransformParent: {fileID: 1471801280} + m_Modifications: + - target: {fileID: 2204069621426241315, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Name + value: ToggleHandMesh + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992557, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_text + value: Hand Mesh + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.characterCount + value: 9 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.wordCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.0851 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.1108 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.1147 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_RootOrder + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.x + value: 1.5000002 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.z + value: 1.5000002 + objectReference: {fileID: 0} + - target: {fileID: 4607504470098667674, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_text + value: Say "Toggle Profiler" + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_firstOverflowCharacterIndex + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.characterCount + value: 21 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.wordCount + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.lineCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8779034279059886464, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1471801282} + - target: {fileID: 8779034279059886464, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OnToggleHandMesh + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: Increment + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621426241341, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: InteractableOnClick + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1874729665501627384, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992593, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623052342153, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 7344413e86980e943b39f9d8080ed99f, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, type: 3} +--- !u!4 &1379056592 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + m_PrefabInstance: {fileID: 1379056591} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1278228904} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1564430529 +--- !u!1 &1471801279 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1587,153 +2449,61 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1564430530} - - component: {fileID: 1564430537} - - component: {fileID: 1564430536} - - component: {fileID: 1564430535} - - component: {fileID: 1564430534} - - component: {fileID: 1564430533} - - component: {fileID: 1564430531} + - component: {fileID: 1471801280} + - component: {fileID: 1471801281} + - component: {fileID: 1471801282} m_Layer: 0 - m_Name: SlateB + m_Name: ToggleProfilerButton m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1564430530 +--- !u!4 &1471801280 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} - m_LocalRotation: {x: -0, y: -0.1979095, z: -0, w: 0.9802203} - m_LocalPosition: {x: -1.4517878, y: -0.15027, z: -3.1072845} - m_LocalScale: {x: 0.65635, y: 0.65635, z: 0.65635} + m_GameObject: {fileID: 1471801279} + m_LocalRotation: {x: 0.38265973, y: 0.0102793425, z: -0.004257843, w: 0.92382234} + m_LocalPosition: {x: -0.0216, y: -0.3484, z: -0.339} + m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 649754906} - m_Father: {fileID: 497356535} + - {fileID: 235445001} + - {fileID: 1275842391} + - {fileID: 1379056592} + - {fileID: 2108381302} + m_Father: {fileID: 1698852960} m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: -22.829, z: 0} ---- !u!114 &1564430531 + m_LocalEulerAnglesHint: {x: 45, y: 1.2750001, z: 0} +--- !u!114 &1471801281 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} + m_GameObject: {fileID: 1471801279} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} + m_Script: {fileID: 11500000, guid: ddff6079fd6eaff4794af645b5ded417, type: 3} m_Name: m_EditorClassIdentifier: - localForward: {x: 0, y: 0, z: 1} - localUp: {x: 0, y: 1, z: 0} - localCenter: {x: 0, y: 0, z: 0.38319832} - eventsToReceive: 0 - touchableSurface: 0 - bounds: {x: 1, y: 1} - touchableCollider: {fileID: 1564430535} ---- !u!114 &1564430533 +--- !u!114 &1471801282 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} + m_GameObject: {fileID: 1471801279} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ef1a57c42d928dc49b7c947623b2b2ef, type: 3} + m_Script: {fileID: 11500000, guid: 210487fc9a02cd049bdd702b7cb8b977, type: 3} m_Name: m_EditorClassIdentifier: - focusEnabled: 1 - isEnabled: 1 - enableZoom: 1 - lockHorizontal: 0 - lockVertical: 0 - wrapTexture: 1 - velocityActive: 1 - velocityDampingX: 0.9 - velocityDampingY: 0.9 - panZoomSmoothing: 92.6 - panEventReceivers: [] - reticle: {fileID: 228203322} - leftPoint: {fileID: 1036401408} - rightPoint: {fileID: 870499135} ---- !u!65 &1564430534 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 0.15195075} - m_Center: {x: 0, y: 0, z: 0.30722296} ---- !u!64 &1564430535 -MeshCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Convex: 0 - m_CookingOptions: 14 - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &1564430536 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: d2a40ec9be92da646a18523f98205d0a, type: 2} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!33 &1564430537 -MeshFilter: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1564430529} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!1 &1772854423 + isHandMeshVisible: 1 + isHandJointVisible: 1 +--- !u!1 &1698852959 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1741,90 +2511,34 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1772854424} - - component: {fileID: 1772854426} - - component: {fileID: 1772854425} + - component: {fileID: 1698852960} m_Layer: 0 - m_Name: New Text + m_Name: SceneContent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1772854424 +--- !u!4 &1698852960 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772854423} - m_LocalRotation: {x: -0, y: -0, z: -1.25965e-10, w: 1} - m_LocalPosition: {x: -0.5225194, y: 0.65021986, z: 0.040342093} - m_LocalScale: {x: 0.032265346, y: 0.032263476, z: 0.03226534} - m_Children: [] - m_Father: {fileID: 1278228905} - m_RootOrder: 0 + m_GameObject: {fileID: 1698852959} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.067, y: 0.171, z: 0.9871897} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 700980066} + - {fileID: 1471801280} + - {fileID: 355382937} + - {fileID: 10894720} + - {fileID: 283354342} + m_Father: {fileID: 0} + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!102 &1772854425 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772854423} - m_Text: Pan script - m_OffsetZ: 0 - m_CharacterSize: 1 - m_LineSpacing: 1 - m_Anchor: 0 - m_Alignment: 0 - m_TabSize: 4 - m_FontSize: 40 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_Color: - serializedVersion: 2 - rgba: 4294967295 ---- !u!23 &1772854426 -MeshRenderer: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1772854423} - m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 - m_DynamicOccludee: 1 - m_MotionVectors: 1 - m_LightProbeUsage: 1 - m_ReflectionProbeUsage: 1 - m_RenderingLayerMask: 1 - m_RendererPriority: 0 - m_Materials: - - {fileID: 10100, guid: 0000000000000000e000000000000000, type: 0} - m_StaticBatchInfo: - firstSubMesh: 0 - subMeshCount: 0 - m_StaticBatchRoot: {fileID: 0} - m_ProbeAnchor: {fileID: 0} - m_LightProbeVolumeOverride: {fileID: 0} - m_ScaleInLightmap: 1 - m_PreserveUVs: 0 - m_IgnoreNormalsForChartDetection: 0 - m_ImportantGI: 0 - m_StitchLightmapSeams: 0 - m_SelectedEditorRenderState: 3 - m_MinimumChartSize: 4 - m_AutoUVMaxDistance: 0.5 - m_AutoUVMaxAngle: 89 - m_LightmapParameters: {fileID: 0} - m_SortingLayerID: 0 - m_SortingLayer: 0 - m_SortingOrder: 0 ---- !u!1 &2129217971 +--- !u!1 &2045784223 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1832,117 +2546,181 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 2129217972} - - component: {fileID: 2129217978} - - component: {fileID: 2129217977} - - component: {fileID: 2129217976} - - component: {fileID: 2129217975} - - component: {fileID: 2129217974} - - component: {fileID: 2129217973} + - component: {fileID: 2045784224} + - component: {fileID: 2045784228} + - component: {fileID: 2045784227} + - component: {fileID: 2045784226} + - component: {fileID: 2045784225} m_Layer: 0 - m_Name: SlateA (1) + m_Name: Description m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &2129217972 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} - m_LocalRotation: {x: -0, y: 0.11896288, z: -0, w: 0.9928987} - m_LocalPosition: {x: 1.5844197, y: -0.17608078, z: -1.5472381} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 577178230} - m_Father: {fileID: 497356535} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 13.665001, z: 0} ---- !u!114 &2129217973 -MonoBehaviour: +--- !u!224 &2045784224 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 98c748f3768ab714a8449b60fb9edc5c, type: 3} - m_Name: - m_EditorClassIdentifier: - localForward: {x: 0, y: 0, z: 1} - localUp: {x: 0, y: 1, z: 0} - localCenter: {x: 0, y: 0, z: 0.38319832} - eventsToReceive: 0 - touchableSurface: 0 - bounds: {x: 1, y: 1} - touchableCollider: {fileID: 2129217976} ---- !u!114 &2129217974 + m_GameObject: {fileID: 2045784223} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.0221} + m_LocalScale: {x: 0.009153391, y: 0.009153391, z: 0.009153391} + m_Children: [] + m_Father: {fileID: 516244410} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.1856, y: 0.2786} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2045784225 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} + m_GameObject: {fileID: 2045784223} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: ef1a57c42d928dc49b7c947623b2b2ef, type: 3} + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} m_Name: m_EditorClassIdentifier: - focusEnabled: 1 - isEnabled: 1 - enableZoom: 1 - lockHorizontal: 0 - lockVertical: 0 - wrapTexture: 1 - velocityActive: 1 - velocityDampingX: 0.9 - velocityDampingY: 0.9 - panZoomSmoothing: 0 - panEventReceivers: [] - reticle: {fileID: 228203322} - leftPoint: {fileID: 1036401408} - rightPoint: {fileID: 870499135} ---- !u!65 &2129217975 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 1, y: 1, z: 0.15195075} - m_Center: {x: 0, y: 0, z: 0.30722296} ---- !u!64 &2129217976 -MeshCollider: - m_ObjectHideFlags: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: This example scene demonstrates the use of HandInteractionPanZoom script + on the Slate prefab. Please take a look at 'ContentQuad' object to see various + configuration options for the panning and zooming interactions. + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 20 + m_fontSizeBase: 20 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: -40.90899, w: -7.350438} + m_textInfo: + textComponent: {fileID: 2045784225} + characterCount: 215 + spriteCount: 0 + spaceCount: 30 + wordCount: 31 + linkCount: 0 + lineCount: 4 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 2045784228} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!222 &2045784226 +CanvasRenderer: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2045784223} + m_CullTransparentMesh: 0 +--- !u!33 &2045784227 +MeshFilter: + m_ObjectHideFlags: 2 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} - m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 3 - m_Convex: 0 - m_CookingOptions: 14 - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} ---- !u!23 &2129217977 + m_GameObject: {fileID: 2045784223} + m_Mesh: {fileID: 0} +--- !u!23 &2045784228 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} + m_GameObject: {fileID: 2045784223} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 @@ -1950,7 +2728,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: d2a40ec9be92da646a18523f98205d0a, type: 2} + - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -1970,11 +2748,218 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!33 &2129217978 -MeshFilter: +--- !u!1001 &2108381301 +PrefabInstance: m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1471801280} + m_Modifications: + - target: {fileID: 2204069621426241315, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Name + value: ToggleHandJoint + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992557, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_text + value: Hand Joint + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.characterCount + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992595, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.wordCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.x + value: -0.0253 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.1105 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0.1161 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.x + value: 1.5000002 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.y + value: 1.5 + objectReference: {fileID: 0} + - target: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_LocalScale.z + value: 1.5000002 + objectReference: {fileID: 0} + - target: {fileID: 4607504470098667674, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_text + value: Say "Toggle Profiler" + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_firstOverflowCharacterIndex + value: 12 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.characterCount + value: 21 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.spaceCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.wordCount + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 7060011145322376313, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_textInfo.lineCount + value: 2 + objectReference: {fileID: 0} + - target: {fileID: 8779034279059886464, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 1471801282} + - target: {fileID: 8779034279059886464, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: OnToggleHandJoint + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target + value: + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName + value: Increment + objectReference: {fileID: 0} + - target: {fileID: 2204069620958546074, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069621426241341, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: InteractableOnClick + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1874729665501627384, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_IsActive + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2204069621878992593, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2204069623052342153, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: e6ab953dc933471489f5ebff6791a886, type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, type: 3} +--- !u!4 &2108381302 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 2204069623020599746, guid: 3f1f46cbecbe08e46a303ccfdb5b498a, + type: 3} + m_PrefabInstance: {fileID: 2108381301} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 2129217971} - m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/DragEnabler.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/DragEnabler.cs similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/DragEnabler.cs rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/DragEnabler.cs diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/DragEnabler.cs.meta b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/DragEnabler.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/DragEnabler.cs.meta rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/DragEnabler.cs.meta diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/FollowMeToggle.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/FollowMeToggle.cs similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/FollowMeToggle.cs rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/FollowMeToggle.cs diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/FollowMeToggle.cs.meta b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/FollowMeToggle.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/FollowMeToggle.cs.meta rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/FollowMeToggle.cs.meta diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/SlateEnabler.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/SlateEnabler.cs similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/SlateEnabler.cs rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/SlateEnabler.cs diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/SlateEnabler.cs.meta b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/SlateEnabler.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Script/SlateEnabler.cs.meta rename to Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/SlateEnabler.cs.meta From 58082ac859558a95f7c7b167c419a76208081b6d Mon Sep 17 00:00:00 2001 From: Cameron Micka Date: Fri, 5 Apr 2019 09:45:47 -0700 Subject: [PATCH 013/183] Re-introducing the shell hand mesh shader that works with single pass instanced rendering --- .../Materials/MRTK_ArticulatedHandMesh.mat | 134 +-- .../Shaders/HandTriangles.shader | 811 ++++++++++++++++++ ....shader.meta => HandTriangles.shader.meta} | 0 .../Shaders/Hand_Triangles.shader | 670 --------------- 4 files changed, 848 insertions(+), 767 deletions(-) create mode 100644 Assets/MixedRealityToolkit.SDK/StandardAssets/Shaders/HandTriangles.shader rename Assets/MixedRealityToolkit.SDK/StandardAssets/Shaders/{Hand_Triangles.shader.meta => HandTriangles.shader.meta} (100%) delete mode 100644 Assets/MixedRealityToolkit.SDK/StandardAssets/Shaders/Hand_Triangles.shader diff --git a/Assets/MixedRealityToolkit.SDK/StandardAssets/Materials/MRTK_ArticulatedHandMesh.mat b/Assets/MixedRealityToolkit.SDK/StandardAssets/Materials/MRTK_ArticulatedHandMesh.mat index 3e75f34b6d7..42e73fe7c9b 100644 --- a/Assets/MixedRealityToolkit.SDK/StandardAssets/Materials/MRTK_ArticulatedHandMesh.mat +++ b/Assets/MixedRealityToolkit.SDK/StandardAssets/Materials/MRTK_ArticulatedHandMesh.mat @@ -8,112 +8,52 @@ Material: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_Name: MRTK_ArticulatedHandMesh - m_Shader: {fileID: 4800000, guid: 5bdea20278144b11916d77503ba1467a, type: 3} - m_ShaderKeywords: _ALPHABLEND_ON _COLOR_MAP_ENABLE__ON _DIRECTIONAL_LIGHT _DISABLE_ALBEDO_MAP - _PULSE_ENABLED__ON _RIM_LIGHT _UNITY_TO_SRGB__ON + m_Shader: {fileID: 4800000, guid: aca12b5bed90b92448a88757df739294, type: 3} + m_ShaderKeywords: USE_ALBEDO_TEXTURE _ALPHABLEND_ON _COLOR_MAP_ENABLE__ON _DIRECTIONAL_LIGHT + _DISABLE_ALBEDO_MAP _RIM_LIGHT _UNITY_TO_SRGB__ON m_LightmapFlags: 4 m_EnableInstancingVariants: 0 m_DoubleSidedGI: 0 - m_CustomRenderQueue: 3000 - stringTagMap: - RenderType: Transparent + m_CustomRenderQueue: 5000 + stringTagMap: {} disabledShaderPasses: [] m_SavedProperties: serializedVersion: 3 m_TexEnvs: - - _ChannelMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _IridescentSpectrumMap: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _MainTex: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - - _NormalMap: + - _Color_Map_: m_Texture: {fileID: 0} m_Scale: {x: 1, y: 1} m_Offset: {x: 0, y: 0} m_Floats: - - _AlbedoAlphaMode: 0 - - _AlbedoAssignedAtRuntime: 0 - - _BlendOp: 0 - - _BorderLight: 0 - - _BorderLightOpaque: 0 - - _BorderLightOpaqueAlpha: 1 - - _BorderLightReplacesAlbedo: 0 - - _BorderLightUsesHoverColor: 0 - - _BorderMinValue: 0.1 - - _BorderWidth: 0.1 - - _ClippingBorder: 0 - - _ClippingBorderWidth: 0.025 - - _ClippingBox: 0 - - _ClippingPlane: 0 - - _ClippingSphere: 0 - - _ColorWriteMask: 15 - - _CullMode: 0 - - _CustomMode: 2 - - _Cutoff: 0.5 - - _DirectionalLight: 1 - - _DstBlend: 1 - - _EdgeSmoothingValue: 0.002 - - _EnableChannelMap: 0 - - _EnableEmission: 0 - - _EnableHoverColorOverride: 0 - - _EnableLocalSpaceTriplanarMapping: 0 - - _EnableNormalMap: 0 - - _EnableTriplanarMapping: 0 - - _EnvironmentColorIntensity: 0.5 - - _EnvironmentColorThreshold: 1.5 - - _EnvironmentColoring: 0 - - _FadeBeginDistance: 0.85 - - _FadeCompleteDistance: 0.5 - - _HoverLight: 0 - - _InnerGlow: 0 - - _InnerGlowPower: 4 - - _InstancedColor: 0 - - _Iridescence: 0 - - _IridescenceAngle: -0.78 - - _IridescenceIntensity: 0.5 - - _IridescenceThreshold: 0.05 - - _Metallic: 0 - - _Mode: 4 - - _NearLightFade: 0 - - _NearPlaneFade: 0 - - _NormalMapScale: 1 - - _ProximityLight: 0 - - _ProximityLightTwoSided: 0 - - _Reflections: 0 - - _Refraction: 0 - - _RefractiveIndex: 0 - - _RenderQueueOverride: -1 - - _RimLight: 1 - - _RimPower: 3.62 - - _RoundCornerMargin: 0.01 - - _RoundCornerRadius: 0.25 - - _RoundCorners: 0 - - _Smoothness: 0.5 - - _SpecularHighlights: 0 - - _SphericalHarmonics: 0 - - _SrcBlend: 1 - - _Stencil: 0 - - _StencilComparison: 0 - - _StencilOperation: 0 - - _StencilReference: 0 - - _TriplanarMappingBlendSharpness: 4 - - _VertexColors: 0 - - _ZTest: 4 - - _ZWrite: 0 + - USE_ALBEDO_TEXTURE: 1 + - _Auto_Pulse_: 0 + - _Desaturated_Intensity_: 0 + - _Edge_Width_: 1 + - _Fill_Start_Time_: 0.5 + - _Filter_Width_: 1.5 + - _Flip_V_: 0 + - _Intensity_: 5 + - _Line_End_Time_: 0.5 + - _Max_Hover_: 0.004 + - _Max_In_Angle_: 0.6 + - _Max_Out_Angle_: 0.4 + - _Period_: 2.7 + - _Pulse_: 0.346 + - _Pulse_Amplify_Leading_: 0 + - _Pulse_Color_Width_: 1 + - _Pulse_Enabled_: 0 + - _Pulse_Lead_Fuzz_: 0.67 + - _Pulse_Line_Fuzz_: 0.2 + - _Pulse_Noise_Frequency_: 777 + - _Pulse_Outer_Size_: 1.05 + - _Pulse_Tail_Fuzz_: 0.8 + - _Pulse_Vary_: 0.075 + - _Pulse_Width_: 1 + - _Vary_Color_: 0.7 + - _Vary_UV_: 0.71 + - _Wrist_Fade_End_: 0.16 + - _Wrist_Fade_Start_: 0.1 m_Colors: - - _ClippingBorderColor: {r: 1, g: 0.2, b: 0, a: 1} - - _Color: {r: 0, g: 0.17916177, b: 0.2735849, a: 1} - - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} - - _EnvironmentColorX: {r: 1, g: 0, b: 0, a: 1} - - _EnvironmentColorY: {r: 0, g: 1, b: 0, a: 1} - - _EnvironmentColorZ: {r: 0, g: 0, b: 1, a: 1} - - _HoverColorOverride: {r: 1, g: 1, b: 1, a: 1} - - _InnerGlowColor: {r: 1, g: 1, b: 1, a: 0.75} - - _RimColor: {r: 0.0032039948, g: 0.5607187, b: 0.6792453, a: 1} + - _Fill_Color_: {r: 0.317647, g: 0.317647, b: 0.317647, a: 1} + - _Line_Color_: {r: 0.717647, g: 0.717647, b: 0.717647, a: 1} + - _Pulse_Origin_: {r: 0.5, g: 0, b: 0, a: 0} diff --git a/Assets/MixedRealityToolkit.SDK/StandardAssets/Shaders/HandTriangles.shader b/Assets/MixedRealityToolkit.SDK/StandardAssets/Shaders/HandTriangles.shader new file mode 100644 index 00000000000..09c691ab7f8 --- /dev/null +++ b/Assets/MixedRealityToolkit.SDK/StandardAssets/Shaders/HandTriangles.shader @@ -0,0 +1,811 @@ +// History: +// +// 19-01-16: +// Removed gradient within each face +// Removed sRGB option for Unity + +Shader "Mixed Reality Toolkit/HandTriangles" { + +Properties { + + [Header(Colors)] + _Intensity_("Intensity", Range(0,5)) = 5 + _Fill_Color_("Fill Color", Color) = (0.317647,0.317647,0.317647,1) + _Line_Color_("Line Color", Color) = (0.717647,0.717647,0.717647,1) + [Toggle(USE_ALBEDO_TEXTURE)] USE_ALBEDO_TEXTURE("USE ALBEDO TEXTURE", Float) = 1 + [NoScaleOffset] _Color_Map_("Color Map", 2D) = "" {} + _Vary_UV_("Vary UV", Range(0,1)) = 0.71 + _Vary_Color_("Vary Color", Range(0,1)) = 0.7 + _Desaturated_Intensity_("Desaturated Intensity", Range(0,1)) = 0 + + [Header(Edges)] + _Edge_Width_("Edge Width", Range(0,10)) = 1 + _Filter_Width_("Filter Width", Range(1,5)) = 1.5 + + [Header(Pulse)] + [Toggle] _Pulse_Enabled_("Pulse Enabled", Float) = 1 + _Pulse_("Pulse", Range(0,1)) = 0.346 + _Pulse_Width_("Pulse Width", Range(0,5)) = 1 + _Pulse_Outer_Size_("Pulse Outer Size", Range(0,2)) = 1.05 + _Pulse_Lead_Fuzz_("Pulse Lead Fuzz", Range(0,1)) = 0.67 + _Pulse_Tail_Fuzz_("Pulse Tail Fuzz", Range(0,1)) = 0.8 + _Pulse_Vary_("Pulse Vary", Range(0,1)) = 0.075 + _Pulse_Line_Fuzz_("Pulse Line Fuzz", Range(0.01,1)) = 0.2 + _Pulse_Noise_Frequency_("Pulse Noise Frequency", Range(0,2000)) = 777 + _Pulse_Origin_("Pulse Origin", Vector) = (0.5, 0, 0, 0) + _Pulse_Color_Width_("Pulse Color Width", Range(0,1)) = 1 + _Pulse_Amplify_Leading_("Pulse Amplify Leading", Range(0,2)) = 0 + + [Header(AutoPulse)] + [Toggle] _Auto_Pulse_("Auto Pulse", Float) = 1 + _Period_("Period", Float) = 2.7 + + [Header(Edge Timing)] + _Line_End_Time_("Line End Time", Range(0,1)) = 0.5 + _Fill_Start_Time_("Fill Start Time", Range(0,1)) = 0.5 + + [Header(Wrist Fade)] + _Wrist_Fade_Start_("Wrist Fade Start", Range(0,1)) = 0.1 + _Wrist_Fade_End_("Wrist Fade End", Range(0,1)) = 0.16 + + [Header(Flip V For Hydrogen)] + [Toggle] _Flip_V_("Flip V", Float) = 0 + + [Header(Fly)] + _Max_Hover_("Max Hover", Range(0,1)) = 0.004 + _Max_In_Angle_("Max In Angle", Range(0,2)) = 0.6 + _Max_Out_Angle_("Max Out Angle", Range(0,2)) = 0.4 + + +} + +SubShader { + Tags { "RenderType" = "Transparent" "Queue" = "Transparent" } + Blend One One + ZWrite Off + Tags {"DisableBatching" = "True"} + + LOD 100 + + + Pass + + { + + CGPROGRAM + + #pragma vertex vertex_main + #pragma fragment fragment_main + #pragma geometry geometry_main + #pragma multi_compile _ USE_ALBEDO_TEXTURE + + #include "UnityCG.cginc" + + float _Edge_Width_; + float _Filter_Width_; + bool _Flip_V_; + float _Wrist_Fade_Start_; + float _Wrist_Fade_End_; + float _Intensity_; + float4 _Fill_Color_; + float4 _Line_Color_; + //bool USE_ALBEDO_TEXTURE; + sampler2D _Color_Map_; + float _Vary_UV_; + float _Vary_Color_; + float _Desaturated_Intensity_; + float _Line_End_Time_; + float _Fill_Start_Time_; + float _Max_Hover_; + float _Max_In_Angle_; + float _Max_Out_Angle_; + bool _Pulse_Enabled_; + float _Pulse_; + float _Pulse_Width_; + float _Pulse_Outer_Size_; + float _Pulse_Lead_Fuzz_; + float _Pulse_Tail_Fuzz_; + float _Pulse_Vary_; + float _Pulse_Line_Fuzz_; + float _Pulse_Noise_Frequency_; + float4 _Pulse_Origin_; + float _Pulse_Color_Width_; + float _Pulse_Amplify_Leading_; + bool _Auto_Pulse_; + float _Period_; + + + struct VertexInput { + float4 vertex : POSITION; + float2 uv0 : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct VertexOutput { + float4 pos : SV_POSITION; + float3 posWorld : TEXCOORD8; + float2 uv : TEXCOORD0; + UNITY_VERTEX_INPUT_INSTANCE_ID + UNITY_VERTEX_OUTPUT_STEREO + }; + + struct FragmentInput { + float4 pos : SV_POSITION; + float3 posWorld : TEXCOORD8; + float4 extra1 : TEXCOORD4; + float4 extra2 : TEXCOORD5; + float4 extra3 : TEXCOORD2; + UNITY_VERTEX_OUTPUT_STEREO + }; + + #define Double_Sided 0 + #define Alpha_Blend 2 + #define No_Depth_Write 1 + + #ifndef Geo_Max_Out_Vertices + #define Geo_Max_Out_Vertices 16 + #endif + + FragmentInput vxOut[Geo_Max_Out_Vertices]; + int stripVxCount[Geo_Max_Out_Vertices]; + float4x4 matrixVP; + int vxOutCount; + int stripCount; + + + #define HUX_VIEW_TO_WORLD_DIR(V) (mul(transpose(UNITY_MATRIX_V), float4(V,0)).xyz) + + VertexOutput vertex_main(VertexInput v) + { + VertexOutput o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + UNITY_TRANSFER_INSTANCE_ID(v, o); + + + o.pos = UnityObjectToClipPos(v.vertex); + float4 posWorld = mul(unity_ObjectToWorld, v.vertex); + o.posWorld = posWorld.xyz; + + o.uv = v.uv0; + + return o; + } + + #ifndef HUX_GEO_SET_UV + #define HUX_GEO_SET_UV(A) + #endif + + #ifndef HUX_GEO_SET_NORMAL + #define HUX_GEO_SET_NORMAL(A) + #endif + + #ifndef HUX_GEO_SET_TANGENT + #define HUX_GEO_SET_TANGENT(A) + #endif + + #ifndef HUX_GEO_SET_COLOR + #define HUX_GEO_SET_COLOR(A) + #endif + + #define HUX_GEO_SET_EXTRA1(A) vxOut[vxOutCount].extra1=A; + #ifndef HUX_GEO_SET_EXTRA1 + #define HUX_GEO_SET_EXTRA1(A) + #endif + + #define HUX_GEO_SET_EXTRA2(A) vxOut[vxOutCount].extra2=A; + #ifndef HUX_GEO_SET_EXTRA2 + #define HUX_GEO_SET_EXTRA2(A) + #endif + + #define HUX_GEO_SET_EXTRA3(A) vxOut[vxOutCount].extra3=A; + #ifndef HUX_GEO_SET_EXTRA3 + #define HUX_GEO_SET_EXTRA3(A) + #endif + + //BLOCK_BEGIN Emit_Triangle 177 + + void emitVertex_Bid177(float3 P, float4 extra1, float4 C, float4 extra3) + { + vxOut[vxOutCount].posWorld=P; vxOut[vxOutCount].pos=mul(unity_MatrixVP, float4(P,1.0f));; + HUX_GEO_SET_EXTRA1(extra1); + HUX_GEO_SET_EXTRA2(C); + HUX_GEO_SET_EXTRA3(extra3); + vxOutCount+=1; stripVxCount[stripCount]+=1; + } + + void Emit_Triangle_B177( + bool Previous, + float3 P1, + float3 P2, + float3 P3, + float4 Extra1_1, + float4 Extra1_2, + float4 Extra1_3, + float4 Color, + float Wrist_1, + float Wrist_2, + float Wrist_3, + float Transition, + out bool Next ) + { + + float2 uv; + + float t = Transition>0.0 ? 1.0 : 0.0; + float3 p2 = P1 + (P2-P1)*t; + float3 p3 = P1 + (P3-P1)*t; + + uv = float2(0,0); + emitVertex_Bid177(P1,Extra1_1,Color*Wrist_1,float4(1.0,0.0,0.0,0.0)); + + uv = float2(1,0); + emitVertex_Bid177(p2,Extra1_2,Color*Wrist_2,float4(0.0,1.0,0.0,0.0)); + + uv = float2(0,1); + emitVertex_Bid177(p3,Extra1_3,Color*Wrist_3,float4(0.0,0.0,1.0,0.0)); + + stripCount+=1; stripVxCount[stripCount]=0; + + Next = Previous; + + } + //BLOCK_END Emit_Triangle + + //BLOCK_BEGIN Fly 164 + + float3 Rotate_Bid164(float A, float3 Center, float3 Axis, float3 XYZ) + { + float cosA = cos(A); + float sinA = sin(A); + + float3 v = XYZ - Center; + + float ux = Axis.x; + float uy = Axis.y; + float uz = Axis.z; + + float r00 = cosA + ux*ux*(1-cosA); + float r10 = uy*ux*(1-cosA)+uz*sinA; + float r20 = uz*ux*(1-cosA)-uy*sinA; + + float r01 = ux*uy*(1-cosA)-uz*sinA; + float r11 = cosA+uy*uy*(1-cosA); + float r21 = uz*uy*(1-cosA)+ux*sinA; + + float r02 = ux*uz*(1-cosA)+uy*sinA; + float r12 = uy*uz*(1-cosA)-ux*sinA; + float r22 = cosA+uz*uz*(1-cosA); + + float rot_x = dot(v,float3(r00,r10,r20)); + float rot_y = dot(v,float3(r01,r11,r21)); + float rot_z = dot(v,float3(r02,r12,r22)); + + return float3(rot_x,rot_y,rot_z) + Center; + } + + void Fly_B164( + float3 P0, + float3 P1, + float3 P2, + float Transition, + float Max_Hover, + float Max_In_Angle, + float Max_Out_Angle, + float2 UV0, + float2 UV1, + float2 UV2, + float2 PulseOrigin, + float3 Nearest_P, + bool Fading_Out, + out float3 Q0, + out float3 Q1, + out float3 Q2 ) + { + float3 N = normalize(cross(P1-P0,P2-P1)); + + float k01 = dot(normalize((UV0+UV1)*0.5-PulseOrigin),normalize(UV1-UV0)); + float k12 = dot(normalize((UV1+UV2)*0.5-PulseOrigin),normalize(UV2-UV1)); + float k20 = dot(normalize((UV0+UV2)*0.5-PulseOrigin),normalize(UV2-UV0)); + + float3 pulseDir = normalize( normalize(P1-P0)*k01+normalize(P2-P1)*k12 + normalize(P2-P0)*k20); + float3 axis = normalize(cross(N,pulseDir)); + float3 center = Nearest_P; //(P0+P1+P2)/3.0; + + float angle, k; + if (Fading_Out) { + //float t = Transition<0.5 ? 2.0*(0.5-Transition)*(0.5-Transition) : 2.0*(0.5-Transition)*(0.5-Transition)+0.5; + float t = smoothstep(0,1,Transition); + angle = -Max_Out_Angle * (1.0-t); + k = (1-t) * Max_Hover; + } else { + float t = smoothstep(0,1,Transition); + // float t = Transition*Transition; + angle = Max_In_Angle * (1.0-t); + k = (1-Transition) * Max_Hover; + } + + float3 p0 = Rotate_Bid164(angle,center,axis,P0); + float3 p1 = Rotate_Bid164(angle,center,axis,P1); + float3 p2 = Rotate_Bid164(angle,center,axis,P2); + + if (false) { ///(!Fading_Out) { + float t = (Transition); + p0 = Nearest_P + (p0-Nearest_P)*t; + p1 = Nearest_P + (p1-Nearest_P)*t; + p2 = Nearest_P + (p2-Nearest_P)*t; + } + + Q0 = p0 + N * k; + Q1 = p1 + N * k; + Q2 = p2 + N * k; + + + } + //BLOCK_END Fly + + //BLOCK_BEGIN Find_Nearest 163 + + void Find_Nearest_B163( + float2 UV1, + float2 UV2, + float2 UV3, + float2 Pulse_Origin, + float Transition, + bool FadingOut, + float3 P1, + float3 P2, + float3 P3, + out float4 Extra1_1, + out float4 Extra1_2, + out float4 Extra1_3, + out float3 Nearest_P ) + { + float d1 = distance(UV1,Pulse_Origin); + float d2 = distance(UV2,Pulse_Origin); + float d3 = distance(UV3,Pulse_Origin); + + Extra1_1 = float4(0.0,0.0,0.0,Transition); + Extra1_2 = float4(0.0,0.0,0.0,Transition); + Extra1_3 = float4(0.0,0.0,0.0,Transition); + + if (FadingOut) { + if (d1>d2 && d1>d3) { + Extra1_1.x=1.0; + Nearest_P = P1; + } else if (d2>d3) { + Extra1_2.x=1.0; + Nearest_P = P2; + } else { + Extra1_3.x=1.0; + Nearest_P = P3; + } + } else { + if (d10.0; + Fade_Color = 1.0-fadeOut; + } + + } + //BLOCK_END Pulse + + //BLOCK_BEGIN Flip_V_For_Hydrogen 154 + + void Flip_V_For_Hydrogen_B154( + bool Flip_V, + float2 UV_1, + float2 UV_2, + float2 UV_3, + out float2 Out_UV_1, + out float2 Out_UV_2, + out float2 Out_UV_3 ) + { + Out_UV_1 = Flip_V ? float2(UV_1.x,1.0-UV_1.y) : UV_1; + Out_UV_2 = Flip_V ? float2(UV_2.x,1.0-UV_2.y) : UV_2; + Out_UV_3 = Flip_V ? float2(UV_3.x,1.0-UV_3.y) : UV_3; + + } + //BLOCK_END Flip_V_For_Hydrogen + + //BLOCK_BEGIN Cell_Noise_2D 150 + + float2 mod289_Bid150(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + + float2 permute_Bid150(float2 x) + { + return mod289_Bid150(((x*float2(33.0,35.0))+1.0)*x); + } + + float2 permuteB_Bid150(float2 x) + { + return mod289_Bid150(((x*float2(37.0,34.0))-1.0)*x); + } + + + void Cell_Noise_2D_B150( + float2 XY, + float Frequency, + float Seed, + out float Result ) + { + + float2 P = XY * float2(Frequency,Frequency)+float2(Seed,Seed); + float2 Pi = floor(P); + + Pi = mod289_Bid150(Pi); // To avoid truncation effects in permutation + + float2 ix = Pi.xy; + float2 iy = Pi.yx; + + float2 i = permute_Bid150(permuteB_Bid150(ix) + iy); + + Result = frac(i.x*(1.0/41.0)+i.y*(1.0/42.0)); + + //Result = lerp(Out_Min, Out_Max, r); + + } + //BLOCK_END Cell_Noise_2D + + //BLOCK_BEGIN Pt_Sample_Texture 157 + + void Pt_Sample_Texture_B157( + float2 UV, + float Noise, + sampler2D Texture, + float Vary_UV, + float Map_Intensity, + out float4 Color ) + { + float2 xy = UV + float2(Noise-0.5,Noise-0.5)*Vary_UV; + Color = tex2D(Texture,xy,float2(0,0),float2(0,0))*Map_Intensity; + } + //BLOCK_END Pt_Sample_Texture + + //BLOCK_BEGIN AutoPulse 149 + + void AutoPulse_B149( + float Pulse, + bool Auto_Pulse, + float Period, + float Time, + out float Result ) + { + + if (Auto_Pulse) { + Result = frac(Time/Period); + } else { + Result = Pulse; + } + } + //BLOCK_END AutoPulse + + //BLOCK_BEGIN Cell_Noise_2D 151 + + float2 mod289_Bid151(float2 x) + { + return x - floor(x * (1.0 / 289.0)) * 289.0; + } + + float2 permute_Bid151(float2 x) + { + return mod289_Bid151(((x*float2(33.0,35.0))+1.0)*x); + } + + float2 permuteB_Bid151(float2 x) + { + return mod289_Bid151(((x*float2(37.0,34.0))-1.0)*x); + } + + + void Cell_Noise_2D_B151( + float2 XY, + float Frequency, + float Seed, + out float Result ) + { + + float2 P = XY * float2(Frequency,Frequency)+float2(Seed,Seed); + float2 Pi = floor(P); + + Pi = mod289_Bid151(Pi); // To avoid truncation effects in permutation + + float2 ix = Pi.xy; + float2 iy = Pi.yx; + + float2 i = permute_Bid151(permuteB_Bid151(ix) + iy); + + Result = frac(i.x*(1.0/41.0)+i.y*(1.0/42.0)); + + //Result = lerp(Out_Min, Out_Max, r); + + } + //BLOCK_END Cell_Noise_2D + + + [maxvertexcount(Geo_Max_Out_Vertices)] + void geometry_main(triangle VertexOutput vxIn[3], inout TriangleStream triStream) + { + UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(vxIn[0]); + //huxEye = _WorldSpaceCameraPos; + //workaround for Unity's auto updater in 5.6 + float4x4 tmp = UNITY_MATRIX_MVP; + matrixVP = mul(tmp, unity_WorldToObject); + //matrixVP = mul(UNITY_MATRIX_MVP, _World2Object); + vxOutCount=0; + stripCount=0; + stripVxCount[0]=0; + + float2 Out_UV_1_Q154; + float2 Out_UV_2_Q154; + float2 Out_UV_3_Q154; + Flip_V_For_Hydrogen_B154(_Flip_V_,vxIn[0].uv,vxIn[1].uv,vxIn[2].uv,Out_UV_1_Q154,Out_UV_2_Q154,Out_UV_3_Q154); + + float Result_Q149; + AutoPulse_B149(_Pulse_,_Auto_Pulse_,_Period_,_Time.y,Result_Q149); + + // To_XYZW + float X_Q166; + float Y_Q166; + float Z_Q166; + float W_Q166; + X_Q166=_Pulse_Origin_.x; + Y_Q166=_Pulse_Origin_.y; + Z_Q166=_Pulse_Origin_.z; + W_Q166=_Pulse_Origin_.w; + + float2 Average_Q153; + float Wrist_1_Q153; + float Wrist_2_Q153; + float Wrist_3_Q153; + Average_B153(Out_UV_1_Q154,Out_UV_2_Q154,Out_UV_3_Q154,vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,_Wrist_Fade_Start_,_Wrist_Fade_End_,Average_Q153,Wrist_1_Q153,Wrist_2_Q153,Wrist_3_Q153); + + // From_XY + float2 Vec2_Q167 = float2(X_Q166,Y_Q166); + + float Result_Q150; + Cell_Noise_2D_B150(Average_Q153,_Pulse_Noise_Frequency_,111,Result_Q150); + + // Distance2 + float Distance_Q159 = distance(Average_Q153,Vec2_Q167); + + float Result_Q151; + Cell_Noise_2D_B151(Average_Q153,_Pulse_Noise_Frequency_,333,Result_Q151); + + float Transition_Q160; + bool FadingOut_Q160; + float Saturation_Q160; + float Fade_Color_Q160; + Pulse_B160(Distance_Q159,Result_Q150,_Pulse_Enabled_,Result_Q149,_Pulse_Width_,_Pulse_Outer_Size_,_Pulse_Lead_Fuzz_,_Pulse_Tail_Fuzz_,_Pulse_Vary_,_Pulse_Color_Width_,Transition_Q160,FadingOut_Q160,Saturation_Q160,Fade_Color_Q160); + + float4 Color_Q157; + #if defined(USE_ALBEDO_TEXTURE) + Pt_Sample_Texture_B157(Average_Q153,Result_Q151,_Color_Map_,_Vary_UV_,1,Color_Q157); + #else + Color_Q157 = float4(1,1,1,1); + #endif + + float4 Extra1_1_Q163; + float4 Extra1_2_Q163; + float4 Extra1_3_Q163; + float3 Nearest_P_Q163; + Find_Nearest_B163(Out_UV_1_Q154,Out_UV_2_Q154,Out_UV_3_Q154,Vec2_Q167,Transition_Q160,FadingOut_Q160,vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Extra1_1_Q163,Extra1_2_Q163,Extra1_3_Q163,Nearest_P_Q163); + + // Color + float4 Result_Q161; + float k = max(Color_Q157.r,max(Color_Q157.g,Color_Q157.b))*_Desaturated_Intensity_; + Result_Q161 = lerp(float4(k,k,k,1),Color_Q157,float4(Saturation_Q160,Saturation_Q160,Saturation_Q160,Saturation_Q160))*(1.0-_Vary_Color_*Result_Q150)*Fade_Color_Q160; + Result_Q161.rgb *= _Intensity_; + + float3 Q0_Q164; + float3 Q1_Q164; + float3 Q2_Q164; + Fly_B164(vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Transition_Q160,_Max_Hover_,_Max_In_Angle_,_Max_Out_Angle_,Out_UV_1_Q154,Out_UV_2_Q154,Out_UV_3_Q154,Vec2_Q167,Nearest_P_Q163,FadingOut_Q160,Q0_Q164,Q1_Q164,Q2_Q164); + + bool Next_Q177; + Emit_Triangle_B177(false,Q0_Q164,Q1_Q164,Q2_Q164,Extra1_1_Q163,Extra1_2_Q163,Extra1_3_Q163,Result_Q161,Wrist_1_Q153,Wrist_2_Q153,Wrist_3_Q153,Transition_Q160,Next_Q177); + + bool Root = Next_Q177; + + + int vxix=0; + int strip=0; + while (stripd2 && d1>d3) { - Extra1_1.x=1.0; - } else if (d2>d3) { - Extra1_2.x=1.0; - } else { - Extra1_3.x=1.0; - } - } else { - if (d10.0; - Fade_Color = 1.0-fadeOut; - } - - } - //BLOCK_END Pulse - - //BLOCK_BEGIN Cell_Noise_2D 22 - - float2 mod289_Bid22(float2 x) - { - return x - floor(x * (1.0 / 289.0)) * 289.0; - } - - float2 permute_Bid22(float2 x) - { - return mod289_Bid22(((x*float2(33.0,35.0))+1.0)*x); - } - - float2 permuteB_Bid22(float2 x) - { - return mod289_Bid22(((x*float2(37.0,34.0))-1.0)*x); - } - - - void Cell_Noise_2D_B22( - float2 XY, - float Frequency, - float Seed, - out float Result ) - { - - float2 P = XY * float2(Frequency,Frequency)+float2(Seed,Seed); - float2 Pi = floor(P); - - Pi = mod289_Bid22(Pi); // To avoid truncation effects in permutation - - float2 ix = Pi.xy; - float2 iy = Pi.yx; - - float2 i = permute_Bid22(permuteB_Bid22(ix) + iy); - - Result = frac(i.x*(1.0/41.0)+i.y*(1.0/42.0)); - - //Result = lerp(Out_Min, Out_Max, r); - - } - //BLOCK_END Cell_Noise_2D - - //BLOCK_BEGIN Pt_Sample_Texture 34 - - void Pt_Sample_Texture_B34( - float2 UV, - float Noise, - sampler2D Texture, - float Vary_UV, - float Map_Intensity, - out float4 Color ) - { - float2 xy = UV + float2(Noise-0.5,Noise-0.5)*Vary_UV; - Color = tex2D(Texture,xy,float2(0,0),float2(0,0))*Map_Intensity; - } - //BLOCK_END Pt_Sample_Texture - - //BLOCK_BEGIN AutoPulse 19 - - void AutoPulse_B19( - float Pulse, - bool Auto_Pulse, - float Period, - float Time, - out float Result ) - { - - if (Auto_Pulse) { - Result = frac(Time/Period); - } else { - Result = Pulse; - } - } - //BLOCK_END AutoPulse - - //BLOCK_BEGIN Cell_Noise_2D 23 - - float2 mod289_Bid23(float2 x) - { - return x - floor(x * (1.0 / 289.0)) * 289.0; - } - - float2 permute_Bid23(float2 x) - { - return mod289_Bid23(((x*float2(33.0,35.0))+1.0)*x); - } - - float2 permuteB_Bid23(float2 x) - { - return mod289_Bid23(((x*float2(37.0,34.0))-1.0)*x); - } - - - void Cell_Noise_2D_B23( - float2 XY, - float Frequency, - float Seed, - out float Result ) - { - - float2 P = XY * float2(Frequency,Frequency)+float2(Seed,Seed); - float2 Pi = floor(P); - - Pi = mod289_Bid23(Pi); // To avoid truncation effects in permutation - - float2 ix = Pi.xy; - float2 iy = Pi.yx; - - float2 i = permute_Bid23(permuteB_Bid23(ix) + iy); - - Result = frac(i.x*(1.0/41.0)+i.y*(1.0/42.0)); - - //Result = lerp(Out_Min, Out_Max, r); - - } - //BLOCK_END Cell_Noise_2D - - - [maxvertexcount(Geo_Max_Out_Vertices)] - void geometry_main(triangle VertexOutput vxIn[3], inout TriangleStream triStream) - { - //huxEye = _WorldSpaceCameraPos; - //workaround for Unity's auto updater in 5.6 - float4x4 tmp = UNITY_MATRIX_MVP; - matrixVP = mul(tmp, unity_WorldToObject); - //matrixVP = mul(UNITY_MATRIX_MVP, _World2Object); - vxOutCount=0; - stripCount=0; - stripVxCount[0]=0; - - float2 Out_UV_1_Q28; - float2 Out_UV_2_Q28; - float2 Out_UV_3_Q28; - Flip_V_For_Hydrogen_B28(_Flip_V_,vxIn[0].uv,vxIn[1].uv,vxIn[2].uv,Out_UV_1_Q28,Out_UV_2_Q28,Out_UV_3_Q28); - - float Result_Q19; - AutoPulse_B19(_Pulse_,_Auto_Pulse_,_Period_,_Time.y,Result_Q19); - - float2 Average_Q26; - float Wrist_1_Q26; - float Wrist_2_Q26; - float Wrist_3_Q26; - Average_B26(Out_UV_1_Q28,Out_UV_2_Q28,Out_UV_3_Q28,vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,_Wrist_Fade_Start_,_Wrist_Fade_End_,Average_Q26,Wrist_1_Q26,Wrist_2_Q26,Wrist_3_Q26); - - float Result_Q22; - Cell_Noise_2D_B22(Average_Q26,_Pulse_Noise_Frequency_,111,Result_Q22); - - // Distance2 - float Distance_Q40 = distance(Average_Q26,_Pulse_Origin_); - - float Result_Q23; - Cell_Noise_2D_B23(Average_Q26,_Pulse_Noise_Frequency_,333,Result_Q23); - - float Transition_Q41; - bool FadingOut_Q41; - float Saturation_Q41; - float Fade_Color_Q41; - Pulse_B41(Distance_Q40,Result_Q22,_Pulse_Enabled_,Result_Q19,_Pulse_Width_,_Pulse_Outer_Size_,_Pulse_Lead_Fuzz_,_Pulse_Tail_Fuzz_,_Pulse_Vary_,_Pulse_Color_Width_,Transition_Q41,FadingOut_Q41,Saturation_Q41,Fade_Color_Q41); - - float4 Color_Q34; - if (_Color_Map_Enable_) { - Pt_Sample_Texture_B34(Average_Q26,Result_Q23,_Color_Map_,_Vary_UV_,1,Color_Q34); - } else { - Color_Q34 = float4(1,1,1,1); - } - - float4 Extra1_1_Q35; - float4 Extra1_2_Q35; - float4 Extra1_3_Q35; - Find_Nearest_B35(Out_UV_1_Q28,Out_UV_2_Q28,Out_UV_3_Q28,_Pulse_Origin_,Transition_Q41,FadingOut_Q41,Extra1_1_Q35,Extra1_2_Q35,Extra1_3_Q35); - - // Color - float4 Result_Q33; - float k = max(Color_Q34.r,max(Color_Q34.g,Color_Q34.b))*_Desaturated_Intensity_; - Result_Q33 = lerp(float4(k,k,k,1),Color_Q34,float4(Saturation_Q41,Saturation_Q41,Saturation_Q41,Saturation_Q41))*(1.0-_Vary_Color_*Result_Q22)*Fade_Color_Q41; - Result_Q33.rgb *= _Intensity_; - - bool Next_Q39; - Emit_Triangle_B39(false,vxIn[0].posWorld,vxIn[1].posWorld,vxIn[2].posWorld,Extra1_1_Q35,Extra1_2_Q35,Extra1_3_Q35,Result_Q33,Wrist_1_Q26,Wrist_2_Q26,Wrist_3_Q26,Next_Q39); - - bool Root = Next_Q39; - - - int vxix=0; - int strip=0; - while (strip Date: Fri, 5 Apr 2019 17:54:10 +0100 Subject: [PATCH 014/183] Properly set up example scenes with input module --- .../Scenes/mrtk_eyes_00_RootScene.unity | 6 +- .../Demos/Gltf/Scenes/Glb-Loading-Demo.unity | 83 +--------------- .../Demos/Gltf/Scenes/Gltf-Loading-Demo.unity | 97 +----------------- .../Scenes/InspectorFieldsExamples.unity | 99 +------------------ 4 files changed, 13 insertions(+), 272 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity index f4d0aaad3c0..ed22b5421f9 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity @@ -205,7 +205,7 @@ GameObject: - component: {fileID: 256863741} - component: {fileID: 256863744} - component: {fileID: 256863738} - - component: {fileID: 256863740} + - component: {fileID: 256863739} m_Layer: 0 m_Name: Camera m_TagString: MainCamera @@ -251,7 +251,7 @@ MonoBehaviour: minHeadVelocityThreshold: 0.5 maxHeadVelocityThreshold: 2 preferEyeTracking: 1 ---- !u!114 &256863740 +--- !u!114 &256863739 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -260,7 +260,7 @@ MonoBehaviour: m_GameObject: {fileID: 256863736} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 7a21b486d0bb44444b1418aaa38b44de, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalAxis: Horizontal diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Glb-Loading-Demo.unity b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Glb-Loading-Demo.unity index 4eedb964ca3..d00d2686d48 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Glb-Loading-Demo.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Glb-Loading-Demo.unity @@ -38,7 +38,7 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.4465782, g: 0.49641252, b: 0.5748167, a: 1} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: @@ -143,79 +143,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &732588822 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 732588823} - - component: {fileID: 732588824} - m_Layer: 0 - m_Name: UIRaycastCamera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &732588823 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 732588822} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1292482201} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &732588824 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 732588822} - m_Enabled: 0 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 --- !u!1 &907065543 GameObject: m_ObjectHideFlags: 0 @@ -316,8 +243,8 @@ GameObject: - component: {fileID: 1292482206} - component: {fileID: 1292482205} - component: {fileID: 1292482204} - - component: {fileID: 1292482203} - component: {fileID: 1292482202} + - component: {fileID: 1292482203} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -335,8 +262,7 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 732588823} + m_Children: [] m_Father: {fileID: 553589746} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -362,6 +288,7 @@ MonoBehaviour: gazeTransform: {fileID: 0} minHeadVelocityThreshold: 0.5 maxHeadVelocityThreshold: 2 + preferEyeTracking: 0 --- !u!114 &1292482203 MonoBehaviour: m_ObjectHideFlags: 0 @@ -371,7 +298,7 @@ MonoBehaviour: m_GameObject: {fileID: 1292482200} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 7a21b486d0bb44444b1418aaa38b44de, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalAxis: Horizontal diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Gltf-Loading-Demo.unity b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Gltf-Loading-Demo.unity index 3d0f1bf3767..5c867d417b0 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Gltf-Loading-Demo.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Scenes/Gltf-Loading-Demo.unity @@ -155,7 +155,6 @@ GameObject: - component: {fileID: 290616761} - component: {fileID: 290616760} - component: {fileID: 290616759} - - component: {fileID: 290616758} - component: {fileID: 290616757} m_Layer: 0 m_Name: Main Camera @@ -174,8 +173,7 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 1551200070} + m_Children: [] m_Father: {fileID: 218353309} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -201,25 +199,7 @@ MonoBehaviour: gazeTransform: {fileID: 0} minHeadVelocityThreshold: 0.5 maxHeadVelocityThreshold: 2 ---- !u!114 &290616758 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 290616755} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 + preferEyeTracking: 0 --- !u!114 &290616759 MonoBehaviour: m_ObjectHideFlags: 0 @@ -398,79 +378,6 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &1551200069 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1551200070} - - component: {fileID: 1551200071} - m_Layer: 0 - m_Name: UIRaycastCamera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &1551200070 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551200069} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 290616756} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &1551200071 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1551200069} - m_Enabled: 0 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 --- !u!1 &1618579155 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Utilities/InspectorFields/Scenes/InspectorFieldsExamples.unity b/Assets/MixedRealityToolkit.Examples/Demos/Utilities/InspectorFields/Scenes/InspectorFieldsExamples.unity index 6feb1b36648..4df2be82f08 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Utilities/InspectorFields/Scenes/InspectorFieldsExamples.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/Utilities/InspectorFields/Scenes/InspectorFieldsExamples.unity @@ -295,7 +295,7 @@ Canvas: m_Enabled: 1 serializedVersion: 3 m_RenderMode: 2 - m_Camera: {fileID: 409268363} + m_Camera: {fileID: 0} m_PlaneDistance: 100 m_PixelPerfect: 0 m_ReceivesEvents: 1 @@ -306,79 +306,6 @@ Canvas: m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 ---- !u!1 &409268359 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 409268360} - - component: {fileID: 409268363} - m_Layer: 0 - m_Name: UIRaycastCamera - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &409268360 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 409268359} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1428889684} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!20 &409268363 -Camera: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 409268359} - m_Enabled: 0 - serializedVersion: 2 - m_ClearFlags: 3 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.1 - far clip plane: 1000 - field of view: 60 - orthographic: 1 - orthographic size: 0.5 - m_Depth: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 1 - m_TargetEye: 3 - m_HDR: 0 - m_AllowMSAA: 0 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 0 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 --- !u!1 &817150417 GameObject: m_ObjectHideFlags: 0 @@ -961,7 +888,6 @@ GameObject: - component: {fileID: 1428889687} - component: {fileID: 1428889685} - component: {fileID: 1428889691} - - component: {fileID: 1428889690} m_Layer: 0 m_Name: Main Camera m_TagString: MainCamera @@ -979,8 +905,7 @@ Transform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: - - {fileID: 409268360} + m_Children: [] m_Father: {fileID: 1386039203} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -1006,6 +931,7 @@ MonoBehaviour: gazeTransform: {fileID: 0} minHeadVelocityThreshold: 0.5 maxHeadVelocityThreshold: 2 + preferEyeTracking: 0 --- !u!81 &1428889687 AudioListener: m_ObjectHideFlags: 0 @@ -1064,25 +990,6 @@ Camera: m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 ---- !u!114 &1428889690 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1428889683} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} - m_Name: - m_EditorClassIdentifier: - m_HorizontalAxis: Horizontal - m_VerticalAxis: Vertical - m_SubmitButton: Submit - m_CancelButton: Cancel - m_InputActionsPerSecond: 10 - m_RepeatDelay: 0.5 - m_ForceModuleActive: 0 --- !u!114 &1428889691 MonoBehaviour: m_ObjectHideFlags: 0 From 05b6c571c71204d7a09626c8ff184e4b9da0d284 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Fri, 5 Apr 2019 11:13:59 -0700 Subject: [PATCH 015/183] Updating screenshot as it included some copywrite protected Microsoft images. --- .../EyeTracking/mrtk_et_compilation.png | Bin 172357 -> 298865 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_compilation.png b/External/ReadMeImages/EyeTracking/mrtk_et_compilation.png index 7a6f8a771d0b8d3ebda57e15f58bfbc238f3e05a..418295c3f6b9f0c47c6a6a4adbd0b91e7f56db7b 100644 GIT binary patch literal 298865 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%0AYz&=vt>KKN!;# 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 NrzEeA#>iPb{~tZ?N*E6 zI!;e2*bli$7z++n7SeV0E6-Al|BY~?iwif%% zUlAmH1@-gb)8$V6Nuk%a`s0O#1XAy7B@+IhAfbnUksMN=b}dQE}?@nj6?b`F{ zN1g943>oO@i~d?`(fuQ7NspLek0*PVl9n`u#?(<19E>u5>_WnAFKmdv)V6edbCUe` zuV#69`C+4Duv(#j%!`%SdaYrv$h zh?D2u-1!ZMfIzu`=PfllJfcWe@UXOvtu5^&D+_Sl>zILr-(DDxNpH?9!$(V&j_&qZ z-{X){US8qoU^@5c=5ZnM=h;-Z|1I&elZgwsP$5%|{ea|ML?n0Yo64pFg*Enr$2&>%YRlT*36*`mmYA>-KYR#cv8} zRaB2#c%4O)UVCgu&b%dp0$|hYRtdc}t`UfFZ6y$r-q-NlOY~h9oyL7m;>_ zZV=9H?K;dP9dqgt9Z2S`MxN>b%Kyi&_%!6t4u;X5x=P%Q4cq6m4tNcEu2=%_#G`M| z*DLe$DdDP00Yw1*DbuuATNjsk+sVmEw63eYR6E;7-`3TJ+ixTW0bNdBVq0ozY9(cE z0)&v%%vw8%WG}u5fK$ZNPhZg+`DUnXy|aab5?t4cgZ1#xrH*?B(LF-lbmmV%X%+Vh zD{p_RBMIJ#QXd(z5*XS(SO_CmN<3qk@00p`{!t;A*!^P(|3T-RQyuZq_pCA6juOo0 zrY{%vowVzuO^B~0PXPP75w$&F+d}&AuYWx6y4(u7B0Xrr0<7dL$!^r!C~wH@a&4vA zeB#)6oDZVpZzUs$r}qW#cyb}_mm_o%;RcDXg}$&tiE2QX_sdmgV}DA(eUQ*oc9xDX zqW_PZ>sdvj{-fpfmj)%|Kd;@GK3S5a?%&zi*c$HJ{|yi!0o)q!LJ`nDp$QpaVfFve zX0Xkx1U4Q0Jt6?M9i<_LIl-eX9emN;72(O-l+4HtWw1fC=E~z+V6Llll!CI%w9@K{tsCOjlbBvae67#6}+kds>%bdPtn3SDi zf9y_Wu&YZeO<(r1J8AzpCfKe;vHI;_n20cNjtj^M!GrEkq_f@577E_bcpq!8vx08J z?Yw%aZRxw-0ktw-_qaNX*I!Q8IlFGPJ8!fbggfuILSf_UPx9$PzH0-(vYc-jKSd`6 zAIk)4Yu!t$!QtcS+tn>Xuod$a+ijC;!O2tCc5NN-z=S9GsojNG!8yQ5lB*mvulI8k z5di~0&k2Aq!I0=hG@?M3&4D9mF5w-3M@L7;nGVD`u9>OxHSarJBdc114M|>rkUJY! z3>Up~6A~1=;`X%U9u*x7-O)@x=l21*gO{fFC1)eo$im44){_fbDk9WJTStu8b#dMJ zB8>oUz2$trL~ZZ?9(w|+KE2B>C?Mp#$5+Kg`!Z^v@{`ieS1P2U3%PmS965*H)u>!e zTU$GoQ+OB?BA&dmpOU-(5RwD>N3Nz9*Ge){<_d*+wZen?7)PgHo{{M%>+5k%2sX-A zcmh82wQ01OCF~+ylpy|g$_b->Y~8Flf^J%L>z8bZ4O znGJCcxf&A@9edoZy6teQE6-GDnSO50DE0QdL*YSo^@&PNX2v46Y5X>K>JpzHY*`;T z97@g^y`LyO8ycDz)~A2EQlYgl6mH4tanK#aj(^R;B~;=EshU0&J7rJ(^& z0`DQ6dm+`XgC%B`L6GE2<8miMQ~ymzVQnr)sXlo6t-GGuoqm(t+%DT`2fRE@zUm0U zrX$gv!QP2PVNjuae<7?gl_Gmw$YZV$j3PIzs_EqoRain+lG)5o1g%woRs*t#@H`QF zp67KvgT++y4JWq|wgBSw+kb;(jTCV#d(Ik%fM%6K1QRu@MNPTQbcq5V*xue zPJ?9j? zda3IilkuZsh5y7&o!`wJ-|TX8RT$Q`)s^+<%ci8Kt0;*92RKUBmX=CRb)wa&RYx`f zmkZE^G9PoUY=Xf&7YaWVl+%22^!Y<;%O5{R)_T{tq~)6MP~XpS^&B0ADDlF@H>Sc| zDb86G9{<_+DG7_~8+WfVFe6PnQvep<O*2xZ&7r<3 zNRI4+{#QyPZ_H)PXe@fnZbdBjeqZRdxnC?AF)f=W%$4QjPSI-%dtg% zF{^|< zvdG2Rr9R9jf<6w%}yN^d5FIT4*6cJ*`yZWnH~;*MaJr!JNZ#j zcmV@T^5u!P-0YGxsC6Blt6^#V8MgLJh(4cYXC|H`2LKKI5=s66`G^eI)KCg8af$%r z3si1ZxI2G!lM*j20-%F@WJ5za^T7xUEO4uI;GW9lS4NbQC)y3^PY8CsZUH7*`NeC& zb%lzFkcO5<*#-6RFPW%WdK}Xvol2H^tN(rsBCb^f4Gf9$joozvhu{)B&?rfQ z`4IFqVkPUH1Y-2guA0%W=E!i1d>qgpdKs_pNGpURsTlj=qZT~1@2Jj1p0N&Thq`2U zc?^>)MHD!D1Bfwgk?L^J+pd}oC(XLcCSIDvWQE5wblknGbWv>yNuWB z@k;RHIx6`fS3r0~5tcH*uF)x+n#_I;my!S4EfcUc zfEhx9!&}sFEg(#!$|W}^{Be(%@%;v7f1pEC>svS3b1lA{$ZchN=UUFRchgtU@%XpL z(3K*+Oi&Pj9iZ`tE?<|DGh4-E>&AYy=t`PGqm9kn=j%@sl5tUbYnt57;i?Qtgibbr z_4`5P1NRTw>+si_Kn)EreHncdeVp&DnXjpYlO|TQcB!>fby1BbkIz$6GR$E5`O)|F zJk?RmMD$%hQk^UdnGzh&9>vzrm(3tD&Z{qB1jgA@s(Ergb3vCKkE`c;Hzsr&*VmOV z-uym?M@Gwps8GQ@98W%Z+&to> zF21hReoBBfidM84<^|9(jr$4ECs0?bPy4he{Gq;Am$mXpC4OGs{>{D;XmrJbS>yvQO#TZ992@Lwnaa!sy{RS0)WBajGnZJHC@Yhjn-wC)iMwror)7Y? zVOw>2IP`vfy{G!8KSvX0th#W7IvLlK_adC&QsvkeWQ|{!-J-)=!#r~s5L^fP9{LfG zT2>BNl^dud4DEbMe4RnB7v*t(zJZ=<);0R>yZI;*rCOChEgQNjDl09pzAbgyRVF0L z9^cxvJv7XGRl`SWfT*~N_jh`XCLolPxy_$`h(nh-f3Ge(iRInORo+B)G=w8z@Yy8W z`<*8X*9JnBCK;+6VAijUI_SBzk`ZHCu4TYfo zxPIIXcA08}>34l1=|&C#mvF}+;yBC*$D!i!{V`p?P_iftCY{&UglpOM=T7^yG^kAs zKFXsa9PSLiZN}VMTD0r};npX43k$>oFZa0;`9^S^@o-JZh&I{V<^}Z?#r6vRb#_8r zl^DgA!8ui?BT}n+`aTE4kusp(D*z_s{RSQ4eRIbpdI-Kj@BCj3#q_ypRe?FVc2EWe zI;M#h7$1f@AE)v&0kf~FA~B2BE-g$Xh5FKRuDZOi44bhlGW85e*=mRm2$T&zN zx>*ggMCq5KXO@l3J@JUL_vy1qR9%J9DByKL_eyi3*;xG~Nqr>7B4w=H<~ z6nlQ)O1POqz#v&9J9;3i9K|GC=$9Q$K&A&5(N+!F+EBAE;}>lr6ZRD+Ae-$VHt!K( z(#ZPBXACFro|MmChD@!a)T?i zsO=S0Pdt>G*22}g23p01UuD5)Ua{?^$Q<*}LyHYVUGBEodpHm|88*rGuV6@yQcQSO91i8hUfEfPS;avif^j|TE590^+16t#ua>WgK@Y)vf za_i+br_0I9wi~Ce30xD8d;fzJIjd1z2Hp9wY&81VgQs0MRO|ihAioM!NYeakiKvNj zd|n8NfEpm?@_YnR>t1e+klGTM_f!+1{@2~H)}uK4a>11k{rqogYRwRH_eFjX18ZB0 zSJv0Guh{0;z*as|IXW)35V&%RLn$x=jSC_pw&Frtj8 z3mt@{jh5{+#?p1$Gx^majV+;i6!8(28F?8E`vd4GYe`;S-qPJf)?XwW`lOs7mW-C5qoH}ccX4lr93?^3704O-~z z(Qbmn2&H4!J*FLID#Dd3BJe2Luca(pa8Z5Nf%MG5;0guzo~pPiIh}o+UkQx)0#4aQ zVnkSv-G7I=THxVcCb9UN(TrY!I#`gC%Sq=COJQ6HPL-;3)Sh=ahT8mx!ka!X{c?NN zz{H#Bce?-8SVIZG}RarkCa)nP18D>T=mM(9sQ)&GecnkU2 zPtW6l15w1n3BzXC3Z8p3w7Zin4(%r;l%s7a**x)h<{Gi)>pNjIQ;D;m_ET#;1TGe5 z+cM0Ler(S!YA%hOp0BxezKBajy}EFUNXnsc@E_4O38XM7y&2c&sH zKdzeN)(gvc!?kpAb=MUTFJJ|34qy+4C?oTQd0tzH_Or5C+C-yt?)u)Wg6o&@58@Y~ zm33jho1zw|Ib&BbB)sWvF8_L3k5;ull&ohEH%qT}mUW1#!JzH?^txv5#~ti)a==2uzum&jh2Yq4E@w{d27rZK&VfGyjXvUiJjJ&l4zH(_9|pLw z!lSEq>3{1EOfedHCrvdz2TQ4h#`8G!rkY^K}eFwBKZG#nfvTh)t&ikfRzh3;E z(JE*OU{NI>?b-YNeJC1XalAIgV#WKYS~lbpxa+El*UFc9I+-nPY$6G|1SWz@QWL|G7=-gacLSmwA*-Z%tj8-wbx>@j|eg)Gdi=;Gj zm$%(PZJc~&`gYUtBdhtI`NnPh;862CE}nq6ZLjg5Xkqr)XdER1WkBu?H!CVpRM#Eq zI9JxaX9|izswt%btBo>5hl;Euku_h_0*82fE=PFbL*{t07g;2eH>J3upOBfOYgc90 zRe491rj?I&G?dlAv`=xd2=Xbn&XBHxeFn{*z12Y?n~sMC!iA7vkLbw17dJu)HE$`c zJCJ06ts&ZiWos;Yu%5OqXKwZ0-4-j=mwtD9JmBv6#!bXSeeqP$fQYZMadtaMm?&iH z=YY1N&H%uA>=k+vbFxvbe#!3msBsbPBsLlqOvJ1n5E37vjIi+mE3u#&n3yL7+m@A? z6_r*Vx*^{EyW4+#8Y_UHh(8ketM8Zi3lzJ-5BaZ+{>h7R{TRI)#i<m>PihQ)l9l$@F>ouv8RiI0f(?#$!myuFFkRbnE~Q4SEjblo;>y$SJu zaVrb)qNnTJ13sk~S2l=ZqF0tPMD8Wr%OL*@SmM00P250_`YG4%Df@CY!e9fGKR$|L}fD(#8e^xy)LeiZa3$cJB$q~8d}UM?SFY2ga>qK!g?UC z5d#{#-<}MebD($q$&x5Vu0tK!ZJ-)^rJoxal~NdXYwR|B((0?$SzUC?FRTLBu5~cU zZ;DGLL(01Z07CmQ%<$(n{>q3xoAusO$#~aBqhwCW3daLVBR=myo+Lv8Vp(5H${Xj_ zFxIsrhj7RHi96*cf!upNk6s7e|B208QS1VLUJic?kmojDt8$+FnEy@(Z!_inquu)J z%iVZAu*N0{*Y8u1H}?~$$Fl#P@et0Knwy*nnFx3GYZBSRiJ6eqq!`68D*xeat29;H(ILJzxXvTTT9_E-3HDP))z*bpk4a8Pbtcx~( znUn2Ougo_u)-00I+)2v;a({=RsBiPylp>;7p)xDss)pBUm)zbU!CW3}AjB?ZlnIY| zfeRupBCSldHYgP|Ov1RO`v%bgcE{BL)p;*-*vC2v=07!*hUzxQc&FsB`{BW3hxRgP z7&L4*)PT!xTj3Wd-E+!+&So@Ioj<7gKw9I~#j_DNPLLes^rpbxmYFqQ6NrAxJT4CB z%BwW{X_fKGNRf+(Ex&NqyuGvkLk9=@oB! z8jHJ2pGt36>gE5khxPvd(tS(M0`UG&(brNKP1_dSB_l|Vu10Mt4$y>f&TPS>K!Sph zR_r%>-Wzo-#`oSctr2AP!EFF6&5L`0yMh}SaOOInHxJ>;)gfeeQkYp{p)Q54uRiC~$Q^w6W_lc5pxvQo%FCE>7toT_f$jf&I_PtK&7gJP9eYGCo z$%f0HV#9^kW;5)+jgfM~khDNTKsib-ls>PD`q%sPzM?KFQ;ZMiH-L}x@(A^~;}Yj$ zH!1gBtQi}hbJlxF#6ROFiakENJizlV>cHJ)h~)Gi#F&3MCdU_Kjrx#oSB=E|x_CsD zl#l{vJwObRZT}s|v7|tbHJs%1PTNz}=Sj?XbY912kbk(ik&)y$&3xf)+{@5U!(-VD zk5V+$)L5jAwyc7@PK$jnd?-YXX7oT3V^_K?i{&%ZpB)3n0bwq{$2;>3zrm(jQyg`s z676*wR-MXbOCU0a#+z0qU(qOLLfrq*uNhyO#cN0ap8D&E8H+8c9}xctM5 z^FI{zLe~N?5)v(@pY$zvSiL|R5c1kDdeCl(l?uR=aK1^y?8 zxsw7fFd);M!NYAlra0V{JcQQ9BS--{VlIALbrgkNKwaYuAa!sCCGq+QM^(@& z?^rhAcFdgT4RD`%k4#2W&_5KPx!Hx;G(&bk}s+}5R0;b68Zhz^+)c4uYAGKF|jpZ}@)vW|$c=UB$) z`ay%9#=|d!opJkDil3y)fiz65K=CiZi>qNvZa;rq?wGQBeZggu-HG1W`h;+LR*?~a z7|+Xktb*$DEd`BNvMbx}o`&UdK+})r!V+iHhvh5V^`z={Z-dh+5c27EjBOIXAH9L5 zY$k}*V~E<`JjW4JjV23ShG@W(g{UX`8ni2gjEE6JOn&B+`Iy#x0RL6ghCW*lzL(!P6)KU|sD0k}w^_-i#9D!i`^rP?*MCAv><&Xiz36#W4#L9* z;^#hhuXCyEFTQd4tDXyv zwH%yVpVRM~;3vW^w4=ZOc`sUnej${BH1dbKz$YqU&zJP1BtQ4=|7|Bkuo`Zw>5)|Y z{j#WlMB56FD2u2bB)T}ECh*=>H6sj2uhAD1j2ytCOB=7rjvpzSV}^UU&SyS|P5Rc2aiS-~%m5dk9}OFU!5$v<~>-DFB066E;&>End0>*Io+a(6rpKVYuAVnZ$8E2 zvh+1H;(5fkuu9-70vqQ=4_Ip4Uaj*w^0is;U%YRTneV>uR5P^0U0r*tI`|p(E%HUu zaZAVj7nKsvA8RO>fxb#KD(zNh-gNI~^QYz${WS0 zmBpDAG|r~GSzk92P!aa}x?*eKmi`p)h*RB1Zr=%W$1u%}LUEd79Z~f=VvBH%wNB$J zA~fz}$Dje>ist(5rA^$GZ5Qkxe_t)XUa7lQt}w zTaHVWC*m--u~%?;qnpY~!%yP&{3%e|X{>lVFs?8o&f9Yg*T|T;evnegC4c6aQhHc) zmiLC&B3W-pDYM;IZ@RlG$P~OBqG*5%-u9bF=d)wY0HsC!<@eb6v%s|=-|JywGS5jr z7-d7>$CJ^slG~4+y30}TKv=MICV^!n~Ntv1R zLD2;55#S8&k@{-+?q~Yw3cWnPf`wjVUsvk}ZKWw~nPXqQj%Hy@M452~{50lLn$-CP zglfMycT97HE$hD;d(4QwYTna4&mU$U%%43F(c7dwZO_2dC(c)T6#gd!pYn?$`j@yK zev)vF{!9COT@&@6SYt}M^RS=U7=TK^8AqsrL+W#Hs7-F*S)}Xwv$Z>Otu^U`UII)&K6$gmJdnYfN6Bbi~r z8shRnth3kdxVf1(xY7;!MWEVjfm>H0+PwPwxX)5nlO-GB6oVvFZkN~ZOCco`k@U;A zcp3#Xaa;E56bKF}VK77bxz5!0sVP-wVTC<9H=2(!7*~|3daiBx(jSfUIAg^hZ1WO? zj0(ifJ!e$Z{-Q~0U%dzxo~v~g%v+|qx@3riJ6)e(`kF&egBxzfWfOtm%K5pBq^Vv^ z0ps;_7W=I}l;^$m=T@W$``d}eqA-=$|Fk2Q`>D_JlVeFqaNB3H`mmUAxPd|JNTG_} zpbsT_cIFoD(rj$AM|Vgi^Hy4VTFSM5rw}mt&5a_@7mx4CKcJ!EIUj7m<=<1=u%Afj z{t(uyePbOJmNdK$HiJ$P$asHF?Let(*NTXC@9q&WljwJrU@Z%3>dvtCJ9ObSugI*- za2k8Absw_mZz7MFzMEvn+4|4xafsMQHXnBRSju>)MTm3k$7Cgv8Nb%GwlmM*y>7mi zAt*lObUaqRSe5IyS$}*{XoLMGI)ok#y7(Nnd5F^rU06%bl{L=2KXUAmDv_7rCO>n@ z&kt4ZWD-i7^X0gse7-w>o=z{?YYOwMM|AztkPdarTEi`kO&8pspCBI#CUEd7pc(w=x3mM8<#n-}R~>kR%_x|8_M-CY_La7~XZY1I*ar zh)W$trl!jO8~C*!xGY?;&bbTsl!H{k)L29lNQD^EeNDffd-AH$e(fi_r!-H`X%HVQIIiGf@3|M0(HV|N0um!I_ zKEKcMa|~->K9S@62w;SUM=1eH!k*bOAHrx(02Q2Eobd(0 z1!e^tEG!mtjF%>9pUFnJt>%tXGBT#~W$`fBH&Z@%+J#B7H-1~f<{SW+8RFPP4)c7+ z(t!@Vk#)$p;@QA80ZO;?wHQ{e>$sT0lk}Q<$gaSZ@hAbS87)f?%58y3& zzk^mE;YE#CLOvNYc$U5L_uS{)k$$5PxBOsgu7vQVj`y!{w*7}lJOr<5-Vxo!gr*xp z;aKI(A8zAp4=j~?G^d`XWl%ZCoeF|$#H(Ee3z)xKHwVzsvfO?&j)2#}ShZu6BYFYW z@vO6=p6$E=^e}K0yBhC0=@f_5=TuImQ?DksL|AfA|6=AgdZ<#}1g;~as>H9LsNu}p=NXaoSuT%13kQMB@46|YgK_5%^+9x^Q4xwi-Y%3iAw0w)5TRllin*92}0;hu1Wjlr0!Wlo13Q|GAk)F=x@G-w3V!C+oB0 z`^GKXT!<5AIa)c*3X>C24=`=VumVEkkcs97=f-#P+R?USYwX0EIGR^NQo^p9@)|Mxb=H<0V#AN-4mZ{T6iSNg1)~hbJxA|OdVBjbdyqiF7z!L-_@Um z^_&%;Rt#MOb)H~z+ev@f%h_w#tWFgQ^6N_L74#o1V`?2mRZeN@&8YI^_iTSFeHxc= zf-&uN=J|TuzP2KA5SX#p`lVXI0g)HE`4B?ip%GkiE?OeURRiGmN&J;_m>~}0pC?RQypdh0o3;uZXfXFWL)V(=s|qz4rRwD zbW(@Aj3*-$GiQksKTuB?)b4R+X2%~9rPii(CiO8Jv*N-mE%gNTh=~=6hTS)DMK#I8 zYJolcQWYsskeabfZQou}OOTpn&P{hp+ZXlm%J|7-fo4^@cBhoGQ}6+MJP`kzp89OM z(rkLHMb=Vl4H_dm?uq*7{-Zt_b%%_sZ&^;M;Fv6296kktnL!qEGaC%6E9qZ1j}VN> zJ5f-cJi;uPg4w63;Faw|ma$W$GbH~gtwwq)PZ<>bim((R3P`!q~X{DSi?JpXhlizR~BIpih{YF2y zil>LqBox=S6~xza$dkRfUrepBS`0XLFU)6Rb8hQy`C)G7?;)OLoR#{vBqwMu@%gy<-9|r4(ZQz?z zq|5l3>t$el$|zF66z#pWqIFlccnCRr2ChN8TA3P<0!Uh9+E*>*wN13nEOMw1%h#Vd zf0{VQ=k_`(E(}8qwF4V3GvAN?=*t=SSanx!=RK-X63?RluGjbV&esg+9Tzsc%ZXMJr~ON=FiNy??zWZ~AVME!&I{O06II%wJ2xAFRevFq2eC^!*nz31 z6TTE$%(3!QUC(NeT8Rx@10}<9KS9 zaPY@X;mhWXadB5Dab?y&djtS%i+ab!XfJ2T?a|S27=-b}szKP^<8zoL)KivnI4RhV zTE)bh@DldRswE6Nm-0X?l2V7J6?oixI5`%ogIoYD%#Fb9Z{7P1+iydgDL+MBcG}<# zz#S{4Tip9>RTUq(Po5OM#IZn#K~$ zJD&Z6Fwki83$r2mhM?T>YVTyjzM#dzRPmRiX$g~F6SB)jiJ~K#)5?_HqX1~boGy|1 zdG9Rhm%4J9)D&y`v2n6P6^obb%A-EF*W_m0=Jd*!V--d71v_(r(`=!F{<1<0VnsF* z3Pm>hG{g_}*Yoi%Hy+;O<6|WR4S5PB2-AYkx$T{0zOJ{5c4pu~_w_dysje-9cuQ$`-0z16V?xK}b{_37`g1S=DD$K0INwGsf6k&3^P|U&5JoT@LBg+L zL^nnmpDqGKF^v3t^lsdMdD!0+kGi`339la|Gy`KKv|tQGNjEnbDy&(GSM+!I2w}Jo z98}&g3{D!*(S>JgQ=Ka9%}(>L>|5%&Hi4@vszQkl$w<=at*w~wVy$xH>{y}gJm{(A zs~>_Ia?z@F%OA6}e;?uyyNrk($=IlBYuOss)Z%ysn9hUIbqbf2a2DAAAbVU-OJ2i{ z?KCpR(71@6%re|ZP^Gr|XoF0V0|p%2cZf+@G5YO@&z^x7zXFe9C2c;9)oS4Bzc!XA zlBmoH=2f+?yXIJ6UNTOk2*eU-3Uy|8o0bV+PL5zYxp?!9npmhfzlh^IcTqGc=PEZ(+U9mUs5q{8eB|#m>h=(U^Eh zHsPc63himEiwU<`I<;<$e61I0iiWPZ3pgHsNEbCRGF&2<$Plnn0+iDN)+F||g-JsZ z(FoDhaHA-;B#YjB`)dc)GHir*h7;NJ<6KCV_aL&7YLsK_a(PbOJt-Wl^lej_w@sO- ztWiCMx0R(dpu8hv(MdtYN31=glzn9WLY7v2LoRNQD`ci1^%xfw%w~rH>R8w|aS5e# zFBzTo=Zrk{O3bgQ6pO9C98*dW9Tp)cSx*^i=|?qK=h3(+v~B+D9vWJ9y>5A;C+TlI zx;L0YlrZxCgC3As9zLBJwE504T?$T*yo_;|E4Q%wGob5|1O-X%^yKA9-Ns<51BqH* zK_S^aviQ(q*=ww#A|=o~c>?;hk_N|aycxwJ)=Ibw(5Xuoa?^XfJ%@^63Yt3xQ?pMY zSR5OP?ULBb7A|wNhScI$=xNVq303{O>cdw27bvEd~IAt72C83N;{Dpp~ z*-vmTP^c?#IH>IL{$FXGu+h=y0E{s0f{~bttqDq(#5LA0j_mH=YcZe8ZNiyHdmMHU zGmz3X&Yz#kLh5qaMW{b$v0^(@+rhGaNfdc2J`LC)+P{6S<|(Gr6ez8h#7I9_~v#GMTkR22fQ9g3e_Nej|dmm<3|Q#xYDX3QaeNVi>&XZ zcL~c?0i@*7*F*E|u%lA08V5LCN3%(-?Mj5jM3jmh&-Y}Q$5OlZYGkyDfa36{w9)<+d);71@u7Kwsx4rTh0F36QFg=yR zHE-zeN2N~&D)0pc)_^}CfPspN(o|O6KWlN-oXpR%3+9~l&CP~!Ohu#o+DeT)gWplM zk!DFiE$$ieSSDM?KtvQ6!8$G~p=vGpML8M5fLcQ0sZZzn?A}5_j+T6SIm78{<7C(R z-a^8>yQQOY8XHhaO?VoP1#v-fi^L0Gi8@CTs_cY{}zle!(-F z=KQ-K!Zk^EsPjp0lUK=e>yI4Aror z`L)`rvRa|W{ESuJXj@q6^nAtJ0iCxKf|)$8kFKk8{cX?GXQ*^|l59hCt&%HkKC*2C zQ?m7b@t5ZUqC$XZxLwDGg_)f0oB+HOD*zpk+4W!2vjH51KqwqNF@(gMWNPrK-E5L{ z`Ls79pr_hyT`<(F8^900c5%`5rKd+!FwT?h^QZtt#U{yTnk->T_$ge*7rK9BA^J1C zauTW98sxItx{zE9`31K6-oOY&iYqlPB0cKQ=uvk4m?oP=n~Hyzl$6UClj5%+6u?&y z+nS&am5SE+>8feE-UB1G95-*RU||B;!H{Z!Z9-A1?U1Y%D&Y{`kHT^5_@tJ1S~Y@% zc}nI6e*4j(Bf2zz-@Dp-1n_nk6>LTY%J!}wmgz}G*psiErMw2IEjR!%a2W^~}a-Qm0+y8$T-o;Bmo1z-nX z+q^9T=}5GFD7S=bOV*Td&;_He#{CzoWD4s!Ch~>16=Yf~EKQwh!r|LhT?X;s)d@UGzz z&71xQ-Gy>J+82HUl!{V{jiRM%RevC!$;$qqHw0@RD6!Nu(kt;AMJJXF_88er5hlht zJQ8%^7b>|Pbcu`&3G@`ugai< zjlcnFgR8W{T0RZ_1f%1p3*Q?#7$rA^^x{#C`72JoE;138b$%lm+3DG07Sj6a6hD}r zz116GwjwNT2Y${^++_`2EvRY~%vOj#Buf3}+{Br$81U!}s-m2dTW$_$s`-R&;`+=n z2o-m^N$<93Uun(i)bSGIP9qI^Y)7m(nRRR7h}tYJ>tXW~qcqxt1fc%u%@&Abg%GRq zM!Yw<(%B96>qiO)1GzMEi8a{`fMNaQs#o`ebMaC&eb^*7{pL7_Ep_XU} zUoY9AdeG~>(2=_QvA>1hrwyFjqWef33@+d58`q|DV@n;U7GsU}c(Y{OD@sk-vxgQ{ z0*A+n+wqVt+vGBWdVgl=6$Kmk9@4;}hE^LR=ld!@^xzK%$V=jJX=_FP5Mb82?xiB&RST^o?2Q}{ZJJ=LJWwKw@HEGG*tygm(mF^8w;%OY^b?RK#J6xQp(BL z7A#j4$Ale*e~q#asmJel%l`}tt1*j{O!Yi;b89@;J$_s(el$R8BfaKb9Zhu#+@h<2CiX8DH^Ht3D_e^o&|{PM47MuG`pxZEWe__nlxB@D`@Ah|PmRLHrQI!9ZDTg(Byr(;1`sxL8$C!18e|KqtV zd?O*$gVm}BwUiT44e2o~bkyyz4rXtzp!LkX!7uE*VPF;(fzy_4Alkvk>}=R%*FQAS z)yC70(a)?|HP-YO^_lvF&G;)Pw>wO2U@=?o&s%v)$J%rxaKgrl%Sr{?CDMW{Xw@0u*5x zO8~>A+kWJ-HdAyWE#pA7`w#{+`h0fPefsybfml0k2HB38UP(`I&i6rm7YF)}R=(q| zFFRrxLpM>#Wy}Aa2qW#7BYG9(;J{6_stq|p(GN&dTC$k=a~X(UZ2HfHvAZed9|E*C z<8C>5wH8CJkCsSJt!{B(%4||NwTqjDbEz@d3Is%~(nvBaANx9JL*uuPx$WbOB3TE| z{cy+?5}dgnLS;i?CuSMbt%VBlOGV~JnDSu;LvKX- zpnUPhs@u8}11+3N>EF45fdW%gGj!V5i{^bfPaK4<4IH_<4Fud~TTcF=36>7MwGdgFf|zGPRk9 z;DnpzUOy@As6{oUz3uk@`(J?9`FJpbUtITMnn>IamwC<~I_uU=RFLfek!=0PrS*p3 zjW>_~OtH#&N*R*vmx)Ztj&Oye#hsqKOG8@cS|(PXGe@**P9XaMBb_;^ss|;IO=Rs0 zk@>%IUn_0Hxkr?~c{9@Kj6t8$F>~ZUvYw+2Doa}b50pS_zd;$|_Jm#<>$SD>`eN&- zqBv0=XL>ccpi|+R9w@91=I)z~EyUQI8>=hYvp z@!y`0b&u!Do^q5!vGe*)S0D2Q|N3A5>+Rh;^J=-UoHIkEus8u{%%6ZgHpMLd&p!LC znHZ_=F}JcWbL3nTu(qlbCCKvz1mW% z=Bio4v`-)>$NRxW%>;)v5yIc>X{MRz$7fr5ZKRB%v>gVQ!&Zf2}^seH%L zTyaFcvk!}8w*FxQE={27;B$3I-MgN{ zE-o0Jpl=>KcGN%?CO*P2(A?~t&YnAG*)uL4d+c$+R>jxonfK0^eMB}nTb(Uq#YbVF z&pz{vQON*b0I|b|4x7g7#^$DtjrsXGH5zrbT21qDdhFOS8!yW%D`pOaIRl^t3$z=Q zgpG-IOMTxnE!cBIIn}lGHPdj#r5Bs2Pdxdgt(DXV8**R?O`t(yz zn^x*`KYG@#LDl1McUl0~HNDMqidqLtBbx}}Ry#ptRAR`}u7SC2;=b#vzj{&|3qR51 z!7rNo8^`tJx}mbPt32K?rHIYNo6}so-j;Z4bwQtOA21R(GI^0aTiAY@oY6bciartU z(IdF1aYHrSLT9oyeY1Z`FLuuhcUz>#A6=ZMItl0;hx@Pv=+)J)di|Z(Rs5YfGMDa@ zbHn&<72t3Xs$&&DD(?nRs{(+I0Pw2 zc}3l*XrWg#TWh_vtGeIPL(`k4aS8?Q%z8s?%4X|*GhKuRspBB{AK2H4vqEc0pvih) zk(;Qg|<=c{{jT-I3Ene3v7ds7dCimqePxNU#%? zzEuHMd9I6tcWiDfo!Dal808CJy==#2L!__wVYBm4($Cq3>$6RO8kJ)T+M6sdSY8u7>(6Q-& zI*i=m#6;WJrBK=cM&xmpXND9x^5BPPz}a(W)o!)TNHpRE#4)~be+GWxd!UKx`|J)1 zEi9b3%?#oN5U3~@O;g4nPK-|j9AA9#MavHd_iUohpI;iy!cy%8jA=7@~-r&*_m0r^X@yt56{y#7d{Zc0mAGhl2m{22fu4CXIdL! zXgj#s**U8)F9D*&zDqJlw)x68SEcb&x1t3)Yo|4}?`bn5BF8taRCb10yrn!Hl#WnG z3xZ75DW{XGxz7=G7gP&Rfy^ z!IJxWudDA5PU&=GUA@FnHy`Mm>u+l{?iz5z-4+46Oz-tqHD;fVe&F%>xCL&m1z27% z)sf|qRyUv0!TN@pk!PlMG1b6^2`>gLlFblP3Z>TQvFWbX2C+8#t|BF>hlPUBS5~-+ zQ%5gfY^qrdw35{{>Grg5VoR_%FK+D7o6A$Srr=i2AR5yu4AC%ruiBG=55oLb$lIBjaJ$Tb_C)t(lnMQRFbZ6*1Zwz4&~ygj!0WfT1V z8egva{dC4=0E5*fm@Cc10E+U3QY#ap0wP+M7B3m~95-~NB@I7A{TzmIRoemR0Oh3N z98kw~1(2X<0|@D>W!YsO6{QY;mntTT4re zR@s9G57{~L3%s;7SVi&qFtr;$d($n@S$$9GV8dL_B>fGuT?Bx`tjHC-rI8Ylbu02z z%P0O^t{*AsEh~#V3TjiTw?3z}3%5@Lb)*`4V|_u7?wK{g;nB%2a6Dseyt%ocf4ls= zru?R!@DHi!gr)J&?M#X>^=-Q??$48*^tPMd1C zRAWm^gIqzdrO40JPg^>%){yU@lrTCQjMR`t-IeyY`|8H74zzlj2>UuR`-U91qeT0S z{prg$O;lWBMP^zF(;=aGiGbQ~8$}bGmom3d8fWtBuHqc++DH@L9{IIGXPn5`sA%h- z*__sNy>!dPD(x15>X;e9LqLw&MPA_!JC4-)zB~n7?F;}O;yJ={^l{K_0O&GU;~u!8 z3KdA=x&mF*J*a5}(u@KmsC`uc-&A2c4U@!37o$A#1`Jl9u&M*kROOI{vO@n#jau#l z+D6Ton!Ml8FDmz_$8K#>)$Llx_qXQo2`c*Hi$BxM?7Ze?XO$+2_8&N?{rgL+!*tN4 z#YH27e)3bF*6GuyOtb2>S6|hSe)L1*?_R6$@%`J^0%@|POQ*iAx#NG!sBb7WRU(uqIQ+PUX%Uxi0$+Sl3mvQ_($tjDMKOAD|i=2r#mSB{s^sx>~u zkp&Ht83{Vy8swYi>^;C$Re|{r+-V`oAjNSZeE6Xa+OCzK6E_7y%CH3%34?d@A z!9Y{~iaJS0v#z7L=9&V3Q#IdHH$9?3?5LjvrFRFMof0s{J6vp!PxrOj^W}Rb^`sU; zvGFwNWXjV>X|FIg*=+QnX$zW9)9{E~*tzmdfF2SaAQ5+4&}%&3RT4{)D{d7ZH$%0jPq$ig3zfb>zD*!}B zse&$66gqnJm@Zscu=pc~j+i0?;HLsv03ARM*MKDg`H-dpe&mxEfaMZQp@j`$33+|k zq7}&E$g?OYoI8I`{a)Wd7SEF(_o}=}i|ibV2iSF^EYbkpV9TN%&N=TxTI5{0raaiP zd*=6OWp%~sZSU;4@=&Is9M82hVkhoV~ zdD-qGCl|*9BN5UdqiFVKDmQ-S!?nQL#aC3gHBBA(q8v98Zndr_m_bT*Hpr?tj+RgT zl~&Gt_sZ?b^XXq?!9oSV zo$jxh)B6um{P@vv3yfP}$B1X?#5~BUwMe1YQ9Htm0#q$b?B*sz<|EADmS7E8FyCv~ zyp!aaCZkLbO|R*Ni}S)xcspECyiuspDD=sLtAYbicUzhY7M16H)x)+9wbtb3b^ZLJ zuWkxOgpDOXnX(d66SJ+Z8X;IP(w>QB^^2~&tf^M8Phs6r4;M;nv7!k;Ao6J#WQFC+ z!b@c{V*_VJZYD)S&sUaGchAyNFYJGj7Lc&F8OxpT>EudN1LUbXEw#c-dzu4-u4$HN zvA?LM>np&A>gYz|KJHZju*V;J++0h6698tI1VJoob#+C@k3FCR2M_4t#ZtZu`8C*{ z=B32-^vbKR80b2B;42 zs zrNt%n2Yo$o`~h9Kc)>JL0fhiOd=z(krG3Uq9Ia7rlz`H86!<0BLo1weZYEq6z>ygZ zu`>Y7i06n9B0tVq=qvUqXcCQ_GK}{gJKOM1Uav3wM1#&H%^dkvh4uN83OCf6`k;Ea z2q(vzT0Qd}byjbm=IPbyaIU+ii;XQE^(J*TS<&l*v)U>K0=Siwl(K(CMWE$$Q!f@w4CEmUiH@&i|Kx1{)l9#l5S zZ2&@8r$ae42!?K`L9e_YHerdO&6_C0R-AfjxKr}f(!TbVLO;ilBI5GZFWm^a~US@O?@bL16&1JL?Q3Au8pu&A1fZJ`f1Jno{tMe+|HW_ea zz*qOi$Gg`8{f+l@@y$Qd^ub?JYyQdMWQf)qAL{a|RswM*zChizceQ-_8)h@^ZqytX zD{pldHK_IUdhe|HWANoFL7?>t(k_%oAh8(m+mNa|!82EGEfWp1;eq~`^UOaf^+AAY-$Pe?wv-l{3ol<%mU z#qyoHoE+~hJY6VGpc#4!>W=ywnc`k9*9Z9Jas!8{PW^OCHNTECEyY`Cl@^L>iSX-9 zf-J|-uxGMxX^u-i7WGX{)(3igKF~`SoAyrcuC+8>TTwmo%zOz;C4k|I>FT519d5ez ze0$axw5s2F^DU!rp&$uZgA#{^=G!OUw){y4fCJnZF=*(00YC@K@$`GAwY0os`SAdL z*D;6<2*lrMynZ03rbqWLVfSd8G9eU2AT z@@L%5s&C&!>)tSc`@k~B!0iK@=WgD_sr}Nazfgbkv?lg^TD6J8W{2tW>{8B*Xqm2E z{JAzRzF;hdyIJQqw=U|f&P9^}t>l+%r@w2Z99VDfBhy-C#r?8SMSsSmVoqGbvQxX$uijNJydAi{zK)cEc|hgz=Y zy{@8Wpia@ZMG#}Z(87|Uroic`>D5dQ?%ZZg9dny?J#l__e#I*n~%#j=9TdqmlL+TLCz zP~wW7CZe`c=Ndt39wE{kWd~Q?I9I*qs~I#DMS-S6ybfGh@9S&vk6$VP6n=e89&9LU z1{k7eVcrAkS`|pUGhha!0(5|-Dvbd(oYxP1jN*Krdq(vG9B!;{gFWH_j8Oe5^Ewsb ziS&dlTes&)hio24p1U~IimmE^IiBhsGIGQNM5}sL$IXRUJmtUeCE- zRhq=R6?i?FT&;h;{}WtSZsSC^u?4o4-_+LfTWU-{pdgyscBRGSir{T`^`x?dL3M8g z#?(-!=o%FoPmH&ekXh{q z+Kk(pse77ht|(G0H^qk}oYLGJl0Q1PqI%&dACz*{)6Rt5$MZqva zu~IJ!-0?o9FyLmWA(+2oG#HaCSL7jx?wD(5C>$*Crl#t8CIaV&t_lp!^D=p+(490z zhD1GM^=7%J!VTp)xK}FVdXA9cgS`qnHCL|1&XOiVM2RpRQkqS{#7P7LBX=|zw1or` zlskg8*^c_(kC%K4+7#Aw1+V~KfMxIpU>6o6aa{A`yb7H2TqVZEIp3ILN$ES(HJ#DsQ8X4V50C+*KP8%Bt!>8heiZHZ)^G9#x&lzq+pKz>zYo zUsf-6lSiKdD6IV9`U5s}t}I1U0z^8PQVLuG1kgAuICP`qlV!W5s_ZXR&OV(X`)Ev7OrXzEaA)G<5so*M>QWX#uJY}p~^!;H~<#F3!#6~!{Ur;k&YcbW^7Y5Hc>Kw`i1-(_ykPC4>>qkvgA#8 z;uozdLx~pvkV` zf{t>awjDlvM4Ou%W<(e{Jy^Wdg*5H2Pn zb93{WnV!*`Z@r<;)>i2&Y-aBNXYW0LEW6J0!0*PFQ^%Q}9DtbtCSX8-fCv%*qrfuB z5+&IyN_1IeZLK7GEm_{Rq^(_*?JCu(YQ5{UUYBfHRMDcMC4wR;QX~a{ATo$Rq{(@D zI)|6vyLs#T@4MZvdwN38^bERt?wRVj>D+VA`QN?&`OY74;o^Dm4xxB6>~I;=Q&XZZ z=JTk-u62^m@`qpt`NHbd`*#G#(RY4>{flplDG*a2rogf(aG3yZkw9+Q4aPStO@WBP zcd%7xGZ%na7bY5MSYCjAJrhW&O?aLuUVkQYhWa`b-xbN5<5Oyuf<}J^jp0Z-4hZm( zGkoL{F6xdhSr)oGL3s^TmrW-?F%_UERgi@ATHuJy98-Q#!lwEb4Bvre1FD_|WnzSb z1aK^Ew}k|S6B5ujJQvC>0`ag7{1!}=05J@Ip;LWqm2iAIgStyeU3d@e_9hw$^k?Yp z9|Fiw2;3nKXGKbi=$*QRgJAdA*5f`g0^`Wi*??)S=vXj(aTpIg@PGh0llEh_E$Ofd zg`%AM;j6C-cp4fS5}P#wK;6*s(n~K%7!P`=(z$@PZp0{*-km;uTEN}*o!b$30q#G1 zzW^%+20nW1sN@f3URBz+5wkFFDS;w`^D-0&K^Q?I@eRS)i!Z$>4hr;YW$Lc`@BaWi z*Tr+sKZh+_HcK7$f!QLMPK)=9kBwu?)-8DMx#zHZ_io(1`)(N*?J7A=g40)Cc}1QP z3dwHl7uUb{z3)n%F6JZS%f(>44AR@&*o4()j1(QFVTy|{^~U85vtrM{*e$&0!uj(; z=u)wW-o8G(@WS(W`Q?`+e^~Tw-&ohy&s|2cfd0EaEVda@@FGQ1QJ*-A@};-d&p_jm z#1vRH6d?EM=0J;&S4~G(bw}ppN5mlA(?3+d^Xu)NqdS8b} z=K_scQ(P!cm=;XcP04l2tOztHr+=aADQMb}1?<9y5*)ExXQoXI0QzLMp7CBTB#sis*nq z2^+x^(^oO6JAW5BomfuT8OXUb@`n)2F`=9KtR0!N_7ABSzS4NB5@p6$>sj?YOXOt_vWk~K>DX3DdI zj~Lg@Fip9~bzI5RFf%=aT|0Nlb+$#xFTpCo;EwG(qn2C2kmu) zHFv%l?$f~{t0k~GnGfa9z6ae%;`y25m}tgTs1h>~;o5ItkYc;ET;#Qan%@=S}0BBeqK(W-SXXFMpZzEqqKE zYqVk~F*6ya@w#`w$4E7SvraoaE&(F{wy-u02JE0i47B5 zRT+Im0EOd)_E_{n2naYWTuN%D4t2UuI7|ORrE$axb3)77)Cf)jdTdqDb z;svS=8Mlq$IV8?o;N$hz!<@h(ozxi^Hw5rZO~p_lqhq5OpBNXZ6+?Tl9ZIkW(&*Sg zAV{1-)hU5-E}xT*(9@LfA?qGHeq3zW$hY5o^G(4tyoaGc*dCu9l_N)w$Z>R@_fwrZ zjEmCe3m49dV2kG|?PGcMwO0j{QWeX#=HkAk)8cVUP|x}-!|Fw`&*d?((#;f|gOJn} zi`rQ-u-yC@=LXCUv(y_6RI1ew^|UnZY6 z7CJyJb7nAwzOA3b_6I+QlRx-Fy!L1R3#>+%du=U`pMik$8}=jHy93SHQz&0Lh9C%& zb+6@dB~=}Nc+VH{!Tx)oFe90*AaFvXS}ya1$*USniWca>R?GtfoAK{|_@D7l-}&-d z9{QT=JNX*_q7oiQNAdQiDG-si6R%z7zc3WsoTN^wh}S7WoQZesP1xy8V{2gwf#Jco z1Ncb;fyPi9)N!lu6q@1CF(DyAd%Yk9$2U4j;TQKhl+01}%CK*ir{c(D7PhBgW8OiU zQSy~usC*U!_A)T6t-y7vm~qY_qxZl@8;a2cH6j565-S!anxjbSIpocfc*oKWp25VK zi}idpEs{2d8i`6Y_Pu>I^kr4C*HaZwVw%mzLyc<3TYig7?#?0(3mu0Bf-izM7N-+J zg!>dIk&cw2u@G~xE`bsySOh^40ApPS>y1jp2Y8+D74HiHpZq*>Odu82i$GRXkL`s0 z3MH+q$KSiV4^f>6NU~1UFG}2aOff9y2Nq_rVt?4~&6evABQpQK$}^=?ou~5>#fB@< zp_?7hYPi3D%OM>6?Ei<%=0{MO0Wcjhm}CwZ+yR)W5XABKqm3&ib9+Db_tCTUKD_!T zzlQPSPpyVwEV~bVyFP-U{XdDGZ68K$u_J!VcWqPN8<;3=)|nvgs_0R0?qQF!dN+?dV!(>cBvM==pZ~B!12~fPZiH;H=G; zVR?nCz{RUHIu}Lr=ki*+J+-@81YLatVN^bBq#McF9T&! zUZCM@yANr-iJnXq^=1NUkVeWhBwiaCAyeiNNO?@jrL@s@iyg__72cuFhY8z)CXn28uM2#Z4PT?NCVRsd)7|7Ug0>-=xqt@{nrAREDZbrA=vD-*OMF2w#LH@=< zff2z@1Z<*XIvh}1$Czy0m?HvR42(yT>J+ zSjKG7~fed+qFL5MA8b_KC z*wGARaL)le@f+X5%YXQ5IR4CkT2tiOe)u2Y@E86o%$yFUDCGhxl?QVDDVW>u$EN%4 z$Kjv+=NLWm0)F)Me}mz-|9VZ0kKf_v`tKEcn6lSGqhe#WT9x!I=}ZQ>bOr{Qw^;zP z1)x#|X1Edz(3kATKi=>-{?`j%UG|vCP{^dBiGU5vEtEP;XSt28>~|Z@)Jyb2Q83eC zu1j3Kg{MO4TQ_6me)sV$eE9lqnlBIk7CD9RlJ{G@au5bXv% zM%R=9=>e7K&Cl$wS@uouxR>N$_^ zz(SQN(^^rzNZ>-SLzU>k0|zD30lh^DbZB!=U`Jra6jq1tJB-t3PRo7Fv_Q~B`#7e; z%I30o_0?D9{zNJvo~5)|WBUYNY=df2@=&T+nZbelnvy;`L!3Qx7Icu1v{tTzJ$K)Y z+1WDAo;xe|&|Z!plI=0G1AklE-|;-{`3T5pM>jS)D$k*V0v#Z>Z{Lphj=m>jiNI!| zP!MN}b7#+C*REa2q%&dzNaqPY|3=D{0o*lSvTIzvk-n_ydyGT|TMzymwtwiiVFx96 ztqypLMipj^k&l@Gjw>?B%Nzy;he1J(4b)~$-2Zp~11h6OF?Q^k= zfkxRuZMrTJ#i4yU1fut2w|_lQz(y6wbHs^8+8oe;oTh&Mi|4$5mgH z9!B~jnJBt@wtDv?8m-()$R?U-y9tq?E!8eFCzMPFeQ5_C zattH_L-kOZ^pNdwV5AM$zKbL!7y;loeW*LB5ClcfV;^XW;?oBe7|dEITL#*W29qhb zcrDPwpt?>Gfl`AD2cApWS`v;n2F<1SVM6Rvd(CaIv?kPmvF6B_12JAtDOt4q3Tk#8 zExQl-WE}yT!oQ=gaE#0txiM=Y$=Gs=E++z!;)QCmc%BU31gb!pm4cp`>10~K5%ZtY zaX^4gt1SuU2L=W(JvA)=>EiH3v43Nh1A;tC)#w<&@E=S+H9kHr(ky~Lwy|U94gq;w z;PQ{Wlc0-UrcB4hyrtW=ZmB5Yxi|@VXUg=k}(G(C!soSyR$0YYFJ!7d7e&dZd z7Dxn_`fjdv?s5QkjW_NZmlr;(`%PbXW!)Y1@A^B)ZG05<>I^bwNf^n3K?Z=Cl*}x1 zk~fkk0&#qCC{U?Q0ZvZCjz@kIW5>SVS?(@qX;mHcZ+{Fs9{#7WgEagyRfGXt$49HG zqcD&a21lmK_lD*TR2Ne^x9^Gn9aCps#Kehjud4A}sWTt%*@I2U$|^moBjGz01=XO9 z3Ff)eQ_w6AmY$G=&1ypjY^r`7^d|c7%Y%>MH!eOI-G2RBc~LsmDM`BiJKxuu?-FfUgE{d>e|AL_$r7s*6eMMS2#r z#RjjK?8AHG1_CdGVzP#Y=b&zf#^Q9cVAzn1>0n2Z(e+IUML~wnb`n~WKCBXkgmj3= z7tv(hZKGEw+AbO(c>w{_*vOcGGkT3u)oHaX2_-`HDFM;s>pPig1O|MWc2XI%Y$kSJ8=PGxt|4XW7BHgnWu2mIPz-1$r z$;3r@td7#AEYd|iRH=51eo0qZIlAH2wt(CQ<}KZW`sA_8np-U=vc0>p_wnCCU=GPk z85)@?Vo+S0v@p0k3yq4(wTbsAxN0jA4kG;5W$ro_E zJ+b6-;*%>$0Z#dI(|%{a`*o)wU}E zeR&`4&Z%xp>mKqcM{Gx2+NrCSNWfA>T>y`f($Jc9ptPxCZNWDaFccSg)j+vDA8U!>s{*pRbfdq7f6z;Zib9y~xX185zC za>fIuwv$1G8~y~Gz(q;jjJtaS7+OUNP@iT{%}zdR1(-bB#_WYUth$fBUH4$u zNB-wkJI1JE5B6-w0lg2dc*lk5UM9T;hMlT_H%j8dWI7$Dq^W4u+ZY}j!E`VMzu+^! z4vIz(es$v~qh{mnt)f8ZyW_Xl{kH(m-KuA=n|4F4AF4+?gW{UZ16ugT4J# zD1i&hVJtQU`#02)HC^Ke`(kd)sJ+@aU4#FK(=HeUrHj| zqru4eXqgrodICY(fE)d#40u$vrcyAoCNy1vmR4Y975KJ_jAvp;j>+jMVN)?$H^d%I z2|VPJgU~7YOVtp#iby^J+Op9Dm0qJ9n*yZtEKDs8%FZ*UiiAcxw-hpZUJ~824ku|{ z1!_(L)9o~L)fUHd-orKtTp2Z@Zih0G4%ybt+i{}9aOBH%)OLL}khmXb4q9NMR` zL{0%b&x8V;OsLZ2G27xFC0^V{=XgK&`3!C;IU~qoTP$pw&x*hl>zSSBvMs80c^~U& zx)yFbS*ci;=cB*qS!`GO-Dx-4kDe2am*?lMG0(0RN)jUgDIHwKe_TLZRkX&-ak)AL zas!8;=_&ZGg{c$Yz|6UqU^k|Kz=dN~VK>HQm8KawT-(Lzm&bAL^)fuihuwBCeXfd= zFOA^b>*wSix~&ti_uu_FD733sg(aCALc3YT6gcF`jrWc zpRD7;kLnmb-h$n7(3q~HRS8h&KN!xkt8k3$lBpT^XzyJpxrTfyHQ&NTr-E4;Ir5{8 zX0%29Cx~Sf@TrLzj8sR^&bEMrg`eyFG3-eWE~*_Lt~>=gvvD*l&uv%!N$aA;Xdakj z_~G~5iQEtlQS8f@zDgCt{Vll)4h~eQJY)t-cwPgRVD8-hJA ziD&voW+G+mHHA(O4DQREmi(X$D1iwrFeO_;QnSUTPO@!vG!~TTRazR#4a&OMA7(La zB9YgT%LAK}4eU-%V@I)pmaF5!Ob&1rD7FT@m4|IvsE=8wT(sddJ@{=Oimk(I2WVRk zR4&mTyZQR2scoz7E@4=mE~Sb;GqBChG=NrqB|O!0|xRiw&fyroHMEyDnaz z>lp-r8zo^wn>GnS2$mR5gn)+XPXa6g8E*NDO9oEfVch?(ZSqzERT)4M= z-MdAM|4Z8*L3UstYUA%*>GAL1dBuclwc)uJ;kIUBW`_{aV}Su}9lB2gnh_d*HfNe> z%s4QTX=p|`G0>{ zu~BQmYLB3|r-)+T7W}goMN#mDb+7uVk7#f}X~n;tf1 z>gY{2kx97XIqC&Tk&4)gBMIWQz>o|D%rj~ld>6wI4ypyT9Tj@Uki_?a#NSfINr93W zg1I12CGV&kxX2j>w&Wd@C!+v!A=&s_Qo8o;WF7|xYB2OR0)>Hqfs9drtvg65RTSW0 zKs9iBI)~YM7CO^BYAN&=4HzjMYG5O&L!{`MZ$f4G64!$j_|QBTE^|R>fR<6dE8Bj${A+{SvH~o}*m+HX2OqXJ$~V z*X8*2H(tkz4+ow!k6idN~Z?$ zWb#qkPR^Fg;t0X_xY=xp6U4D&$HZ=q^_EkX1aRH2+HxAZ6YKIv;79B^7JSzR0Ue9) z*=S53L#BT}G$SoR1S9%zvZHNStJ)OcN1#JUz+yM1p_>^bOFd{$GqQA;EIGP&wQMyb z35BU|oED}}|22&C0DQL%Bi)bu#s_8MC!^w66`f34h02JVog$OJKp298<-N2~8@GCE zs2U#Z+ksTVz(k{ghR0;t^JBQ)=L@)UeTh7cMM51Ppw$S3gAyfEd} zK>vW)pQTbs3=aygN_vDKOF!g6LnZU^CsPIJczG}51k~y|hEEGgi%eH7^w|Qt2 zY=`-DEiiQ!c_#ai$z(A(IUy26W@sQ^G>kA8Jo)DK?c2m7m0qdIR2DtOl8lAY#j&w5 z?B2Z#wOU;Oe@M5*v|E~<5seoBxW%`wotNhQ>nWv8ZsRO;jd}Fu3mqFgrvbY$hIG%} z;A(Te&Nr8_>=Cg3GJzfLRv^R52B%A0Zgi69r`Y?uG9* zLs^xoL8YM|ff{uSEaFY6z_Y6GB+kfc8yPT|Dxi=`>W68 zKvLNZ3=T-p%kO;WI|BZeyMnx-!C%KsWTgCy%Hrebe7wB^1^6=0lTRu!fNjk-@cPIA z_V(2=lygu_3;})^cvqp}xk^cGn1af7eUwrba!D8CbsDS#JsB6a?ZZf@VfrfHL7-@; zIn$`L%TUxT@`eFJPf7<&71&am#Ar2(nw1G{&^le#)lmBN&SVky^jA?z1)qNDn>f`+JbDXHUnQ%|b!lRgYPK|dr6 zDs`0l>u?kkm6n3Gn?$)y)vAhFD}fU;1?=seL6X2wr=4JZNkDT2s;}$Q{05I73!U;P zl{$6eq@<=I4?27Hoa{%h9Qg>r{JC#@T_mgL&z(cPRuewO#VJF6kY`n^H4r#4{u&pU zqoX4jA0NY+GiPLup=v&nOo-$wT4<8*QH4riM&QW45a@AX+H5w2$B`GdTP@*_r%#>2 ziQ~sbdq%#U0o^4H;u7X+-bZll?hkRnHq9+CKU^m666 z>9oOxIC*xY^;phJFbCkSHu)^4!8@@oL0Y14Pn5=Zo&-$wQN4gn-##b-1NC*NOwSgZ zNo+6Yk_vU_UK`a*ugMD4NS5Z?TTOeB)QsL+Dw%CqD0!SY^EXIjH^E5v!S^hl9Isd%}Y3!DC0n40K1hQBmxaKxYE9Q zp=v0l=qSU&GuA1*)f&aOCyt6;&DHO``c*Q+D25WfrU>ZB444Oyt5W7T-n(}nE}Xj{ zwnhwINe?ite5od)ZHW$Dz#W+fZ9m9V=>ASueA;Eup5%=;-xSX+y8TmKz_zm;FD37YS6C zI!G7>&X-fz*IS3qK&uj4%LhCKhNi++RJ45;ir+#ZkzhDB!H;aOl%7I=+QDc=!MSQG zlz0WVO5srS~&Plez^XwD<$oE*-7xppYXFMiYWPQF6-Tm&q|I(#l;h}7U z^`(#WN}Zmb>vOF$UP|zy=Mwz!S?qiGj7|rybED4>^E&TXcC}mogk^VWg>R@%oj`Hu zk&Y^`BVpo8s_L-o6R>Kdq06bfRHTOjg|5RQky=O}z93F}7J+XeP%~&%FRXBHSEf1N zu0hvSxWU3Cx&&rUYZ^0Wzl(IwU8qkVgIyniXV;J)dIGjuMlNBwm zN6d`?jVnb0L7pemAycAgpVB;Dqv-!z-};uUQhA+>hV9e!pLOUa&y_68jWD3=AMx^P zvM=5J36Gc8MqGPo3YeOYij}~Hs)Nlr=6cLQVdxG@-c(JbPGhYZ0cOQSsP@X38A(UQ zB~QWtm_dQ6GqEMrJfyWEhB7HkwnyPI4x82k%WK04JW*GsOck38HZIkYumcsQYK4vy zfiBJh4CGsGD%g-$WZ}!jVbft>)X>BwP%&CbqLg)z%)4l!4a;l5R5D@UVa1n#zX>fP zW3m0VgyS`o6cm@&Y~kmIkw8*Qqh4`fI|j5oq|IW@#Z0p^32Qc7rG@cU9W-XXOv|z~ zS?`duo%v4*JyD}Ulea{CDLNN@zdTRAL>?FMH=g4?;ddQ|^@#XhcrNsI<$dH?v`LIa z%F(^N#u6QOKgT5x?KmsU^UQ_mLZw}L%DOHLBQ#Ipvss^oTRtNi2m8yyaYQAm8y$CV z!}}tcWcQW%eLZ>rJAbvt=5LAj7E_=$dl9ZR0ae>1wr|mO0Wj0(Fsf%??yj04whjKO#6Fw8t0$6hc5+5t9aj)tmL8k4JZ zmrkNQ`~rNpg=Bs!X3swjRZGCLr{UU-1^2I}gVWUs+*{m)9>#g`d<33?(MA~)dJWr? zJve9#U=SIE!BWCSJ13=-V&YOz!&9v@c&j-IxB+r{0&lfO;I0s0<+sa~BfndMxQJ13 zOJ+s`TyCij;1<3wk~%UHg0qVkFUmc<9x)ZRNtFWK?%8fGn}g?t(Z_k7t7fVt_+0)` zoxp7b;#SLVN4D3^`W7FrmVU04euUHRd~a#pHCpRKPhtw$gcA~*MD`rGfrYADK}qd{ z&V`RP3`5-0Zme)d{HjzUQ(pm}|k^`Xg15<7>^p5H|$Qr$LiGrp& z*xA#-(a91@`6JLZ8>6%LLs2|_UTFFT{J?>s(5WX3_$zZXZPbDQMZ-Wkor14ckqqeK z5IS3_0Vm%82F*Me!->Ga4<}(lH@2lvo8r!(#eB!Af^;blx2>X8bC60Y$Qm9dgQTck z^QjS(GUt&@<)Jh8>O9%**gevpW%K4Ovhbsdld46A2B8|0>PP}2Y7!zaM}EV?^IWjf zS%LhC`#eXRG&%)P1t}}#&NImC*ao+K{r&v$QK?jAo}v>WwIY<%@tKb6h}|%s#dfGw z;KI0AEMm)+tr#C46*Vn0J+KZPBba%CYFqL>+FK3|3<&=uZ)BaQ|Kzb-w{8{Q$oO;Y zGy6||x{y1`FfaR$v4{dI%v$CMs8>uTAoXPDrtzsr{syC zMWk&}^S+Pr@QY&bPy0Bk9jQuGRYUfj))Z7Nh5FPh@EqDutiD3qzw+oC7})tqcpj4p zhhvUb$*SslkC#T{_0FeHEh z4S^frRDBW`6BXQ*=)(cE4}GeMoNA)3IC#c6k7pXEQMFr0LYHtPGfoSqT4AK{n;jaN z6CD@`pemIL=pwIcI-2dKcm$HkkqJ?{#=3N$XOwf+C2-rbcaJbKG6^y+dVA5fgiMEZ zB&jnXQPGDl4dc;A9~H?Q88I0VMgL@GG~|8nz4vgQ46RyQJ$!@!K-3-`O2-K9W?#7l z_iKuerjx*Uql99z4qwqk_2~PqNWhW?Cn-8Cn8+AIa_^>03scP$N@*8Hz{!{KzEWVu z1*Dnm9!TmL*scfqfNEeGBT6zTK?&{ZhB6k0D?VCI5`(E>7+M3i#{}d)5_%x2S=+ba zdbGdok$IB&N;$g?Bw8>MK5T|5p_~zn0g(Ss~|}q38OIQ$gqHbcjQ5UyY9LR z1~U{Cio#=P8}`QQuZg(_=gU&52j%jtc%9OLfQ}DbVAA>F$h+_1^qEsQeE0(bjL6R% z+d^+&pVVW_HkyYJa7TPi({%w=e1E7`w_OKz+s4~({|JW;9YR8E-P)4V+UcaqDi%xF zzyDq_FX`*+m9_{pxu7NRqvnEk#mwzmo}I<^?K|cc(B!oQXyl~?ZTt4^6MRJ=nU|cY zV|e4u*Ta~0*LVjkE6hO|EzFmyuK(gM{<7rpBC~(;$-flF9D})~NOkpdjq*k0Hq^x+ zU(=INGy}fPyr2YUixSlmEc*^-&pibr)eAk5hg~0oRU3g_zXVk`U?z*GO{~K3AzfrB zkG+9(X$LZ;U9j5SQZ&w%WSI*=9dA`B$)d-XYGC~2*F?(L)#R$&Jy{vUzU&6%D7j)j zu#URWq?elI;$3GHm&^)2lnqeRO89Q`7>=~YVE8IhG8xcQS;eXL6zmm{zL6R6Z}aBO z0=&A7Y3Y4MCd0os-+WWP=RzSb`Tq9o*&`r~tHix~_6lPvS1Q6-xR4`Lq9l#yXfVuu z+Q*R@u|2xz^IihHd+)thfT3mEIDGgpPM$nDCjndyKjLD%##J}}#bxCvpsE3;+or@v zGgXGn2(y4HK@yviJE79smH6^W9(2-aKDud@L*i@{b9ke76FQsqHi<(Qg=tN6|^eCSyPeMul$Z=vm~2+W*B8OZBtT=Zt8P84Ne<*2{5S|SLc;{c^rR8RVzCm^j} ztA^SE`I%Hn3eP~hbS7Zv5Q3&kc^2hrRe;*`%rqnoSKy1+J%Y3VLbuUGDwzp21XRo` zDyFArMB>H8Egc)UP$f9i6qdzN&o;L07*na zRG3;O3c8q{E1S*8ezfo<;N;C8>Z1re1{SOdXrrg;0?AufvjlaXRm0TDZ;15GX-vX% z+oEnPZT=uCqpzbrb+qe_)wjzP)8yHwkjie5v^b8{1>zKj4(W2-h`LXsRU?C$3(ulH zxw-*r)a91v;8=YO4`;T(wK@^oI~N&(AOQ_its4HHv)_TGIJigOgq)Is%joWetBNWi zNKUtIJZwnR7jDT6$=F_f^;KaQ(aJFTZn>pH0=Ha=(lnh_SR73QrD1S)cemi~79_Zn z;1b;3VFrS`1$Xxl2=4AqaGl`p4m;n!yVrBk{Z#c-SD!lPym4o*PbfPIP3DT%5Wi<+ zC2)@CyC$CZNA!xY&W?Gz`GVU&&()XY?r!QtC1qpNXl$y7i=f3NGDX~i? zJ3S!r&5nEE;m=yt{z=!Cl8-i>vWtVhX5zVeIrE_y-FRi<+QrD?GY-oCVSP*bE^Do>addY|Xf z+l9I2l#~X_%zg4qDlT?@GVU2=YYb|FHrZh*2E(?dbz~XJmPP)p%?asqQhUNu_>Akx zuD6As1BYQ;X$A*i_2TF^6vrJcqlFfe%fIIoNlR@s&^cAkH09C3HlP0}C|em11l;jv zGaixU=}2z+$8gd0Qu|6D2i{$-2V>vFN*s*%T_AmIOC_SnDQq&1QrCf<*l$?=NfCUTs_eN`oGu;{ zu#f+JvAB4P3m5I;&ye~9{wlK3j{1^ECMwOf3HA1_i`IyIAvQ>q3yp2cJ60*)W%IEH z=kO{WH7xXQ^hZl9@|vUmZ6-RJn@_AK_3YKZfdOWK(;Vwlz`mUGo89K+x$sR;U(BGI z`IQU5g?DVFmV#z_oWh(O=T|lY=qPpxbm$yJp5hqX?aGl7hwQ8|6W<}}pe}R%i$^T-1>)wiF4hhM1LY>T6jF z)IYRT%8a260W$WgPv^vq-88kZYCQY}d((yIQxYJCq?Y1UglQ)vc|}{F%U1Vl%r&7c zAj$Ht5PA(;tjbI*-jf)zup0Rj7?&vvI zx}a3Awkyc7eX%ob^JBSCSy^pOv^i%ztvFBe!VypeEufG(5#d!$*|epgy0#a32OeU-{1TShsJa3@khO-5lD9iW^~uv-p6i9cDB;!$2?nI36^bigg@#?ET)D z*m%x|dN4#zwd_D;9R0L@E&pX|pgSXxJKJN2?V2ZEuLzk}aQ-uE|D%4}x-=3VPMn>> z;SY%y_BFd+lvVi*(aRdXV;w-9GST6e`OQf z4VWU$Z(q-2$~jP&2#AV6qsU|wxauBlxnWU!(HU*=mV!hITG(hxD?ju3;tNCpmS!f0 zWC-Xtzu=L_;!uq13ksN%#6sro^U;hgrXm4zzT%cO^OssA3i$;wM57!yb5fEj6hCUG z3y)INo5%7$R&ECxDVy10)}4oPhC1DxR6t?3+&2F>c}`GaXThFWYvrpdbJaC8$qjm55b{}7u z69RRaQJ#oxrdMyQEL2q{^U7dga|ruZt0n8yFica7;EsMU-K)n8vCG%c^hRlD$^;;7 z$z0DpsU~hG4wEYjc(=hE4yxzwv*xtKrl5vF`$-#3_;xUd2BV!{Ufq_adh)cg=?XhmVvTJ z3#76YwHH2CeM}Db3X8)>39oON{Kak0(uVE9Zku;d^meHC;EDeJg*8wdwy!a?4QI@( zvgS73$>W7(V{2{J2!a{nOg-DjedPCxBxiStWO6=Xl1RXVuCd0BY|{1hZAKeQJ^t)q zbo6X1)J+@MzPjF?DbyYH>?(ROSaW!u1MTAox3@XWNAvGh%yUP@#~s$v9LlTgb@xi( zLLRx=)8nA#SzX}#yng&jyM&>+lEI~&6Yd-qS&fc7Y_$bPwq0*XfWpt@&n@G*oDwJ< zzzJuDJb)YVf8$ZwOqhz>wF`r>zWF5xJ3%y%QRD#5ek-{-L`b!5op#B?~{@+}YG zCU+MSUoX+H&7AlGr-LH-@4oqV|BER!uzz6DtN2r#3AtSiT6C)Q)RRGzvrvQd`2xRr zhrnKTB1h;;xJ7jYL*=$>bwt4N>b_E@G;vO9;My0`#GT-e);wy0;m!Xy#?F3Bm@qAC ziWek-t4%N6K$yG_4EcXA>Ec96Ro@N~6i9qI8b2IQy&v7mRZ+on!dn9*L03UNwn|%< z4Z9?|7;uDnu|Y21=;2`freM_Ql=2%VWOtAM?+kwJ#EpPnKYnxA_iZ}s+3GLId&Exp zj(t{%z+Ge3uL8HCL1>nGGeT}g~-+4~&{gag@?CC*Q+!7zT@!Q*~@4_ATsomnnJLsE=-}z0( z5#AAQ&-_UTS>q`)&caJ!j;cc{=EZwfbU%dIy55?tmGZhmDjGM#x*{G1?5#WBdak@7 z*T4Gj`sZoPOr3VFx7yCgzpe9x(EFz-QE7Zw2gT zw;SC^Bk>Va!Mpx-Z#jE!x_Y&Y~O)JZ0t5;!jSA=PO+ba^5HH ze~x+x>Q8oz<*1wS{Co=x%hr4|Sb$+R|IRKk ztJLBMxQqP4V^yl2m;IygtJ)FmXvd0amnU>*E=)=j*#Ic-v3Weez#vFlGrvd$Pq^jl zb5mtdWsBQ?kBb36T%)0I^T+r}ZRbQ(%$Nu-Z%9VQip3_8?)2>@%$9D#`AX<#PxA=A zz7bTl?OsPA#&|x?fP%=?l;}wATzg(a&_N3&VLdaqv%ZH??o-yx+K$jD#KD&bVQ^ht z#Rrk1l5q+N`A!N)4^js{mjw|Edz}wJI&%&H!Pk#gLHAbmkSHRlpzHTJRFJplQ^DbJv(DRn!5DmDC`5US*l-{bFF#Ifw`;Ul8RV|GA9$ zGd6SD=3y744};hhQnrW>HUYcQ00dQs zEDKbnPxgl3ggAJ3eoSWZhhRaRb6`l1V=CDADb=|5KhnbpcijQP%C83o6Iw-}I?(nz zCda-)nRQ##@sH5sA0hU6RL53ZXp7S|nc?`I{tfi^LHow0uglG|wMJ2nvCVd200lWK z;y{eKv$!|?PeJaW1wu$NP`M$ZE6&Rh=03MD9_aaaXK>VY$xG-){ zZxhq6sMwLPi2I1!=Up$39alpnfLDkn7gClNNc`k))b?3z`1(ft<7SQxvm8m>yXMNnwZ#F4~&bb7i9BF*q-GpC+hAa zX?gsnzLUP%ls>_qu{i88RN@JrT^K|9B(P(Dhbvz2nl$?tEBJg@3>d-XAA&lMN-^3X z=<7hafl`SRZaMcg$ErKW8tVLS`Pfz|lYqS1jz}abhzySyeQq|IfJwdqxR$>WMB8&Q zC5DBfDkZg*87o0OUi-2|*0PMDh(hFOZo0LdH^)_VyAaY5YH4Zd%+?lr5Twhn=WkcQ z%jJKls3gyD2}lq(HyNJaei>-{hdDn!iBI7lJp)6@=6^(}i072nYsB^P)xyu`5HqfP ziN^1(r6q<3O)g!wG}CWCp(L6{o8aN$VIdH$2T7og1)*=@kNsQDTl>5Emd0v@HL1%xc{QZ>VZ`Tb{@H2Ft+c?_s~6%b?jaqBE91K6(kL;Mf7nE87euP^MDh$k4V|Qr zqHab4kyPrfrQTfTAd|MkccUyDV(cMqrxUn9H0Hwh)3Y-f`eZDij19?RZuiGacl_JS z!}QAV+i2b^lGtql#!gN1W+qCy!b>ZAz>#7;Z7lFq_2X9cYJ?^}Vjzw(c22lb(}(qU z7FY~A_u@ss^E90{fZn_4ZSD?NVVj2rMp+fn&^Gx(9%!yEX@}G*i$q43lG&Ta4YX^W z!M;^MGuE+P6B+(iyM683MzGY1hKu>y#OTaUSNA#z{(npJofJqPWBV^kiQ|pHaq>k$ z(75!a0huIbg(7d_Z{@rvK3lL8vbWn==CU_$X`GqK^g-g$TJ&}30f)!4{)m%6#L7;Z zQ~7~b)^&V|@aP?6t9!6o^ro+6-F$!AFfAMIroZHI1wn&OkOh6bY~`(8Y!>{uPzVKH z`6>#08OLR7Rw934#+4yxvxy|-BY#AgNgjmrbcrerGu7KC@ALkIZ}9S*C+ua{(ZI|o zQT;b|>AU!lQ`K&Bq%hWh(fKho$XdKk~CWHEi{v_w~J^_B1#m2NI07I*Q-8gsu5 zcSi(zY9S3PG@$jWCQdJ^@7k_cUaINC5{EksRvK;r8vLB^sQAk{Q=ikZtT=+?Ie-^D62g?VRiwG zZ9d1K_H4E^usdH;9wd0yaYdzqtom~{Jzh{X1}oIJT= zVOU3URB6cCBjHjGL@^eN=Kc`6?dXub(d|@vX--Vu>b(y!{!w&%nSm0e0UJj6Z6^K~ zQLZMcX3RZt`EkJyFO64cddhJJQ(Ob+PY=B5Q37oIY87hC6F49n4BY zM>mgkxfNzjKQdCveHHSzBc5En^XW3G5$`C?B<6eT&l#a$E8ORsxm}}_*Gx-5OzcX* zKVR;~gKRKuvR~pE>K6U|1CWpt!V(uU(+DWoT@?M9|62(lpBPa9z&4}kE=4DDJIb^N zckj8KS6^2>6KFLb?#vyoq>HpP1(|dy7+#y!Af+YIvP6SC)C}EWZDkdY= z7b6+kp`ik$90LF#3}70vDr)FO5Py`sBHU~3?UlU3f9u?O5k1{#*UiQw)cLVln)kAP zK>G=Ctw3}`_@X1^KfvqicT@r2!fR3U)8-}PAj7E!3|Q`4sgi>eudW+1m%xZ2zdvUa zm*evL&4{Aw=Y-T;iFSn=9(tNm;xY_qc=d@{0$1ABmCy>@kJY($uDA*fo4N#Iacn84RtkkL`A;_=Q*! zeuW53l?e4qLx6mjIPCYBvmw84c^Z(aBqSv0z6oUe=p{nk^G&~t)O*H~B1pdZcfk8B z%uf_Vh@@^DM-#G0I6N^(kZ%jWFlfuIz@!b>P)Wxl3bcMGWhU053H5x#E}a(l5Hxk% zj;Sn{znJdT1$_M(J9=fKl$RCCSy8yfT9|JklX)z_HaAM!+Y9Fu_vwZF3F$I(~YaqFM-H7oJ)$TjVq5TiK#PXijBr3Mz+0ZHusWzF@c!@&;W51wO>v0lOfWt$3+|m5rpD3$SG6S|$ufh5y zMqk#h)ThdQ>%PE|OWnVmKr^VF%Tr6e42i=w*=f|+-La$@_6An@wdGM=hGOOIVJrS& z(@#~brAEJb3_&)3I6mncLAp>h1=9nQI+z#0tFT#4yf-`)pE_JU9Dm*Qa-RJ1^`o}^ z96LcCiOjtF3Z|4ejnb)=G7jhAv7$R{BUh&B0!quW4sm^Ef6_rx9jDNdUSJUoCli^6 z<$%-kdW{8s6IWZt(-_)lj3CnCRya~iP1B^EkDj4aJzd4T-$Z=X5d|N-;judlrvg=@ zD)&4bUH&%v-QBOFlN@zojs0d=zFktv^rPxyky1@~wp~6nLhP>uw5@z;6 zI-DJM)+H}xyHwuCg(k-OeZVNjkHN6vR(zCz2Jx2$@qPrcOX%5S|A+RiRNPopT-6)0 zDXLGXRx&2Tg28TMIa;@nt{0*+9Yy;#>*By$Mw~d9Q7wfCNt@_WR@LXGzew^c($L(E~IoYpw=1^gBl6uwj;TelBk#8dpE__(4# zp)`Nj+>~Y_7k8fL8QhG`kEP(M&S@0-FvqC;|~$cMc6 z>DkxKx`cFLCYxKK*#RM=-HlOXIr>_Wr6{f)&)l$5IjWgSxrp|YMh3RMdeo3a*ZRS6 z6b1d+CZi1)LC%jq5GW!CB_|g?JFD)0qQ8}d5fgcg^e=raw@MoAZQaXCJW;*9ER68;P(H$0Gtx~E#z7s z&i+^CyI>YIO6(q)bXK7*sk=w_|8^n#UqFx(4vo_-0V}mWS>WCEID7PQ@^;*7?$=$C ztw(qW!kQmpH{B`AKlcXqAyS&r0ZjV&h*a52Ano$K`)#c|^(i<>B)GpkU`iY-uyxe5 zx?(L=HE{PzpPHPSbEyz5TW@amC7xgMOO;s=E{_PXNfC950#-hqey)UPEM|^kW@tRT z;)D_ZhC_kg)>5(WGbRc_lAw28v-A0fP*_hp-S@5<_BGeV^ixvZudx2FkG0yhmfT)7 ze!6RS3u^E%6sw4KX&CHl>IJ^Aj?e&M146Ynl1|N)+)tL(l|Ld10u1<4WedbHSPlwo zd3Kfzls<-hypvh%G+S2>o3P(@gdYkpM5&`gthJ|*f}=yyjC?tpK>A43!wv(uEdaO{ zfrG-Vo)cdMwlo|L*)Jp)G#oT0(c^!ZoUM*z>y$BQDMlnGPcG>lU>#PwnF=~zuph#z zeDUHAOwDZJk8A;hn<89;v}1ZOXjPGYhD6`bCyU-aEh6!C4k};}&?D3tbp>H}a4opA z5p|_+)%L<=ZAf%QtH(#LMiObv)@1P*#SJQDm;%h@u_`5wCKaGY3@UI#<~37sSm}K1 z<0(W3kCpxmI((NKe)0A7Eq=>N?Ay>$V3F|DCzk|VYC>;AOOB_BE4b7AdDRG@j?m_T zyYs}UQN;I+g1dd#r^{9b52IN7TR41iOCtt52oglDn_;axP1Tl?W!aQJ4>fg@G7#G)x* z(p)C&QEFzH{@D@T-db+o11yI=Z<&+K_@{l@OFQ`D6Fa>5dmIv({l-IEVhHG6>h9P8XA$5HQonuB(x%57KK-Kta>Jlo`eLk<-Q<8$b4vu)b& zNmmdbpvksGz`|sU6S6_Tp}9#2>kdj!uOb0l@LQ`}xqGLWkO+R}=@*FpC zlGF$Em3B{ZR4@kww!F*t3kwTvx>cJRP|bh40Ln`y3wSM&P$u#j7Pg{-N7uQo4RNJ* z1y0lmMJ1A=7tuBIdIbn)sEFB!ErqVPhqJ9S)UOGQ9_Bt*g9HatHv+$%iaJSRzaou1 zVl}V=z6MU%N8c4{6R+*c4WCr2>PJCzrE!FDyN$Pq=Z4H?rPS0*cSbx`1DNuh!5*%y zvV(f#P=U63hztGzC4|A>k|w zH5@9!%azij4kZCCg}Vd976LS?1{`btwh;EmFT%eJoFYqEb(t!dr~AX-xcI*L(B-8+ z^cE;a3-4^W;1tK3FUlRVup<&I*0Usar>mPRwfV&wRQCSYrNDuot`Mif{ajw~?ZHOs3DIeD!vezxX8{ktoi$bF>h_I%Jm z!{a|NMSrfLw1Dfih*97ZF8!7-_5-A#$vlf8VQJNR1=&*X!fbyX-hShmk^J4txF^eM z8oUz~ugIPwFBk9f+#eQd`a^OCB^& zq95gg zrGcVvq1%{Re%#}ws-E?9qv<{U4v#%1VQooYD*7TM`|@gnSco{r2w*te{j>G9v4w}l zE6!IswyO|5R1O=2`g05qv&8$q#FT%8fy`A=sWOSKB5X*?z!eQd@gfD07*0H?--PUk z6Go2Y1>CQ|<-2Ilb3@q@R2_;gW0dXpiSG4fbD7%D?chPdU*~967}-$%CWKlD1MIcH z_)SQieZN!q1HRe7J=|`VM`p-l!+>4z(2aq#ox+K|)`zFkG(p!-c&rKEq%IIkO`BIhF`FV$mhRVSyl=Q>q%vBi#G zxTZ@}6r^Gx1b>xi(B!!uzXEN?*>aLnJa(25qo=7bg%({I1H|GGrbQpJ z)wXs9^8R9#$19JLA89y*0~7wD4Ku}2c&&|1>SdZrdlk^*AZ53ssG7-> zPxee?N?l_SMf9G{Zy)9UI>28KWsZ4pO`@1J`6ud4!1~pkcRAlNEWC-#AzeIK`hE8~ zyQ1|cypbY#Fjp{hS3>rR+V3HPBubSdc4xl9v`}A!Z0K28k`hbY*qgy!l+m;Zb`oQw zxuO<*rgE-0Z2m6)>=LYXPVru9<8zFFL+RbUJ;ezOzIUF7*EW);J1 zNh?2w>e;2M)tfw77E(w)eWy%ZL)I@GJ}V2a!uS}f4P`)t;Hj0^i1}grQ2c#qMziyA zVfsxZtTx8+UE0Ac5<@0#w~agIo0Fg8&mxG+L|y#pUov31Vv*o?#8wbnNbM3{aiKaK^u!QGxmCpcB_8WEhvg-^UzPYB5rn~5 zoHUn}EU@?N3W|rItdh`ltV0@P1f`3`Mq-Mo%b9oti0C!*?56(;#v2#J(su~`; z!67HvUwK|wr|1lS6mbN&J9DnKwCrfV=vUK)eV6>QZZf&8D*@SkjO{*N6!F{KPVeUh z%&?(o#w7#mKSbFu(6TPgAuPErpeA^d6R6QDt{f{1Mml z{q|zJYU|nV^~U%`S>$Sv-&6K>-{teqMmvPdlkT6gPR-EcrWBqWe2!p0c1Vt)Tf4mw zsPkQ|!7g3KNaVcG2B|c2YR{nJ(&fVZbb;FPYRPAn#}Ja)g@Gv5w%qO5+u%n2 z_DR0>4$L0beisI(-rPSXp0c3}HGH}d*|+B~x^LY*rsP{ z(R6ZiGj4NZAPcR|&U{o$rQFe`-J+ib2mco~0+$2Xvd6~@7N?h~swzLZz%sNq-<%5! z1_c=q1!u`P0IN+DbgV{xWQzxLMjTU&z@0rcGAHj}o;+lzed>RZwCu>I# z{k*yc6h9fB0ETxN2MI^X;DGt%OuNo^_Qt;5+IBu}1>W#qzFh?ILmGg9@;cRdxq)|| z0$+?jNM84>-hHL>5`|@%-gc9ix>pR;3wW|gP+9=}UpnIwkkqk?U2Rz3UAv}LBs+Pt?ag35Ix&b?lE`E35fE@0LV?@nBH{sJCj^mskzqmL zN>q=#8qCJlj!b1))b9HwDrA#k34B2@G|Mml=|wKioN3=Gw#QtbG_YS?GJXnqc##0z zj?tOT=|11j*m~Ev7_q6^-auV#7?Zura48NFCEZr)-rR7u-68HoNbc z=s^`OXm+Nei8Qb(8bXa=30Ef=IDmsKIHYICW9-VjPt@4ceXRijEC&3>P##h$v+Nf!!cC{5*#MY zesz;jyp14SWqjPWdZc;6QAA}Smk0KL5gbNV8S|;89)?qS6x;Nr{#RNNiB#^;GB7i9w_fj4774*u^rQJ&#uL{% zqyOgJ;w&5Po%*aap$}`oC9=w!FaA2YK|(5gsX|(D{%@M>qjsmz$oo8%Mc}EEU}i6-H=Vg?(QOusdv-A=I5DP?Z8Y;Jf zpaTU|h7$w6653ctl^&bC*eh7`1<-yJDl3_@Qb9g&%Xgpdu;>}hBfmm!k_Xlm))v-> zlpw_yjn02UdRz9_P<=2kk%YDdh7Z=6<$lahpby5jNSm+*i>b8E=W>XZ@}h56#M%O3 z^%n~3PM;kwFosQx(m-s{5N(h|zsl`WRxd1H(V=_4)dSW7*6292AS;Ovz!_ELQz6jS zI+#UpgH`O(RN@KC8KYQYptm=e7K^Z0m63sHa4WZGi0iNG-3nd6X9TLB|G^>@uGMnC zPiFELT0z8eTso(8*A{3hvwbf+purNqP>HeiB7FF_o2ufY^hNxO;nPxgb;7Qmfb;gY zX`}l^zj%i?+Fo0D^VU{8D3>QG67gJoIpoNn?5B2L+)t)uZl8hus6!53_Xqm=i;ebt z5BEOKN?;<)DXGam$QN#=;?q8j*Hnclh7mOgfqVY3@8Xr~y=v>t?scp#5c%WW>%*IM z(a4QFhlNNSV%29QS`fPtT&AI!G3TTWy2ttT;`13uMl%9=3kFyn_Y#)SDn;x=SX)q&6fq$`J+5y!=`SQ%ZyLF9F<9$TJ`r^U) zX2ZI*$j#wwk(um32Buep>)-y2iGB?6Pe3AQ(lj+2@2k#>fVySpo)x_LOSrvRy=)(K z_PC=K?z{S7avW}&sX_ts-HAwU_95}R1x*s>&2AZPCvV&|b?$&{Bs)N(j}L<03c;|t zuc8g9T`x4lfkd;YwQylMK{2j(KZ|!A9^_oQw%}P@EYEq%4#U?=EWVb+Il29EkAa;k zIR<n>>5E;BZhc8MmMu%9d+z_RYwZ?Auy-W2`M8;pkzBN|;=i41Oe zy4K-4{E?<6VwNp(AFtwjJ3kP!rLZ#3ddY~x0-RCd*7~qSgQxF33RsyK`YYo$Hpt{@ zHTtp?{%l_+BFt`V#K%pMr^3G6Q}m2n@+v9Em{}jv*BZ6QRa6`eeeOtfCWBO96;E*u zBL&VcGNaI$k`h2dV@yAVk@^s?t=~iD_=9;B4j5y>*DP?*T01)}z3#9;)UpzoHm2Aj z31F2Nsoz)p{zH1TVg>Yz;?dtsg!#A^Mx9bnURghD44DhgU0UrxhBGCtj1iglCbX!_ zuV(9m1Zgrhis5|Th})0U>f)eh_yr$ubr?H>l{Bt{TL`qV$dF6Zz@AoVS(YiRt$*a< zLG)x=EIaWAtQ!Q>Spr#d*^N90W%s0@e~Hv{f6M<<8oNRlU#*^?_Dk*HZ^NY?FT&4$ zCxhSMYLSknT$rP#K&=kkHhpS&t6lE^Yjn<{AD>0yNWgF%p1k2jFA9%?6ssWziauIa z$nriC)90Vs;!Cy{6fPUddmrgI3MKk z0gnWis_&!hyO4C<$8Vd72vTwMH<+3SAq-F7lvPmx7y#(f60l2QjMDB23^@xu%>XbT9dly6v$4r|{q( zPJuUBX6uwKMF}7mSf>tw_h0@BPf}3LiLBj|Hg1=Oi!z2W?XQIeGEuz*Uj9=_<+utx zcpY6=u}-j^DC;S;713=TPJgR}Iu)GT#{N0!bk*LjYpAe&aK&ENrHG+!k)mTtl?lVo ztPsm_k@wDg$CBlV+nj>M{(|#V7@K~y^WNz~TZF!ERci9{cw_+8ox(<%M?KsyTAG^z zy6{_127okEbXOx|lvfj2i45zq!0*OWKiXRqWxyN<33YkzTzqhgJvE5OZoTt=ER{OM zT(cR5+;?iuvW}0Uk%ZNe~UjQi(@6zs-z%xwD>D0$nryzm$)g(iSsjXiZ_4U&g%2#9wy$AM4{uhjEO(iSM2S8}-rke3M7ehpd&b>bsgLoxYnadZf!zG|Kbm z{{aXfq=x{nCfK42=zK9J+Pz*PPxBwHJ}Dr^1H<+*-j zE#>{sL;R+Vf2f|{ANn1fLeFQ)n?o{d!Pb*~;m7FLP0`*paVeVNmTK6|zDJyQsN5^C zLqqFmTaA*x1{%J!ep2ApObNSs16#te)wvFafssqhUeysLIOIG?{`7*{6>Q#sReY~l z<%#ec2J{xb9*s1TMwe!*{9rsl3%_|)_%x~OHu(Xt&rabkwleHBbm^~aetQ{4PK^yN zi}u&Ja4(7zSv&eDg+<8{vz_{I-^(4ZGXOKbqk#}Y`&Y?1&%`rDs=x4*^)Lpnj-o7_XslA2%*e3LN5k(g=#Dn%omttviF92ocXw=BRE=n{M3k8MJI^|^ z>liAvNH~4&rcbh8{17R&JRw*8BDS>nkimq8 z5KOcJd(4B<*Pv)aeLPbjE!8L6X{|7uqV5$esV71C73>nrLw5b&F{AutQxkzx-W)$^ z&qiA`r2qT}FOndp>$cG@RJX|S@IjI>HQUyYrN1uuC4bOrPfToUgWrUO)T@4S4)5_z z_M9w53;b$;`^8ee;6AZ`P@v07%ZtV;ie#17%Kwnm-hhLaGfSxOGB}H{pVLEyS8T>ae(T*!u;=7Vklj z+$vBWn_~7g^lzl63lcat3}v5Q>%iQP zHO)<6lL_k?ojBLtzROp%@1AN5%At+ZlK+2THU^>L)-%11x#WtlMDCZ@u0Rjn2oD?06cxA_^Qd)`yHJzi>7`)? z^)X*3B!uu}Dzs!;ZKGlE+J0lD#QKN?fr)d)0*FJ`MU=)Rxrjj-bEb`r)Vazqj4$Hn z5Mb%z0d-Ekg96FS8gwVz4AN#25K`&_7R{Z>hvvjNOb(&1DwGfq0f2;<+-JK(@hdpaakj;Z^T8WJ43q4o~cRBc)+l{N3=Eh7^9S6Ept|+nHswo#J3_@K~_ZCTxn9R|>Cfok=D-^dMmT z2OaE`^GhbYAT2RYPOaKmAR1aPGaPZ8LREa`bjVhSzcC#Ptu!_KWLe%qqh~)O#P0H^ z;tztU?zrYoa8ATBI=PeG@aG!j@f(h`EIH;3T!xJpIo=K}SC{UrP;PDz#3alq9GXca zoyfo{P~&|!XJa5T8(qX{66i>(Dt5zFSkGt+M`HCt|dxcrxN`72a&4TWg6 z!3Zb;=7AQ0(GiDHg)B^A9((TVZ-I?Mwmm$o`GNNUzj~`_$BBsvv%`Ikuy8p}apM+- zmEVgPB}YPLvxq#+VcZ0=2{CfB8yPb7wx+(DQhthnjU%>>4~Jprn<2!m+s^q2LAFM3 zSlJjk^^Ejv#{8o1G#fvE$YPeYULwmZm*`kG!ZElP3shsZJdH;wV4iRTDcSJuW>!)` zruG|{kIyR&0)Zb$>6W+~^@N^{-#J9n88X z3<3{Y+anX602+CGh})jeP-T>XL>9Hb;pJUvzNq+yl4YyK% zY&~h%nH8M6-T(Ij_}qF~B`6FP_^{EJxux?qL=?BmD!d82Bd(?)u%41+TAADX6F*B0Gq0?YX z57B;Ypkqi#KUJ}f#Sy~apA!w78ww{*PlJbIv!uAvro%N_ z`Bw#a#)No;U`62@n?9@84Ra*36l!>>)%r#-U=wDs(dY_9f^=|1I27jh1Sbq$<75nC z;`Ut5R?$w$t>w5(3)Rx)$XHu0SaW8)&nxs1I+6r*aT`gbFo)?e_}b;xy08p7Ipb;^ zm$>V4hCnaqR5?nNgjO_ zxavnWoISE}2Tv#q|4=BKzM>t$=G{96C2_3evg@6-EG>KN zlMrtNuWThBGbY1jc6g;7Bu^og&WWVuGN1E*0K`B$zdWjN==wE0`nE@57&>C{D0IVs zT=LXVtkmEPPvBweJ2-vx?YJ=-MPFeQ@u-8*&N?u-7mt;4I5#qZnPL^K*|dLHv}K-`2g7dq6NUwDBnLtOw~^f4CbXlPf&aMkV|d@b_u|srFuri(yZC(W z6`U+xUobJX9qXHos%qwq=VYKPul3?i|3*9sQV_%VTtG zTuA0-=W=&UD@-Uk;MF}uvLG)xq$4s1j&^+@f!YW<|O_ue-`H}`G4kq{U{%9`^cHM;lST!XPy_2{0p}et#^WhRE*u_d z1fV6`BJ|}B9@vNR$w}P2If9XqG1O{u3HFX?zKIiAl{(^)7)--N&C0=(ix5KG4J_}h=*;O-Ru^0QyT-+t*^*tKgAi3AUm zujA&>5UyV3d9mSjuW=v*aQ9k^E_$Bd9QXlzvg_?Yy#R2wIX?;{I}pifct`dK-qCst zMXP|X=y)TP1IZ{iuX**|yjuv16bg zJ9q357UG9TM#aX5nVGpz(s2vER?Btq8A>N(D3(3B0$|%n#!MuWF|ia%sS)Zn%%}-3 zYQid1QJJj3vr@1MH!xTGDr$Rn!WKJP%ktoQ`!e8;``~RT61?%4On+|!jcUwT zX`CN-@cNn4x2WmnMbX~b@Xb-Y>n*)#^PYk;A4g}Z1>N0ksM<+Pl{%2CcA!{K!s6~) z9uluvXv-Gy=&n(`{V1@j<0-hs8BC3|VCcpT@!Py72us>34uk-1t2n<2<^Ed#WBBJ? z?*#-Pa{=7|aycNLp;c3$UJ={w(|QCS?|2v=?|LhKXY$MV^-G`MgxcM{h~7gV!@%*M z#o*h17Oi#!L`hMq=E1^2mj(AFg>&?TfpOglBog&~C z0gw7_^FVzVsEq-&62N6uHW61z3F5ef>ev`@cHzc&4*A*1#nsy~|FPruqgJdU^*jF+Q|q z&k`2Ac^n7<+~)CmQ%m}A>rwo6--n>N{CW|*MF3&cl6t*m=-oZQ%_3k|9gY z>mMMj!PatMxlIhBMyp*zm5)KdrY?0JqX2Rm@rMiB;?iFPJ9Z9W_ntu%3njepy_a$Q zdN`0OzN!24#0&^ z?EWM)ntt&n0V@Zw)08_;-5gM#0BYkvH4hM66TI<9@WvxiJs?-rakkWhtCugR>TLO) zyH9(%+i>;fO(b^j0<38m5f9P04cFA+8g-;vbLh?HV9a^2^!qTldqU1c>;#~tfJ_Nv z*OGYYmCM+-Z%+u|w!Bq0rvf2>+Z;Y`YAKI*9>Ql1{5&E?92V-RYYu9jgQ{IY)v2SN zpGIr6gsx-^My?KsGb81xYSuQ`W}fN3A3INc3NFE?(SqXSwBR2NRqj06hE!V=b)KT* zkExWzr7}Qn5_sT8e;0E%pGRr>@}}}UENpvmfZ$5~STl__eHpOK#f3bY`CS&I(PkL) zM+|752HlYFiCB{5$qk%WP)E*nVOMRqZWW}LPNmS-+Z_V9W%y0W<;?grTy$XHjtuTU zG=M8NCdKRAl8T}w702jw8Ks(r&Quab=qS}JOr4&D9_vG@CkD4`6k43RZIrwf0Gps~ zUP|6-7C_-AzYzft7x!$unD4}k*D9FZMiQz62lk;bpF`ikZd{oxqFPDfJ0~yT9lc$6 z;LyW3wAVoAg$cy_HMCT-m`d#g=5@G58{g84I6srYsh6Kdvg?O1TR4dw**XRW`Y|#x zx(xTjpnHh}8w%h!zBcEr_Y&K-@3UmgIDY%s$Kg00E>uQQw`yXWzB*Tq+tZV&1V+Yh zVm_Y5!ImCie%=Rh+zGa|$K&de1O^}euVI)e7>OCwlN$K5;9E}wzNb?5nxWjxuqbD24W47 z%;3411Z+ZAPJX!v&X|V=Wj&g+sPoKCPk=#j*L9&}PAMFh2WvG8^?D7HlT#QP8rhf! zya%X`4UfTyx8aHx!}0ri(UM8x#>gDnTT|%k%Aze}!YWswXA>xx5#((fiOCY&XGalj zi=w^9L!{k8UqX#~9%jl0zBb&AE0;OB+a4oREEYw3d%LI) zcjVS;Rh&I{P3)?@HdMv+vV}S81Wy0mVPtYH1_pN`ccPBdU)_bTRbN2q@gzp3M{(|q zgM)`&$2;Ef5MDa@3J&bw8v?j{;61tBBWx&uyItX7{Q7giavYqUy^3yg5QTgm2KV7> zngnKI4D%3)Mqrn#7@ZkIqC1A26kiofVvAN+lDZaK_kBxu9YrFu1DcUQG}Q}_2UPo_ z6Ix==jo0A08APITPlh-lh6hw9`SVbi)v)8lN6>fV!x%mDx9iW~km6mz0ScAbZG>>y zuQBax#bdDsoZ}Eq5JvFD2@Z{)($9;23FLT^q$a?b?KrR<8&<83TD>lo{K}OIYSlVQ z<&xNmTC3GiuUjJjUBRd=s-)w3m>Ri`SiBuqZ_Z-(jt+6s!lmm|!uDHdM+W&)1Qp$c zn@wPHdL9|mhBsb@RVX1-uwljs;5=y}#G!Rw52$kkgb&;Z;4DCQ0n>Bw)!_j=eQpL; zdHd{I-@9iw%t!>?T^$%1o5bbImtl$J1@6Dd<67k+I^6^=?z@iHU%P_c#tt0w_Th`x zS4GQxqW{Nm_WXo!Up#*XyLR@7WqjH*?CI{p#N^Z#wQyMMW^f<`aGSy9O)SIlTzqZx zEcWhe$3VITxk^dwm}3T;fJR9g^|AP?R4b@fs=~T`sZ>I}Ru}fU2>Fga7gV1I|$&@h`Tq9v0+I+I1+tD&VoiKPOY zffGMGpfFoNezt@|gL^PDI)~xm>o|6J4`OBvv2+wsGlJ=vnMOlA^UQPj;17NPxqMFQ z!i4~?!JB*0v9SPdYq7w#Xs<)vDcnDpMQ49X*prf#@`O$eCI2^PD!4K{kBg)8>r!71 zR6N4@YvX6}$$>|ZuuN1P%afw$JSHhlhXzl7Y}+>%s0FEuwe zkNtc1K;sVGN=@`-F8BBKbfZ`-iL+Bx#&WrglP{gZgAblSDw#xAM?0owW>s`}zsESR zu>kHKW7cXOhcojKa*4?hG}y^eD;*YHU9F~sMiTe^fw z9XP{Gpk5k7y*Q3U#{r?_M#XT~s))yoM0KH$G&5Yp%y1QEJPk7@hH4RSS1dUGGKAvG zdfhX7S`g_r;aYNuZ6RH$@UFtRagqEkUoN6LOO5LA+AI!m`I9|D^a}QSUGpVylyscM z$jJ7Q#B3H%wre?KBSWZ`OL+7hkD-5{Ppl5)=S$*5fr z2BSmwJ;Z?!z->Td?(Rt9_da$QKXj}IXfXj==EwzXLUH$+>jLqZkalGw9{$Cr?#H8t z+VQLZ&uN^WD6P3x0_b=il7@+MbE9}Zk;OYQJ29Qli*xoIP}fHqB4r^Q;9`*|oN5)b z#R+7(JE2`%xFc`Pm03eZ-ADkCmf5E-eF^4h4|F|(Xu22ao(KIJd%{R7fgGhQhS>yf z;+d%bM4NZ(d>JtVgP+=m^g~%pS8}L3G^@!?AIb1{$s@lG9Xg1%)>ae>C1HE8v$GwqymDsQysy4`1_S*A zICks^PM$o4Qdv%ZmrWc7-nASE0o*z_-A7OK;otqpAq=*~<&-d%5cbPpxN^HBw@zj= zKs$eFAXfl}rf8rDA9&XeeEUEil-(nW5-}CdSY?d zriN<04pY;?^HFt8hwV8ixOGfBWt^Hgi7!^K`UffBX=&@6j?-rjy?O-o@&szd5us!* z!Xi<$^gIa1m&9>dOgAVo)B&+%DhF(aIka!L&R67#7v~K8 z{T1Nr=PZoRQlCtIPqq_ZOw+{i`OI?3!mzuX10jH0#|HeseVzF1 zCypT+i$EMyN6J^^!aIw z^3c9DT(spzb0ASoN8NSs^@(%%F9+X-R?o!snF$o#I>zlHhO9hpSUF5OMHF2Nr;8() ztZnTvTAr1I8H=G-sYBCE@goap5@h!3HxbY5L@d=SY{WVB66)n)BwF`EH)8Mz;xq%5 z+!d5_*Vn+gm9uaMWAa!FEG|zMNikAb8s`&5dN@Ww@yqG{|LPyP}o}7-6qJ}dg7A{ZKFkj?%bNc}|vg+8;!}y6G z|0oiPgqWDtt7Sa(^vWQPdAMby1i@ynXr3y~oJAXm|w@z(&v_FGC{MZphlavT?8x#*%=4zlWC2s^{ zakAS6iWM2B*4v^HU}pzVvVfT~+IA)Ik3X~@|MD{{iPmpjX)mI|NSN>(X`pn}p2uI# zoxcWXlW#w9>5w~kilw;a6jsS4BQ(J}BaqOm0EH7e}NXC;_(s`CQG zW%?dMdF~2o`J1Shr;zDBj;{ND1bQ@ynM+?mW#)C{C(qxSNvn)a4Q8P4AWv-&%-ODk z@yQuvib=F~wjh~`A!iq1IW`6cdSON*xH&v7OL2hY``S?c`y9OT_8eGN$&R}=x!;}c z+WNnlDn2ix&)L={OntI;P*a% z9>v<~KT1!|UBSiL6xyP3B#kH{nvV11ep_GSq>57#yD#JCjwY8w9y&dr#aag8*=)|UgcX*M@Y>Gj<&!M=3y5-wl9B2MbyEWS`!-HOLc zFP+9u{=|=9=Z=1S@d;@QZaHq-wuNth``dW-*=L2m9R1v}8eaDn2e#Ji{yoCW?sOD~ zI}(^G)#0ury5|JZq*2{lJanl76w1J44hQ2N9^KP=i^MBOmFzmM%unOw^e|4%j^KJ} z7SxN2YX;(mfnls6|PH}M(@Q)iJ#w$K8^f=kn50<>|r zDy4GNe>2P^YK0M0^Fwf~5~i+vRW7G4$hme;sxJ*=APR>|;)?`mJX*=sTue{QqH?Va zW7vZ=Q4==yJh2l_mMc!ccyH@M%d%^)Qke5L98lnG@%=X0!sw6#8_ofq=s|mLs|9bA zsvS9U9}eBOAG-&4;H{55ghYb6)+=8$EIl_jC&~&=hF8uJ#@tOD2m#zWwALd7En=4x zg={fO(iVXZQ3NFctr;M0QXa5OshYGT&U93^PDJq7fwpDRtuClw)o`^ii!mrAygJhHDDqAP=Zf+S!qrjT_|)T9{vP$xC}Qy>72xEL#R`dvz|V>ou~7?O!3B4z}?{EPnu9(?flon;PF-IE*$ zmr&QCS>Lt0RTvA67zR>_nB2fX(UAaSK3?M)eW%Ce((0ZTZc~(Y;h2s;ZgL>FQ~7KU z??2pu|KqDyP!HOVTVs7GVVka&#E%lW?sx_>)e@@P^t@2JR>08N&!K1k2N6m1%iV*n z1<$DidQ?c?qEQnOgG%W|RC2Fl>gEfm=5MT#L(6AN4x|z7jG>nBbs81+rm;{Osp3&S zM0NsqYhr~wS1h1bt)jIxi|&qA%ty*7J2hzB2=RSwsJ*&?o65Wu~`mLJH*@j!1HmhHlV zj>~f{2Ky3-Ms1*OOQ~AX0xEP@fu~ErR5$Q|zZ=!ic{~D~**dJt1;l7Io>IKJgGctY z;^Ez`c<#zl3*B#|+I7dlaB2IT2e{I+Sk-xqoc$c)*+C?;`;ctijYu?uh+)Ifs;K5i zFgJS@rMV$g%InJ`)=7^U$n43&ivez&8$!6b&4X9)85guGRl|XKxy}tD*Bcu^>V6!<;Div|@ z(xuHVHY{(Oa$rLNoSOe`(`R3oYLzV)g}Q^5w1KHY9iuPb#D#1UJ9oC?Ku-dRLJ6qw zL}d*yX+qosULOZ$%fKVMQ7hW0ynY?!p=s31RkU;_(cYhw%X5~8o&>D`zj-g32C3w( ziC=Csjd;2no>KxhJJ{CR%&gogH{;nD;@LRrDHmSEgI98aiYt%oVduVu0)hY#hK5qL zjLJwAt%VG_Ix{GDIjDW075Nar-DxwdIvtnQh48y!MueNe<%R}zSpBMrh8aQ*gd7Mt zu+2CS;Xt!d7nLqIlKw{3do^_D%5}UxQ^&q+3Ngb&B5A;`RB-WJ3GP%HCw8ZSR73(d zL72NuJ)l?yzJ3<9Vja5YAZ;4ZT4Qi)7Erc;wgj$R%A+T-p%{BLkGkb)9jl1a+~zGm z*5_(4OFH8HNlaGf;ME){9c6Pa;s${MC3T2%p97cARRT@;r>b*^Pn6MyR_uD`ATE6| zkIL}!Hk?$>@V<5qELPZ-pE>{V`o)d6_F}@EAqPSZgdEs14rqrDAKsA989$)3I9(`~ z#KF<`Dv+~W4~M$ac(BU^ZTzT_n}c{n)3Coij)*WJvb2qhRa+d78srW67K!MnMoi4i zRd8vpidQD8h}=Tjvy}4P8zKkV2Krh0AndJ_tcaLfq+1jvyv;v>+Bs=-Cpksa4;Nk$E9>i<-H`O9AzW1nS%xUxe>P1VfUz*V z884q(neXsvspk;&(4=J@){4?G(IWEUnlzPPM#_^El-qx1l~3@X8Q0O#A-+Ef$f={W zxFb)gnKCuq9yiJOmz2=SPom08pKvp=S}kvEpyB=+kwV6aB-~u%=kcLFPtNn9y+HqB zOAL=&^RsfR3zN!ll~?)wbc_{r=;xBYUyi60b4qT#`cvo?vn&O#N8ov}#XFp?; zmd_(bs`Tov@`<|$WW7aYltbq6>*-fhagf=B+s`U_EUPEtWVruVC1R$ATa>JF_;<;Z zMS%+RnWcpcWS4*VeVL&6UytwP`O4O+iqH=Po} zSJiS*qtRS7YWcMwV=afDhviwU`vY1qR`QK!`+367SS+F=9?=(m+&29wH?Kg+!rP-& znXWPHFR36wLGTh3MNl(5NF(TGKIP|mrW$ve(tchbT#}NsWKrC};PEU5uw5e&$(aBE zAOJ~3K~#ML4LXV*?;N!Cq#=Qr0yT^7qAzhbvR^1q3lnrj9V8%7NR#m8{Jg@ z6mdR)Q*?p=j%VFUF0*V|2gwqa--r?JhLUKFw*WB$KPb0=UGR9evHzAUFsA^V$Oo@crldtu1Z)cEF}EwgPoo?k^eDfO z@G^}L;219c3Ebz`N9Cb3*ateoCCU*MZ+u5se&e}RJ_RW0XD1c^WxYgQ$sh${e46sx zr9e~g?#GCm3TJj1F8D>KqNjK)S|J!7q$4UI_|#0M=ruwlC{|woF56{Mpo(kMY5Dj@ zsL!*8KXil~*kTSusBpc}S8#^A(PeEmeSVOlh9-W?mc8hp^<~rCCNMa_+$QNg5-mol zJ9ri~fG?BOT^J`QilAn=9Pp(-=q9y>pV6jNdE9szAlUJI~{k z1ET;teu09t59B16@i$H|jDx99MC2iuQov2!eXu3-a)=a&OQe&|Cg>tTl2hf&JdAh6 zDR4YZSC%952uP>W%ZxIApzPHFI8E|R)LB4G3CP6rt1^lC6o6Cpk!>9WbL0ed+=3S; zj_Trb2*Bfcuq;aefZ#W2q126-LiRtEhjfIUL;+gpBOsBWM1m-RL?j^cMQTd`oJgWT zlV66S;R7WSXp|EGRRZJ)pwpDViSh-|61DMxkYA@a0N^B+k;47cT0+6J4fO*xAITbAx zc02#-N|UJrv=yk7SW|*70X0P$1zl2^RaCq?Tk|7_eN%g(;M;0dE=(#w_rt zq~Sf}K*)hj0Cn#d^A~y=3pdz4Z3%;Lk;}5dxqPkYw|`?62n#Vj|dFX z2)Y>=^vi5=z*FJNg~@ypjQ9i^bVTzBX_ZLTXgeWE@(WZnc^CCp;Kc_k@|k4cU_BIA zg69JzSvgV@sKSRuzFURKe8IoX^5mu?k`c@MqFky#uaHK@_My!t{vOogZx(BP-+&T=Gk% z@;7JtOvFJ^&~BtvyJ1B@BVJHe1Cl6MF1s}IldfFC5!y|nIH4WnS3T%fbr3@h9M=_t zh)gKfzhwP|K8%M{QpdhMZLn=Fr7>PLgH%xFlF-ln+|S{QU;H8_CnsS>c!EP9jq4$m zieqeS4%e=a!1VRxBoI_fKwJnTY36GVWU?Y+@yD+dqy1&eB|ui@Z6@3dmulBHP}U+6 zO>fh+fcm0f>0K1a41ploTbjqCsXVd|%l;sTW!Z-qPjDdqi9}LgPJ|0^C)0^uRo*%4cL<7S>%nh?pyIp;hJ;7(j)o14VfE!~9;vo+Ow0 zyj_Ji4)p+;RYq;=TS)4|dqky6E3wr+KOOg~hMf4KCOx(yS%kbN% z;ZgMyi5qE~Stb2ua_MiRZg~CHY4{r{|=Tpw=+@MRE+` zpw^%%K1V7YU`7lS%MMPxIx1sC9TYP1U{gm$GmuQCVB53?tK!IEDLsfp4D|K(psh8F zVxfR&l=k2x(Bo%>gGVZrfT0&qDO<3kIyJE6kSdgInU`UctNkC;N}``8^FfVVb}3K*Uj6<>!!_T@;X$IaQqMgEEgSnQmU{F5G^l zR4a?S=uR?3_8bn}>@U>glM@j79Rb*=za@biL)f!a9+8%DGI!vw=&|d?);p$?N~HuZ zgBi#tswCXFvA!pD1j`8BAqPSZgdEsR4s4+goIj!jo|Ye3b#Z2%$z;&p-i}J868Ipi zG|JYN@-wGDWN}PlaDbjfTr!-XiG!l+IwA=brPXqa$mk0*L|w%A)+~dAn;i0*cU5Ou zDAm1nM9sLsip^QNUtcj5Cj|-AT!O3yQAwEt4FOy%78O?g>6aTB76LeiQMq22Vc@g! zIfOX^wan`;%LuY+Cu_6zN-`(wFTI@|LcU^5jSv3Vs?p(grZq=1&lGWl9E<4#u$-?lE1MAL#Edp>$ zKQ3y}kxwY&`7yL@OMFP>2We40;SGibs4R%{)A%o1LM*LFeHac}mhA{hm|QxQJO9*< zzhybT%*QcU3vNV{OG$oiMyhXOFrg0wRFo=JL~MoTPj&#|m(E40n|XpoG?MyVDd<<}2$Xf90@+DV0x^sQjv4TXB~IsvKBZzL@OX;Q&kB)85`*0Y+9^cbflMFmYTh z0j6K(`*Npbynsm*LF!I3`stQV;O?9N^K!DeR`AHWQ}yJ|FV*8D%Ph+llk#Qz{_Tir zfNj}60Bq8|T{gxuH77XrT77A99<3LNV03sGV`F1W;{zedR0_Ly@0KBV*jJgD{I1pO za-0m%yJM%OiM$S1y4KM5*zWb3w3B(qWd;&5zinB~mo*S~TchRXK!ioiNp+ z0D;(vaYr=xL8iG8F{s>8j_sL9waRL1w{USFf9Cv!Ly*RedOHCJ8b+-25_r>#K2=Lmv^}^HNY*6#&=lGmH5g7FJ+*}|BWs!I?gQ!dl{M0fBP z(HjI-?h%bn(@3ivGA0-wbO*cM!tiGPg>X%U2k*=045rw6_pJsp3!^(G6J50wCiaY0ZOZ zHOr9UO}~%Q0s($QF3q|y&9Xjbx`U3gY~F=|D^Xf0d|~eG=i`9N$sd6j-Rh?R8wU`& zmA)?1aZq3wXZOiuQut{WNL{4Ccy$+20AGs3yeeFkCH#ibkg}^Z!Mmcprsh|f!~3@3 zfa*tVAAGb=U;(6zFtF(*DQh67LE5D+t{Hwjc(fq3|?_NnSEg@{m(=6?P!2wMT zTuZC6WXST9NP4Q_rT!YfZ3IujxMsPGt7$IoLpwfR*o7ac@4!H;6>fwd%fJk2(F{nH z!GcLX=w}#9Py$q0n*Uc7z3j`!dM-a$GC5~##bObTbEl%=mH4!jqbr9jU!RrJhcS)z zR&CvYWh$V7)C9BG=T%ITdyB&S8J&z*spWmyuGA#7g6sC}s!Cabz%s!La|C@s_ri>R z%*qKCCVvAyzN5jP*nHs+T&p2VP}SDjioU)+akgqa784+j5(9!VmSILBc<{st@cdO? z*=XDl}Gu*`|3H+6g#ax z?<#UE{iHO8ED;rq54vUNTU=1FRFZ4fl&Gm$vCB=E(r^1`6LKdfRSDQp7-yS0_PQOxU`)vHE zFTTX{EgEgb(*z%HK_>r2^It%2WJqUHqP)gSv49=YLvjm(7tmbUvz9z7Q+xBoEZckm zj24WiTXun9sG9k*hsd`;brX@^pAanM=%V}!BYhuRR4!FYsxnxHE}LQ5K$dj-z9Dx* z2MOFhPcZf7xEBm4YXEPoC23H)#v=zQEjxbvIHsqjFfcG6K-R^J7cnwAD!>}S)!{>j z5R1pr+0h}SanHZ-0{VJ;aqZeQVVAD2r$+#_p_@0cfB$~u=H`%2r*ZP+N%Zve2py}V&j z5|fBpO#ne|khpN+0`9;6e$l5-pFS;hJsn3(LTL4YeeveaoAN>UVe&j-34(oE8%$U16J25pqg=)Ek*7kNp%_yd)r$l)dFI~YGzxWmCx;*lVH5Fq;b|HVp?4V$G#a)c zNn0G!=-&-#9DB3+CrK{OBl4{XB!9oOEQSqm3zXSil*sy{!$$jvf{Lg5y}JSQLGXfbX2^qPM3<^fdxHrln+z zTw=c=AUuBT7~;t!CdbExaz23|2Q`8__TiRn7MWBE9O*u9Sq1n>mt1 zY-$82j0jv$LqyY2f{nA6&cJgItpTX98Z5v0YRh2af?p<`V+ zuv}BB<$4Lxn#BpY)@-0aM3V|#vMV$pp8{Dbq?wu|7Wx*3EQ({7SQON(gmNwIH_ecy ztMM{6f=IaGQN&gV3q)^{lLHYCs270ES9y^BrIN$jRf<c5V**4sf>^rTM)fsPWjih4{;@cPJzkc@C3jrq%~FP}PvY)gw6Y_D9o zB0wL@yfHK+!l~3w^AovzUVySvsU!wJrlHhr=*A5Y5R&G_3l{{KWL$U!IiULLZC{9B zrY(1KOd&Amoo!6%8>PXV6c9AAKXQ4Wz@8E^0x_B_*|U4Mm@p7foqqLIJp9l@7@>5m zS{1aIj*?tXHkh9i1)fq8jmL!~uD`!uEdBTQ_TrgmpB0l1F8@DHtq|=z3 zo)$b}o!GxQPICF5lEYHDjKN)lqQBG6carZ1C3ciZb5b%jJuQIX(IZDd6Eb{`uA`4$^A@&kTH+9r# zKfc{e0j-0$uaZGc^YBb!8sB>E6}Zp1FnBTp1%Eza3Cd{jm!L`<5Gmt42tQ?9?3^)W zeneGh@txIHMEy7+A6pc*I2(7O>J9MbOZFBek^n#jDuRpes(2Ny(uemu<$&yY&HlQ) zU&1&M=O^Wj{ZssFNYkWWAuK;>quVl8T#d$6DHs}bH*2p#)x8-Lbg})JqS+6EE`DSi zSHRf_TaYsty8YaI7D}@DlNTRog@?LD_4y6pfJqQV5XWU64uA}wn3xa)4hJO;KKvG( zyKq4alw8(i8X6U5`m?XU-WZ&eM4j>caqwh14y5$+V*M2jmaPUhmZjn;vEVWmm%g}s z%RyP5*dmgIf0l3{*#5VEQ<4VyS6_Qgv^_x*_2CGNx;s0?@_B1Ei}M#Q zh!v>O(NWR=2ez4DM>zpuznm`=Fq_MX<Ntf7Dik>H^0C5{;NZs3?#AKv*N)?Hp^# zb32-MXS{6ZW@|V6jjpCb{4|YC2=uEkKD+e$A%6Gp!$ex=AW!M@5QuSb;{bfSOVL&7l%K$Gxr^~i$BE4xg16ImG#Wf{a&Z|el4QaaBLn5BJ*mwxv|%4LkZL6-J2sD2`pQ?nDgc}s z97NHgt_v$HYqT&-(q@bbZ{C$_rSik@JK#V7I0btI-O{gsmx67_w3T-xXuKh^!eI)%XPIk0NTI< z^i~>CBt?xzBdzpFANK4o*k7<8cK?gckzJkH(P~FCBXLHehN1xp5SD1Px7FpVUY~x? zb0Z=%-!ecq2yu5fsO~p2%#9n75jP@k+_-V$!)Qp-8Swv)-cs(`sW_QTDlYYjN+tb~ z+_QYNI_0jKL)CE|87D4j*Mm_4MihrdN%=IQy1T?J?NIt=9Gv*fUzt|Jv+VL$s|)%S zjVYJxE-0YG%~ndBHfed-2S~kWAoFpxFmcxF-oPAM6B^Gi^>x@s{Zb2XWM(Dp0m2j! zP|?_Il5&oqZLoa|KjG_Xj9VyGONhzb8CoGOO5k{c+Q3r!N2wa6$8yN8)}HmeXG>N2 z_LrfGsa!RZsRBQBeP|8*3ovj8^OM1%?6il)GfV@R0mt~wBq9Vuj$Lhuh%~~o71uA< zfb!NzqbqhWj|!a{y1at0wORO(BxRXQ+&&ZcRkyEP22@7-`Zw1I-bgSiSmjb%D~5~< zOeT?>p5?cyD`u2_TvR3%^J?ul=EbkL0`4DWsLQ(aGB-zyc%3V%~I?jYj zB}f<{s&sUzp9)uT`{S#)I(%8NrKC@VnAH2 z)S^tDgm67qBqc%}wn@VjW^7Zbg)%sNSt?w$xqfmowk^@6&C*2Ll82%w6*P9m*}lZV zaV4%>p*H}Ah)lDRUb#!baNZSY;-x}sp4!KmP}ZUA+Db~Jh)ZZmt{apCS_V?Lj`r42 zeQ2}oOI?;o!iDcv^=N27zM=MA)zDne(aa5pVgJzLNTkW@qalxgU{NS=&I3#A z-UqWUc0Y>!(Z(;RYgK8&k9vQC4BX)#poplReI3rY_1k#$*RtwJh*Y5Lw0R(br)AXF z#c?DD6y|&L;7Ob9?JY!8GCXFWE0H~J-BpD=q|H?1!H9z)NAwp#KxqE>XWq)m4n%VS zEHzKU@*o36*J+l@0Nm@$!LoQtXesP1el*0#$yPCN5q5TWWQLIWBnQUB5vJpzj7jXPa2%OfS&*=PQrl?zt;vD4l*xA>`ajO5&FpvZa-W_k=pPw4_@p8 zsSk^0mSP)LoTG>`SaAv~$>9jo%DW#`+Z(bf=|C!3eHV3#`R6#?f)0d96-GhB9V3u%oX=_s0W$=s8XCml*1DP~UU zQ$9_N5Xvl9CK5U>U|2@BBh%Q0(%U1m&UC}EDp%QdGWL<-R3>@YKIYDG)-%)aC+)`V zRN~Gv?vcqt!!#Z1kaaAyB+aJO6xbpn1fiq05RsN*bE_tkCSbXxorMf|YMa3oK;32X z5ehQROlU(wBzK`F>e*Y!7{LWp&K*D2JM$7CU0O|GI#0f&EHwPhf|$G1YkAd*R+13w z@e^X;s?RO4OLge*GP-n>l~r~SRfDxuI!0C)4(1mYWX1oBgu4I$AOJ~3K~yV+)(XFm zR#(w%wuH%X9T(GLTF?F?+_Pn=`;Jbiw^3@qbeeiL!O|EcNE2}gLdp>p390n#fD}{n zaWbeWKU<=5(PQ9L`ApobPa|UE z9%$f-`b@M8iZc{c#+1no8k4$CAttUKHtRkt)hxs(;bS?-8?hhp&A*Rp$d_r^CLCBf z=!^8j(gQw+17T8Bt+P!;sw6pba#9l#$0l_cNyEuy3W|v{_!U!EAW0%5sRery!F4Ba zeHT3WPBTcBSkD6tMX{=^YT?OQ;RCkd|R2~UaBO~JsO-miISLn1-y{3*?5zbKQ+bGfuVZ+7d#uj`Rc;@_B9P6#X@q83E zH%kkVz*@*rz!oN7nEkMUR%Z_Lb3JrJAAxVfGH4>;cmlCl=-~8t-8eO%YFGjCrSUN=acV^E4S9mdWLU!u82N%Af7H2s{@- zz+Zq~x1;JV&#=^MirvE`&Ey~=axQpWw3;nUro4wVLo;mR;pR5_lQFo?L8jV8m`8TR zBA0`YT+6UL+#+UKWMSkeW}9=W8h>R=4`AQ6Y}KdPw><~8AHWKI*ntZ>^ic!_;3kMM zK^#oba3@$u5;W5S!@$PF%!55{Axv6u699ZbgTD_>V!=*wSqvei1V58HD2fbeo+D3V z`Bt)hTmVULkj}1zS^N&|1+N1A1Q@u31k4sGJ6{=HI`phkhpES@)bg}#__9Yo#ofEN zW$@rhF#fS)a5ZxO{#~^?GfKQN2pAmfd}>mZM3Rlk%e+-_RC!JBG@ZW&W4>uNNYJWB z72!G}`&J!Z1`$2@lw*M!5xA0;@rT^HZDVI=OIA_*Hd7uB?3BpexqSni2&l};%aJ*# zaAj_kr5T{Gs?yZmwL*UC{FpURwrD30(WunKKn{1`A@CaqILd z%wVfbTF&(0{+{Kj_pTVxR4nN(&%l9%|{09s7uUXjiC)m80;N7zkt~MgX zdu;?9YAqj>bXf(*9HDAu@SNYQC&mIsBFAdu*rooA^vis|>IFK|He(!_1;fNC=}Xyl zq`owK`7$-60t`b|!&X8{U8~wC!%Uwl1B}BIn()lRbl>u8RG9Ia{%Vr*EhRgA>ZpS~ zmYZ_`Kfgg{!S-Ogj;Pe|ROwuI4s-K848|jD(hzj31uqPdW)Z@G#@`#5KY0ppJdt8i z0?K)lOp-Jy4bW3k8wPNL1{z^Qm_*NaWUJeAlrmDuV2k8eoyJBAglU0JwH*MQ)Fo@rbNp=CDls0s7}@^$^Lje`9&GH8r9dxQgw4p@Dg5!Q|@|5m9$JLiKo*Tqwz#O zs3;~igsO+J6IElfnjm%G(|uRvA_J|orWOm=hM6iywPKcpB@&j*l$4FH7(!KEh7-^X zS(TeSCYi1}Bc{?QXnFEVl-z^k1h9Aw3CO7Bh!f&r1L;XX^0ZN;1*U~EU%)aE_c%&1 z8q>Cq%Dc*=?wXC8_0{1%b=PY^wYq709U~(e-F2!_%$I_wrP6~3LnO3Br5zHl;)u;e zE7vTur!mOOz?ET=ah0Co0#gARGSwfUUWyLPQw<388Tw$KDczDpv2`lY#LS@F=lL+0 z{c-#K`%rxhFEN@Qlgsyf%xqYdl)fpZEtBohjDxB$Vumjy6Q}yD+Ey~#GMWGk?dSoE zIOQkzrCK6!SNw_^qqx~+*{*CI5g*5f$!LVpke2sdwAw8+8p@uW?wtg^jdG zkWvB^rWj3zxV?HGFQ0u$NeaRVKIaDb#&?%68AR~90Xl2jIPuS8ocmykr(PZ69~Tnr z?G^}%F03q&3DC+ZI#g06ZWa}pVxQFTldBIBhM6?T%2q@uPtC;EDOH-4{XiyG-AER< zEp<{sQE$arLNN75oN61iYGB6EXBJMgDa)cA2$ldXab^1!meM;GHeD~QrM!ovESvZv z&>xcYKoHxUH~c(*=@RZeTtk$^7!L;s8X=Zfj)6?j*47TLzB(z&?O;j;WgDMc@O}W#3t@Y%!Bq=EmtK?cWmm0x>{OJ+H++=MMe^ig>f`Se`|u6ZQAe< zEY6{KatVGjMC1(+HFoio-NzSyJi^MG8Hybs$qE#X1vkm@!Ut0X-`T)-FW87CWT1s= z;UI%U3AQW(h2r&izy+T&oGdh_X-O7qdTDJ`P}!EhfCNrudVumCBcLiSOK0$yu1!C$ z#B%ZQ;Tl#Su9q;Xq^@mcXRf7i8(9bLh!}W=R z<=%Xm2T^E!jr4tgx8D4*zR@XUGQXhs*q?DpLa8R_$ zP7JQIwO?`Hm1IHud8SVtRfAX61SV|%yMp-C_0ct;D75}mX{uJ&BqWq8Gm@Hwv|mw@ zc@kFrD^u;8+(=qgZiH2noCy=ZF1Cs_-=H9j@9?*wg*vSglHpa{OxhYVXCUQ$1o%wa z{hp7LWLwODkA9xrFg(g59+} zEdTR1x}P25->vLooICI{2X^iQxst>wX(Q`|k^v=&$oN|8 z9Ne7MX*iSB>bz_>b_Pv=Qn|`6qrDk}iB;Tn1T|cT1kd)H8myE?C14vHIB`j^Ms^6! zSuBR$>hD>I5A$)%r;WDfo_$87U01K&#A>{T=bm{MHXLkiKce6j?RE#vChtq7E~JH5 zUwK}p)JZfEok{9VGLBpE#K$`3#P2)4NS_?f6RDS(*HY4~TuVv&44ex|(2AiWGsLFw zJqK2^4XfS4jrZR}e|r-Pa}D&CRuC0H_taC;X56aH>=>D!qDXVmB|(N;vohplKJ~apdM88vF&Vg{sn-yE z)fo+}d6R6lyX=4_l?hicMlXb;o%*NyI%$fa(&y`VRhM9hIfEnOe?6cGkqS5;dO*<~ zzs|g|d}cpfQ9SW-$WRlh74P=98is7gQ=LqGj{vKo*kH8g6HmP}Piy%HldvCl=y5*ktzQzkI< zW2jl)GD#>9l9Y*~ODJw8Ov6>Zq0E^httz(!RgXgmpdKX43Ozq63Yt|8Rzr7{!nn+v z8L4ztmXG7Ar+*yyCxwykk{+c#j@?YwLr;oG`aJtRWn!Gmlr9l_9qmX8b0+;($(&Su zs;@Kf(k`MCrgU2c5!;I^XigrYOHL`AQZi>t@^om|b@0W@=g??}c;m(+45krUVS;fG zpg)cMw8tRL=1IJayXLAeJ@y?+_!^y#+uu9rS7kYZ zAWY;8?itTaLKcfOCSRdC@=W}bdemfY%o5cvQes__~wJi9bho$ER5Kb?1BfODEV_y@L&>!N_Ji`(v<9xAFwltbyb{(h(JLs8|gn;kvtVFwj3Wb+OaS+Dm&Cqa|1+T}`?s;{#_u z)p+ujj>UYKj!`PUN-yALyecOL0+~h4*Qr9Ar*w2a_W!9V#Dp3~jec=c9IsFOu;X*} zq%GQIbaJ(P%_59}}nYP-%opr4T9={X*nAOkPJmRO{DiK&D3x zUk_J7W$eKynfMIU>|3KNUsdADRYqz@nbZD=U&yc5K_!DFi=ml*@?_}QtdtH=C&exb zB=HoSVAMjg>Vxt%(vel$$+#m#pvDksTN$QE5v-M5R@<(vZFN!SCCSiq9Lxs+I=+hw z%M0)_;0HI9#Gd08ZG8n!jBy+xPIK8t+uPj}1#^FQfX4hBy2}foM*BF8(Q60T8}A@> zhL~%OkZxxf4IEg!$UJpryOkzPJl8|m3DAy?<9DJKuAbe&o1+MJ63|jG?94{P_0VX$ zXxc79%aJXz;c$TAcqChWoPas+i&Rc_HWZbsT@LmM%@yb>QWU_tP?XMkk)hd)xEfAc zOx!9!ExPx&V~x`4>7+btCk@Xy6K}%yqcZXP!}s}3Ki1QPo^$j!?t}ekZ&eu16Z3QP z==Bzbd7JCB@z%Rnar53IoOaceGG;J z^fw=2d0_$VrQ>iKEi^lAG@300jRyQih|s5QWmC2u9gioUGdbZZ?VzVgO4K;ha9-kR z4p20)|Lg~tU>=%Vl)SPh^E6KsdO zc-9)=`Mp2?FMJT)!wg=d$BX3Ji zRq*>WG66Cch|VJGiMoh|jhrIUoF`7X1Hi3pF8&nH{V^E0!%5IgDrKjr9A$#CKgc9! zg6lm=LDZi!X!L}qQmW2wut;w-W27Xi;Z+EAk1b1D>%j(#PQw@bQJK!fo41KDoz3_e zufpV6J~UkEH+an3h(HLSV9oPj5*4FT(p~o(e4oC5u^On_)41wyLqW2*&>59srJsWr zQyDrnZbepA7nlt<@Ftb=o2P!y&^g2Ef6B+FOpMA=2N1WS8cla)Y@L=Ww{fXOh{~^G zyL7C)45X4qD6~~rnawZ7!FvjG&p&zxf#c%Yb0=`B)4=V$6prn~ zcXIeNF){+CNrq`sAWkx*77qhPnCxz2kVUXs0i33bEJ!g-cQHx&SeZ_MH4D1~2X5}e z^&L_E=7BL9Wt9`Ji4FHggiGgKyxo|>n#8a?2Y%sTzR|*Bqm7>5#9Yvl6LougJJ{LT z!+1IoMy@}eAQs7vsz0ei)}!o(D03)mA7NsJ^HH=&eO}fNCv*NOYBqJsnO$wQs&G}$ z>d90`|4F;l&=9zUFC9mx-w$FIW+rdJ$4)JJk-99x$RCaK=orQMq`W0zcN_D|$8hS@ zDKxu1w7YXyUb&4yn&aWd8iJM&H?`yjg*a6@WYiO*M61ucy|WBS7UTIVFJN(D3AgUv z!ur}nctI%AD9882M2XLX489LPXuu6UxdO}g0(D}P`ed%U)j^~_zK^y0ck%GvZLFL; zf#qY1*j#@IE9|1*A7DHjB8eu_R4hjl^8|7R&sH`L*%mxG%BwA91thwoxk8f>GCu-5K_f~_8Id`PMT7OK1$fHxJ}Fh9YDnG+9Cs0&3W`D zDRPYB3A)V|&OUtxKYZIQxwj~b}zSh)$&IP zuVgVp(zsAi-PYAm-&^^|I+*4kT5HO$qd ztXv9*Dp3_{h}@L)KoLwt?OjV<3q8uoT6wY*M`8Na2|t`tOz14broNhS@+-+j(c;Wg z7A6YPFolL*6`WxP4NjG#dYamu^*wIORd8x(B$KAXNbgE@mN}SEFHW4sSjPQcno zgIx6FhLae+TOjf>#6^zSc9HrHWTz7eT(`jXcpY{-L&qKC@}m@ZH^4aJ1em~yc>0j1 zTxmwam&q@kX4s2%5boyiyaaHkpkyX=8)!FdG(y@B%VBxBD6=1PdpN$(L7pTSPsZ5X z>tk(qgx$de6CUWI$bj2*d{erhw;NecqSr%8;+Cv1aBL`65GzzMbQPtk@Yw~BASuV` z8Cue)On)+Qn%5HVez$><>}%ah^=}iaBg($3`lzt;L|98_Qas69zOu-%_GkkcPkqkK ziRlnIbkObMIwfx&w-u+@-r7Z@)xfFwo|x|#Os7buF_I+1cs#^QFFuP_tAn@Sc?VA5 zAoK%~W>JC+Uei^KFvONfdr0T1aad!H(vPEEH@O~;2O+3S=O7vm;rKiN;UeDK#@fyv zERT9@+Zc@pNRvp}EtH)kg;I3FMKr6VlWHf*R26j$bPcK9R3(WMWhkW(#r{PJ6s2zE zY^>*IwL3+UQ4&1IrKuE44ior(0RAWeY%`^2A=TG*alu2nzi|Ep-nn%h@7}o%uN%T^ zdhi48ty)NtP-F(TW5GUd;VYJh({BS)3vi2EOn;5CG5jDDRfcF9W6=1QYwSst(E!4v) za(~A-NTep6ej9JeQkih|E~D84X8J)nl}YDT`5I`xO*~7$g!MQTq{^o8nrH!6o{}ic z_%ZV_Dv(5{I`RADqv^%ksEHpWFlE^({C zeO?V|u$Y9Oz8|*+YE7+IM@*^cPSK-Ko{Zg!5i>Md!R*&-Gh@9#=*gf=Rht}CK2=E# z#hQ?M*-RLxzG~uAp@xY*{GR(yc0GSRlYy2KFhR7IU#xKd1{gW-LXoR&St)m%0 zG1r|XSZMg@_yJBW_wc#rpGGpB;KB9)V=v{(*^p;o^UBZ^W)X@-7G zg(HiHMP>UG4GVb~V>8`GJ0Ia24}r!1=3sMe0>9%UC@6LDMPfrm@|33|ut9sm%`ZAL=KWG2gM#j#Jk!(pr{Rip2oCb7*mt(giQ|+Og zs+~2MddXfMol+p3k7m$I#1#&ON0sI9v3CahM|y~9GMQj~V++G+g6_f`!fqD}oi?7C zZ((k05vva$puI4U7oUF#n-5p<-M{|_WYb4tZsU~~p2fYpw{i2)Oh+Mt9nPtSKBgX{Ni;kBQ?fhdUJHpsZ8NbMMw@4^dgq5ZU# z;aGQy%kN}Jwk+6fRgYN`gCSk16@b8rDvEm0hA75QG#<7)6+pQo@X%9*t{eRH!kBwTw!1lBZ5vFUF_t53K=1 z6$BEu&{*jc%B^533L`Lm@~_5-F_Z(3i6d=ss#lC0-HcJIce*OSKuB2?gf7oah*tea>S*+kJJtugqx^((#d)Hu7HOEy&yotbRVCZ{rs8Ak+GSN+WTf%Up7%)m7sI$|^5x1u39vkAfHzHj8 zo`vzY1%x*2WD3`H5QHAu?UvY=qj`!bPk;{Kd@jVupCIo?>NW*Gg&P(K+b(?g7;X&E z?@vI^Y->10+iwUpXNfwUO6i8(@G<8&2)UJK6|#jj$r3qHONLfXvC@78nK;p)S2aXx zSBJRt1g}r=8d{-3Jg;1H!pcIz6 zTpSC9NfXIG#~dnlE4zZSg-SY*1AY+ZQQBI>*Q|7c>H~l5S)wn_`X>X)ZBrW#Z=&#A z}GM5TsQgeg(I*yNwV&+2@S*Co@cVi;CFMOJ!bp3G z)B{8~OUR6_!zy<@WHx>lotdOe=#0Naq8K{^quwST4J4g()?Fqq6Eej7bVrtS2B7Sb zCP2TdaMej=V_L;YCW@#eK;}RCRhT?=wCX!1j+k^r`QDeUL0G;Gyn+*78AONq9fs#% zSecYj{EnG`gYduFA<~csK5-^gGj%FVEiOo}GcX#1A}bwJlCN@9@G5PIp~Sx*LLsd} z4-|7IfN&q$lrxc)r*c*4>tQpQJcj2NN&6V+4}#FhxBL{}#ILaBTC0y=64s?+sTD&` zqq;tgj@mXx{h^pX;I%(;a$akqI#8p+n?&R~SlC&QSEUARswgqLPA&~tle!Y$ZlfMhsEnoog7hO9L~ zusFbPZ^U@^yEdW`kbBBz9i5aw3{?(wmAY z2~by#zc>SI)?p4RzKg_CH(5#ZX3I>E-&|@t=8zXVn`|xB#%0q7r0P` zJL@~RfAgNSYh$j1g@pwSq6x0vzKi3F%jiE^$D{kJnCmv+4X2pv^$>cVoZOTfLU>Y` zBL$ga)(m+$S#VT!L{bht-tLjg^=!)vbC_#)arMq!X*wQiutOJ1r%&P7%1PurL7K+s zZ*O5b8p$ ze)5BIAt;E~VHmhQ&5E#`oYK&yl$~{4hqtPSGOM z=lh7V7*QIF6!=mj!==pv(OQOh5+NP&1ZgIcx87VA{ozEIzGgGTXf%?;9IC!D6w?gN zM^%VE338fAaml2riWkWw7xK2H4hy+FXRK^2Qpzu8x*c2UQ%;i`oXYiFh;!!Sz) z0=X}cVRa03cRhC%UW49GlSd`2Bl(wfbF5*R%r>gzRV(ik<}C*i*pB5G#_?Q9NF3U9 za$PyiN#2VJ(q(pPT2$LYJc-ANNH-*nnu?JHF*K@#PaORt*)}Q=r75;YWSCMk0w438 zHcriVAa3N7%%>lgUOgiytG7% z^EIVf!q`IYkxoW27S34cUygCLQ{d*Fi`78^J9b4R6Xn#a8en&nAd7q?BP#OPa8f{Y zvvZzKBtw-d69~NW$nr$#+O|^JTH}EVx8WdcdPs+y2on?u?~+xtU+}Vvl%^+Wu7Y*W ztv#95OB$9cWLxN)Y@`=4P({d#lNreo@RUdkvYf z4zGC33rxgJMu<~O^SJlu5qA3{(VrBlGf#f<@Jbx3g95zfiiZlQzm?_4X@`!@B(~U8 z4HZ<#XP|TrRiy>q|G&pR_!i+Z+kWr$2JZ_cp>M${nLJ3^J z#RIRra$$uIa=$?CBv?A$h2@NKd;LB(ynC2CKESKv37*=p(A~0WG7-sqjKMJr8(kZN z!oo?~W=$rDiwu75q1_Cmt!apuj4%1q>12%g`FSz#lO{2S{Q<&e69x5DZ%4?N3rwdj z8d<2VJMwg`t^?d6oZ>Fb?Q0@SqqsVCk_;9qEtAlr=$?# zBIYU)U3GsAvx<@aGmEE6ZD@No)hFR&w)LNsKr2&!T>RzauB9uSSJ?es%a$J{V3cT? zKT0vgS5Oy*p}gGMsAj0vlG+plo@zK^>xxv)DiBW-tZ!^%G>x!3j&O2u0bl#lE4Y9A zKJIM}vDP19XK#q6&#heAB`CxmSK)d{8ZKf^n%)G*7j1m)doJug-~`G9ia!50(*Tra zbX#*cd*wL(qkj+o_3jXU=p)@tVWm9S;Db{nC-XcVp-5ub@MWtCnX5>L>T))f%&Fc% zO?28`VMS4H!0U;~?9m371uvile438Pk&P)4w8RdV45?zOC0EiQ(FvlxJu-v516oPB zq@Fc>nOZlh3Z@O%Aqh_fcj=s}+EqW5$P)4p2h*rV*2(lTr~=hIVioWSx+sC6S&Tb3 zZ{x)2)1dt}r_sdF$}vbHj0OWt8bIbQVlG_9!b%UVpov!4#JwALvADc|d@{v=CS>O4 zFdPig=+2AMy>F-R9AKJfB7JRl+Hz8qw>nUGB@#_C3DS-Qe21r$UAgrqEi#;4S;BBQ z#=W&IxU2+9yLtL~I>x;l*D&H0Sy_hu<|f9Yv7AiiUAT@&OI>xn9O;1)Kc1xKDOZPE zwAF5goKU4WP9JKa-YIeNFB5~iN|McOSemU7`MBf5^+FVmhur5~r5^Gouf1|%HEbk7 zjL4g!G3NqHeeCq_!VB) zxcqe+i$5$-?0RsU9$KBIKnA@z$bDzU>t{6^R-o2 z^(_Qp2d^VgLy0^YCqsBO#feM8nMTbrCWVSqxteFm{OQtE^+M<>rOBsWl26@FUIVPr zdUJARDi;b<(HsRl%N2@X6DCEBzz#HpFxAmN-R%U{KoMR#VwutmUJ|46s*b8cj`$u$ z1~ZY&&(H_m+-9Ic8pE7sQ}~Q4{}^Lv zQgscc7bWQ$OzHd=btwH%N?(k`nr&v>Pn@;p8Q6BEW+FXekBO^gOIG|;<6@uXI3%~I z$abH~P3oF)WnZo+LDie`2Rt2@7RY(wHBZ#JO8PL@3J^NLT)T>cHiH(DX-5o@ z<`Z=bLn_-^oHf)&mPJzyMIu`{EWe%GqQ}RrH-5HU-9$sGfg>mSoR$NxYr*T}uv-~A zb3W$7C5*N$tlsS-Pkc1pCTOW4i(*W7b`k9kk&LKYl*4z)z>y9~ikgBsxz`Re@T+Dz zu!2@hpLVO4K$ftzW}1QGq^Vk^7Oa!jLd0q2nX<1Q0k=QhQGU`8&4Rpj{SNjwXLyFjZz)EHsX8o+Oi@YH+* zXC?{!dmBi8xDC8pz}gECb34}K-J_}88%tYt*`pNkc8bmU0@ocMJ=WJ3nwXp)V&Nb9 z=-tSWO+7T{LeQYFXJ;7qx5UIx?7Enr?;wjt$SFzR%di+H*mD!vrjBw8o*ep+p+vq% z%!JU!qgK%%&5M*$GjQ~i@ul>Um2m_EcNAG27JiUYRfrBRDO+`hs@D*g2~%!)3j9Hw zb?6eM!64vOnmSgMpNZq!xJ~Z0(V3Z;)f(N0{gF}yg~p@iEE!b9Sv@4Risn)wY~j*VmvR05tD^87z=t|7#ruw_jH(zfLv0nk&N69= z0!gj)g^DCsIP|lkSQS^%w_%y8H2Ymte5HwjuYK#+(BB*2r{8}~wn{kY$<;MT;5#0o zERk|h=Z1{yXTI<`%r7tC2mkPW^hX039M4=hE4p55YwLLN`IqtTTkl{BuB^EMQ$H~# zn;-Z$|N3|E_uu_{(dS~hO6F&OA^!#ZhIungn|l9ZeLxn7rcqgDx^>@D`c!NW#iX&# z>$%mF=>eo-4tPRO3#(|4s?%)9wK<=?avsUG`&io^f(Aby-hCvB-krs9CTLZVRuhqbF_-#UIaVag@+K$UKib^1+;vcdTF8=G=vG{{i0la zHbP4n!0oL8hEam;yfUdHJ&Pa*If^m(I4y93@&I-NvF#$!aIEs+9`q7)0g4o)sF z;r%-gFp6TizRCzO6xAyUZ4!-<(*7IoIgMh`ucS08r4d>#F10kAj7Z>lh|>&>fQvy3 zX%VX{wzznvG>Qxv`xKd}m^R+Do+58ma9vqES-cX9w-=BWxY!ImSWO>xgKrCy_6S99 z3(qHgym&ps3j-jz)yK`Z*D&6ih^deaiMGW^PJL7$+evFP#9a zCRWb^Km6+3_~KJ3F8#zsv^9n2I_NZ;7><;Ly4`MIG}y!5_68cZi{8Y8z1al92D)|| zQ=X0ud@)$eLnEvYenUWG+Cd1Okd-xy82nfB1V>RBT^)5G>JSF*C~~gR-;p3D!n|u~ zW}GU%{*>ryrjy33uvAl)LcM^p(lb{$^&G=>V1j^V2wco=>IY6c1O)`Rx`Wt)s} zOk*5;Yqz{+w>u5?*|$kMTecFYrj)xzrPDo&q14Tf)SZi>?H@BQBIi7rB;5#s*+2g3aQ z(I5R0{_-#X63;$+1&y$YpZw$}SX@}Z-8**?P+8XZ@XF;EaPQV#xr>r_5_9nR-KQ26;^*57!_wIQ6RJgz(A-}%2$TzK*OliW9jA~`qY_caN)|+_^*HaU7S2~ z3Y+WeSYBF$?b%p9wv6i^T*sC3XXMn>^{dz5g&w~08($Y?;K_J`)rYHiVmE!_adT4ee6os5=51ecnT+K0Bn3sHX)WJx(N-08W|&x; z4=D+P%q$1&5|@(3PO}1&w7{32IU~k+ojk*vBz z*~?H&EVx+!2cc9Szt3^G{prf0pwn)m)o7y?bkPo4Xay}{;Al&ZjA3qN7^f5T<6ZP8 zTi70~A!?5Cot1ff{Ztp%mzrpJO?0gV%(+Ww6itK(5ELF7++xaYp?2iw5#qp^*MxNw2m&fJ57Tck~r9@%2t^{FEpT{WDReuZ;mwD#Wq0=Mc{GC-+RY|bS9uG=JRaS3N}|MiV~^l{t%+=V=hPE5 zS4>h@lUGTx^0~$CsM`o~%a=RHrDmyw#_iZ3fYk_KwQQj`du{{Yc({iv-%sIgJJ^ah zap&O!jA(<6SNt*$k$*1jxrOo6!p_w0SuB} zhnDUGP%^~MhSr%o3dbt{ES$+-^>Y=cd%UC}!KlGi1_EK)4#zMn3o(NV2k)9&va9>+ z?y4;1s8hn%;p*;s8sk>+9|dKg4}J3!e<1{iV*RBB(kQ9Jj%?fb-QWFPT)lb~FTVI9 zI-QOvn3928US7su{ncLy1LwIeR*oIR=GGRTd-gdQTz>rHALIJ<>-fr-zl@R=zRjjYC2_rYZumIkh`O4;J5w;rm`@i{5NUao0^Gl*Y zJ&j^Kb@6FTqp9p_Q2F`Gzy1{*Kei&)`nmn`So@p%P*K%c(NiOBq zoyN2)+l;IE*$?O7OD2kv1;!DIQU#?hc6YOn&AlKR z6T!TgAK{i0b<}9oloJt8-|<8oiUbZ<@{J6qvI4z9fPN#zcsj*6A~R>9(F|cl5p14B zjB_l^cafw82K^E6R6|THU^;-ChiKSskt&OU8!^O7DGJ3Q)Y0OJgRxv+#QQiM%ZFPy z!pNpYDqE~EA`FvV4ADpXR0prTbP1okavXEbCW0i#UjGr`TgY4+Z7V@!DJCv1d^kyg zFt>5M*TuQ7eFnewg;(+V+rNfC|BHW*ciwuFw}h$hHp4q5JDLqp(+eZ^4P^C>RChC- z=BP#WN^o-fs!Fe9YK%}4c2WV8NDJ!uX@=3Sl0F&P5t>rjG!;emuYB!G_~6DZy!rE= zV-&rE7pxqP=c2jL#zN4;$eth?rr1h0;l>X9#baoO4Xm6vftDYj)9GOvjS#fENOlJ3 zEzhHOYym&NdL7HX9)|G?%#Y*YR?Kh(FZGX8y*b?=gN4k@7joI&IY_LOW(9!Et<7KQ3q}dG_E2 zfgDL;X;7V{BZ|ubQ-rOFNFKpv0-*aG1eT*YzbeFps zF-5304P`r`$}${A=zB2+=>&7Z5G{WmNy__KISeSH*sM$H9CC|U8KtqntM<%UUD71C zT4lTSi79J_=x02F>R`y>IUIm12S>(mXsaM9m+3evr2bUhXf~Y*t4d&cULCuNt>;m} z8&|z2YIiN@DCVt_ijWZ`E|ti*RS=(|JfmV|5YliuiGr`vYcwT3Q%ZyXz*}Whff<*| z#`u0^-kclI#ckbZ!?c3Ph-Nmb~zAE4R8{hZ_e)yvw z;o9}<_|~_-jT_f*Ncaza@B@7P>%S)Y2&APrj_~@=-oT|xmq1+Hrv0b?_D}G`04pa} z@b=qpV>+g;8Fl3p6`M*Gzev;+jmkh@Qo0VS(|sv@+fUO5<72+5=<2%I+TOzb)w}rl zTkqoAzx&&``N0j)NaVE-KEMzD@%y;>!FBw`Z+{a>k>JvEmxZx??I*9{w|@IO*xTNf z@1b3yAN}};_|rfCQ&Eck+Sk7-U5o}S$Kx^H_}Lr6n9!ye4Z>2|`J*5G2*+2B-g7pGS4Pl{b_iK=ZIX$iIqw=21oD0a+vHIMpHvXpGmd-p1zkE?Ui|NEGJVp-2FEHC2-4VlG6KnrUjF z5rTKjCq<#|MCDzoRt7sra58hzwFC6J4RpAj>3MKNwH?aIB?v>I0Y7YFi}tKwA({8F zHyO#n0>J0Z<|q;iPVPcf1)?0oogp^Xws8OcL)^N16F2UDfNOWIWkQIE#RHZ#e?+?j0QVM@+rpg9{T*HLkwwG zE90#a1txih-SGrl+j~eRV|@9Q=kdS)Z~rTP?+^bc*iJ(%{?m{$hcec6Db+M%o9c+V zL5^fzlC1Ahc{n;4>#VsfyqW6)+k5EYN72kk&QBJKHR|CgGbog-4$l1)0>mU zTC?32gTE{1PT~BOXYlT|>llv5IDhGB+D=+P=pJ$(UB zJ#`+V$rPRA=WzV&dAZta;rKChmlx4!wc+|68l5hdPoBc*^A~XD!ZSE^<{}n*$FSI* z$I9_@m|s2x*KY`u^z3t&5w@CGSXso%xsxcU^78WYa9T}-y)ME|7mahDLFcJ2i!P^Y zQMb&OY7^ytmrNcTi4rOvgmC0e*RauqM>-E(5Ikx`IAsrU&*Otr;bUWZ2G~Jt0Q2Q{D@k=V()pwMFBMTp0MWX!6on^yLiA(S98b zYjZo6Or&ffi{2Y0l}bt{izyMa%i(SO9~D870uTQqA$86+8}VNATd>tX!(L*OJ`4VU^xou3qkxcOf^2L=LJK%0-R zz3a@I3g(DX`^f;KMw$9kV9GcZW6~XftL0baQ4cif4NF(~>rlUH?q;)zXP$WmJ3BjA zUtb5eRR8#o{}{bqPZ*Q;-g^(njvW)ji0{Auz9`>5^YktgTdXFq)d zw{G0R_SQCT-?}Xl&r_#P;%9HXA&m6S?k?VW=N(KYNaK6VVf`JOu7Z&^sF&y!`sWYJQVj4eDtndM@BBc4p<(1J|d?Bl$m zs9I&I@k0+E97bgOLyg#CFHPE*{3Q)`76o_}(n70&%NI^z>DZF!_dHzRmO-5+OZIr8 zO{B~=@3@u~er^?*^5kdo;Iae&03ZNKL_t(w1C10`cZ8RB6D;1aM7t-+fXL!R7fPAs z&eK*)u2mYxIr@_ruH|C;6$?LgVq`lZtf_}Q0@4Yu{7Df{BT-17M6oD(Q{kK@8APrp zVA6BRmSWzBLC{e&r(yYK`$>cVD3T^lj;?}+O+q8J+Cv6|su~=RKJ2g2 zXyDZ8(=#B0!7d^$3T>d%ox`~c=S13l?SmT_4@T&=nrQnWLe~>rR2uc2jwUh&F?${+ zAwxiEIdu~K&=Xy^oxMH0`pQeVefusRuHKh6^O^yyAP`1xufHc_*(;y_3|8;lLVNiH zmQS4%CW1IU>N_^n)pC3NUHA<$WT(-cTR@}LL8m>3PSZyt^hJ8KwY`h$@BJJPZr#S~ zKY0fenirv6Gpm5xYGUQWY3%g-xOn9fp1SxHR&fH$mp+gF-K*$?uBa4*jfUK9N|Pk4 zTN=OSb|+6^H<~R3tu~xih@u&a5$kAvfaf>1aq%4+7cM_7x_EEB{XSZ4-WXCKq5*E2 z?Mb+0o1^JFSnRYg-)y2|dB{KS;HMWFaHjJ(=`Z1!+ksyMNMj4nt{g|3`p&s62fYSG zf$7--Pj459?nkt)gX71R#b7m0?DF1Lt6AXM%ONI35ACFbPSArN#c;zpks$K!S>ATi z3_XNYLy$$CvUMkfRajDQlQ@!v3dh?+bl_&_M|qhE(XFzoQ?eW6u-@!1(nD{y>9cFsl5hX8ENY5;Nr9;>u!xKs7G78TQ-X*kl82Ea4DPl8` zd>`gki4IEq>hK0}J-rG0ALC61?Z%B8A`SZe-~WBlh2w#SKlzhC5j{8>F8%Aj{%euW zu|~+mal4cgFqQs&PjwzP>7V_@pGl>W>H3pD`BTvWp%X9Y^Pp*_kDHW zo~*vAZdIqhSxPj%iry7$Z5F7}rI1&x`AqB9f=XvSjz%p9djtISpZz;2?{EFve~s_| zmwy0mK#{+aN#SQdeqH*G<=R+VeFT~a2>bxld;3p+`?rEmog}4Aq5u!>-V-K+(ub?p zu8RAOcYY>jTbU>8WOHXzDEIwqSIhF;x^r9HtiyWQN`Oz;!8}T#o6eA1B!-!L((HuS zIxvoK`?EknC)q@qD!kN{-2n4L5a=$3Q;i1?dG6s*+GQD9>Q~bW>tT>8=MJ9p#p(Rj^;=$a4op zkqYy6=E_BU^-C|{;@Q)fPEt(ADUxxD@!kloEp{-(&}(2j@co8d8B_!*3M&(nB(&ns zKFRH+G?{`|2~CFs%r#s1!*BjNSp9$gr+Ezw5T{%FIEXh*qbi zI8WEZ(&-a;`>l5{B7^t2&tWjyLLRixJ9Qp|XoP}Wj42m04qV$q7`9>A+$v0^!g+<3 z?fPi9JlJ-O&AnY%mWN|YJ$(L4U%0$hLa0B)XR z8eYI)dx~mWwFL;aq`Rd5)-G zfEo{S=GFoNnrv}sy2Jvvj%fpq=83qI#FORZkA&vP#T&vR(efm3MP??Z3NfyOG4&AT zu0QJpuW%T6^JZw>z0WUEDt`Y2sM0ac{7fkg4tAi*ZDK1t3a<%QcvQ!m4Xb=~sjU<> zDjX_xE158puHMZn_l&FZd?>>v7)w~~DE+mhChL!U*Assv@PC&8WYS3Z-}~P8Kxvx! z71>CJbnwOxq?CZ54eBcbSPEb@YTzI+B0Vuu4K>dLo$x-cnFdo|OUjw)gN~ zD5>C$1-y4P&*0MDR+0+ck&Y<^AtN>^GDL9(p3V#l57fZ%^90U-cT;+@%}2(^@d9CN zxzT8OKDylwM#CwlNsOi)pm^TLwPpc#H53EAMI`oeQ1G;CuI++x%a?{#^_DQVekl%+ z+pxs;TPD&B>QWv%cLAUM%!_#G@-r9>Vob+5inu^FPLU0Ou-!(Ghp=rAf!l_i`Ept^ zj}jCfC32D6IZJa6>H=@-5ls;#k(i}eo=ov?zWRAQTHC;P|KooUqpsZlRJE?QLTjB) z<^|3TqLwHODH}@lSuq)+CJvb_x#e|m9xEHR?69hja)Kq(rWEoCCE*9=gj)KKaFSNY zxJJ_m-9`gbp6pzIgjUqWBge(Uv19mGU-~NEy?PbzzI_d&ojxvKxrDjiJi4AQ607m< zo?NpPkEe3T$PIk7n=PCMJ2!8lyD$&G?PK-+EzETn z(CV$=!Nvom(sdpz=Jpb8qshE!|6b7D0%PQt4PuW zdxa%;|MDujj0as(Iom2sD)r&u6o~Btj$NRU+tP=2`a9_LT4*!_d~o$D9<8s-;%0eq z9HxUntY;5n|? zNaQwgF2<}$iX>bbmn3B=2{6YF&A=%#JdCDHXQ(>DQLu-Fm#KB8hO`Z=d7GRKya}(w zbrPdHn0$=>2!Y(c1*!|H(wIC=ui7Urmta*PsuU(~Q>N<8PAY$_#1hO5!HiMvDn$FM zfD&01q+NW~JN$mXpl2X6)@e#?HOGfU9ZdFNz%`uzojN&zKX~xqF-mXf&NOS;xT@o5 z3}o00q?(Ks6DOfU5=>X6HEt84TF+omv6`f-bO!i{QqQ)SVT=^8iaYwrm?Ta_uVNNY zJ$;oii=t@0#td-`A)VIBDMnkX52+9w;Zl=b4Z#s`A3vBJoVMW4w{$HIfXe-3c(vIA zvB#v^U-X`6CoAK`O}V1hO_A+2j{j;rF)d9?Su$qHIHe9%i4KoU`l>gxHn{CZX&L{x zp!nd?rs%vi8-Z+b*}r(PDp^3p2?pm%N;eTZTMJkt8;Tc_dN> z-vWkl4A=M3>vpivZPRE!0_)Slx4hI(5(N0Fj+Y#A5MKaI~^x`-laV$zSKJXTs@y2F#R%V>LTr7v2z zaAQvnKv1q1M?;M4Sa4ZMA!ZeLp%A5UR4}JKusDfv=g~tPi>CPImp_ZE@4t@+x30-{ zq132aYpWBA`dT&Vv$_ogMs9L2ZKbF}(Iy+C+D83<*?Y4lNv+CD z2AL@cw(3@M`;I zJbvL3EU&D>wk-^YK1S^>{Qdx5qk&4Jic+m2x{u3qi>SI)Y;C(33_Ea!Wpw*PEUnIC zFzO+RB9v#!Sl`}3u)YpGP2p-LT-_3VE^^{ZHoXaC2Jq%&3($vM zSV0?^*F}HO6)}3Xtjl=k_%#h4WT-PnE}V&22%;1*=Z0&^SdM6IYirouYhmC8uu5gb zo+lzydNk?x2iWWNVG?hUq+HcN&obc*98|0lsCrP*EtFtjb*?F5*j;~5Jc)!MU{ws9 zEiYpb4DsU=1JsT?SlhKwzicC3F5_2geLTOYBWPJjMjHA-fL-k2%*h5avg1gM(Qty$ zC_E$yw@s}e9CpOGqmC`#H^-Z(;bdAtz_@KfPKPJYCT;q-4 z2%$98h&ht#wCmU&==U!?!RNd6gKc(zcHNUn&MWm?abBc(S-I13f8aC8pprSWoapuiU zK4* z{1Elm@uferlfPOJGa!vvf&1&?e zMGRJfdeE_O>@+@g_AF*=i(-JFhZ>?mjBdLvn_gwU0gN=!rK8A^9Nvt+9*h)bqQMIW zqT@vTvP?6O2sm;q`iO?9FvG$m!RF2`R#uMV=_jAU=Ixtmdn1vS6VvJ~6A)It@bP=k z_Y<}MOh!b}M*{yMML6SCPfgD4>VCW><@qFAPB>0#{CFYGQO*t5G%=t~TL$=H2-_(M zd`EY04`~o0n4QH;t&T5$`OA3s;@f!h^|vwTc{q9U7#u?vNDJ!9bqJ0;8lmFPpi-}a z9Qk^sg7VrLHg~pwtcBwzPGT7K(HrigRH5_t4D}foJG-860;#hWa}A3#BvFW7w=4Q> zmcnZ7mN!-ED;_d^Wmw&hA1OtOJbC&1x^QVY zvPr0@yq2k(F%hOX8>(Dhekx5>$oQ$Ud2M%(8z+8b@>I^>xS;YyHxwd)#6i7Y7Xya% z^>vA(F#|u;i=#3(7fM=9azaF5Ai%w6*4D)AyVvUrX52e(zb)_xm1+eikDtW57cUAt zhClR$*rG)zKb&l**G}X5)oXC65L~W`Z$RdYg9sE=68?eKR6?}H367mOj*V-#VbT4I zL1*QWoPcF0+@H21UeC+(xb!xn$G{V}Fo7AR${!JQ7jrf3ha2wT5fkB#rGLiOYppEY4UF zi6qBH#j%Chr!Prz-QtALOVKR3Fl`f7PShAFMK7vW>bD7LO@c@xZkr+EZW2c1V$J9d zM$|E)n37`g;Sk9~8h-MCfkD591=LV>O$;kB+Jg{56v8DegzE?rzn__?mzyxk4hESI zPa7iEd`0r-mXp=F1uQHsVeR-aM1F=Wh!Br_c-}EdC&fWl2qEm(2}hZSu%h2oPfYdSxWc;!*uQ+r;XUQ_EC>f4C__Q<*V+11~ zi+J?&e+J(V#5Ej2feot$tE8cnG*F*uqSlD9v%7~8MX~!GSW$?I(}YD`ywpK^ z-h@_(VI-!kf&06ASU$NXuqR}8`@@0EDdHQJ$#J7)w_zi)4QRx&Gi=eHvr=7PJt$^P z{0Oizl*u^@VrW4K&MvMAmDI&*HjgXswecUqTPQbd9GhQ&*EV1t#Bfs=HVH5O_Mwm7 z-agJe>Yx`S;+vSdc)CtimEwJpkk9EM8CXK_$X@l41l(aV>h44C-bkJzS8*-sI(pCe zJg#Ug@5kY(a^pDWFaGoNf~YI9OC6K6BKoesPadDQp~!f*tGwY4O5mEH7L4g{HN90# zk$$%tn3m^K*WzZJ`Hl!xwd9_ZmF#!PI%2 z^FP5Ke(ewO+rRzWvVjw;iKyAM^pf-+{}@j^{UrYAPyQABfhU$+C(fQi>_>t<_mgLz z!{X8+9(v?qj7CG$8x5>qzl~vcfUo|`-xY$A?b*D&fuH^0C-OUrDKYM@yie6-`g@#X zJbtLpM`CUHgJDcX0B|Dg5?Vzl867`@7-goe|ul)-l*53ZruLPUw)~%bk@Yn_X&hLIzu;b{bad~AKm*2lEefG>V&)~V| zo>QE{$xph^5Z_Dj&!VCjcb|0>*_FRSvT+I>M{=5I4aW~Ru1xT$3igZQIa2H)^ccUy zDv>Ldut0@K;08iY3keAlGD6H4X0C6hxLIs=oTcK>o}Ak#P0?z1Vc9mCGc^&p(iN&; zsqtD^RMINbHN|zBm4xUII|A!6>$>RgDL`d1&CF(s7oIV2IjEuH)nLa4N;Jf=TxgXl zylezZGe8d!ffb`Qq_Vmu20K-nuVflR!$PJrK0}a&Xe=yXd0`HXN)3Zf58=?ms5?Nf z-GilBur(X87sE8kNmMX5v^X^r>d3{2(m-^P2-PbhQ!$Xpgxe@w>BtcAF|qB!D8r_| zkHys!SXx;{XKz#bNUegx+RQtVZ=QrR`%)2c6akA&M%G(3kGQR*6moe;ju&{hwtXSt3 z7I5+Hckt#L7qNEgIF6lI6)z3+jxg|j4EO0}!ABfMu>A@Q*TL$_is(er7w655>(F!u zrJ9W}K7ba6sLv{=@WWvVz1F_y*g2qHCS-i@Dj(4`&ER>Vh)c<>^#*|uoziz=2$QPA zYCsO*5OF$yZl$>J&>BwF&f$H#ja{RI!R95@%>c3EioPDG{*eGtL@5aI29>G-0fhq| zsDyCTVfc~2=a`X;R?R`Q7{a`nU~Xwa^e20*O)Rb+L+RM6c-rx!02N(Fqh3d|R)!nW zw=2PdDFvZEnk8e3zG1Z_fgWdK8BG<1WE3Eae9_V4LBtPr)T1)2?f|aWKq;xCvm3#U zstDK%MyzF?y%Q7`Zj4^#WE~g@;80(pwawO-t9>ppwT0UlXtKvoU_^Q%XeX2!8 zy&PS|^NW;8^QK}{aQuCj-#AXoXRu^Zqjw_G9FOK=nydYTWhE(3FSu>IosO4h6p<=# zu^`=(@n3j@&Q; z_L7*mb$cD}UwU8QFv1|jrFSpEaUJ1;>}>7er59clf1u=G$b_^V5dV!x^(4gJdi4!# z-QK{cHxd{Vn&ih}jD>}HY;SIfE=cd7ht9zPmX?;Vx3ed>O&8yIN5DImPpqKV=?Q^I zZh{&clin&uL=jWmAMRy!M?!XceN(uJx31ojXRAd)!@)rtgMJ@3uHL}z&aU7_(PEYH z6#J4W-P+#5^UwZRj6N9N-q^wGufBmaOW?W=)^D%lJKy?_SPzn5AyRHT z+k>KC(RWh_@!UZaL6EOg`Q}A#S-z@?MWPrD&;x>W3B~SeHR8SGC6<-^>)b!(BW}*( z2+$0%@EnB{w=2L;axQ44ISQ4NYm*Atu8z>4ek1i|C^96NFW0}Ktt1pP%r&amANd## z=?Y21jV}Q&)ygn;YcK;>AVcCHMTsK+Y6Vq#97%w(?IN~gj3N(S6v2)nn63#YbCgb{ zMYVwpu2Vw2K7)nXy1-flRBrF|FzS2oM-kQh1u}%dq~utN3nb#`iQ0h@|7LM4)|Zs{ zt9QirlDk#XHJQhLoFL`~niv?S0m9J;E6b~R|7|OuE{Xu7Xj+!pe9vH4D)KFl5at{E zE58@=?L$UM-apfGO|~l*&m-05Dy*gtspzAV=#8P#m_@TugGtXBQG`>+S5c}}v3~QG zaOyd4=rv$(dlSP!AD(|o4of_6UcY)3lpK(|{pkyj;N#J z?((8YAy!w8p+6d6dw&b1*&6hE6{V7iU`S&M9iMviJg7y{-s{pt7GZyggN;qFpXn)q z#7U+b2;)es*-Nu?B4Vc+B}J|D>q)V{;ZSFd6M%ET!otid7IhOVGYhCcGLPF%3opF* z9$I_5m~Eaw94i-pu|_>N1G-ig)dKoirPZrzW*9`Vc#tRsK6%YzAk(qRXrJ-0ax+C{ zn&KU1dutm(zl&P4iIb;KA?WpyQuIqJ+l-FsA;uae=P~ivG($LtR7KG!%Z_3s{s;rE z>m!ySY)&8pz$Sqf0+rZ7EwxZZQw%f)dwXbV713$*{gH6z@eS@tduI21LV=OZ&8D*2ms^Ugc(fd6;Ca%7Uju)DRZ{OXCyxry7?Z>o(RsbH}YY?G6oo7mNhmxaql z<<(by@k<%i_4gZsxkWrPp2UkeJl&8<4F|2;AyGH}Oa;er_YvUp***~`7MyTiryF*!^|2T`fD0zMT3kHo zRGWSsizXlatpa)2@<_Yh&YoQJ&6f^s5_~MIn^+Z4-#<(#p)?h z=~Ivc;93UQyt-+x001BWNkl13#L+ea85vDOL-GN&z!Pf^OZW=`idUlL~?_ucs zs1i7}IfJrm!_BzCW@vv=!*eGc_y;wV!ZNbZ68tcdQM7m^=3TjB!lDii3Es16{B;eO1_KBs(S42f@`m>}`e56InN-|X&f2`>s zgoDXVl5i#D&arNt?unGoS5^`x5dzA{34#~XkU~R$=wWWADTlBuAt5{2VG5vMnY1!E z6mcg5V%#t4y{i$+uuyh+XXI(qdjjjp?~5RbX7co8w=b&um{$%tGF`fzE+{&lTbxI8 zzKPMu2XP09>z2kn1T;#qXvJ#^(DAj4Z=-+E#+h?#SUYnHi%au(@13{t{-w*pHJxkD zVzD`c3>|FmchT8t!8J5&uiwVZ;u6Zu1{(Dy+?tE_s12$}Bu*xxTX-RE?_GnX)li*l zV!pWuN3(I|jW;lCA7C`};Pv~^sfU>;owNG#Ds1{WrDDFOi?}=@cac_?vJ&YqG86OF zC78V-w$}Gx4@(FJA!f@C!r>m=#Wkd{4c(@(f~E*K;reRmd!91tpyv;IGl4D=1d7<{ zrFRrnaQlHFj=vco9*|S5V_|s_)Ya=9>~T)m88Fu8`5a z911fmN#ON+NJj$!I49RErXFw@Ar5RAr3{Y%LRR|tjWFYWbtYIW9Wvq>@Q13R%rbjE&kKP|Cb5F^6 zrg2^sm`t@JkD1Ch2{ObVb@)2wzDa!Ewy8W)e)2W-puCpg_sq=N@jglZC9uGHd zDv0w#0|x3vP<$pt0*M&06D!1Nv=by81g-lV;X*~+P-Hvg#!1eHBg(xbm^k)XSE{E9 z9Xw41@KeY^K^Zq?Qr}6%sZN@76kgs{ldvrGUyt<+ZfP>wBJv4!TM=(lAtpKFM| zRJB$`f7lnjF1o=IABWK7R2wFtI8G-<5!)SP1d}8eg=+2Gwv@P#tx(u;LdoO?4C9s+ zEtD%4aeAP!mJ;n^ZqUTSN@F3~$YmsflF=Vz zzN+wjklQ6pJL+r+{ioI$z8~4ha;6^FGA>hM^uj=X=w?20F-UyqmMvV3AWBd!SH+1u z^HHhUw3SOCIvpa>6C31k#E1qFcIyeMX@KpG5e!==k}r%VVAu%`zM|vVM_ugn8Yp=+ z=n=gxkXuD(;|W42P#Yh&o!Pk`*Hsy*i0wL4ptwVlnQ?jUu<3@5?8Ea-2Zd zTo^G$QYHqTCvLTzatVH)4#Q-z&-!ea&Lcf{sKfJ~%;SoMfw$~8R;9X1 zFc4W>891mhFQtS4mWn_27sd1g>XMP0tz}|(Fgr_*PAmt&Fd(E#1iHMV)v0aih~fm7 z-gz7Q2YYz<{CVMKpI$p51_oEJTtRnXUZ6&1DiyT%4iIHAI(vKYLJw<(f$JL^$jk(8 z!-nfxFv>OfSr1VXAT?uXKCPa4D2U-*Z$T5rQzYIVW*SYr^VYA>+uw(g+8BBx5%qI@ zB{52oFm;Z@g!;yoSX}bJORMGMv#Usx9!{+;BWxu=TSMF&qGoBR*(vSvX%O0cVOH@#U*mVOly)tR5G` z6%wR0V<`4~#m)av0`9}cT|PMuWtqgOP;t*|5iSZ$-xpz(PfaRCpcP?7lih`AJ6i8_ zRd;!6@pNfVk(ZH0SUo7uRzyxpeOTz|^q0J9CQq##jL84*vZ0K#OM|BJjvp*J)ZIO4 zWl!ZF*YQDt`^o!3b^P;)=ORIOSJZ_gXXocX|2gQtl;YBd9(qWWbP4p!$ub-a(Czg^ znVxz2y&g8Vwoob4muZG8SFYmtvE!hFZaR3TF4)rI5~ze$r9GhAf7~8=mymQNoQmR4TuTclW6$AH!$A@Hr8gQ2Bj(V_Tl1nHpaI<*VT4 z_~66mMdyO}Vnc5zzh!B4S-dNd7$#BR`5u1q+)uDLzlgQ9Gnkv7L;IkOey@+6)(%db zI*Ga2dAKDPQi6^moY*jdJ>=&_Ivn+YvJA>l?6o=&zUU$I{BNjzUlPT@RI zFHpcigpME=f*d+>-2{_G4gy?yxbNh~xw0k+Q;+&G^tzy#Vih_Jm8jAn7N2E`pWBpT zb_0mgP`nG#LqZUyXe}66c|1aAcO+KOZqr8V0pQi+8D43Wu-B`jG^|4pUFeZcAL0T9 z67kT&Lq!rJp|UkM4obT+Wrep;(O?8If{Y$2G6X>?1Vy69&>GYSHDKDB_(F}d5MDTf z7mqNCM>78PSc6RHZeazpt{;?BWHQDR** zx}ZS@VHg}6qkhiKlrf)rI$7e{W_$u-g!$hdEVh~I%-O`UD7+0M(u2B_a z&*!Czn(q6`@k1S`z#oeB=CD72Kk^Z{E@oyLm|bYXaxCm@?+~8@H0CfY8>VHTQgLzh z$~ACZIdNiHU|1Fx=MngcsG0?(5}iBByLo_cU3 z;Fv~d_9V*w{_npnI&$>aIX63t*_kH3`jxMOqCV!|*w_?e?1@i*T24kJs%9E9Sl?X7 z*)wNx=G24nhd;#P@)G|1U;jDYefy&LQ6-`|3AFv)78=bNY;SJk_rLx% zP`{4WhSVAR(YK$)nFr6}!jq3nURuRcM~vSJdQI9w{Wj{#2_R>$ zi}&7rSKMu#IdevUL_ev~N8+dWXPw-@$5ZUS9->%c^j1MRCkZy%oeJ!QII<`AZK^_9 zXL9bFPDp@>ztdv1;r33VSUI>Rp`?gRA^Jp-N{L{FKdbY7QPahS<8T~M$<2^Oo(B-R z+|e8pX+?)oG7yj@LP{&sv1yiZ?8_DGEJYZ=#G8#0*16FI4)lXE+@Jy@C_xJiA>hch zU|S+XN4Zi(gHG>L4Ix3UNz{>uO*52C8%u@`A1MO*E7dZL5W@qNxl=e6iCrL!$)V`N zO9lwiA%d(=@I0jCLhBBN_y`jdB^op2#4$y+0y-R#vrU*91A!ucWs4B(xlAXLg}^MN zj)hRCc$V!lP%hWe&RU{eFXUOF`(3>JsjlK)kT1b9Q%b$8T#Z}+QR8G%@|=A30JOKt>MhMQ!*!S-Mk?dqjscxgOZCh*Qj87 zX9v66TX^iz^H^MLVrP3-hzX8Af;fNr$){0o&R}DG6IX9-;QHk&sLa>VoS{$Bs=$co zW&*=Zp;vSisd6|^ z!QhCxj|N=349!lUMND&0pK*ZB0Qa+yt|~*jB zJ8^=+@BkX!bs08-PUZ`Qz)9~nnXR&TM;*-hw#w_`vyViMvloHl zTGTbkKb>-y#@#(CFZ8j>-o3_uHnBWeZ*6Vi8{hbbaJp)>nmDf~H;O(9Nx+ev&rP)7 z?_qX!PV~HPa3KsMA^a$|2*Xf_tXH}(C<6!L7vHrmhPYQo=Q{q)3G!}xOw#k{{7YeRShw69jH$P;D_J+z7PVV!3Zz@MW#H7^TRZ@`J3PTrrZ}+!E*Bnd~pmE|E!K1HSa&xhXw%#tq_Qrz=dD= zCls-%rbOw*{H7RCk$9Q1OcRIHfMrngkQ_Ee{1K>=+^1Nh0zU~Pwu}~%tVwZ;D4wL{ zAa(Avj0O$V@9~h(Wsq!&k>G^YW~vCx7>PNe_BEY}qE@OP(p|i1Te!HW?=z6HJS zz>OT}u>&o%p+%-(y%EEWv?IrbpJb?(EL6%h=wXa@rz->!MM-Q6b=ZhAZ z@U0l0X2C4kAoN6#daw*~>F6@4i*C?@hXJB=gfuN9K^Z}6!O|3WhB#f0My(~9=8~hw z@lPktHg~X&aVuoQDqEWYT?#vmi-?#$eFRB&2m^G92y%+ZSKD!=Q%*F-cBEOy`s=1b&Pso_bv1Lx!UvHn;ah&+GSp_lu}k zD{^?HMfoU*(CQrs2aepcIMv{~E=(sxtOszM6b(5bB%qfKi`-M!fJF~4Lt2AoaOzdD z4sIGIy4?W|`h5}6lBl96F{AMT37aGlBE7xSMk+8OF}f{aUn}9!nFNqg=&}p|Y zeC>y@;9|aBL8CT{y6z+Ct|R0@5Fx5_Gaz`iABWO+G>oAU4Al=TTB{25Ooju`!1rf0 zeBqBZ9Di1WzHTD66?6~rEong?q(H0Zi67`J8HtrE^$W=mh{8}@zWJj6Ml0!5eyh&| zT^eH$rntJ_7Z7hA+BlQg7lA*5KN#V}>M`M@6N_)JH-xS`n5$PXzqo*U#ZlTBqGzh~ z13C8s&&OVSUkuzRhOX8ci0P%lw8fhR7qz=`;O-n|cMg7)=Og0pNM;15%3V$_Qx8@A zFV2>{f})<{HYd{5Hc${)`RrmnhF+{ z*#G4(Ve1Nkn|Y}GO+wB0JXuUQ#7Ssz0V1I(+=0A1)Mfgc&7B@4Q(-FhhOvl1$w85! zEtQin3#Cn0FI|yoA_NYt{K801irmckyU4UZ*l*(}zj$7r!dj@;L>)M~9AX}RldHxu zgoNN6V;+9^Ot!Wl-j23bGJVotieekjp`3!d|EI9wB&tY==@gkpBDN$Ur+yW=Wx3*- z{4f#(YK5T!vQ5HGuG}OPGyruA$yp*%M=l$c|HYz}eV!XHvaiTUqrn12W20dxpu8D% z$6O7%Wx!>9#4w~2!wcY*eiVszwcV>WE7(7fNKWiGMB{(y(3BLnTi7~8 z%R)bkF!Ve`{RlHvOX<)ez&teUY8gDlurd;Mv52fAFA{?kQWNBmk~>PmWNZHbqac9o z(gD1(oTM%vr_}W;H_>Wsq1Mz{W;;;rLD;QR=W z|000>Rw@So!{Lf0gA8Sk@m34;Q=hTj-9&H4($Dbrs3u>ydK#ZIP_X6?eQICiqTjVxw(1Km$`BM zI%dnWXf8BGWK6CHL2UV+SC1b zNzKIEyF!m#IW0o!M5xqVxMfo~D#IR${{%)*g-K=e#Do^>>OWDi1QeT+Xq06{nm}%& zj$snxX15EQuB(Q=z(bVFC6p{nbS7!oBTDH6J9S(E_RU-kX;pFI=-8fyKV83#*c{?? zGsV0&f@7HIlq_sgcTTqv$F?YhlejNsRUwY4ux`_B5E+wk22(hGbSzH$5n8UMs8yOE z!ao(@O_3Z@H!eh@QNirOJT`CM6tS%8Yvr$%{Uq#SL3vgpbtPIS;ywE}C+4IO4<%}c zBD4z)W2MuD0HODcqQCOd#9L;`Iox-w-+8wCxzNw<;@m9CZW-6c_Hj_ z2{&)w!qTy0`0Qt&5_eiVTO*WQ7sKHQtIG>`=5wFH-rfN=H?{?*^2?w5EY6%>!RD=X z?6o^^oeFMTyG|<_)aGW9s1LQmFM`a7Lnm=nNWr&L1N_e7jZrcA###I+k6sJI!DSi{Cf8#}vgv~~_~y;jHZ z2baZ}JXK3l&4m|hXtf8>v5Up!1x*9{T1Beb_# zIQ!tk_^m0Ok(Avdl zIJ%PqcP9~ZKSOS+v^w(SQ$YPF)|8KPsZ@ohVkB4)ajZ*)RaH!+z8g0*Uh{H=7zKqSu}^V-$FR<0^h*1Hboszb6FS&6_vz#v5x`}%W3hM4zuiJY|#RCX0C~^eC>Bcyh~9nr@*t{ z`vIQ#%#--SSH6gi+v|Aq_1E!7fBJQSEhtm8G9*H}`n@FXu3o!}^^Fbu(ZBj5LFXrd zC#TQAm*3!xJk%R?@Od;u_=7+A12I%kV(Px&dcE+%3xdP+%x9kw(B${tdrye$a}S&o zU}g3f3F}Yd!@ey3S>JT{zU$|jL!Fa2mftLHmSkz7k~4_{nkFhPDa9ua*CZ*TxNMfG zi=uwnwUEXp!idCq2Aln!m;%l#1Of>-5uqxJWNwrr`Xr^H1W_~i&%VvAQc3esWJ&A5 z%*sHH1i5?H*7wEGqH0v+8DV0;2n}elDQ=KNTv`xr8Vz8UH3aDhYgUM-Ha%2c4v~5x z^z#n(S5v%^4RF;gBT8)q!w?nBq7s*3g{Ht$5dEHd-3iY=F* z%JCWO3K8=u;f_K5Fp5GI0idhj#Y3BbP!q@!B^u|?S8s#+0e_vkQ$kiM z#mkG5LmIiRO3$rOvSVK9Jds6nojE)!)oZ@LZw-E=K%7@rmk|XqkcJ5TAy!YW3eiBl z)YkqUPM=u8Q%_&O&wu)oaPhq$#P5IYt4QJyZ@&2}0nC2n(epUBb{vC#7u9+Vx)-BA z@ZtGG@sf~O2Ar81j;$TX-rxXjZy!+-Bj^nH%AhSY5L-6vlr7XyglAQX;Y zoQ9(RNYR7k(rBrJa=ih~HV_*c=w8Z_P<4aGR#ee+SE7P%i05@ev`yDjOdwXlQnIp229>|KpSr44RY|V% zkT;~LIKSTQ!WQO>p0v3L-z_iWm|pxBd5R78PC`%BR@9l7liPebnC9?}+rdXnmnoie zuh*jNz2^VtosTZF2-3?Bxp8!zwX?G$!~t~)xS7-1k{mg5+6d}<;^Yaj`r2>r;}N zU69L04kuwkHa6BlqlVepS?Ql!H*dxpQT`;;F%S45GjP$+}DiNWwT+=a%QzUw%KzxP6 zMtVva3mC`nG2Qu47mvgNMdNWSTqat_`bmI=nhhA9xS<-3GFT;Yh#h1!QlQ8* zR9r1?E;++VjWQuN6!AtvkOl}c_!0}TuOsqOSV@cl9hhg9h&1WOi|>L55GyjFTM4|t z$HD$U{9Yy%pfO)Y#R49PLO3t^7`;R=RSm|K0CUGveEvcLb1A?(dI^!Ku(N8}97=H+ zP7ITiqV$ zQ6w{$pMXc04yeW z=czi99Tz9hR`97mcp8tMeGGs7mw$u*@W1^vcD8O|?b8oq>C7qY{NM$di#(($%t9X8 zbkSXN%VqJ5AsCzV87w3UJv(Run$9soD3s%C4`Fq&4BOSQx4Vu~V@~;(P65jz^h)kW zJC4Niyf!l<1n|J~@8rOZhnpI`t9_YQI1|MlH^&O!1ujdgQ|VYTG=L@KLwpLPemsvfy;B zd3>=GOTE*18Bq{`AN9}=NSEr4*7*T>e+{Ewd+jy6{`%`es1d3BTi^QDA)GNe9p~?t z7MA?H@Zt+{Wlt1w(?5NtN;dW~u3Wj2>xHQiMf5W|bpJoT@eSF)1rP0|mxXh;b!!u^ zzxEm`PFdhb=&gaSWo}%)fotzwmFlS%$B9f%4mo_?gKmCMxwC%`#}p)*YNg!e8HyC% zQip1PZx37Bn~HmrI||Y@6YWkL*RN1)nTe9_&wu_?rPn6gSSlVG2>o#5+6@sQ^EA%i zUueDY$wiy^%%4C1bK!bWO!%E|eOri%>33MX+oSK7h7OR;lcw zyfBZ*_YgRqoazJWWa&eszA0dxSsaRPlAdvkQP^+f9uc6IdT_MNwQW;Gs-z>xX|M%e zM2DwG;);tz8~HXISpsoDt59+}#7mWuKG+T&$t!seed?0xBPg?7(&3gh)GPyyv#Yp# zo1(_5aQq0YDvENV@0KdAlZ^j--DAh_pADy;pP3-jiL<7`&8os(i-wVGrd69jz|5A4 zIL#y2s73e=M?iQn3K4WYSiLez9>qp3oXkW-?h8i_Z7c}B+Xk}T6c5xh+`tHXw92(? zbPoCmVhv78%q|-yiBSN^&S0!~yz)A-erOjx8J)5vaFM zVCV>`55Xf0I<%Zmkqk4m_j>4dN1(A2Irbb7)sg}F6|K~3C|5W>3I7scYkdobT|*S> zpw5|HDIt#fIOy-=^zm7Yydk_G#qG{5tRL(^3o^vRSO_l?M`UR`mMvm?;;zw{hvTqp zm$0<3guSgD%$DmSR&IAX@OvJTz7NAK3m`Q808@rbFS#al=unpS_M!|wd|1P$7P>fj z(TCxuxb`UxF{pA1jr%0QQE5d4=snN$cZmGQM4SMKY>4KgZ2tvtNZn#Y6 zSfdkr>N?3NrVdmd79F@G6+AVv^V$1^k05HKjLl1)bmYtFieSSbk7GAY57N>Sc>Q@L$LeE^-C=XECzL)_%i8JQwyoHM1qYl$hjH| z2{;ielMquPYZ^)Lqe@PXA+?wn2PP>XQOa$ZDm9(|e#44rr_QZYDkJp*j1GF3uO?Vo zTtd4$M6cHoFBi0+fAqpbSa5)qB*gLa58!~17&kU#e0}Qt8Qi{c3%&jTjoCRw{y@0! zwEopC2X@tgH;B;lM%ZrcV)oRs=n_(gu}f#|1g|C6*W#M$!-gwk%jeiw1pM`iAWh&fGL7nO^Hfs0Q+yaIpJ$B*8)B%)4t#zN*B zm~A-t(z)~4+-#ve2;msEaAdjqW>El*?hiE$+pPm}4DZ;c%oi<85v4wYz6X7V{!0mP zn8HrTh1FmrT&Eocl1+WTP{*qk7w>#-Bx{BjyC`?&P%@Pd+VA}B5Af6PKL>pjik@%T zDj`lyym9q5XdPTBx$58=D>xf+#<@52ItMTp9noi|%Q$}IfR-CJagUHQlWAZWBzXJc zE&T469+v~69|UrU6M7*ZkA?tWtHU<+Px-kA0#5RM$k$zl=^arjLcTvBO&*Y^6_lx> zI7!6iCz>&rO*N;`hhsk3cojue-AxTBG3`bso6s6v)fycQ-* zHm)M}qpoV=%Wk8NbJAOC)1B0ohlC)R#7f;qZVxr#Xxc|LhUtgO9J;xe(!Z8@R8Jr7 z?|d|=6LyXgr|J6&8Oe!B=_`dV-A%vop+LByj4il z^qtCoIEHay7~s)QKZXlWJ%KRrQK?o%X_>Bgs4V~9#dk%ddgg(%@@y)JQyfAt;pNq3 z?9rftm|w&`iX*)I(#u#`UBT+=Dk`rY zd0Kwf?#_2!p!BbSEygn##Ue|LwAt;uh{zYyO<@yC)Xe1COFITFCO zg;K2|1Tb}g(sBhxGl3arFcP{ZgXp-G90RqoC0+@|HPadhhmnMT>Q-PmRS{(xdIOiWdEBb_IQ@(dXOO}z8N!ik zhdSOn07ewS20D6aChxTH-at+z>CAuzL}`MGZppJk>cYh%Wc0c~V+@MfYzx(jgHpXL z;-xH$g(%F-45^hNaZ|ueMWJ16$kQ^+*nt(Bg1n+f#4`(!QO_(QR7?b<5i&w*P(L;$ z`d>k?sd1#{xx}i7@uV%dcq;nid~=N8Lzli!w1B2ZjVn0Hf=psT%mh7q~j5InjC75BUrVU{bx#Wjx;qN&&hi!z6=QlenOjfpfx z%#CTTVlyr38y8Y_jW^S&0^>MoiWE@oEP~TN_l`J5aHba5BJdYG2du?2J;sW;Cd#E=Xc>3w5asBFbFJfn)X}9;`Cn3J{J72-})|NnyP~Y(RU;I?Skx#F!fqpRGeB&*+ zB^Qr8{D>?%X`0}%3m1eNO79k&gQwR{gB$>I0(lxG;rGdWl+r&pfAwyZ4jc*A`~Og! znIcY=e@(Ycu9hW)mlc70O*nF*23$)A4He3+gL26fj}*k}qOk(K1Q0{b9}L7o^2Xb5 zp>^w)=v5KljQC#Ux(Sz*@FMhmO1wVeW(mqj2E#H%6iX2fxu9tXEUYwf^7t~Y?p=cA zRsgF6-?xB7L4{~BtxYpQrq`%QN6=sq6XqN^3TbKaDGL3xRMiA#L z3Th_MyKxP-uV2I7UKb}mb6POc%GD|!;k<9R#Mmk$v5=AA8UdCIw^WAaI2e+k7cQla zFe4mI2tOP^)8|mCR$%Shpewy7rWG(G<1 zMxgY!G6(4}5(`gSji$P*R0i}6kv_uGxiyqK5snR9G;1L`!vOWV1Ha$LmB7GbCsr`* z4n)cUgN_R==rqEKQjv%>$`u?0o`{Nu`lLGEdgmI}P8~nbR`V)In-@|>d5;>z549a91Iz#_ibfyej7PdT#qGhL#_fgzEF! zqLXcRk|v?)mEw*CVv={#fO`vl{F3)p|F3f{zMDISz(@U{4=HfCzQcD#wRewIsZ5*x zjK|7Uf(njPWb8S%i7Ga6D6$kk{^5_{`M!8rxN`BbSflb8w3Z^* zkcJ-2>xY4Ogn0bZ7sMHJ7zOzI|MUM6OI<4H65ot|53gUoj+cJ%qHy#G?8~|KH~;Z( zgmXuNjp*y-`p{AH`o_8tYy`z+MtYu5oTuqu`SHVi3&kI6nGWAitvnsmh1&N1zKCyJ z&47{7**g%X#3s{_7?v0-&`Ol9p!^_1w@;ND>IV^nj{vbI>~a~aOAVZR>KU9^Tf@sg z_#v)ed zM<%oAUWrKlJuEvTbYcg7mKZ8FUn zqwYi^Ejf5!4w3zznL zh)NBtCK393ZS3rikSs2UK~lRl5VZ+P)JaGf6hD?L(8~_Goi_S@U&c?U$MDl3_J=Jj zCd;r(j`-hA{1mh>_IrVFiN!iNq{o{PoRWj3g&Jszp!3~_dpJmT&@?>E*XrmyGe9>& z$U}*di>h_bk$vcPhS|9?wp#nBS0e2D2k2!P>TVfJx{G?42w1gIcA+O8c7p(JwT?9P zkwlryyMC{O&?lEP!}_(`Vo^gn;Hjl=`2&J`FG;%r9}gm2q&ehn=l0(RXdk&7)MQ3I{!) zSD?TbC=ttckou`u@zdp5$t@{x>il3yvFq;cJ}zIsjn6&tsLZb<3&dE7&lPua99v}J zadG{4o*0UOHW|D{%;9TJs7*$DG1eznDZmU1{3r~mdqcVzFTJ0eYF0I2L zOaOJ%=)78R)F{fypoP@4p}3E~oeQjiL^nZoKrY}(ro=5;rHaK9%lPcM1^oWQ3;66G zehs63ANv>I6+SGR#kJfNrELgofSk^`aOoQ8RfB#}Y5ALkK)uw!GQ~7T1*`L?@$QvP zq=Ny>gzm9O{3!05h)qd^kccDqjkBGKA2i3#Ee~#bN|F^y)QJg`3(~v{s-uHI$4p_WCVxtwa}HgwG+7 z>gy?pJzR=1LGP!p%Pghi@eEcJ+W>PTfs141?Q1=U|%sEOW`nq9?t zx_E_ZjU{2iS*1LkD2$R~HWt_W7XhLu%)qiu5#ed| z8NB=U&+xh5dJuNWLc8l>YiC#7n$0z5gahC1^aQ@bGHvl9Kpfor233_}-X(-Lc9!o3`HI#@Z?fEnvzP+{8?6~_nzz>89Bq#jJ$72LRnYYPsb zKj@*>XbKi54}U!H&`^zDBZh+!dhIRV!XPSd@?gs9yLh{&Y7Y*h5F3NH7O_INqvWi zx4f>R9%(^Qzj|1{Rr7|6uS6CNmAJ|D%kvbe%$v_{RvVmD03_)61tu4)N4A_ z>Z$nq4=Tb^eXBP!3Exj`iUSv6yEPP%8Zp#B(?imw)F}%|rDe!sifxt5mV||F*|Ly} zu?i(OMgnaJtZ%lk*$wck?GgUXlZ!b0#M8KZDn+x73i4-osc0UE~8Y8ENI0^VvGp<6wfK(TD}RAZ<@H% z(kV(Kp+f(y9EPNUl0?Kfc9fv*TBz9?24MzEqxh4UR3zCG=!uCDF~fowJ#Q01xsFAv zgxPWp{=Scxzu%~$;-nb--|W3Tj=Y+i9O6)~6(4-St4^z2c%q6g%d9$ir)98Clp zu10^Jm5MkqhhdA37=6ZuNi1Atc>q3x7@ZbkIaqHt5qLJ%k_62>!qgqX$|>3=ei*-< zhk|}qse6bRaA<973DgK(bIlI{>HwdU2rL(VrS(QRG{4-h^Wz*=Tq=%OVuD?M{yE&a za}N#A!FW1FXLSk7%N=x9SJ3QqWQ=_B(_f&|sAFY)6~FlShFFDeoY@r4`Q4lMaQWf| zR4R4h2!`8*yTZzHvi@Cu3Ld=-)D;lb8@JlH+N#_Bg<`yRsH1Ow`WMk$P> zf#|3}+NDR1HFPH-K+M9z!FF$geiq9?3}STq$5`of)S*TQF9U-i_3IK5 zQBpKc?C=KZK?d%VznCt^k~KS)j!@r6KgnP^(r@t<=;S zTP}z6GQ#zeDhm7iUEIF6jn}SSf*%H=k4f(qghZhM-Dr|wNc{zRL;31M?a_@!QXWa> z>nd4(r#e$bl@5@4rA#URBvXg=RlVq0GbJG=1lz1Ub4x<6Y)jE(8ZS-?%FCOzbE5n_ zRfQDssIA%5{plefU%uQoRlD;|lyR2hkN2aAIF-i9seby(Sef?-;l>F)&o3*Ux-7P% zv*x|%6m@+}*~cWEtn>fp7$07LzhCz`A8qH+lwY@xvi_-Wb}A}`$i9E|o3G=YfAo$5 z=XE{t20@_WpZw^@_!octN7&!pmxYOVZ$J1?{}0~$?zhBxbZ6@!-ud45MYp5TY$_bP zAi!um#!D~1C^&E=&i?E#{v5ym`~M8>RtMCPBXA}0_5S!@{xOb@kCCXg4FCWj07*na zR8XsOy9IpTgX?*iPA5Vv{_lVJm-y*>Kb6H(J(1cNANL&3`o=h4^dIX!GNqoWK@qem zrGG9X+_=fvA(og!9WugA7-HF2$R}fhS{f{lOh24vIt=jQ+eJn;n<#RHay8^Spth3KjA9`2QjD?*mOE>hZcSjP85+wTw)b{H zr|pKNTy<6K3hc}h&WxW{QKSv@f)Uct7BS~idl^R6LK2M8Y;1yn+jOSx`xT_7fgm8U zUHY!&x2K_q<>JzrRpfRbXQ~$daSCjuE~-TvNzcOmPKe=t*OugRt#R=$_=j{vMB zaQPiekZ8e$E4gmv3zapTJWbIREZ6gA8fs->?pbjZV-m#p_S7Yu^wN+KC-I7_f%(kiArwn|kzVP7oeSG+{53$nfAc;dn(NsWp*VorY@0WV2 zXV0Do-)9m`&}_5>z+5bXc}V6|GYmxW1Vifg8V(%KLbY1M`lrcyq3)s|W0=HW0OZS6RCbr)0JBcHv8^~FP90K~hwfJWXh7+t2ESSjIa zN*D}sl_+M6xiQh}KuNsGy{YFD(P^m+B6@NxL+)Go{`heys-)ZSjkb@CR#muBgbC?1 zGI6=2FwkgmC~sNn`i=oNo&fzLI2SLAvi#kLJ3?%1wi`Gc^)a@#FvG1|dx)F?#+3{&REg5>;m`?TyEUL%AhD-Py(qUpLfjNP5B072fV99B z;*B4J zIc^&TM%z1>930`wOE04v#BhuRXU}iq@|BBNTVKc8>Z$W{R5CR7Vul{s!r2%@3o2qXrj>U=&D8Z>Tj8jgq{`~5Da{uG{{ zp>0>t&-(Zezq*ScFmZNeO&s4-kB&Z|oAowo)jDY8L#)1Y8`to`&AX@+Ei|faH0nNT zwvS3?B6+xrhqv$GV<*Sv3(ujw)Ix3)m=J$12!-42R_G^`Tq^ojZJaV zyIf9dszNYG_+@@ifj%NeN~r_)kgmnz5S^8?`26lo5y@_>t;*aa?&9Y91+1-Y2n17@ z#yC7YM!$O`#G$~2&;Z4zgoB0=G=@o#Oe1kSMp&k(*%JLXN++gafbn=D_e~NbCO5kP z_I3|&`_=e11OeIeFi|M74BTKvTln#6V} z-l8(`$={>T{TtxI@xd4WPImbvV~Y*Y0WMYBG6lRu4elgIPBA4xX2rLb@)apAwW$1W zQc>I$5ubp`T8a@+-nLnJVhGfIv|;akjyxN~uQgFkxTzQ-4x)cX z*Qe$(Nh~=dY&YV9dmb_s&!M*zr?22^>~4i|WxwoqqQUUf9#7z(t#p$}nfg@ZZOY}#`DdUNneRa6H%T% z7I_Lc0pIhmwY4oA2*WYOsu093bOcQ69>LRj9$Qg7?_37M|a*kzSLR7g6&oq9;gK zN_nL~XR`*w9-@&<@ZB&&_IZdApQ~Yu=Y^!m;Mf`Vi5F(u7)(N>g^jk$v1uvYA7XG7 zF`_6ymc*i@PVuSu?UaFE4lRm7GgI79{mz?jqPiLb@BS^mowV@Zt(-;gtdAdi7Jhi6 zi~YMp03-rj6ow-nET{)bS6pJK!q-YD7Wt!QIys%}N4-B0vvQ7!B3!xVpM2q8Dn{l5 zb=1O1A3wiy1GjJ8#`BjiWAnLd*gSt8$)GRTVDu51(b^XV-uUjf5eK1ozo7qS83Hs` z3L_EYRU0itd4?-5Tm`b5*tvBZZR--6s~t@82`mqoh@LCp5DLbyg$qo`8md3gyMj|W zMld0ko5EXLT5F-c+Qd$82NlA+_$dak@PGAt_~m{dh26kXrH#7Vh8Zi1Vyoi7>aCJ-wbbcFPM4Ic)`if;rN1)5%Pd_77Oz|_7YgaDSqD0S<(RloR!0}F^UfAK zE?d)WmC+NIr{$d}_*)&(goYj=v$0jaZ4Nh`r?2wD%80t0$XU!jF& z6{rBbv%M{ZUZ>NMQ}^-FvFN{W0ctO`#d8CF&R)BE4c%T>9N5#n56ja(E&ZYrlaBf= z4<6jdzxbm+!mXRP1RJi`@8QOc8}f`_{8V35VlF-`6D4P8;U%at1h+nZ53juOHvag3`0sJ+#^*BM0)p!LbqUj1JuPPYIo+1I;the` z78GO;zo`hsK_6y(^)!kgfZw@m*WjiJ#@#L|XVyT7izz0^LQ@P$EZUKqJlMsei&=3i zs5a}M1&QU`;^Cs+sN#iJU%)gSA@Qc5uGT2YFbYh(JB-j90~Hup-dM&)tBu}3`H-b( znuiOe^GR-%FyRmfX$$oeEaMkZty`#A`i zLkm?xpj^4~g1o1DTldj!)&yo}X{jT|UBh8dJW_D#(VDj6DT4_T;bJjORSMe_2pt}9 z$0We{U!yJ@Iyvdv9Z9Z57*F+v2D1um18cvAnvB z*Is*FbmO=X(JJfxpTCbc-*^*#wSqtW(|?VN7cb%3wQDo$(^|bIx6Tvhg^L&Ep8o95 z{w?SO_44J*a(eyg&whIP@qVp17eW2UhICkQ!Je^c9uO&Bq+dtz?MMWBB`yS=#3#g( zqEVPwIH+BoUzD&SRDKsO15ejnbm`tpapQQ}=4K)~a|FX3D&WzCXz#0M5N(`AJnduo z@D3`y`!J|iW>E7=xnWaVv*NUg6LuLiYOE;zug9!G^5`d52DPAaS7ig_T-X9c{NjZb zTs_wk?u(KN83J)aw`a6ICEP7#X5=h5rY&iN((rv-ESqV~S`<{eA7i=hW20Teolz)m zjzYVNvn>P9cLD3BiB?#{^mu~es)<3%!AAk`8HwA>N7G+IPKV}G8^nJj%m?3PtJT10 z+J~8%Fe`P@b4r6q#c%pv6-PWb z&}|=qjyWVrL{g+oo5h5dwn<-zkLUi2{~E`)Z{T3Cht|cjD8dZmj09ecoYvKadhR$4 zW$mE5Ez2kO%o6u_FTC&7Ec8Pbf#SV;$%PU#-5kG~^~hmj$-n+kU^iIkU;G!sn(IinQ? zQW|}XM@Tc~m#zv8Q`8IiPU+>Ou!(c&i*BhvhY(|suHZZuTMzayoyOw3l#+vBGQz8` zyokg87-!F3M59*6_U;1?0JK|67>@gbe>om24j`?P2@OKRi^d4kAW~vf(?G*($n4^{ zB$gwIP0#m5*R|zW#rQ;~uVUVd_YbR4Qy}Q{_CnYbt{*g*22ddf@i*g2OAj}`A>INP z2eR1pPsP>ZFi%x+T}Ibsz9z0zSnILL7N8(o31fuml(GP~|V& ziw>S%=T4-vf4xAm(S@)sH=~Zq4Om7RGg+36>kbyLWxCGSb#xKkwvOxTtgW)ZEdBBE z)7iS&udk230e>)@x+fNxb9_~dv*Q%GrZc4VlV6oF`W)ST zxPyQH7k?$Luc$v&sa5gDx8KC=&u`&ZzxtK9z@o>6?R(q!SO4?>D#Q*?wM71>(`+tK zL=C55!_}9r;V*9dIr{y9h%>lJ_qshixO*SAtIGcApZp1I(Nj^U>nM(8k)-u0ExEq= z#vAB%d-!*M_3y+VBE@plW6^I&zk%P}m2aY)bDC5BERB=4p*)7fnk9azP#8qLa$y+! zTl`Yxtmc`GUDD|$^~_{`miItnuvD<;otdHtue?VXgl9-%n6zf=v@vXNB5JOnF}i}r z?hW{Z9T-_4{vGMpQ_kRABV-(qnB#+~aWj9!h5Ry+#rabsMiFlr9E6sS*zn={zzC<??NRsqy2OUQcUYg7Dv|RWJ}Q z8MF`aWV1|Zz(95l#isl)ymx-{4CvH5xN_+-%ubH&@dUT>0GEv(f};qQ&G0RQUW{5ih&y|?lF`SmJXh;J zhSNYe{{*vfNVHlOViNwQfrMTd3KDrr57eeX0d;?=Hd4B*;~|RTR=&&KokKCSA*XK8 zKZN7Es8$;26rNb(#&IYdx#gu*9CY_Vl?A~;%riKSCxjX2VK5#Ecbu;5MBTxypjN42 zG9Abv*L5rM?y1L0eZiQV{qn%c`{DtKhh4`6;v_^I`I0YOeR6u~S2B>&!cOLg+*bPbl+sGT#8-lpZx-`HeiK zfzw$hN3R~Ei}#>P=xta?HXcr9I+MIh)_eLlW(jV%^kX`l4uxo9%?ugt-MTBL_*~F- zx3=-{-jPV zl@^+(Ug*~LL-0@kdcB?wE)Z~E{A{yIPY7tMQ#Hrbc}bszo>1lS$y_2hy(1Hau(lo9MPSF>-3C4$q-JJ%%^jg&p+ZP??(|7a2z604}^cN#kRwaiVhcm*WUxSb2#^ zxj7O~u5b~97+MzI-;R(Q9xg4JsFL+WLX;q>RxTnmx>2GYj`(jiDAp+iLyeq*Qrato zJGn%jWuVh(;9}jx;n5I_pS%bA3+h^~nd=h7-QoFXG}VEXdWxZxGN5vnhm4$iDD3(U&F_Ac%m?qRog z0LKUr9}^uvk>{%X>j|#jtKq-7n&Br)6YK>E0x<^36c-ji5&(8sgH^cj%m%9U4b&@V zQTLYx_?0j^V-nX-pPr8&Zwsl)f3l4r;v?Aj(Yx>Ctyiw$?YG_(OIvc&FK(`gE*8O} zeH2K7KxlY}dWtk&v8X4QBNtISiEv`vx$v6war!{?sha1WM}AmC+}*m`0#KR=UNi6b0%juz^TGzzH%u>W|P10=Ug48Z{p#MfWJg zvYldka>c8jgP6`^U7UR5@^^wO$26AJTlVRj(&;Q$&OR17acW zP0B_sn=^A3h(X<++>5ph)3;WZ)%Q7TbQaJBOKzXO2kBD%vsiQ?`Rm{pzX5gfJ~_(u zXj0@C|5YJrt<01Qhu}i)yxcU7ThY1P7?)O-#I*kIox89t z8?9Okqv1e6d8wC1QHJGkp;tp)aZzl6-q6Me>q~1GPbcD;fzIbSC8*2Rs<&lP8;yr> zsKm^+K%bqSz>x4hhJz7;Fp%*`zo``Kjwe$A6DFsRT*1>rQ9beEQ$1^#94#eAWlh2k zs5yPQr!Ubi?LR^;m7XZIQ<6c9w<5JsM20|X(CvbP>)_X-Xo#Dq`U+yHDtKAs3@NoF zH4Z2QQ9s_RVGv|j5qH$PqeE`$kC{UQxf39!7lzg*Cap7YmoB3=Iz%<-!U_j4rvrsO zM~p6xFOi+;bx^G-LWs_YHf~_FuB{+4=|j{NPX}p1qKrB}1wPuF;Aj%#+vh5Hc@3x$ z*p|LXb5nG12(=-^t3@t`BM!C+x4{w0g8`{Hf~8WwhdO(vYl@P2tGb4B@fe+7rJxV2 z*oYAmq9TcKG>))KIEB6oYg`rB5W8@ZL__3bdJdVQaGEkF;z@)?r2&)rS@i~v@9!Xw z6Vd4`Xz@q_nbv@riE7Qk@MwgOe{vmRCBdz|9mM$<=Nl$As|J#T424gOehZTy2DtR8 zf#o*}+`kmzppgmwT4R{O7$-2-tLXf}tGM&P!DdXo#Q*>x07*naRE>{_XLbP%e-kyk zf{JO&yO25i6^5D~58U!-(YSjwz+ra;uhK%T>fqB)Kf}S%G2Z^xTkvcjhvTkT;8rMN zCdFC$~m_TL@6ycbK&lY@_vz{z0}0f?p?&A4mxY==ns#u)>+2I=P%%3 z)D?IQLJI}X7#6vjRsp~5Aaf@8`2I~8ZjMTG32tpD7Ri-#51pcmm2(a31w-6D?7>KU zxQUNtw~4jYWieVJ{@-8{VL%I2+rg^m;cTOchT|b0PmxSQ434_E`(PV`EWx#_&tYYy z4wpteHeK1Nxi%e-F+4g%_h3)Pq_g6~wmkvvr3VxeX^MWA388k;LU}e&+GEtSt6=Ny z1MF_?VRdx_pB(HUjzU?-&YZgh>Jx^+6!lgegHa!&QCIp{UptS{xG#MqQG)4oAcQp6 zUOB*&h7`o4BbP5t>9r(A944qV>k1CYbi{{hB5PwVhDdZXN0Dw`q;Tj_V>H2jaD+Oo zfU6Z*N276oNsx&c`3VG^9!5{Ta%{>X^td9684_M7JW)C=3Ja2a5Gi?i-@T$g7$ISggl#VV&-V0%J`>9V}aPO0ni zTK>)2(P<~|M)y9uE|i}InRy~ID}5?(y3pzPsp7w-Q8mKUzv>k%q%0o@<%I1&PzI{x9F6b|BE5S8gM8q*%kpbKNt1>!&mZLy%# z%IvZ@kctFiyMf4RBQ6}I8L`}GVNA&b2~>(h3)~-s2;&q*R>jL3HfjW;60QY(jM~a; z1IZpL`-|HjJ|?*uihvVC4zVMkOR*T49mB5VcbjWTXObfVtk2Iv9evxTnaCk^W3Yalb?K!2$wKj!A7)~>M z_}LEJnuFAfG0ieWRTm#LV=P}S;B~3r<-_(XfR`g0gsA>~f*03fTy3T>rWwqG48}Ca zKY8a2{Fie4pKmoV4qarECS0cqha&Yzad%{II62kjoqy?nN@=*|*Rgq~g7uAcfp3v9 z0~7SmnmZQ!N(EM$in>D_hww=Nn?Pj0_z`->c7@R3Yv3_~M${HL$7J!unOLLJ=wi8E z!?1UV@o0?R!4_7}t-(5;pcw>6?J6dN2u3A?;nFE>B8Q5>a1TvmimR0xu4PqRI36P( zgt-5UUA$A&(Hm#@>+L(3_y%srHU?t{vA=@OriE#0Ae)YGadjQl*Wo&w_~i2&$R~aHSQb4zQe;_@p+6d-*B{{i-MbhL`lwc$h@(XQLW*X2 zh~m7Z&KO?+U&Ml5EXTIErHexR>?iNx%9WRJ|G`~>`j{FPUcB}yJg=f*d&l;vQ%7Qre-!6dt3C+-!vhR;B|Y25@$oTS$Cvpb zULCR&4lUU^FxUpqM`GbmUR5=xy z5n_y<;I@^87cYEVzUf&x85#2unrkM>I**H?8bG=rqiR&?6n!o4MinTFs1vm6_enLS zgR&7_S+{xe`t;nBWq%uDdIUc1S^2KW&srFG3&ozCvrtHanj}-Bld&?TJX7d<(B*V} zrmNoPTs57?tIl6cTMSdLW$WI3be7w2T@TbZ+uPYgyVF6x*Tcd7K9*OOkwhsRCld>* z>12vKpWha@JnVefAL91S+n}Bt7a;z=|GWPPdwaVA#{1ym7CMB%7*ECel;RIAj@@oo z>2s7;tTb9!U0V|a2oiAbyz@3T);Dndv+H8%cKX>DpW|7>1Q{i$?OcSa2$E-QM^;qv zXpq22$pPThFAspE*2r;6AR9M`y~a&~`J}^m4+>90sbk3LoWxV9Q$^xJTqclP#6?`W zxS}YQV83GAkS3yQ1h4e4ARe&@*h^>=4+*W)ygI^q8$(<`&oEJ;YoyTuDm%B}_O@Y8 zj*;iF=n<)LW+1g&m^d9I1^r?s!uccjjRYLasCxly!^D1&;71Pw7*-Q6uGnZe1&B?o z{H7{ALCYjmj9R-$+)@{b)^frz@mQFnnB2h-9bUq69FO1@rig|@x)^er zs8~LlW*e55+O8g*lr!Q_L7LNrrl%VDhel5$Vg5e8j+B@YzS8| z$Rp%Y2Ft6%NetY~CV1`}IbPkekq%uLjtke!5E3dU%aQK^qL4>_tyzJkS{1d(NA=H+ zaN!SoFxppPlO;=qf2wp5AB~@n#KSWWws{4L{o**q!Cnt%*Ow7aC%C!256gA2y1ar` zdkKxYhrn`?q_kQraJYAfD5UE%sWFPuRTO%Pi>Al=0q$rx|+Dp)X|b58HQ-FzyAY7#`|Q9SyH4 z?X@ZuTwGtmcV0M$y}?Ad_7tg3_&rSs@iLeOpshu{(S~KYh>{RV6d??#pK8G+(JBn@ z(u)T1Lri*Ipif;}j3<8jAba&;Wx7}EDCXA}Lc)|wrpVl6w8?~rCOk|Yxk z4gB&V>dxtbCB<^1B_K`HIK^-}#onloy62!?rM0XjhhIuN6tK`^hT5ZB)}tx&;a2V> zCla0OjRNG}4-OubgZ{?ADSjf`1RkHu) zH=ska0y^RA>*L;l9#W6XQ)wqlD7_}V39`f~vgAZ@oySBSesWKe!=hjI+ZEKKaB;AI zfWQ9t|F_=Klx`cv5W*xe(L3(p_VwEe%Z-ZZ6g`+U`6oAl&=5AZA8h02KmD1w*dm(v z&dv^Qe*QV)JQlGNp+bK7(Jw)V*s`$;hkE`jkGti&ckhTpYeE%#$)}$;_@zSZRrSny z_PBfa!e;osxd>0WD^n~=qKk=ik3}(O29xf1N=0{yYIy>m9r{bp2m*ji!iJWa)Ws1@ zD7BdolPWWb{7+(tL?DeN=(U0PW8@$y1blK82vBO$M`*~SdJZ$Sgge4AspWv^d!bW> zwQ&{p*{f&-Jv8_4!FhNC=FvS-cu(DB1kMry%ZEu$4hc8vNRi+a))gPG9Fqny!Au-X zQ~cloeV5kp&2=AjFN5pkg6&3Pg?f^r&@GU7%Ac#_y0Cl?R<(vypd3u3PKcH95cy|A zm`)Ar8>`4BeFR4%u@JQDb#$y6&YeAj^w>n0QYqbr9~lU{Q`9zEh>T1)BBXQusw5V%W^+w`wJ-9u^tLK~eM#sj@H^+GQS``ltCh+1I z$D;`0BoMD0w$l_5p>24m`97){VK#c0bPv&NG;wK(o;EBDqX@m+L<9q)!bjlysJB+& z)AgF*<`uBWScwy4R*sBr-^h!L6Pb4eDWQ8bv7fdbj0R);{onlq-gx~jY~8;r9I{@& zkMDf@+XBQbn1+p-SdG`}ZLDSm?r+^f_vlFARTKn?I;>cxBNp1EBrJ`U|<8*ZgGOBaHT5{+^_q4<;pU$s`3Hc}3vJVzME*x5gXk;ZuL(k7bqCTfm}k^NL> z_8ftn#9#C~UFLLrUjMO+^oefNqM>RmwnJ)8$JKR_gQoJ>x;pvFW~hlaDb74i5i;RK zrxItrnsX%|Qz9y5{si;TJV$R0`n1ngU7?<<(hJ-(CY+erx)n|6F|Nxm6g{E5UT#UV zc1~|h^ET&qdpe}coKFAkjPq^i(e5q+{O4Ly`q-A7&LI3K2!Fne}swzd_ z^E|freYv?3D@^xVj-RrUo>m-1)LRnH4)a8e#<56_5~Ji~aKUgyf%^LO&xEj}9u7Ci zUXKXvfNxP`pz5fRS^i7HK-6m0y^%QFdZ>&U6z@qt#jk(m)R4uIX!_+mA+W6uKWh(k zRG){LoO(qEjFhi%b+`*E?z$K|mJN&YxF|{USxH3X!il4!bgGb(z$1N>nal>@H0c89r#VUdmKyUy33&^z`Dc$;bWyd z$tbZ}!FTVVpg6j4P_YdhSRsD-&II2&3}GA^=(HTH)EdYWS2$YTE+H-G%-s;TR2KCB zU0^Bnu~vjw+X(U9)hd2k#CZRD0H5#l*ZfiUv{tR++i$&!AHDYr0hcA=Mb}f|bbyaP z{s@z4fQ^kcOv4ai6r-rnJ48*mz&sz20m^B|u}1Aaep{|KId!p;6qQC3K@{UKE6`d! zhvxDoR#!K1H0X-HrSaS=sNBB+V|y1xF~)eMKukTwkH(lj1R85G8b(tHjNRP>9PA$< zibHr6N5=U1v*+;YrAx4W*u~2aLuB8bB5P#0KS*JjOK>X&HeX+Zn|2T#WvIfILy_&f z=y=NrM`HnLPLD$I-XWZ+dJ{ga-OUuOs)?1=I=WRKd7O(OOen;;(*NTjiQkN~E~DsH zEOKqo8kJVm-GjcUJn&HUiw{4-$|~{j9Bgi!5soI;#(-9$QADF&+`e-I-R^m&X*fkp z4>p!sZxKfz*4)jT6P#J@V70R(-}Ni&z&+FWl&6?)AhMF5Xh7xZ&19C(gfdYzF&CRk z87(GdTT)g6x=PuMuA}l)x0=vXG5MDZl_H-O5>EwXGtir(+T2uK{>$`*G|_!4(@LU@ zn~Ex<78=>wW^J;rYDN9KP*-=N%a)sxPS&;L79_F!XR%zFDR(dboG7>$`8v!uusB@H zH}aSyl_LZWbJd@elW}{ph8m)}jJ}@iOdm{65*v?vu=0-P7q<4aQo7xF4Tk15PUb73 zOG?Oduw1DS&Ur%cR@0T*`aY@iq)I75?PNbE-zUqlS#s*+cVe7AQu8Y$s5?>5$1s07 zt&Be9GJkq?-!gCMQb@qw$~B2AGMnU7rrr^`nfw#p2-j@Rb(KlKsoX~RmlJwI3>LU9 z@g1^E4wDU(8?G2Z(CC3p(1(r?e&zj3C$Vq>31eV*Rq@-&4O;Z z-9ghQqCL5_bRWibmHKcQXpby}ze_)vmKeN*#Rz#eMDwBI`q9$^T?4h3JD45~XtXFw z-4vBs0ewE!Fd0TjMq{*XA1l5G+wl-ot7tb{X!$kaXzU(uVc0zsP6xl0nhT_mwWkCF zMw*~VEEH6P7g2YP3|QN-7iJN-cuzOcC^U(Q+C{DMz&lJN#?@D2B64+`jh!z1{%yf6F;acT6PoNxWUZ z{wYS|0X8?!2!|;QM#!T;aUC-YQ5pzQBX%db@?FX?sb~lbSvbLD(8t{e%F_oi?>eIp zFTZ+OZ~!Op5L|o#?!JY3ZyQMw!dZ_H1rv04CP)wVaOu(+tSq+?g~VPXN3I8u{-BRRZ;WAofOtAV?<1Hd=pFa*;)^d}e}4-HM+X9FMEtxUpuquk%xM0bV{7Xk?r+`0!Qs9T zZ1gEh<1c<6i(*q*UAXRsuw9gQCH{8I{j1o*vS=s zp^Wr@dNY(b3(3wYyMbz2H#Wbj`&YTr?5yrWC%PTkNLW@c`nt^H;%Y%vi~Zt~&#*49 zi898y8uO=fXVlt4cdAV(b+QRn^~ArbfG(yQIh}T*LK&IYcwFw+X?z0<JYhDP7Y6F->ScVP(i2Mj z=St?Ca5`(+a54OB_dxcA5@i_TsfsPjQG4D2KOi>?56@0lDejEC7e0%0J74>SNEiB&@>CnUlNf({vkN0@ z;q^@iHBWIl_-06|l3*oAGD>2B?I4Uzchtwj^az$6z@x4@GSCH=Nf%0k0csT=a8l5P z){w+gl%qjt3?3N56dk*P7QGWRD{vY<{6-U~_}D(&#`O<=B53`FO<%C;`-mO#GwD9h0MZ3XX+69Vaf>C!D;jk;p z{^SDPE-c)=br-L{{VJ}#b`4RZhF-&iIcy>s-$FREUNVgq{7nXoYJ6*Ftw! zOSKAq@xjM%@*J>Th3KZZ(=p-eL%*c;&a0!lu2pqMP17z3$VBQ5Z&If zNK5#=jt_TGb2E5FjMa{fRm+2!(`w3uiyTwVFEwh^pg%E!eiIRW=TB(skxh-|SV!vV z%1^jAojrR!DnZd_>XfWDMP0BY_T*l4ntr9_4Kn#u(qnJ^kurLxm~VdbBFxhpi3*== zQ`gZ~=Cbywzp_Ei@sKuTchVV)t(IxCq=ooGP-Q=oFst?372tc&s|!*u29hgdTV2Pbm6?WJR#e#ilZEWWGG1!c&sTTQmv1PnHrtf_$qo%*PZ3sgh$x z_69*y#R`+k?G)qEv125n<0IdfF-LdU*><9y{ z9Hnw^rI?6H@Vny-e}89$FmSNyPT>}zV8mGkeL3bBlMAwT7H%`e!OmUmPIqwA-oyE` zCY;a`tJj)sqPM?~QLiha_h~%A_L%qGLbb55H;Ul96)Z2;kY}#wIYnj!GSPN-?%?p? zAqG1Skc=l{wWkM~9(nQ#MU+Z{Sh+f*fdf5i5Z=Vf97I#<>oxF?uf8ajw|{q~hl{`O zVEa=Kn}l>QEM&yp%7Cgx7w9qa+!jp4u^pltOtI9okOv{AU8*6p;JX&4B&79?JY{S> zF-we?Em5vN?03=hszNyAw8EtGbq+r=fwLT=ejmfp0BdV&Sl>8`(3N{2Sgv37P<0$J{P2qeRvIEJdP3y(ckUu}YdAPQ#<_Es;8k1TVZBt!z`L z^VQ1>m4C{%AGdihjb+rIE+N<1EY-vr%aHU|RNK5Bt20)nOFeBFSGFx_S|3hz#~kT) z*8ePF_I75YLW)X_#iUs|buY81Zg?@_w>Uf-6!H!hV|=4(%q_g0#RBRBohY@Kt?TME z9cODyTa4=-%CD%S3&hx|oKsP0QxC;iZ52>OAFZHM^ibC0q#Uga1Cj0MT%D}qY(uxR z*zIE4Vt7{Ov5B+XuN)|+Upc?a>G)M!BM~5*U?~_Qk;7e7?ww&W;5g^WNK+ycS;57U zK@pMU$cYXdi8HH!DUPeTsF&O}!=ByiY=L5Tv~VL#*r4>X}A{V5znVlHq%mc$$%h(x=YP{Yzi8{f2FMA2(w7>;3?Rrt9Lr>I~lNiYhJgwxS| za2LC`uZ#B&T0GB(5jltI$23KR7V?cq)(F6$1gbMR=Tw?~2&WG77{U+P37_AOuRyLT+Rt3afgKyz==yeU*Vn zBEUo#g>WqktLv+n495aJL(Yw3*+M!P7Cls?BC_A#-Nke=#M$!~(WusOeB4!z>?zo% zb!DxJR=pyAZC%e(SY!sBu6w9e>jFA!+Ae}9Km-#<-9A43YzwPrR|LLg|0qKH!t*%V zY~h#x<1XH;^-#Ht=g5Pz-Ytkts`woMEB zlN60=8|PM^Lv~~!oKA81`OEO56va3||KJGqW<@M$`Ta;hiSdeG75zv0Dn05Bgq!Mw z1O`qKW;w#)0KI;x=0HnPa?BiJ9Of8Lr^wO(x9&ecXjoWU+Z4|pb)PUbbb&P#;)_J_ z!NCr^iVxqbz;zTMMvGrs8}rBW8r27Apg{L>3S5jjuRLSXVpge^5OkM^0n#WQ^;Th^ z(yB@u#MNwemQk(e@INmIT$T3M{5Y>-B!F&l5svvxop{47{1ksVN zd{tYRnssG(HU)K@jh95+LXtY1YT{1cfNpPooo$dznzhX^^?EdSOxK@Z=M!+D5ECUs zFW`);lCqWQN(;oAs!(oxC6Oj+C(6$I)#XoK*^REC`Yc;i#ZFhBEoqB&77KkH{<3dC zhRqWStGsfoJ+6!l($g9ICbB!LjHkRQxIh2^AOJ~3K~#01hZ{>S3_0E6{Og_!&10(M zY^>;ty4_hp9njZ#L8h?&JZB!#t)DEdW4hewtIp?D=PjoFCcBx94vL(7C)feU`eEvfU-i6Q6Gy5r~ zIy%Qr#hs54+rnuh=MRn&_X^91&rby?5+Qj8b4o5@j-uUw`SMj{ckaPB*a5OYL^?8x zP2$^$Cn|YP^`wgUq_Q{r7g4cIO}z}G+{K`1BaJ3Vjt-@tYp=hB&b4o1XE4Q4Ji^2R zvUUgF`6_G@dvT8SdL5o+!mYNjw7dd4Ofg!{F!d{#PPy4SICFL##jrpnHel9Q&?IFz zpd6dr&_ak95-{ou@L&C1ba*~t#0-dgF0F#O0fz~yH5Y&Mz1Q%X+B4`;Ui8Bgo81xkbuYy(G4Zu*X)~q#i7jiOzsl> zX%fkw@IRG`i8A1rWMRNV?QTqj2%rr+0C# zejY2En^^TLgq(w$nu&H=Xkdqpcn0|N_1BQgK9Ev#gXwXEp3eH6sLc|JjXF0GPrITmdwurlvG{tB< zhVNGdpm`9aXg4Yd;{d(>7?UUw0+yIHB)p%IfYTF0k4nb*(-WtRK5{u-?~ww}kf8h0 zS5{pJ3q8lU{?kn_l+j62Mu{5KD)5+1N*QZ0!%5Tcn zX2W2yq9mTq(Q$o!eBF~(^~llJ#nGe(B0HYvKepAf=)7ljv!~;y>pq&l_>f;M%qgP( zf4=xpO#wZXNYb z2d3kL1g~imqs$d9lW=rW!n$;(TbWl|NJ_F*g6)M=q!tHDWPd1gLWY-SkH314o* zH9QQ$7{A(kfHRdAhIWby4=ibh(TLoz9HZeFlQ>4TUcqv+g0rnUTCN8#43Hl8s1Axs zVIZQ9T49cPvH%cgk=ShHUQ^dh0FX<9s$TJMX{`gxY2XgQa+gTlQ1Jb7;e+!FQ&*8z$-GArenO}T4MLqmDqhk`m10+3l_3fVJFij^{60g( zu}YUPTFkRGN;Uydn^~&c?G>p&Wb(To$)#K-{We|cLhbHv5YFu ze-$yd5Z7%bz||?&f9L8)HHo zow}=ehw~N|Zd0-sTRNSm>MzutH~8!!xxxATEN}SP+mUa?yH+AnMFr^Zcd9x4a6;@U zf~zM1L zDlZE0j6(gxX+lx1FT`9Jr2^wYk)9X<>owHT#=)?MAFjt({hbh-f0H9jQ*4d; zIL;!xcxD6jYK;D1h=ao}>a_|g6;E&}jVQywi_uLe{^hNjSZ%d1=uL6`um?mL?0}w4 zh~H*{mZ5f*B8_A0j>h=l?npRmXIdS+@!WZwKeLHeNMnQ{qG^Dr8VRvA4FVy~!!#DL zc}4)=Oo^Xk@jMb^G@0V!MicolElvyNB93B88W&|bg6R-ptbFx~hJhh~EV6Ww9wFyU zNmDpIi3vxXJz^>n%!h=v!WHCmkn2g&H#wi=4D!c5Qo71#o6PI;mp< zNe3?U!&-75Wquh`wlcUS%YuR8qn%EO_ z^uKbQ)A+L+QDszA!g}1yO0Z^GYF7Vb%c>WhrmyT;k8GW$#=687#*%KINjj{%XIY)5 zuZwx|Tsq-5c-8%~Pu=fg_?f$shog^A^&=SQ?CXn?6(3#`I@D29{yus~%tMgJBWqh-lRo4vIQZ6OUc_871^T0f1Rp@UXb0a5E8z1Le}nKm_`0 zAz!MSo3>1UrIpZ3*Zedf}O&&#`12V=UhB4ELi{3%9OEh~rrKgMHS)rUtJbY2p@(B0Q4PahwU>n-BxA zgivcVZS)6Yj7DQ2%Az=e@3=A^O=QBkJ3KrQb7tv{aaa1ahv@!MfuRI1t_aDKZbJ8%^|w3I6VCfj=Asu>MnwXdGhi=m3MG zAzpj#JT6^0i{t(PqrpfxdVGKOc@xv~8IA+Ov1CZ|93Bd+G%DDl@86spEoC9h*AW{z zGK%4o9Npsq9+KlZ9OK<2#sACRo5om{UFCw`8SfZ#M9x`RRaq`qm4|1HpABZP-2&Qr z3}O_MUW=xiAGB!1Ai94vLgH8dpalXXCLtj){ou!wP(LIdmVgGz#)b!F*Wj8f=OHp< zyu-O?ZhdR*ea^WzA~GY=Sp~M^WX3&vSbObh?Y-Aod+)XW`t#4@Lr*=1kG=mHoIia6 z**HQ({c+w+Yb1qRz^6@I*ORxHl~X=UByq0K^Kvm# z+NSkGkal)=HbuAO*)xxz&8_^DTjzbW+8rH}ULaDzc8ec84o0IyOy3=G3-$2S$c8u5 z(gBI~fsh1K6kHMVG!g>pglWg@G~=kPwI^&EiTIdXH8YFDd^yWxDzRD-Gr3kMI4PTG zby#MNlR0tB_yyQb*>xQ)3N3_5TbIlfu7=Y5n||xI@2Z5Aqbg?=LdU`IQ((uQ2WSB< z*p~WiJJ+MZhA84`U!9qTTL#4TSLL5dHsz^MG(#;mM%LjKw&^q#BWP3ADVUf(rmRD! zUFtJ{6=v(GVW-QYzUf$-=7?`Ij7ayE_M7e_VpDLzWn?OX%wUnJh}@XYM?7OC+h=xS zl8L{ei;~-uG7Tua3gD*OiYUo|RTLxB3Gwoqo>MmClrs^&ky|w>C1Rq)Lp1k0G>}b6 z0HtYS&A}1nx?FTbLO`=uI}s8tyfj3=auNl%JhKTkk!T<1ynSoRDSa+71(6cuX^O>8 zAJ4q|B32fAauaegjuGb`vS3amgWUG>&YXd}w1{N)4xB}9B~gNr%VF~Q`8lM~1g*e9 zd@;o9!yz{A0>LoArR{aZw6U3H7#2hDOi`Jq*x4E(8M&BSSjPFM-;ec6Z;F&ewvDwh zr@FW51~QyQfrYk@PrU0ioM?baP{8wgaPks^IL5ivMf~TFzaKlej`i(zY!AmMFK?kW z*p>F?&RjRoMF}wNQew=DA?yhkbG;t?WP(?}cp1;W)W$H%WNU4zFh}%|XQvVLL@q1) z=m#w^h)!K|lZlQ$G6zAcg{2_Ga4?Wd9h5SPelk&|L3_QKFs?VQUB_s92ff85oP6XF z%&(qA?&QLdhLq+Oxm=R)dB~nTahanKiJXU!`U`39Oc*^EIWL2tjcziBYsm0l-!sP7 z-yH&<8p4TkOv)HveCbV$&YZ-fkDL*zE$190=L+Ocm)Ko&kd8^=rJ8bcLM*jC?6zCj zoQy>;H8(2tLJrGDIF13HOmJx(3}H8v8`iJgyoGTQ{4SSgYMlJC+sxX25FS#79U0nF&EJ{{*)M(7vo*== zp$Da*X`D@Zv~CM$A^Emc%eRtrm17la(`osd@zW(fIA$8|q4=b*I%Wi)^*;b|?uc@J zmNl)Co0v7-&#k$ zRH6u|oHszP9pd(lo5&^;bXpx`(HNJUZM^Vugktg-mV2jh?dBb8)$bz*#e~f%TudMXayb2j~%!RIVM?*xrKRL zed8^B<_kA)ZG0YGDrvP^4r~FALVHYOCJ-`YSyG76`uTQ%(rY1=t>6hVF?`NT2yM*G z^~7fAXhh{6G(bUh$_~O#TiTCj=m)zy7>&nbU0_L=xfS#l=H>E9n(FyLN|;IWJWx-j zl@hs@+e4X>W_iQK=o}OkIRU(Jh?jj2Z$2L3-5(#}-17yNM;>~ykM;F+xF>E5V&nQ-2d2oAUCHs#}kxkDrKNVE+|W6afGNyFewY@X@Nq| z2Zp}f2EKgz4&J(S11qgAK6LRhoa2q_R$I1UL*K=S+>TpdBTghsD=i zJd3M0Zp$SOe&}$UlQKxgu|2tc4Qe~~LXpIA9nW%(N!1cWNiKE7@lS4S^L(7^3G>Er zM=K2E`);n^#@+Q>SY2I3w>yuel~uW@vb=HCQH@BQ!Wsehaas(_hg0l9599ZFs^H2o zwPM;(`xXr5rir*ELMJ?_kxY16H}w-rClWIwR)sK0CB9B;bK<-CS0!sWEUW=-#8{^( zj`f;%Bi&5QvDZ$V_il+M)ivF0*`~jCtMsO7c>!dsO;N>2#_Ch1$fXeOBs zseF~A31Kl=%rzX-;)|8%y{)jg8k3>$5E?p*64#eyDGvw|`pZ2S=}qmY!*n zk8-)#$-X0JZhDxX>GV?)#~Td-$Zb7k`xs|wK^%suXR;;}#|d7pjS??KVImGI#pb9e z>dmO&K|}&lL5~{t<;$Pe9BAW`2FnYv2;gNNFqx=LC9Xo$Pshxt@RuqNxSiGS!e8m5 z=(kmp@TV5Kl0!-HJDVH0dHn`fPMyK&^XIX&wkBJ_JA-YclO>(>$d3bTo$0OfV-~*n6cO^cSG9S0v8`wP2 z$5YQdieh(wGET5s6gcVRxKu=P2F@#}(~RtrgLf@-F$sOK4V&-9rW8>%##sq>-Kg(%dsM6 z@CuY(fR8UO;h9Iz;Q3cx$A5YD3wZt3rl=O7Ju(@BJh#TNTIi*SQ8Ga)1D9v?D3$Z{ z!U=DmitZU5?_}EKMlnCGKvQHB^m}a#+Z}Lg`}Elhc=BCOBTFZUlN^KL2%T;RaXc1V zxCKAfe3}U>Ky@sB7|6}zcG%Nx+9^V*JZ3Vo{u!?gKKOm)1PxS7%fG`s)s)y+Hm99( z*rc918%XW4qWNi#&AhE!V{Dlul>}+LVqwoV{PL-)>1-|xGhW!Xqw{W$rE`0d!9n4)5XsAHcH-d zElVU>Ch9HX(nZ{9q3rbG&UY~>V)U~BXV1=~3`UqZ36_fl*DhZ{ySA% z`dJ$P?&Ga1TL`XfBMevZWT%ZA8$-;cKCYB8UI=&bfo_Oy93U1*BZ zM|E-G=hmU9p&;8%W`#G1;|xLD#lk`tbG|2LwRq7XiX0SKDZ1(w7ZxxIW8`Uqv23Rc zm56kR^trXYDQCNGUB80i&JNC;KZpK87aMo)Vry%nTb@ORrG5)&r|`Rava@socqBcS z9}2nPXL-nng_Ay_BFB|>jL~9%*ZMB{B)Qy$^TJhp3_d>j)HwuHI=qwN8|MM9Gr=3V z13&grWFER`$!*fb&_|m$INN%`q;vzoU&4F53-~As45;fZ&oIm;!r0J8ZkVUYCkcut zV&oam2y%-RqK;#(9b&OFF9T1MT$@>!bFarSQI?4A+`-c)R`I`n>qqcs|M1`O+*>z9 zGDrbD^)GVk)pgopZKR+S(xEL>Uu?7bK_Jp!UQm!NRL@uiG26bB45w*=I~%t|jmu*f zAIHYV9bCTjCYI(GvADu*QCB3X)Xf+r5prID;1LMkGL~)GmhR@b9+p>D;QLdGeD6(O z90b#}I1@7CoyKM(?c2moBWwgtM{r70es&tGPJ*h7QB?6FfWsiRkD7Gmr~U6;xh1BLXETOZCF(Xt!;&>a%lau zjg&W6t?RADU?!eyut`INeUr>s-KvPUBMfBtW}rUbcCw{4Nch+ zn(#Wh0cpv#5qU`FO|hH&&4+{f>R)2D^eyfRcP%y4l57696!NwnTMc>d8#o1V6c4f4 zKc-{Jwe&~9qOhEO>K-RnswI#HsQR@U{6?`Sc`F_c*GDPA=G-h7Q44!Vd#M7ZXOXyf zpIC%4>qdo7dmL1a?owkeI2^E{JL(eF~ZD<^+S+Y(jZz?^tMyP#SO zIgDMPh*Ol4U0~?J?=8YPbsD&HTjpDuCn}Q!f#c#mPd$N0FPs-G@jDxLWkE^H0&$We zp?U`2Mb_`i0y-Lufk}j3>EhJd0>0*%RRl{D3_~BMuDj^ZMHt69?%cS6j^9SU6XE*0 zk1P2Q%f)%jb=r9K>J3b;ZeejaM&K>rR?)$=-53|!4p#jD>mq5)M5*b7(vXqb;aq&= z9J;G3xO4qFcDB|<7|Qd6v<~su>Kx85_GA-$LiH04nKoW*@R76}-JZ)MO!641lOW7^ z5yX?r3*6Qs1J83&)YQL|?!p^5n12_rn*;xH^%mAgkE7k6!`%D={IQ3aw}EY^AN6e# zCKDQR&rrw~92L>JqBzz^EcSQ10TuFg;kQd9lNfQy!}>A0-40fk7UVL8vrC1*i7{jRb$sqM>V zX8p(S2WXh+dQJ4bN-n!>4O)$j9>)Za? zx9$Iie=3dAu*G7b^j%Z1(5xvZUyQdfmSL&<22TBoc@}?-%Em}Y9b9|AbeD`%^YKJ% z?2PHc9x)GotBc5MCY_xRYJ#ZgLK$+O&EY&&(F)txDSLSB)(!@)k8Z1nwcLTbI})ud3!aO+2r!|#3o$KKiix3QQXnW| zbUJ;UdGg(uySs?H*RF~I^uQ@_aiuQ@&AF&2ae{&9$i;zl&t@RV0Tcew5S*Y|ERJKetGdIP?DsKo=s#|0eT)TD&t7~WQ_@fsw91n5n zt=CcJ4%SXCA!zY-v?{dbI47NMF|%xu&2D=F3tlJ!rg zV(2WUiil?;DnBRqdNC9X62~9=*C2IAr{=i z3q!|1!7>>j5*8;YUo7B~$ zT*fobzKKuVmPV&GPn%d2(&87NOhlSq%VlDlKpG*r%m!P((4O^}@(`;A*|$p9nqiF? z8DfmHVSHC88~jXFoC>?tqzh`k!2gS?Y;f$pHsrA)qg)#eL>@9T#0Lup&Jm6Gu@UnKeoQbOCfi zDjspU!fRjg9G=_al}0#&Ax)jYcxQs~ZiLA=5eb#I&_h%@`1G|~xSeG=o zJhpxdXNN8H7glg;ZB;BEL`jB#XXggnc=_&|z*Y;+rcr~^>Y_cjfR$*7BHF>mgoe@Q zkWjrs8jG=TIkU&Dup&p6#h+dE?v;}mX(=B9k~$aIzk)^|p-W$bl4bhbR;jEn7(rj|lk zthH0C!BvsLksM}7w0m8>`AOTYVIcIu4R+oDi$HY0H>TkYG7c%Fs4372JS@zI*cs-c z*qN6V0>6dajpba`a<_{cx9@`6ecaAV3*Is=#SZ8Do?3?QQ5r>swB~4soZfd(OvtM5 zAS?rTc@CNp^IY15Em8U{xMd4nw~NdhV;H9h6WUt!;IiK{ZvB!e%aL^wVLo1d_GJuC zj`8?27tqQ&ICZ7K>Lb8*%SGSqpqF(Jc$pj{&B|CV5M?}*$?}MWibBsO$}MR!m@e|P z6sDYK@mNM)@?hKW1BR9$XcdL$$b65tMAd8^M+wiBQ94Px#AMtkZKfjKvYk=QAucS< zWA|)?*YE6Ndon~a8Oa9%%fT+1Oh&>~b4<8Y>|-ow$V?&QzQnEdTeyAmhFm6cgz`0}mL+MM)V{}RAru7Hh$P<$G1StRK< zVP?@3sAe490%FrD-^jpfDWeEifD|9OeeqW~8?aS56xK>NB)E#R#nL<_A91R`hPAGP z!fpKV`(d^KTe~?541rXkb#F8w)vXj-L(G=T(v(8faMo|%v+3xcjgT6K%go?3NDU5Z>CWQ#{>AP15OgK zi{2*YdZTK|m&PscMY|}3{qcLpAuc8D)-4w01^R#!t|R>$aKdypb8 zTZrQVDfNQ2sBOQ%U}u8eJ29^As$I$`!`-oixb)HEmKk>$$td&6t1#xI z0Q*BJJc-AAwxub>w>2!=88Zh~|)k;^YUbC?wl61PBH=17nuDQQX$@N=3+%c+T2 z^bArNF>i-5l5NNv+&RyMQhg0!p$6gk@k7Q>RFo9Cs1BjdyMpH&nT{7&vJ9u@$xynu zxiiN0n75!O=+7^RDXYwwG@HZ`0*~9-RDxXy^GQh^w{C~KyJAL*mr%yE=nzNn1Dxqx2(@+xh%RVBq{*AH8np2n-zQ%1kgd z@y!O#`YmK5T!>nzV+Nsx;hT^8>t7phqRpf%d@y^-ELHW}eD+rPS)6rx!g8|J$1YQX zxWZ?bFu^P9AL03hLJwp0EhmEomGPVGG{{N?ZRt#2242e`o~jm_pMjGCYP_PgZu>Tw z30!jlHUaW#!ZyQ?-3PV66uD1%_D^A3SbMFO)=Vc=pY%Dmy$mCz(9?LU-WR%KoaVrA zaoG&37y~gIY0z3yukcp*n9krfKvf<#oDc>tU;1a#?1{7C%`&T7V@!eMWpi$ZJq)*& z(6*T^@!>Hy(wkeJJj*Y}yvm$ z2|T=RZcoyfJs*i8gFpk>zN&NJqD}@*KxvwRfGOam=JqSk$59h1_nD{%jtpQ+&UHz6 z6rtGOL4N%j{1d0(UwjO~>JrATi&t;nM0aopZZZ_!GAX!?=%Dm76uu|A$>PEhGfu)> z1P-#o!+f`mC;NRYdEDYm@x<4hLTfq4o5Sn4<+iZgaZ&iYxOVHNFtK80XwgNG`FQ-% zHRQcDym{*yBEOBfa1q{kfavBWl&OpH+IhrYOK$iEqmgXO`Lu0H>7y{0+Ws6{Jg1aq z6VW3_Da%4KLbvB5pHOLtZaMZk9bpPmYQX1N!Ms!(qppilRv>l@EYe(4E5JBTu`!I0 zQbmiHHYbb)9ikU>MN+od_i^po2%|}f zI3bTn?uF`P*rzm%KxUQOx0K}i*d3?X7$vwn9wYN}xIIS<#fL79#2*s~2&`UxnXYLm2kZneSr0n<4APNTUdO zYM3@!n(zv}k;|LZR0J)zR4Hwah4zcg6{a)KdD%J@#k;&c%8N*pFj5l7V+UmF*k9y{ z$sls5=2U)78@;?ZC z3iFpFG0vPjFN|aor-*1NB8i0QPO=o;c3&id@nnS2Xoy!{c@dYcUBQKOkKpXtM^SpT z3PEY0i@*;=u`joQXl0$HZn?Qb-9fLB?GtXn4TFZ#wj0 z_&5dGKjLe;9~6I88!FZ`NZ6%vTTl*t5JF{hqUu9#hO%$zW87W>(r^=3>RA_ZOr=N_ zN~6P#YAf_i4`mw;^|kSWf@~?7=~mR17)cyg&7dvT9~>UAwpr7Fx!go`flg1<9XO*g zu)T@oi_amub{XO0kE1+&4qJW)C3TODs8)ov)onY`k44D=&tidx`W;yqsaTbIVP&H&4g&ttQ@g$pNIIOm=MLPuH4;>wO(FwXq^0Ot%W{<>rsD#;trGDG55b!*wns4rQ7jTLGH+a2D7E21#;Z$h zjPf43B2uOJjZ8%Xm*P0GpJCwOn+1i)i)c#A-u_Dw?S~ZahFb7|S_9mp3=Vkf-KoEe&_G z9H0I01Rq{2;cq#(a%M!yWP;CMLI?cvcAD>%Edh;DCA&O0V0 zw@0bmI6;x-@PZN^$4ZOb8WmborAjJWwX|lC(F|FV2*X7irId+_h=x^ht6)HE0@)EDy*}|2rZ3J$BovkelMgyEVc?PS?Cy;PV@ZN;n;N}Nh zg4?%lf;N5^7MHNHw2HOWlW29?^3g-}E`!02+<-lC;inc`~R24CYP=~!$jn~hLx);IlToQ0;F z6W$EG3=F0+;Zj~rXK_hPm25h$hN%E-P>oYU?ib%kcI@1@1(XW4r>xrovUO*}ED0+O z)Sng=9oxiHZxc%?u1H;`B5N{{VC~cWdUht2lD{eAVc?nGQf`gQhS+?q^i3fcY9VS@ z4XZe7SS9&7h0W)%<+Jcdduu7HhLl2l={d3%GIUuOxp68Jg%piv-?(kbMP8{urD9Z~ zYlnTa4wjC{4hq{R-@Sq8ZR0kmC=Hc;G*=cY#F3iu5kD zt18nm?WK~LnE;V06XiCjNaRAQ{OG~$_2IAILUH#d;(xjUZ)pvqM;?dY>LJ|Tk}WKU zXNSndQ99$1r*cFaK66&LRu15B`+#&E_t)_UANEwMew(CWK*dLhRbyE#7iiFus- zn;gTP1a8|w@U)NT(k)zFA7K5JO>{>qm^;6UZ1XMTNs6`QbGY1{Lp~gdyE@oK$?_=!VEr6C0JQx#CE)|eH5#WWB9pu9{yqssjl!2pBa&Dp8{%!X8VcoLz zS5P8Gvt+#4NT!O0>!}XKLpuoMu>9sOB|j95DO1gZ{$ZyBkJbWsYccQ;lOB9e?59R# z*c}&>xPaSgVeRB8sefqNF7YPF`~rTU65DRO1HV6qygP?jXp)y$a?EuLxlj|fda@m; z`VL)@K*d3TE#7*iZnpV3w3p{mbRA@!6lr%2Z_N#G=hO)9cz}(a48>>;bJ-lCF)-TM z#w5zIK92EHl&FcVeh;fFE4c9ZIh=p=yfB@ec2CdaQI!qz@)A)rOp|Rz?xWRhp_O)! z8z!#9iwbFia1_BCxfqWp$m0njIsZn9Y$*0{!yu6HohGT?AT1nhr@%`a18mR+ZP-RK z(Jk0w6ywU3OR}9zt0L6TCv$^a;?A8d40g6fYQ1^)4z@S9(Cgn2rM*i_tLSy-v9h!# zXDVY}n&|Y=>vhoWE($})e&)wTz^zs?#YH5RD5z&KOADb1GH>@`;0{M_X0Es=a1B$t zGy(nlJ)A1-Vpyly&!w{?hl@_G{K8TuPVo}Y-U-y^%Xi~%im@``irS#CoS01Ije=Wz z#AXsOh5T>eZ=|5JnX2iV0u!JbQWG`&26%7C6qaMpAzOg$c(}<|A)CMK!E9&&^pJ z%IxvLwc}CuTT8Z41x>39*Nc(ymMFL9CL^H7Eh*Y%wn zi=0*xnXN`&)QIrI0bvNIKL@|v1$uMHx9%X@*~IwyE#R>y&};YM@5Z3QVCrzqokF&j zGMBed3$fKH=K#s1%JwdhMj85XivQ_9{YUuo0baPXE_&6{;xcaCjqqPjPVi0tVT|@m zIpT9AZawYb)pP-8+%=@-RTNZ6TzJSgHqi~*IJI^P*CI+Bc$<)nn@1b#B5=u_Ot(MT zsXQxBH4fY&;{p337Zn`b?|t{l(>S%%$0Qob2a_j8#d*-4=j#hmmy#r@=&oB?okvpm z`1@iP!AEjD_5Zm@h7NLW*YZ49?w~j4;Kh%&@M5uma7+d+6veabzm(g}G-q|lS>zyk zGwnu*YX0{?(d{jLqf&P+^Tob2?O*xEzlk-EetSSOZq?xB~}T_QV(#7 z5R!CAj=oK65gFzemN2)ng0kZw4Krk|6j>M{E(aJVJ19p(w8tUbEJQ1D(Q;k1Iy52G zMiIthF@hHu?%cVHagpKrC`D&s3EfT$tKAk>!T?K@Ci=R?NIRt|Ep?O$0^X7?sS44N zo1b~0M+&^qMcD3OcV|~Fqfj!(k06H(D$j}1dPU&N8OPVRcJa#k06Q_zZ}*UU0Y;81 z7YcYLjYjXU-@Jm&tu9WSI)(oHJa)D=v9W$zJ`_ZeuMF`*tY8cV1FYY?h5p>UZiA8$ zr9^nRi&JOLAaFz3ZsypeLTuhPZ?{?^nd3#JGG|z(7f8y7!ob;?%`SQLTelU4HNzN3 zzX{`uQ@=eAMBO?3e5|B-mb~pmr)evAHn*r|uuGuDKl`?Lns0;4ltD|P@e*V}>xGGB zFb9zBY9NcR#i{Xi{hAnS7{#Y~TiCh?8g9|sc*WE#RgKTO_Ftj)OH-xzs&~|sdc>w+ zvsQ^~226u2#nc}lLY*d!vT!whYVcwDNnx75drMv8Roa<`u(8vjW;jZqExXO7A#pM+ znuQ>}5vuYVq}H!AY<=|;qO&AHP z`k>^B$~|iao=GVk6KR><0!?Z0!RU{oG{M+VN(HH34k#n)!eRusVt7bT&j`6xzI*1ps1fmo17PDOV&0rvSwko2 zh_u3Sa}jt2ylKaCfPo8#k|`dG;bIcFSn)jc;34e!IMok;u*Ai=0IlV-z`}W4k1yl7 z8~=nGXGVDMQ}dv)@vCJA*?11iZV$KT9E^J>k@e=_&n;sim_w)2L%zE$H(be-=|UEW zZZ}$?aCl%{KHAC0k`ZS6Q^!{U>QQ^o$pw7q$+IXXV-zI~!>e7?bT~k?vx|5X$<5qs zlA+UWA&VWXUyHHR@8iFn&9VC(3EuT0&|g=T6_Z8aUq0yKZ`M|jZ7!jkl7XZ3ib5oY z?1O+e9`}_aaH1(9NXb`jS&--qwfhp!amjPh^<6B4E>_wedLHo({Pg^~9Q7TA+0bs-2OC!;SwOU$*cklQH;51NOacAM*sqd7R*NR{o~gQ#b}aMMQ`Wjw-Y zO#^ETf9=y;HkwG9FpY3wlDOn)IyO+vq!G^iNpgP9Hqx5qgej+)KnXDgl7!;cdD!^H zQ^!d*f=6cBJ!wsVDNpUQN$SPJx-5gIu#KFi6N`_r2SFSZz7Lw?poi1~LWLF2MxW*2 znv^x08A*zhMg7$2YF8b*pG$jNfA@=@4U#Ww}xRL42ahK^G48E9XH6IeiM=4%KgL${}_XW4SCr{aQeVTn^29 z!XOrbgPaR}k>L|7%lNvWjk`&N^?!Z^8|4IX=;Hi`o}>8}b7LD3593cVVU~7w6Rh7IqnLNl_IeoJ zD)HYIBRu!f1gDZ5A*DgB0N2CQNOm4WIPL*dZBnSg_&nmJ5*KYsQq5(Ts;`ggV1N6R z5~}$oZjbm`C%m z3rQWm*Ts-Jw3%Anb=-cgz3}%7Q7kpC8ommv9E__ywX05Z?0S1zfNkAegPXbR7gvYX z^r%x^lf6CWQvJ^Rp^gJ=`?I(+0-@0t*-=f7 zh7MMv9Jgp8AqOT-fDKTp;$hBpakI$blS!p*NZB%`l#MmlgL@}7<=7V{(QnV8Ogp&UN^mpanY}sq zs39E>Xs88y`h0oBeXrzPaD8B@6>cn&F>i z-dQ!z_t9>9XmvWGa5e~3LgtFHXJxb~U1J*FjO49F-wj2rNI-G{wfvW25-bSYqQI6? zHcE(Sx=B7b$pAUD1M0~+E;4VFC{iq^YpWap)el3lD(k3nYIYA9zHS$3*b<2s_0OXeoUF0?9BPdc?+C{<_&DZ$o8-+!-wO`_XEt&oxt|hySQ@c3b?(_JQwEY zMLL+|4l+u@eHU{gP0TTjMrgO&h6zixf9#h!`%r}3!sZ%}d2tLH39*cA`M%3B9`1rF zTIT24NTLwK;cmqU&dn=xC;dq^CHzQ}c03dVXG(J*;c0vYRXO%1uu)YCap+`5+OY9; zN)?3*1OdzhC5xXhdm5&G)o|a$rjuyBXewUjVlb)G_$tp-WFyq3lJ|7DVy^JoiL{Zz zmR)9kn|SJNJyVHl#1G_Z;C!I;$BEbiY(*izLpFzy=2QY@dsGg#AFeuw!}pku82x3z z6uV7dhiiT^X|g8Gh?)A>v{S)VVC85;YrXWhqHvXVHK43>KMXeRVZW6DGLkp;A*X={ z&4dZfADfSV`dFrpQV7$wCPw|L56YDrljLy{Q9}Y6ye1ZrlyEJhZY|z2rSyikMvZ+_ zk-kwi0ri=&2f4^XZrxEeNs+0&Pbpks&VSij(te_pxzyXLEI09U$)%(u83FkOPC7wZ z%hk+iGyykjIih7+D3>s2Gs2qBFiVLw<}2z6&XG| z8q2L#TCWhBuT%+9dUBgj`jmo4-Y%sy&U8E(wT|oHoG`;1ZZ1H-h2RHT5ngj?I9)r_8k30^MM+KaS7A$CgGX||d zP>C%0TH3HI{1nujVY|ap%u(M#yM+L4VXQ=?M4Ol%4c2$$)~L@dWU&%KBj>(q?{~S~ z${V(nbkVJ5vs$Dd{^OZQT3GM{QDNazWrpWh$Cy+^Oa_khrrY^s1bJ+Uf5gHuPk}K% zGB_e++n<#+j1?~f_%!pzCSW@1R}%{&%2;yb6x7kzZec#`iI!@rGYlv(CYMSEv&|0? zEdy292pee1AgXgH=?Z8$f@j=-fLr-SLToSg2v0?weZ1K%EF;em(oLq{L6N(d6e)sk z58wL9PvXY4tN6m_U%>6Vo1)}52t;;=G@(M_TuiU=+*=e+WL$D=awrq0=8EMBG%>7BLMAm?Kpgua7TyN$u_7<26aA9&xpkY$f!ePatRzkC_J{v6g$t%@!? zw!4be+1`}0@@DvvA1SIyb&%UssKVW-l}vxu-&jqm36P}0iH3ubjiRtNCyBG3Df}A9 z0j%Ox=^ve#*u09SN>K-B1oP4`&A$OC;d_!#1DLdX0viFQt`(w2-5XH040RC8!^bAH z?;1i~2ZhhV9s3`o1=zamG3^I+Sv=D60-$V?PH5U63OSv!#-$k4KO1VX?|l z`k8{0CI^r#*!3t7WF~44;u>!wYM(&nW&awGRjD-0(yfKi5?bHe`?jUCZ|2r?-zRqq zYTpNf>paD1ZtV!~pj|Bs5D&ETp~6m)!coNpx2_oOg|gUkOO=P1!9)98!SYn39;L@4 z*xWMJxl2!pkogjfst$wFA~(^MgA9zWC7LJmko8m&Nckv@lf{&JC(;~69D_DfxnQbR z0MQ%^xJHlMcm&+cP%O{GKXnrM-3{csn^4P-BGW_ZQaS;g@jU#*g-39nk{3$3x+U(E z1Khl`foINLz?nxL=OtKt=DE*_!0gE<--k}8jdFVccM{?Gx3+O(I1vVty1OQhYS5?j z@%c<|b$WKoPEJ%&;uoNBXw_5o=2a9|@*G!!4?l4lPoG(o-Vvp;afWoTi^=W=qTO9N zAfF_$sFs+-JiMP!3k8adH-O3TQd;T3Y553GJ^`=yn5fjFeOQOgT2!Kp3S{F1d6Wo) z%mtN_th_DqCFzR?`QbW7sn^=6voiBga6^Vlq){|QMzdOS9XJ(B19D@Lms+SBkTgZ6 z#wD}Htx!*yDO&J=FN?n8+lvZ})2)5G`z1O~HCH38vRi;UpUBxdnN!HH8iJR3LMIE7 zvq-vxXeqHX`uVu+M~0B9HslsFKVm2$WL=FiYZ9%DJH9nPPQ1h{+&~!lUPL_r`Vn z-QWBjI=wDlcRM2Cip*-#3))2%RwpPDfV6}-1XweW))B7GaMNn0L%`+BQ3bUe z$eKs9T&4g=e%Z3w_mL4Ckf4E2D$oF%^*5sSb2c#T7kwOd&lV6$xhKS4if4=4bk=R( zL{+=#l7-ZQi(hGYZ>Dv+y>X3@Df&>44bqV&xk?drLaAXGs0$s#_~;0%w%?>)CcUYN z0c^bLcpGR#^j$5bCVJLyQ@wp}*4zFum!|uux$>}Z#;v<*K2i*#Y}ag2O1s;5VKg|I z+ccSOGRZG>#1JlZ}@0AS?$`18>K;m$TXS%F@s#Lm`LvGBDPIXHFt zJQmg#@R6sV7U@?~`ndGgO>Dn*30==em^%0ntqV9FHuDUxM+t711txO-O3TmlhkE8p zJC~A6(S=7w%TYzF>=|x3KEBe!N1r$$>jV`JQ+g7Ob}<}oi#iD!FXz1xN*oi@PhsG} zXJ2!RE7fgc#|;t8U4+wl9N8$7HgeNK^oTjsdK;(0%+Vk^x4?N>L=-pMzPAJ8s67huVYoR|D%P-0FkImC~_YJe^hb9v2Bg!yko_U!Hk(JVa%TjdXWU&R;13 zb*ntQ8r3a%5Y8IHOnozeb^LUMEiL19e$&1apU?{-OssKnym9O(CY>;iN28?QwH!J; z??rYdr6N1%cORgAf(}ak?=GA>B>i3sXHPH6mXx%)X*;#CsOM31P11#pjGeNqw$HRX zj37e#gQ+MP;r0m^5m_`v8$6j2D(ek(p_DBemkRJv^eH*(tCa>$cVup;4ufM?ww^lL zeytW<% z7!EG1xt>GhRyDW2$S34(AL&9@%Fosdh2hb*;%K6338#!utUqrU7Hwi>P6`@4kejx4 zG9tv&`E_MEWUt%N!s*KQ&|-N9LrO3#9SbHhNoBCj)6vEn2-K z>pEf93Qb>1U&+m0vpyWQK2`pG>0GkQl<}s6{ zj7yFk308*0zHaMqLiD(B&2^(l_DYWb+oxxnk9mZwLKMTvzV0v`l_L+rm z`VYd{ggLBR>-Gyz{wO{cK7-r48&YN2#v#p?1s43C{0X61;?@rg`Eu&`Erg35{O@o4 zCO)_I@?kUn>Vjii$^|M=)i%pR%TueXBZZdc9=NBcxW*k>_!PThqUKpkK&jZ;i8p6 zBQ`m>&$DWJI?)GgS;E?r`oMr1m!_TRo;~eBD5hb4Q?S)Kx?dT{ z>FgKIV$Fmbq|-db9;oU1m@!1I~=RXGo3{1PhB4HyAbc*U;hE5BFB5vA%yc@OzI~BS4Uau(OcI`%YPW?;5)dhE{X^ZU(lZ1%tfaur z)>P*&%~FydP$VYixk9UkYo>Mf6jKXjw(ShlHkF12oO!0=_oFPsQ!|+|CHE+-!7cTd z!(jUHF_Yzyyt=L)Danz6zf$rza>f50B{(Dlx3|P3;3<+c0rIMU%*ZsOqDnvqf%upu zOg`}xKtlKhEnjL1Bk&3Cg+OcBiM;Fx=*0$v_n!x#N4#tt59Ysx0C znkk(MH<=M+XJ?2Ge006mS0n@1?1kwTKgd_7s9iNB(`BhfFc|Kt39Fb*NEJ~z_RV+- z=M036lbowDpd_YPwL|U4gfekjPR0ub37s|&OA<}j2%T}>FMbC69rvl!f8e_e>C&o5A+CO&Enf+B0+8R;(jm| zcJ_T(Smq(O3TF{~iGJcd3@s5x&Lrv~t_RMQ{h`(c9vH=;5=tJ2ZQMg)oB^U0g@ig0 zXXe!zurI~SAuetHHjZ`nM?!O7cK!WQ3Otkc!5BCW)~e&Ir}<_s3SdJSV%_$wWuec8 z*tdnAjhpdT;s=KFVV>4)f*R#uoGtb&l!cx`W6{}n1!MxMa58n)W8Va}ZoaLXE*=)u zvq@x9S!9*PXa)i~#q2e4RfV{}qbxCrCm3w*AfbV4%~@N>@YGZ7Wg5j28g=q?7TZ|# z``Adna?ipYq9INHDI}X|_A|la&^YU>-`b{116GnC^e9{Z#JB%*Q1~pg!fB}(C+oKK zv9NA3F2q$Gh_jgMk#O+nAZ!h%rB%Pyr5QI{vVR*t=VSZF5;WcSD^Wa|U}NL1T>HNt z?1RShgO6$jsQmNolVmt@GcTh;)VGC^Q`*XMDzP=z5FWHa?vakv$2xE;i}dz(JnRFi zhaki7upgd7rn2DsJv%$Q_{?WMJw4R!muR1O&NVz|_;x;Is@Ps{_w#lz)Ngm0-%0!r z#=uDlIcXneFzp9tBvTDxmOWgl+_u?HltqK&NM^?{JtnMPLTmhz)-XQ8+f`AG{2r)v zb!j8I>Jg7FY_q&pEsY~|y^UHee44C6B@RJiw^13=$ZZPVO7^Cc@9*O^avoGJWU-Jr zyn%NAG#bhUub^%nCqN)t+wTSaEco9_3B$_i6}W*wSks@yExeSs?Ie+Ld0_HYG$ z^Ub&L#v5-QN^0_;6_YuF^l<*oNV?kDO35F1xmsM z+@>)TmGv5VlVa1AK*25J#;I1n?gS+fisV33)Ub+B89c(M9Ltun%FZla_bk5@L(8IY znp*iPgHfVQxwyS+wt00+m5ZynO(se8){hG2xIkJzwIA|yhg~#l;ayXjA#Ph7sT#M7 zZGdIs)ZhHAsw&GB3&O1RU?|^*e=O6gI1ZogD+5w{f4VLbR{t1wz_ydNt&*v>8GmJs zuG(EhVulQDuNkQsNuN|-9UGX=dq37~x;JZ|6tNmX_M*i!|H89IqQXgws+nn##68XI zOW~Bvn*=t6(onA@O;h{^%IONdjXrI6Jzl|&IzAjb#(CeI--)k&Tdw;S<{03(1&&+b zxCIVqfg><*#Gp%q;1Z#hGBZ=*6_kZl#$!q$ujR@FL?>7|nT@z0Y(+oX!AGg493w)KefUIxL`QtwI zH;X@Kkb6C}Bw;`g1k;bV`{&*Ku%e|3Rp)W9bPlrY?b&)iuriH^BQkJ}lm|IkS1TmQZO;DDCl0BsW4UlqK zvQp^;eRg3KX&c!~NuweOVeG5~t&xPMh{cFFOxrZsKxubl z|GMAx5QdZp+E#2JK7x})l{}A-=F1s$Z+p##%=-7KZ3RLHN#1t2!s>^I`6!r8UZt%g zn(eQcYJAO!OLH?2@-3quSQ^fLG{|N9lyD}-NRuT;p>+$(5Gkz|rjbNpYZMAl|29FJ z?i%9lcCl{ukFMJNcISMI|F{Ld99w{l&qfmPPT8OgRL!5u(89A#Qu00YW1hltu{*ytdY&gn5OA8j&521fliyI#v1d~KIpT&5L0#gL`?;$&N~fi zwbYiYuH#c+m4_BEc6SGO_St`wbDCAeJLGuy44gErT`JhjoW9LmYMk2qwuaM^F-bAS znAwTfE(6A2F?u!+_ONAch`Y*cHglWt%-i5^ekF*TU?vZPURX}c)K&0xdR-q`FSAIq ztb#+!rI5NTSK%fvgGHHOrlW#Rl=#2?m&fqTBM!EABUR3;B&@a6Y^0nlDec0ouDW>f z@7fr@%6iJoW3^4y&5Zv} z7vwm<;}-bxX#p}=XU?7yb8q*%pg<+V@8l!7+2viBIlFR}$csW0;j%mjmWmkMNg zYvLLEtqe)C3`v?c=G7X`x?Il_vu1qb5KOI2_psg%k%42=*@=B`@#6XHqSRcVBo!AZmdTWl*rn7C zO?y#Xrg0js^&t*9BS%v!vZ@%atHPn}qHCc|L+#AK@?wDR{lps1E={nxL%VgR?2Xk) zTEjMzQzCaVywP&RT+CEW1#l|lK#zQRh=Je(LB2vGZ2N2Vnm*fnwhNjK(2TQPT*q6M zNK=~LmNBFF8@V)`mU8Wz__Y5O&;I2grI89X7bRDvMpCEX5Q;S(!V<{RlbI-OeH31( zx=vtRHh+bsubFBO_?J~c5Cm9WUdHX)x4-0a^K1SiANdIW@gM*3&^H~|*49MIaQE(A z%+1Z=%$YNI<&{^yn8vuwTS6_O>TSEsP=%#3LoOPslve*Lr70uF zQ2F>2vJ(mvI@C)oHoZ-uIGA}AV`yJusJgW-56Ao!yHn91liKIp=AEpT3 z^iAJ{KmF4`MZd3B7(Vu~kKx_#emA<^F23h`z6acL;=^r}=EHWiVPE^TUyE<~mT%GR z9C5mC&XZtcX+Ntmk- zVfD|(iUf~SvsqZ`Qq?)sVf(pkT?o&|`1xXi=@++_-3D3do5rbhMScZV7eT?u3bWoK zrL(xyXW^|?2a}D|v35Ih{B1OjQKS*Z5%orC(PU#*3dAhTLd6o(`h%AvjuRu@G*z>& z8o3R*$D6?X`$~THp%qJV`_+CQaBZCfBN~l21JfK74X6X1Q*>^}$27F?RUV&7Q@>tp{OH0KX|-~)K`%{TGQ-~7$^ z%fI|f{M^s|9A1C@b^QI`|2=-`mwpMu;ZP)EKlp<`D9S+p@DKkG-}OeDH%G#MP@;h4CY^^kYBvW4LhP0yZ}{@w>nKyZDhG`4NF9gT*vf%0|YE zaAdZgdg>|ByVdD*gpnh2_1VvU7N7adXYfNm^g|$nM`rWmAOAR>c;X4X_S$Rs-tYZh zDdWn@isaAmU-^|^k-R?n$xni~e*3q78$bKAKMP9vDB=5)Klu}3Qpu=3`|Pv$tH1iI ziurudc05jZ+ycif@bh`p}@lE10k-jf`rB zMFS183MWISJSMGO-sm+9l>{}zEvQ`}>$p0EX*FEK^ovDVHHOo#c{EekAr`(-4yH0` zq-;&b$#GH0ZI@JZx}|Ai-l;4e)Fz##S;L)5I}%@=zp2+zUc!7HCBau7tfiuTC~&&6 z7EmZpp*a-l;3>~^+J>)&uLJk?p{2wo4518N$`^D^PZnC%abM5HA@(`%tMYw_U&e+rJ&(_HEyW@pvp{A)dG1dJ8}LqdzK#!(V;%Rbk4$ z{_DRUfBUz8i$D9bKf}$NH%0pPtH1iIAOrWQPkjoX``qV1sp9tbwxoZ~L4a5Q03ZNK zL_t*Vd*6$vpMF{-jKB3;zlA^gqd&rTfA@ET%pvn;{pz{cmg@L@+ycif@b9Gs9s&c` zT%h(=t6q$1SN(0QVa?wfgMsI3iXoH$L1C82nQv{AP7vK|2~p055b`Hp>tkY@)-G-) z&ccZ##D@nQBbxR~!>+9P=~-ISPJzI=I#Vd7Tppa1!v<2QceH}E^Z^E<*s5}pj>_3PL1>%ac%_<Q`W+YGjJeYBbH7H$vZ8 zCx?&yvpH8|+6El(CgViO)Gz$PF9@SV=7Gyu`_o_2%OiRYeK6EpT z4;MS;!Ss|4KJ&~ovc-Aj$`!o-{qL9jD0L&__!B?z6S#EgQneLJ7@DDCdNONVV4r;Q zNstlc-@?KIe)^|>T9~-s|NY;Wb9X0BoRBTrV+ow?jpO%WT7dMzV*=f7$4()QWE3>e z>j=&9gMskl(GY{-P~3yT0E5BE=wE9jJ%p2II$L2Vw@rzcV~{FF?)exY$i~K|eBdz6 zm(!#3`2&?$r*=tdI;9RVF2l6RA|q}MC(|RnD-s1RF8Zf%WNI{?Uz4E1UXf@~ac}L{ zFcO5TFe1q!ti@%*Ee=V`{B0Rb8I6BW6PVfF%1uZRqkJOFm%{2+Z&8vl@w@-$1$4Y2c83!)2rOf#=~yOB%jPTr zFT;zU`!GKA`u~VvXNbWhGU*Iwu&2V)0mRh~T3A?F!2fpX|H1RojcI_dFrT4{s#cYs zz6la&ctiDN=OX_ON>ZL)FpUG$2Jwy@E|dty?8C=`fUK^wcigZ zgtVnPmW0YcmDr?Pr834zhcyj&!x$ApVGj&S4pwQ8IIsX$i09F!}!Hp#${apS`UiGDIb?|a|-@cGYwUe1dV zj_1|B?(4oza59{W2qj;(NgzW>DINbPkzjj}fg=vaGaqh~@^&qm zw_pC{U&gQf+OG*SM+qV?ZSao_>GAW`(*pc(`NnVfI%Ii@S_%Bo>d#|5?|Rp}FgMo+ zZ?xKZ%wi$!`GJq6r4^xLnt9yZx+`?dxh~IBy!g^fI`f%1(5AiDo8{#h&*5++ z-dnBkUdd!l=J-gn7}u^{uPz_mJ5e3WJa`NB*-w8~jx^OV?~LmKC2;!{j#IWSI(6)9 znDxu_E?^pRzjVT#7>OQ}aVao1BrO(^$XWch1jbM1s3Ha%woh?wGQJ5<37$Cu&V}wj z&OM2C=^KT8TmW;-d0m`pFUkTa(nRKEm@)M$lh*MCRs zrNuRhfdBvY-UQl`qRRK)=j560d}}VCfGXyqK!&Pf6a;4l6ek4dsr~Tv>t{co&$iWG z>%H~0`qBE?cDLxW9lMuPON%ItHliYqATlZ-AShGSt)lAA(;4!dw|+Y!GV=^~zPGAw z5mD<_M#ivX$Idtz|J)IKhc#GG*(#VY9C2T3(3Yt9>7MOcEvQNSc}GBFWn482=s&*ft7e zQ&xwoM%{RG|W zomnD|VE~i^Z=?Z!(4-M=zx{T-qTzA@*B~x9jTuWeE`GmGNUnq^*kZZW1;CdJwB-VT z&jo;&qX!7&&xIr}q$Ra@+`|h2Fh}5BfVPf+X7797`<|esbNMXy^5=t>z+5H3$pw7S z-Fer&GCVXQK~S&J(rHM?VkH`He6#?BcwcVWa=d;pak{~rLdy7Ud+f2tWqf?X(!>A# z^uK$43w)q$+;~`2XHM(Gs@YAXFn*Gw>alFw<)@%O>4S z{#9AIdO*?-29lASbms9yjTX=zPo`vbz1g&2?{SFWmdh9%g|I3eN4-h9J66it%&L`O)+FeL~)_tqgvW2!REH67jN9FyYm zq3GgMm2FO+s@7EL^%Q1Ts=m(r@93TTGgQoPX#Nxr#+ratmSuhL5?Cw=C@69cZl_q1 z%w}6d4>V^B34k%Tg<&>y9DtkpJv#xEDbAB0r;~`P^ZwN55k;cOt3KJh+O?Ej zcF_k(0yT6WTmsPXVy2wp8B@psG`;FRGxJCk9BE^w4F`w}Wz8_rDJD{umU5Y#{6B}h zSlWsy*%KBe6~vQYr4~xL##b{Z9>5EH8Lb<<@Q<&OiELROFYeXjw%|;;QPqW+#7$q& zl%a*QSLF;iMMsmol99Yu$=M0Zbf;QP%jz|Iq+|841kx_mN+8)nx1`fXrK~k*N69ER z+U_`ecWhgH6YWh0QVCL$4#y?kxmJ1(*)F>u{tqj&XTrtF);x0~DbsJBjL}kYZ$P*! zrC>qF19|pYDJerwQ|xz(lcLee#qF7I722?4ByxIfD8{W@`i@ZIN?je3i8Pbakg!O% zN%=S}_9Bs<8yWM8Fv{?`)%2yk1iSicr+H&SZ%RX7T#>#?zx0a9CCo~`FfQ$vepf#Gtzo(GH+$viv;RucJts)DGOp5~MHgJ_qv=2aoND0| zNE$6-S8YPd6GKu9jPp-d@0oCohmn(#yV~B{0uE}Cs`4|a+>T)G54$) zS*8>zuDof=KsT38F1`fohH=ztOy9NAnBv->`8xZW{0>f z3nv&#Mw7rz8`4ZtGpRtvisMoot;%FrGR<2a>H(YC=xy3}o4#w325be!3%VLzC@)6+ zVzf9hm{TiNi`xtsGyB(A7HvI2C;QMGuXYW}j@mBSRT`CSI4Py^ahaSLjKE{uQ&U%+ zmLRf3&|M5Qk+#m7R710$CXs#6L`}Ej&ez4_8+{CJv>-o?+at$_M`=-_S!y}1qqew!2PIDGdLre`!OQtmcyI5m7Su9u9 zB&>vHs!TIQI;&J;p{ge|B&}LC-%O$L=&{pd#6}d6Qdp5v0BB1|SgFe71XiFHb^*j7 z;^Pq)S~6>a;vjiO{AIipHNDrKs9^ubZsYfD?THm zgjih^AQ)yO2o-{f9@JB-NvTv(Fc|mJRWOw3RWign$C)>UChIMBTn`M67A;$GZ(B_G zOLIK%%%TusVUt#u#|tGBGb8RZ!oWMRB9P9#Mo_z92J-?LG6|f}5kbr$-fTZU=?|GUB z_yHhsvH^1B9?MevtdWkjDh_@zCcv>TdC+l23A6{u0vs{HKnEH);H6EB3$Pl+;D9>h zyYlY5R16_-Z9-WrRPieZFBmku``zzW2fxH|8`9m~EqnLw)y>=R!U+ucm7{&?(>FjJ zj(&0VfCFIoqAmD>E=CZzBEj-DX@t=%O`qZ=fCOq%snuk2M~7@`ZEZSebJ{2GIa#cW~!(OLumhxqN=G!Zpjs!uR?{BLnjG%+TCoMwYO98D73 zy^RC#?Ay3ntw>K#uLMCx>!>>hmMNjFE=EjTbrv=aD%osK+S}UgJ~}2~J2`8+#<&1B zixSF)>?+BmGZNO!(NxJv!E`46AFksrq@ z$YRc?k3lO8D{{o)8|1iE&k{-H?PI51J0+_K9Ust(Pk4?V?G*E^qI5<2=zQhG!uO>?b$7ku1O_kKn!dsSi*Y?zWr(`y=JO` z1l6=;!;ECYwB*WJ$(OUrf3BR7pc+InfNZvsm27Cz4F9Gv+IP)52~~osgaIEeCdH*! z(>1ANDiWq^QqEMQnyyMY8w%;=zySABwqibfQdP~bWXw3!VS}U)Ep4hMI5u?AWNp#J zwCO4SWBl^sY+2mOw&@9KXOcaQo`$yKT6M36R!viz7xW!>-YWwG#d&>k17djL1DMV| z_gvYwZJPod&I<*waD>$x-}puaFt|(r+yK@9LV!C!60Sb54&{Ue%JR-|M`FP@nk_V9 z03`>$KKHrL=_w7DU3Qte2sz@2Bjnm^uT?;WpEj&r0a2Wgz>!&4qQWQEs!U7-+5z<8 zdyZqkaLS9T5KeU9dB7L-IS%Z~E3ec((oark0N_yu_b0RsEr1@*j5$4m_UHp3l0L&f z&-s>HZfW%>eA+Ws0{l{we;|Q_-HJm6jMW#vSe*(45*MBT% z?%hPj%z`GVBqu-XWZAlHyBRO~W_Nz$n3$754lNXE`id8{IYHXkT$(h}9kPhO`pfC6 ztSq-l=B})inUJEMC31WU{}nRrIag6F;kIBCe-vWZGc|%>#PFqVqlkO zu`a6RTRr3&CO-giHT{X}%ztRcG!($OtqgU^v%X=R0lrvv!JP&^;PABu&_TO(-+lKf zkixYHnmPQb5%8NvU5?=5YafutJBlm6e}LanM;)bkfFZPBXt;3U0XQTM2n2A^wmZrS zu!P2o_5fhC34LhbxR*8nlC;YaUho0X1Hh5T@mhQU0m3Lx89*a6DGM!VQkK2~00C~C z41w=EG=cb>1K_zd&PoN?`rsun8woJShPA5PF*Kyk`~NsTAz4-t7CrFRaesz>zL1wY z?z~&)+aQy%7+}#G-Y*0fAHX5Irsv`knVuY|as739?!NgNmmp^D_|iRW!v@*5ZL0*C zKx+7Vv4BmT|GK4A)xyyx;LPqq(j`@v11%s^Z4XRa#`R+2A#3&_(+$}+zX?W>ZYNm1 z7yxCaD6Oe=X|7ZZg>jpzhUzZ|z(yPRtBC;}S~z&CNhPdFrD9HQ=I} zVJ%;VJHvxEXWOh*rM(cS=8S{w4gF^M&OXHe(Nd`_p>1OJb(e2RU8YYPbkQ}^COspa z3f9^u^HM0~BvV1lX1*jrU;nxSLE->8KoVexdq+J_cb02FmOTpq0*!7T@o zj#FTq1OM=cKU6>lXk#gq`p!)Vd)S=AVCsMQ%U@PH07Ux7JC#17VdEbDT%d2}eQ8pV z0Rdip@Di9w0=i`=m6Fdt{-pd%DlMg2RSHwM7@3LI?DNgmRsJxrUfQy&EzlDg97{=AQIrFV z@MttH%7y}hz}pj)!#td1?Cgfi}I&}KE$Nv7Cegj0@2jp;}=;}prd4%@0prBsqy zR6X%Dl2u)ta?}HqF%C_-9jSmdOUTited2h+$yNi&mICRJyn-~!>XK{_s+Mk|tt4ZG zNg3C_l1vne5@te4S5uO%&i40}?8zd=Vb=XQvaYl4ewr&lXS#qU%7s>Yz}SQ4Ko9%q zk|9~w0Vii*04Q_Ip~*T)$GR?_G*&>1=d@|mLz~7Q!M(p+pWMBp4*=wk0C*!L!5jBU z@Wwsuef6tf)w2FSFM-)eK;J8=l!7-581_}*oi>%Zd@?t>O(zc2bbzg znKH>SsVVhUm28Wo`sVCiV>x&4+K(%_9J7=OU!-WNGHKCVTtQ|R^`-JT68IircBQlvUsdkRNf4bb-K%?btyPqmoWO1_msRVsrqobNk9zro`|7O&#=E3T4R@LkJG4 zM*|0V;*Y(a&}Dxczz&+wrcIVNsgI@%BLaXFd4My{SiS!G>$MC#IPKt;En9Rs6>T4N zSvrLl^(aRh07;f;spEr}!2Bh^k9g`IGM{yg$7{{MtplT`!5#aDmqi3{jU6!1Y3fJm z%JYhCEET8mBICuQDOgYzi*nl5(`DnvBc)j4U}k_CdJ4Dsn|7H>UHb+kDV)>g9)K0p z_%mQmKL*tL(`{&v+jm^nvk1SYev}{SH*Cx5L(S4*KU6N1!;aq}qis)1Zfw%(Lg10F zTaj8BiV1xS{bppqYfZ##->*t{t{@$4U6RX&lF!sy066WH_TI2a3x-$oe+zNPotQCZ zKuY8Dnz7nE3q%~xv;IP>nf7}|IwV^ObbpvqY+x(Cjbm=SG)u|>{zl#sbsMwx(S1D! z@m(AZIc*7f1%k^*n_HXjim%dcBaO^W9-yJ;95-0VqxZ(Y!<~;^<~rTOG7W_oKO97*E%HDgne8`9C@Uia>}zLtW>J$mCd7f{a^UGIen)64SBt^kU;m+my-VvQiFHb!WUa7HzzDtToF& z%9&%t@G{3r%dof^2Yp?8B|V;!&PqXQfk?>u;!HswLi|+Y;x;2r(3l-*jiafdRQ;{1 zLuzZP_2r|x7Q;5mn{6c7IPJ4tp?G#!$3>h#4pbUT!Z5`Sy>bd1lKodX^Z5rA)_KZOf z&6(4n0r=QM#-29lqD?~shXDehie*^ZA{{UY@M8ItE8q3}vgf3yz` z3^Hh!Gg$#}Xa~`_K?~!Fn{U2ZHGlw2w@ zm&(%B-6dz8wOwC6nI%Ui2~!K8#iuy%D4uW)s8SeamQ8C(FlFmtC#o6) zD7ila*Wk;{fAK76Xu1wLp1GRBscImV-agqq(Jx`SAd+!f7(-hJn}S3$z^H~VFSAF^ zaNzzQpA2PWcv4EGs-!v7t0~xa8`3q^e_1z3W%^siX{nSvwV_{j^$g0ooh#((=DRyXXYA>a6v8t6FPu5>Y_!%wFm$Za7bMyoU5+7O2HQZ4%Z)U^5Y&b$31iiXaZfh>86`h+XfAc z6?m5bW>C7(0f2j<#7;~rXAaOZP5Nj0=fUOta2s+{5n_L%c~pdP$rGJ*ca_?;}L zu*d+evFk?9)%jPq7FbEX*C^+M#gKGyg0S46R zUNYhsEGQteKB?FvXWc6(*wcm+tt)V|#t;hM0EW)mlX4DxCHw07lSs1wP;1!b)WP9# z85x+gSj+%VqpgE+GplN!6ljrekP5 zX(W{pVM{tOn=P{s*hKa17D(7#lPA0O%ATPiS+TcMx+mJDqDKqe001BWNklzWbrzatcIx8PKAX!b&;l?q7AK3w zLH^*-prA#A&Rhcf>UQt$leT zI3a_el0W<<thM@X@Vm6QQ4Sd-S&6#`Qx zV2$zsHnXH-z>x)X)?2;-Ja!pW&qF{vr#0-AWi$9QJm@h)YDf@E#*|J@7|^3_QzyFyVJwd5TY zZX1$XB)HNC$2A>tfNpky9K#Ro-Jr%V))sLbY%c-I4=^B(rHuXudP*F$5O&z6@4_*RZ0?S+i zESH+S>S((77y*CjN3DIu@L|Ax8sDq9#)&?#OgZLU_wj&cZnnXFm{5PJ4=P93(KO$2 zhB4LDsrD|Av|UnVE_RwhSLZ;zW?u083*@OCIEn0&!NH+L0CNZ?xr}P>4H{{XL!8Hs zG>h#LWl~Zu7G=}XN6E=2ohaoJzRVaX97|EOu5`wKu0gBgZkM@_~$i!v&c(g&a`rX)X}leWp6 z1hnvYE}XrZG3FR*xrFUga6%=oTH@Y{BY;?Nc6X%N@DvffxW6} z6o6VzRb(_fE+g#|GSWFAW9^eN-ciy$gBUop>`lwWx$%`Oy~H9&Hs#}90$u`E0?ex{ zeOAJXYL@{_4ghiG4@+t^(CiZhY`H%-v5?2IE8vZNoDOtRj{Tag0(lth&^`|9hlhvM zc|ZP6ol**#)F%zi9$T*fY6SL$vUe3avu^1ZHR$g zhLizGF^F@Zjt68v4YXqhv@vC-*ej-^MJ7ASGLb5(Wifl`QlUstNlQ>l>rq;{Nq}8Wa+6tU5AzBL zIdUsg3v|hm5gC{hQB|X>JCc$wlH?GA8>`vV@#92fzn`M95_7E;^h2pG4KfXcp=Igm zqA*4ZK~*a0P%5cVD%ns<0ShClVzrhQy-%Rjscq~;Cz^+-{exS zGrnLipLahplLQaWd;rjI6B*ygQB(8BfbXASt&Dyo=WzU|c^>>oXW%YN&@9Mz^AB+H@lOli**E?sNahCM= z?~&E3*XXtc#R$45wV-q#`_rFf`}Q*oU`(f^I9XIaR?|A6j|b8Q}o*9?f1kPgzaZrxg0zkZ#Rwv_ZRXuw=w-!AFzAE>i>oOMTd zqb8Mc%m@mgpa8frnlVGqzJ9e%O4!uM=E5`1*e0D_9qR9mNyZo?Sn#I%+msSL(0y=* zmTS~8z-$XZGkP||gI&W_egJreH-oyP8BpugYN4uqSsu!!Idj!ov;1NFTY&D42A^wRl`>t z`+T5B8X$;?2kTGhI%`q@8h+vcW3<702*U?}69y5SeR|C`*QmuQ?m(c)KDyVv?saN} zzyyRgg1v8)KjoBD)Uhx3^aocbcXVwHAqpMu5fLk~Tqyu*hN&m0Lbb{NwfS9QdZM+j$rGq!j3_33y3 zBuz|CN@rJ>?sGfps7;Ci#>U5Gd~8%YIywc=$8QNBH8L`+zo~q_p!?k?CdL)OwUQ_x zZgO%$R3o-_s)9BuLkNMe=2~ZrvJLf5=*0w(K7mlASyHWamya za|5c1Ts+P#5KtE%X8z$}R>O*%cKT^@_z@fQr9_TG3Zr(5Fqi@pg&KBARkx74B~vDZ z7}yyAXwrHSKKx2JF#1{ad$Sf7JD7Si03*VXU9 z-W_O80GbZ8K?^{Kp#wnhq?1lkzy^54f)&jhu2kR|zj^qg^Wm8#0mj1U=!j~t(6nWO zj6DA2<1#)rCL_Zmg4?T+;bFPyrW+-j$?C^Rxl-2O1}7*n<^glOM|ygDR2y7nxw8_= z>8Eeg@y`b)m?RmvXH24aQ-pQ442ERVzg~a^og#kB8%ci7smz&2gkQB>wdtjDAR700Kiy+#Mv&u3#Y#TH6|D8;d2d57p^*(tT@b`JTz5+GQbb* z0H}^W`e@bq(FR}iRmYRjeI~YwCM`~4&X^1d?F(so>>wAz%h32 zyYF|A(E{@y0Ly_c2eyz5%cs17D1-LSl_hUzct|zNPJ+L={Wb}!wU$7Nx`4BtJD*bJ zi))LI4R~_&NjLGd{tg^%(s4E1*qRTKEF)K}}R?32U^93(_z7z^=QVBU@GS)EA zwkxX?)glubAas2qW+IBtKQ#}CB~l=E>HsCKgu_B;yIy4#zD=l+z6DK1R9US-M z7&xbKOr*EMqN)XxO2FRw0pG)jf!fD56y*pXMd7FbTLfgrnky zVPksqD&ZHd?+1~4?)jYz4Gl*V0_l7V?%LI-FLXz<)s>e%;EESIaX=5i2@u3&MLKb= zfF|+)U<9;kfG8#r024qAN4bC~0!yysLx*|*CNyW4Tylv5E)Kru-O2<45TqRdU@}0P zwsjIpX3QcEU__(W3T(m8X{Vj0lNexawt;0-`Ujx%VfjjcG5_py&k~jy&Fazq?F(a^ z->v&i?_X|Ox6b>4?Own9)$OXmZe42WQrV$1YwEl(%4MsWOQmGx$`!JD%_`Y^!f^`b z`ucXO5yaj-{R+I4Fy!q^HEKxH^uH(xK6Kw(E+=Q6b*8knw+YUB0bMvuWyyvYw{mMW z1RBTxo3%VufTrb9RgkMYbBu2|v=Q*ZvX4@-fKT_pS;{W%8cA@MRos(M;~KW1rY<}s$p8v>R_0>7Qt3&k&{SrY7rv@J!VURn~{Q%j00~jjp}h6@Fi7@KpI1H zN@EFsKa~Xbm+Yn(OH;AA4AZBQY*Tte0`Do@8t@ZM{7hSn`_@8X;%Ib9z{e@tCKp&@ zaRKmxmdXVHAAx;g{1E_03L;DKA@kI8!0x->{jQdC|IuD@KN)q|BLrYfekilt=>Q+J zh));jS1a&F9qQxb&iRI$j!rTUjiC<*nFJbsQ%$|w2d^K%(S8jx$pGeNQ)US}F>gH~ zFG+n_umRhGIhI;aIN@0R^4;0DTldWE*|XQaR8&7@HD$>j842i%wie2%r*2b23YHmE z6Xt|u4;D9?F(Ws{g}kIOX0SW3jbAuJ-vK{;i@T*&9e8f}kQ<|+Gbz+__m0OYMrt%O zIR3fDGe*5Oj;y!^M>)FAbr4t_+E^`OsTE;^?V_AG(ny7zR%vmK##p_CTGutbuP@n1 zXLk3k>Cdk2!BlD~hhwRA`}Xas9iSiZ1bsjk^r`QT>%zF< z)KgEDfB1)gm=Opr|EKJGFqH%t&-_grY&K)l1+BvERCVK`uF8y8v$9697W}kG(nYwW zN`9Ian4{s}sD@e;Y{9Q4CHl-s6IJV$qy>c~PntJ?OLFGG9N&HjWW|bJS+#0~oN)Xx zGBh-zmaG^+V3y1BVe+9vhv!|ZmSxjX$H?&~9H)j8N?-So8O52iTHu*Exl%6);#5m# zo%`~@jb@GtSc{sJ7@(Q8cxc7o!aU0OKG{pxs&Z^HbO5GJG{Km1`e7+~)lOIOZ16vF{P7l7^M zFMql2nS+PVeC9I>*f3xK^ic=U29N}V0TQt&MZ<LCAn6l4p#z}ntJRaZb5=nr$G@s8(Cd0CzS!tWPDYJhqp4BW6O6)5$ zU@E2%0mE6n8Vr5TJdfr)KwJuk>Ri}X#qz3|(P@RZmujb@xiD_KRSb^HVJPLK*4kOr ztMZSwv@vBt=QoUfilvAg0B*8~+o;z2jiZ7~6qz%CQ_!SKgY_IaB+J!2sFb=US-*a* z9D3+FsZ`h)JS0E*@lR!BWK_LfnT=*C1#i78SIM^RTSYBUs^%O;^WZEnLXLKRanlU4 zbqYiNTZTuVWzkDsU*tfi}vL#_)~- zT!KPWGma#4=MuN_X{_Q{()5VoM5*Sqw3K8tb)4*~oGhiuF$1g?<#+ChW>|X=eu^$eto7=y} zQYc`HJPZl|d1%EjFdz>g_0ymJRNDm1(dJ!u-KAg+EgEg1fx`#^O&)vd;2A9*d)#n4 z!tyEstsi+TodWi-P6gb-JMKdOi1Z793eSK%`Y_XS>|#7MPvgLmK(SPkhyUD^W z)9FJ>KU~Tc=IXelszB^qT9?iq)KXb3KI76;$Cx(&k$|HFd7X2j`=|kzVl1h3?_6E2 zDcVT^_^LY29fj$uSy0(vxC!2&&HWKluf6P2^QKL_Z=1fnbZ)k2m!(KW!D$6(FwRQ} z6dUMK6cTCK>d!2#NgMe20w#>#3PDeoNGC8)eokWw0EwOP2CU4 zA>ntVDtt3UKbJ&dA6@PeXnLwm2}|EY_W^m&J@?7*@QA*fXqEI*sVKW=VZ=ar02e?G zkOk-g&^YkL5+wJ|0u$P}-@qai@YNW|C%E4v%be5&WC6I)xB<4$h-gzK+@$+tBTWQQT-1f2B+E!y=byN7i#Fjpyr$9Q4AVzoe%hl>lgzEDuFEB zLnXg;u<*)c8bR5(%fa}gypJOWbA{O<1CGl8}~3<~hD% zs#T0WDg%;FjY%%3N+~SYK`s1*5gdz2$uv+lL~VhvG$@0W4YDR!DVb`&ROP_;uMrAek3#+A-H_5?%n9p0B?j_Zn-7O zbA}Ht&z0qx1aI8Cul-iwjeM4Lr{gC{+sC~Gyabl71Tr1%?M8*DUx_I(S~H^_rCYUX z&ARen<~CEe0aW;5F-x80QbkJTvVP%COibzvWOQs?zcNe3vMx2CKIN=5g4vh|AgjtT z#~!PWCwWOZ*n@*TMKQKL156BZ&=<9x7}W7-R906kwO$gi)x!;P%&R`0Tg<)LV`t-r z%jkat`t-KpKg)4MjEL35X>Ux1rqYS1T!IWuCexE~inYj(xpajcZFirb@1k};p}VcW zx_ao8$0W!UCCKC?1vuA&$^T8wn1}j%t89qKtL&;38L#xpNah4tDL;?$e8fv&u_WL| zF!ZAL#bOa(B07!0Zi$-lWW5Bu1P)ROWZ2umIxsIlCSQ(_KwAdL;sv9d0)@5ZvYsQx znlxXF05v=)Pfixq-3P~In6fiS%FggO^kXUF)KgE9S{Q1ZidIzlrQGPocLy3ZFEVNX zJ^)&9F+y23$?H0=Htt^F2LA!FOrFtZ8QNM$OPf3`lUO3066i(UgHAFS5amE<639_1 z)|NTVnWh>7%CM^m9Y@<--HYCos7a-ol5&-0;3TaiFG<>P;^;M&Nt7dsCN(TctvVoW zxz$o|o~Z3JYXogd4bq6v0YqCUE^A`d>bMM+*Gg|XYxuU%uoXx9FKs$G?LV&O*K+&> z=2zd>I#?xu5d)gOS-r0tgn-cmdjVPUMKd{-7OGr;Eo=@IDD+!qF zy#r`9QLC0LM_DC7m3pPNFslx{S=xFbza{||wTiS^ws!oP{>FEXkH+-4L|ywfS>=p- zn9`U`a@siSrzA$(NUou8K%OH$F~t##~*e8i^hJ_sQ-f`+0{X zp?MQ&sJI}88fYEZwqHNi+MV;`n-^~T~!(r3_h-vhH#x@g-5OCwcJN4v~Pu9J1 z7(3u51j7OLv*Dl@qXTGR@yVI1Y&T&Q0%HOPtZ?fANFv>AVJWG*5?q!*9}osz@-b3y z`}Wuy$A>wF73|@|D1oJ3fExx6FMjch^>{GarwnzWN57zn|GBrm^{slU1og3a#gKvz zZXEp*cMgr&vq!%;z6*<2=l9OZ%U_qL1Q>ffTlRFi<^5z&7)Ok;sRCmVqnJk?d1R_0 zn$Fndx8%e8B#`;VFK;tTomhx8SXa!C07tTs@1D>xz*H2=)AOu18u5j ziX8bWpfD&&t5MWw+PJkEIn#tGsu)m9DVU%Y1!oqhDG>S|EB~s1~@rl zhNJ~BwNTpfX<5Cp+cf30iEtGmF$2csKe22jDJ8L zw6J#O1A(#19#Y0AA14k7#&h6ulGOg^H8U`<@6qq^#~&w~jylp9Eiflo#A2q0B#Op{#uSo{g#%G=tTEEx;MARACQLr))aVr_fF5D74dKUu#kZ{w>FGVT-M+WntYbq$>(>lZQHg8 zurc2Fm|#UOsoh@wlH2z^;MF)0N0nxbm?i9d zTbCTtGcHHxzputCHO{y7!AoF~C4l2iCZK!nZS6+n>D{w)P>VJSC%b?%CNlzH2CWkl z8CI$Q8?*{66JhxY2xAh%g$F?C>Z`BTB`5$Fd4M>4w*kVO^It#}lOs!+fFeL08o6(N z^P5^0U`2cM2@MEw$^#<#Gw)EN#fKm6SN_43001BWNklwCuK7!Tl*g7@)7mVf~uRk`=x`&;^fn=OD_2wQ+LCO9U&xd!+r zxCxEPlnHYo0UBuR0F5p%`JyEO(9zcX_cuF={(3M;0Pw}f0szbWrfRB5rjIPMGnUZM z@v#6HJL;&T^q4o|d|;qu#&II@i22ao|6owfu1Xpc1Zto`a&ztVP? zTzQY6Nn~l3Nf-^mLYKuj2NrE0b-40JV2Rj=gHHnP z`6heDxM44-)84W)${%A2O&eg0K%C!z3(nXfsrhY1-<9{**-K!b0XWvtH*VUfu1J(U z=BdOSaGzqz!Ye6yAI8gmfVXTWH2N?FV<`#Jct;N->_uO)0lxC!)^MB&DiQ>tDN8)f z#x|TD1N>N6jLSku_r{S!vgNJ*@oI*WH!*u(U&!7~m*+U7sFP=-QAA6kvrnA9`PtK1 zP|5wo#B|M?p=x>+m5U-KJy~W!{a-Xf3*zEHu8ih^b4c0C!{o%CANHqVtibihKmM^U zc>>Is%vgd1zyW^Py#3LSepIbB+5FGs#qttm+#&POVDH=~KJf_!WG{Q!%XDG{kgt6Rd1&1shv#ds+ZoKhE58w{ufxO7P@qy7Q zFmCwsVc$z2iDH(l^+OLmL{5IzNqQoKfeE&$It`Z^nrep8AjK06x-URb9Y|A9la{cG zzd8%f!a%}mAeAtXQaP)6VI`1KB`Z}|rW&Z$t6DQ)j8=e*?l01_!CTCN^5t%sT1`Ez z9G7dDb4_1k&6}xIlT^AU=~PwHX{<^s3f?#pE0d|Hm1#CpRs)4}I+Uyhc>qK1kpum8 z8oc=IR#@5HTL)5CIqnL ze5j$#bCVuG2@nVXV=0L%8@$o#agP>_`e@t$QUE`I8T8PUp#j5<$C+oIsb`&%51<2V zQkOaaG}_^h^Hre_zW_Vvz&}@jDu9#nEOmYR+uv4NXik3elb>i`*j-(BR1?eF4n+_Y zkg7;kx->7xj&(EG6`_$UZZcGd!be0=|EhNwmOR>WNl%PcAr9X2PXC(_W24U|7i{<^st7g_Q** zKBt!Pbz(1qVeP>yP0v)~ygurII!7BN>^y1Ed?uGl$0G@Q^V0SNuT`e#D-$GUCE3X6 zy0>M>?IQAG(iJENm6dMVq`qWhhFN~0pV-GuRt5NlNfL4@aXV5)2JlT3&HQ=0Pxu@m zlbl<*LP3E8sRpq@JvcxH7}Uo~wUS89X}?T&lk_EVJkbEiQ7EKZy92@i>OlG!s9B=NiLKGQ3OzY;Ut<(kCIT6 zlIVz9PWR~_3!yh^QM9ilWAT`fm=YIv$=AHk8wKP*wj$2PC1m=K-70E*P^;okdS0xW z+S?bZc^HJe?#jQq(!uPTZ~sb%ukrp(H7zs_{o!kk2AVaJ$YkN+fJd!yT5l51J3+y$ z1#maX%D_)%VYccgyCy=zr_QzEDxeRPpmMd&%N>-X;*_wcm@9Iyv^|4^FBV!^8+<(# zBVdCYFc#OlUqWrK-1?G=mu7l0mS0w!jU*W$`VKx<3l)l~r!*(47yF5|;I)1+P zd6~5mT=7IF){6@l zMgKO{I}ctWXy^~OyQU22w1TJhdR;hlBvb3{rQ^|tO&4S8dpAzmmsj4zC(m#V4N4Y8 z&Zxg00zN&|wnc+GRBpzC)%h*Uv0P~U*~Yho?d zvY4nDilUv`Cs)*LStjXw_?A!pgE5 z>h^J%p=u@yRpaT9>R@`KVcvV3F^06v*Nq1KUL?wmOBtxu-0huZrplbnTu?9%otMBAI?Wpe)w)mI`G1e zs`4dotRFJx1ah=>C-eLk8H}4MRmk6d0@fL`ck?4Ce(-X@=UcZFsqSX^_X;=MQ)H+- ze@A5@vV?vrT&nijn!k!=cdG(S@Hi0UuTQubyo3lN6>>9|)18cbeCpE&|3qzBAlf*% z?KfH-6WxGzyj9VgLtUHwAk9+$rI-q1&8&l;UF z56VL$ZX=WZz9KRr z15~77aT}QU6zLXG_xYq}B64^1f8sPqrg`e7Tz>GUTm%^$ko-h~_(?{H2Ikwz&)gbT zkjMrf2$^xuE0m$+Sap~&D_p5sDxlcQ6AWuukG*b;XH0wiMLl4&mnD(CO| z(Z*+3Qs`90g-NwcksV+CZkXo2+FNuy5+{}be<>2#Doh5mq(1p2_Y{aF0TeKGol%3jJ=))v2Edf9cx z*qXK_%(Ul&g?>w7Ro_jEulbkb#VjM32A)^QxKoG&->OTBz*x{{=426hZ@coxbR>dH zI_037JoA86rgO)mFH=ULyfmLSHUZ2PIM7#{Nn{$JkEyLM4zlCDG?4g=$!m{EL%2ke zN77h(>-KI*>#Ockx~t%7UpgvDLk&lsoS1wj9Ro^evL-n5=W6n&aX>^$`(EpUw}_R9 zLp_+GNH^6zgL07hRjpk=PaP9XT|%&~GLNOf-2|auaO3BB{A#;E*z&uhUr1r@A^mF^ zV$N@C`HOm!(!1n#GKWm-LQ(;D0XU2>p0JSzksQ+UkKRzV)uoaufrpk$lX}AHxUKmo zBcygb4hjX~9?f`RhSVbH~4ZRxs{*#1vst zl*IRCc}-aAr=I1E^9DJ^^U);Z5#K0RR-uQb`h3O;l4dWZjV^yoRaXTa+)n<5w;|qv z!wjzY)NhINg^ai+FOA1mVE?*o8&73n(7fSri}=33UdWLS9Y~F*J*nN~SmEp9_&ujR zidt+HW(|wg>a!+(D0gHa>5s-={SElmA=bKWBq}8k5PBAq{um;GR1Ri&pQg9wub!U` z^O?bb!#fKoU@PX2*}c_3k$iC4L&-IrUGtBzqwu%>Y53P~Ft%ne}5HmD0D9rb0R;bBuJ+X@es@!YPbvCvCZDB<`@iHEtXm8_(-Zj=A(rN(+ zeABMC8cT1fo3RjS{6W{L?pUccm)`osH6vLoS@@)`HXTP z$DgP4*T44&RJeqF^3>5dwd^jx+ahW~?B( z^NmeGr{l^8SJ>GRy&^#|R(_LCxE7Yyit@c@ocgfcY?@HT+3nbdUaq*iH@t!uSRB1w z%mL&?C~}31BjIw}fhq)Wiam{W?$~LczJv@ptk4Z?5 z-1cXB%Jc4{#pzWcP2nFtQOg>~O8+nq#G(0|7oBBnLNb5P+OwJad-fWt+qIh(u6Zr6 zj!3mF$Kdv%1PX!VUNK2Y-j)_YV8=>Zr15|*@TN<}cX1pFg>DP8okRX|uXUf3%o z&Fl14y8mn-E|+6Yh>Odim^Q5l?t{z1nUTkJ6$x=CGbWIOZ;>T?RKoW8RtYr0TNPMr zN~?DHX#q5miiLXkBWC=(V170 zQU6N*`Xdiqf=)KG5zv!6eG|NDNf42jmv8Kk7F;dnV}*v7npY|JB)?7%`2LD=!q~yI zTs_|qk)3^QMosGG&G--0>QHE#NY~0;2|-raM1SbvZC_QK?P+h*;#}LVFol>>1`D0y z!UfwcWdU6#Y@h6AlCou*+x*1%*yJP+KDZBe#j=G=3GBByRn}XwwZ8XpeZl#A+Rp#_ zdDh=IrogTO?d@PY8%Z9y3)Ar7+N;a!q4u)W8{|) zXD0|Q@8lt8I;?^f(34ec8)3gKsigc+c6nn%muctmf4$die; zJ)n?>Ot}`IeaEf&I8L`Bu{lwq2&vZXuQ*K5CIWg~poh+E3Bqm?PT`Ov&$h%!j!^Ty zI|~<)3$d~zn!X*clOY(-24Lsu6oLmT6%o;Z_8siENJ3U`b(7yFLaGg4Mu`G>2~FlG zIVe~KsYPn*Y8OkERaEHh4`zp0wmr)DwLUBSBG@KH6Y@V&=etM%;B?0yeGR9-xj z$Xx{RBDKMr5iCz!_k1gYLP+x}y`7MZDAiyO5336ET>EBFz_Yln%m8H^G96q`{0ro? z_*TY2GdEsTT_>7F4#ft#P(;L#GMz(750H94{n<{A9num_ zu5%ynIa71hnk%=)q35F}PleY^LnG!j>>d=Ji zi@jA;vZ`|V{y-whzUun=`be3&OoqW$3NvHGbSsdyGgyFx=i;V0 zMW41aAvc=*dpa&>@Mf@`n?&Z?&f@ocurr(Zh~_n?0+vETd7_TTi?SnV2%B2iRClkG4B5zhW6Jyzc!+n4;SICJm!Hhg)E4nb^wCO2v=Eo%N`hs2e2w1FNluN zU!L8oZxDbjaFgy8K9GL;3t-m~@C9*Nyhe#Y?3S6Va)@NFs>|_@v4RZpRBwNNooA+S zL!t5X+A;=dxzTteg8UY-SrQR@;{L!KUgzGlxDoU&-j;9}SMAW175=fcRSCURgGv^bt7@+rj0r5ZfkQ@b*t)y-7W+|4 zaUJ*wniU&%JLg+b^OTytP&Eg!i+6TuCH7jhJx+g>s=1820j}dzcMXB%xLkNB$_9#S z@wS>={knbH@wE|Y?^kc~JwpveW-MSd0!7- zo23Itk?6hmtYy)2y1W<#``BNa~outUX#bPpXe`W^wA* zIJ!4la&gBO;>Pm_2?zai8X{5HWg?uo9Lv8uZ9`lWj|z_)BGx9F-pY*-{a_`@r_gld zj6=;v=9!kGGrRmX=03&s8tp4^LmT&P0$08rIR)DlL{o1Xa(F&?gK)c|-XY@qgNJV% zx*+m4T}U!a>X1bL-fF#@Z-pGLdl=G=@6x#Rk~Q$NoAgq8?m4IF&KUQ_P{ASr5zX9I17xCQzY#c z_=CdwQ|&(K6OUyVFF2%(dz2GMZFGB<^&cHCS8y}tVdJR;^RF=FBdB>W2t+2MCvKB) z=#F3GgL1C3AqDnRoobjTYy6Ev3G=$lET1^6G(!(^kDNSe^T?+NTV4AlDzj*GwOpNp z{>F!e$IL9EJw~!*j*gDXduwd;(d-j~|Nkw8z)|5T`UNXnTR$t)gO4?Ehf$(%c$~cH zRFjyPF)Koku-ew+-$qaY#Kb-=l0bKvCZGP`6)50!0=R@$&~;DT*NRhZL)Qc=5u+tk zLlql}`93*4+-Y>y*Nt8(W~eH!Ou=;VCHz8N&9KGO9AH#nz2djGg2=TOkrE|G{w~iia>92K}e~POBiV+Re=JyKv z$hLov_HS*Cd7|ksLbP1ue_vT&x-C$-F6$|8zARk}>%UVWYDbCykUytFM#vYIBS!g9 zOqcTh*FUw~7ZqZ5)K?W3a(_l>`9%9kaLDFAt*Ob*THciF=vYyqQa+rsH~97BpL4(O zN0C@-<34ctJ?<2BVhL1QmzNf|wcgnO9+llT_q>F66rYwJ`hUmHihH|v>Off!uvF$= z{?{9SKP&e;;Q7GkzW*9D|0n=-3j$rzxTj?N_b}>lZ$XKuiNl?=houF8b07^>-FxNA HcH#dAqg7F< From 66fc46bb6fedc486061db403b8deb19e9427b9c5 Mon Sep 17 00:00:00 2001 From: sostel <32180789+sostel@users.noreply.github.com> Date: Fri, 5 Apr 2019 12:29:06 -0700 Subject: [PATCH 016/183] Update EyeTracking_BasicSetup.md Minor update. --- Documentation/EyeTracking/EyeTracking_BasicSetup.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Documentation/EyeTracking/EyeTracking_BasicSetup.md b/Documentation/EyeTracking/EyeTracking_BasicSetup.md index c3462d32836..7aa1afb7eef 100644 --- a/Documentation/EyeTracking/EyeTracking_BasicSetup.md +++ b/Documentation/EyeTracking/EyeTracking_BasicSetup.md @@ -1,8 +1,7 @@ # Getting started with Eye Tracking in MRTK -This page covers how to set up your Unity MRTK scene to use Eye Tracking in your app. +This page covers how to set up your Unity MRTK scene to use Eye Tracking in your app. The following assumes you are starting out with a fresh new scene. -Alternatively, you can check out our already configured Eye Tracking examples: -[MRTK Eye Tracking Examples](EyeTracking_ExamplesOverview.md). +Alternatively, you can check out our already configured [MRTK Eye Tracking Examples](EyeTracking_ExamplesOverview.md). ### Setting up the scene @@ -70,12 +69,14 @@ Now that your scene is set up to use Eye Tracking, let's take a look at how to a Building your app with Eye Tracking should be similar to how you would compile other HoloLens 2 MRTK apps. The only difference is that the *'Gaze Input'* capability is unfortunately not yet supported by Unity under 'Player Settings -> Publishing Settings -> Capabilities'. To use Eye Tracking on your HoloLens 2 device, you need to manually edit the package manifest that is part of your build Visual Studio project. -So, follow these steps: +Follow these steps: 1. Build your Unity project as you would normally do for _HoloLens 2_. 2. Open your compiled Visual Studio project and then open the _'Package.appxmanifest'_ in your solution. 3. Make sure to tick the _'Gaze Input'_ checkbox under _Capabilities_. ![Enabling Gaze Input in Visual Studio](../../External/ReadMeImages/EyeTracking/mrtk_et_gazeinput.jpg) +If everything is set up correctly, a prompt should pop up asking the user for permission to use Eye Tracking when you start your Unity app on a HoloLens 2 device for the first time. + --- [Back to "Eye Tracking in the MixedRealityToolkit"](EyeTracking_Main.md) From ee2036482356eaf5379b8cdb11474b6f7fd2a817 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Fri, 5 Apr 2019 12:45:22 -0700 Subject: [PATCH 017/183] Revert "Removing example scenes in the Build Settings list for the core package only users." This reverts commit 64071a5d739bc0455e8559c9aafa9f18ef7e1e48. --- ProjectSettings/EditorBuildSettings.asset | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index 0147887ef4b..18d2176f114 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -4,5 +4,26 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 - m_Scenes: [] + m_Scenes: + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Scenes/HandInteractionExamples.unity + guid: 3dd4a396b5225f8469b9a1eb608bfa57 + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity + guid: 27c3fbe0128089f48994cdc6af8668fc + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_01_BasicSetup.unity + guid: 3ac2cf3aa0e281340babd2053d8b7d46 + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_02_TargetSelection.unity + guid: 55643f7e4eceb734784192b162f565e0 + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_03_Navigation.unity + guid: 5df475f0bf57b1f488d59e0e16040d9a + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_04_TargetPositioning.unity + guid: 91ded1f5ef2ae854ba4ac94eca7a2494 + - enabled: 1 + path: Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_05_Visualizer.unity + guid: 2d6c43a82f3a88c4dbdc3b5e99a68d8a m_configObjects: {} From e34b492982258e33b95998a3cd6a2d74b80d4f7d Mon Sep 17 00:00:00 2001 From: sostel <32180789+sostel@users.noreply.github.com> Date: Fri, 5 Apr 2019 13:15:47 -0700 Subject: [PATCH 018/183] Update EyeTracking_ExamplesOverview.md Added description of how to use the root scene setup in the Eye Tracking samples. --- .../EyeTracking_ExamplesOverview.md | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md b/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md index 668a8025986..be5d30ffd57 100644 --- a/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md +++ b/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md @@ -9,6 +9,32 @@ Finally, an example is provided for recording and visualizing the user's visual ## Overview of MRTK Eye Tracking Samples +### Setting up the MRTK Eye Tracking Samples +The [Eye Tracking example package](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/) comes with a number of different Unity scenes that are described in more detail below: +- [mrtk_eyes_00_RootScene.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/): +This is the main (_root_) scene that has all the core MRTK components included. +It comes with a graphical scene menu that allows you to easily switch between the different Eye Tracking scenes which will be [loaded additively](href:https://docs.unity3d.com/ScriptReference/SceneManagement.LoadSceneMode.Additive.html). +To try out the Eye Tracking demos in your Unity Player, all you have to do is to load this scene and hit play. +Make sure that the _'OnLoad_StartScene'_ script is enabled for this so that the root scene knows which additive scene to load first. + +![Example for the OnLoad_StartScene script](/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png) + +- Individual Eye Tracking sample scenes - See [Demo Scenarios](#demo-scenarios) for a description of each: + - [mrtk_eyes_01_BasicSetup.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/) + - [mrtk_eyes_02_TargetSelection.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/) + - [mrtk_eyes_03_Navigation.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/) + - [mrtk_eyes_04_TargetPositioning.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/) + - [mrtk_eyes_05_Visualizer.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/) + +You may wonder: But how do I quickly change a scene and test it in the Unity Editor? +No problem! +- Load the _root_ scene +- Disable the _'OnLoad_StartScene'_ script +- _Drag and drop_ one of the Eye Tracking test scenes that are described below (or any other scene) into your _Hierarchy_ view. + +![Example for the OnLoad_StartScene script](/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png) + +### Demo Scenarios [**Eye-Supported Target Selection**](EyeTracking_TargetSelection.md) This tutorial showcases the ease of accessing eye gaze data to select targets. From 14b09c0aa7f6dd33a5084a4155f90bf320abe754 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Fri, 5 Apr 2019 13:16:34 -0700 Subject: [PATCH 019/183] Adding screenshots for the description on how to use the root scene. --- .../EyeTracking/mrtk_et_rootscene_onload.png | Bin 0 -> 32146 bytes .../EyeTracking/mrtk_et_rootscene_onload2.png | Bin 0 -> 38614 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png create mode 100644 External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png b/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png new file mode 100644 index 0000000000000000000000000000000000000000..40ca1eb60f1f6641e749227d6dfbb50989c9ea69 GIT binary patch literal 32146 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 literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png b/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png new file mode 100644 index 0000000000000000000000000000000000000000..780666b795ba9d0f8eca0177fa7bfe9edb04d304 GIT binary patch literal 38614 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


WYlEI=x{!|#0+z#I7%YIq-Tu5M`Wl_kOzF+ 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 literal 0 HcmV?d00001 From a9b18600a1b03993f1689108243ec0985c96ba16 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Fri, 5 Apr 2019 13:19:58 -0700 Subject: [PATCH 020/183] Update mrtk_eyes_00_RootScene.unity Re-enabling the OnLoad_StartScene script. Without this enabled, the root scene will not load any scene when using it on the device. --- .../Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity index f4d0aaad3c0..bc95a2c44c5 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity @@ -6179,7 +6179,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 658445383, guid: d9db4fe4b37b2024ea85c888f8d74e12, type: 3} propertyPath: m_Enabled - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 1597255435, guid: d9db4fe4b37b2024ea85c888f8d74e12, type: 3} propertyPath: keywords.Array.size From 60b107ea0c186f1bf4d0e60d3c35f7a930e83fd8 Mon Sep 17 00:00:00 2001 From: Yoon Park Date: Fri, 5 Apr 2019 13:28:03 -0700 Subject: [PATCH 021/183] Update README_BoundingBox.md --- Documentation/README_BoundingBox.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/README_BoundingBox.md b/Documentation/README_BoundingBox.md index b177021b33a..0f65cc6faab 100644 --- a/Documentation/README_BoundingBox.md +++ b/Documentation/README_BoundingBox.md @@ -22,7 +22,7 @@ You can find bounding box examples in the *HandInteractionExamples.unity* scene: This specifies which object will get transformed by the bounding box manipulation. If no object is set, the bounding box defaults to the owner object. #### Bounds Override #### -Allows to alternatively set a box collider from another object for bounds computation. +Set a box collider from the object for bounds computation. #### Activation Behavior #### There are several options to activate the bounding box interface. From ee00207b99aa5233399f3e3dc25d75a75b9e523a Mon Sep 17 00:00:00 2001 From: Yoon Park Date: Fri, 5 Apr 2019 13:31:19 -0700 Subject: [PATCH 022/183] Update README_BoundingBox.md --- Documentation/README_BoundingBox.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/README_BoundingBox.md b/Documentation/README_BoundingBox.md index 0f65cc6faab..53154b6dd22 100644 --- a/Documentation/README_BoundingBox.md +++ b/Documentation/README_BoundingBox.md @@ -6,7 +6,7 @@ The `BoundingBox` script provides basic functionality for transforming objects i For more information please see [App Bar and Bounding Box](https://docs.microsoft.com/en-us/windows/mixed-reality/app-bar-and-bounding-box) on Windows Dev Center. ### How to use Bounding Box ### -You can enable Bounding Box by simply assigning the `BoundingBox` script to any GameObject. +You can enable Bounding Box by simply assigning the `BoundingBox` script to any GameObject. Assign the object with Box Collider to 'Bounds Override' field in the Inspector. ![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Assign.png) From 1e73fe7b5e56c9f0c0b6d9e11a3b0ef8e3d3c6ec Mon Sep 17 00:00:00 2001 From: sostel <32180789+sostel@users.noreply.github.com> Date: Fri, 5 Apr 2019 13:36:45 -0700 Subject: [PATCH 023/183] Update EyeTracking_Cursor.md Adding placeholder. --- Documentation/EyeTracking/EyeTracking_Cursor.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Documentation/EyeTracking/EyeTracking_Cursor.md b/Documentation/EyeTracking/EyeTracking_Cursor.md index 2282e980f07..2214f8f699a 100644 --- a/Documentation/EyeTracking/EyeTracking_Cursor.md +++ b/Documentation/EyeTracking/EyeTracking_Cursor.md @@ -1,8 +1,12 @@ -# To show or not to show an eye gaze cursor +## To show or not to show an eye gaze cursor -This page covers design guidelines on when and how to use an eye gaze cursor. +This page will cover design guidelines on when and how to use an eye gaze cursor. + +_We're currently restructuring and improving the MRTK documentation. +This content will be updated soon! +If you have any questions regarding this section please post in our MRTK slack channel._ +_We're currently restructuring and improving the MRTK documentation. +This content will be updated soon! +If you have any questions regarding this section please post in our MRTK slack channel._ --- [Back to "Eye Tracking in the MixedRealityToolkit"](EyeTracking_Main.md) From eaf44dba05a641671dae00701cc41bcf6ff63480 Mon Sep 17 00:00:00 2001 From: sostel <32180789+sostel@users.noreply.github.com> Date: Fri, 5 Apr 2019 13:38:32 -0700 Subject: [PATCH 025/183] Update EyeTracking_Positioning.md Adding placeholder. --- Documentation/EyeTracking/EyeTracking_Positioning.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Documentation/EyeTracking/EyeTracking_Positioning.md b/Documentation/EyeTracking/EyeTracking_Positioning.md index be6ec5e76d4..30d0b2b0209 100644 --- a/Documentation/EyeTracking/EyeTracking_Positioning.md +++ b/Documentation/EyeTracking/EyeTracking_Positioning.md @@ -3,7 +3,9 @@ # Eye-Supported Target Positioning in MRTK - +_We're currently restructuring and improving the MRTK documentation. +This content will be updated soon! +If you have any questions regarding this section please post in our MRTK slack channel._ ![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_positioning_slider.png) From 9223949fbc87b86eaab49a773ecd0056a51b3487 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Fri, 5 Apr 2019 14:26:21 -0700 Subject: [PATCH 026/183] add componentization document --- .../Packaging/MRTK_Modularization.md | 167 ++++++++++++++++++ Documentation/toc.yml | 3 + .../Packaging/AccessingViaInterfaces.png | Bin 0 -> 12615 bytes 3 files changed, 170 insertions(+) create mode 100644 Documentation/Packaging/MRTK_Modularization.md create mode 100644 External/ReadMeImages/Packaging/AccessingViaInterfaces.png diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md new file mode 100644 index 00000000000..70103c80184 --- /dev/null +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -0,0 +1,167 @@ +# Mixed Reality Toolkit Componentization + +One of the great new features of Mixed Reality Toolkit v2 is improved componentization. Wherever possible, +individual components are isolated from all but the core layer << >> of the foundation. + +The following sections describe the status of the componentization work for each major milestone: + +- [Release Candidate 1](#release-candidate-1-status) +- [Release Candidate 2](#release-candidate-2-plan) +- [Official Releaee](#official-release-plan) + +> Some features may, by design, take dependencies on MRTK or other components (ex: Unity Plug-ins). +The package management tools will ensure that the correct dependencies are imported when one of these +features is selected. + +## Release Candidate 1 Status + +With the RC1 release of MRTK v2,the majority of the componentization work has been completed. + +- [Minimized dependencies](#minimized-dependencies) between features +- [Component communication](#component-communication) is performed though interfaces + +Scenarios that are not yet fully supported include: +- Built-in package discovery and importing + + > Release Candidate 2 is planned to include support for discovering and importing MRTK foundational + packages and extensions via NuGet. + +- Application architecture flexibility + + > Release Candidate 1 contains partial support for utilizing MRTK system services in isolation. It is + expected that full support will be available in RC2. + +Developers who desire to reduce the MRTK footprint in their applications, guidance for [manual componentization](#manual-componentization) +is provided. + +### Minimized Dependencies + +MRTK v2 was intentionally developed to be modular and to minimize dependencies between system services +(ex: spatial awareness). + +> Due to the nature of some system services (ex: input and teleportation) a small number of dependencies exist. + +While it is expected that services will need one or more data provider components, there are no direct links +between them. The same is true for SDK features (ex: User Interface components). + +### Component Communication + +To ensure that there are no direct links between components, MRTK v2 utilizes interfaces to communicate between +services, data providers and application code. These interfaces are defined in and all communication is routed +through the Mixed Reality Toolkit core component. + +![Using thespatial awareness system via interfaces](../../External/ReadMeImages/Packaging/AccessingViaInterfaces.png) + +### Manual Componentization + +While automatic support for importing specific MRTK components is not available in RC1, developers can manually +opt-out of specific functionality. + +There are two workflows that developers can use to manually componentize MRTK v2: + +- [Uncheck features](#uncheck-features) during package import +- [Delete feature folders](#delete-feature-folders) + +> If a feature is mistakenly omitted or deleted, the package can be re-imported to add the desired functionality. + +#### Uncheck Features + +When importing the Microsoft.MixedReality.Toolkit.Unity.Foundation-v2.0.0-RC1.unity package, developers have the +ability to limit which package contents get added to the project. + +For projects where the required features and/or platforms are well known, unnecessary system services, providers +and features can be left unchecked to minimize the MRTK footprint. + +> NOTE: MRTK v2 **_requires_** the contents of the Assets\MixedRealityToolkit folder. + +#### Delete Feature Folders + +After importing the Microsoft.MixedReality.Toolkit.Unity.Foundation-v2.0.0-RC1.unity package, the MRTK footprint can +be reduced by deleting unneeded folders from: + +- MixedRealityToolkit.Services +- MixedRealityToolkit.Providers +- MixedRealityToolkit.SDK\Features + +> NOTE: MRTK v2 **_requires_** the contents of the Assets\MixedRealityToolkit folder. + +## Release Candicate 2 Plan + +In addition to the [RC1](#release-candidate-1-status) functionality, the RC2 release will include support for: + +- Package management tools +- Application architecture flexibility + +### Package Management + +MRTK v2 RC2 is planned to contain support for discovering and importing service, provider, feature and extension +packages via NuGet. + +> There is planned to be a Mixed Reality Toolkit menu option, in the Editor, to display user interface that allows +for filtering based on: + +> - Component category (Foundation, Extension, Experimental) +> - Company (ex: Microsoft) +> - Feature type tags (ex: Audio) +> - Number of downloads + +### Application Architecture + +RC2 will have support completed to enable applications to be built with a variety of architectures, including: + +- [MixedRealityToolkit service locator](#mixedrealitytoolkit-service-locator) +- [Individual services](#individual-service-components) +- [Custom service locator](#custom-service-locator) +- [Hybrid architecture](#hybrid-architecture) + +> When selecting an application architecture, it is important to consider design flexibility and application +performance. The architectures described here are not expected to be suitable for every application. + +#### MixedRealityToolkit Service Locator + +RC1 enables (and automatically configures) application scenes to use the default [MixedRealityToolkit](xref:Microsoft.MixedReality.Toolkit.MixedRealityToolkit) service locator +component. This component includes support for configuring MRTK systems and data providers via configuration inspectors +and manages component lifespans and core behaviors (ex: when to update). + +All systems are represented in the core configuration inspector, regardless of whether or not they are present or +enabled in the project. Please see the [Mixed Reality Configuration Guide](../MixedRealityConfiguratonGuide.md) for more +information. + +#### Individual Service Components + +Some developers have expressed a desire to include individual service components into the application scene hierarchy. +To enable this usage, services will either need to be encapsulated in a custom registrar or be self-registering / self-managing. + +> A self-registering service would implement the [IMixedRealityServiceRegistrar](xref:Microsoft.MixedReality.Toolkit.IMixedRealityServiceRegistrar) and register itself so that application +code could discover the service instance via a registry. + +> A self-managing service could be implemented as a singleton object in the scene hierarchy. This object would provide +and instance property which application code could use to directly access serivce functionality. + +#### Custom Service Locator + +Some developers have requested the ability to create a custom service locator component. Custom service locators would +implement the [IMixedRealityServiceRegistrar](xref:Microsoft.MixedReality.Toolkit.IMixedRealityServiceRegistrar) interface and manage the lifecycle and core behaviors of active services. + +#### Hybrid Architectures + +RC2 is planned to support a hybrid architecture in which developers can combine the previous approaches as needed or +desired. For example, a developer could start with the [MixedRealityToolkit](xref:Microsoft.MixedReality.Toolkit.MixedRealityToolkit) service locator and add a self-registering +service. + +> When opting for a hybrid architecture, it is important to be mindful of any duplication of work (ex: acquiring +controller data from multiple components). + +## Official Release Plan + +For the official release of MRTK v2, the componentization work will be complete. The expectation is that developers will be +empowered to: + +1. Import the MRTK Core foundation package +2. Use the built-in package management tools to discover and import individual components +3. Select the desired application architecture + +## See Also + +- [MRTK Packages](MRTK_Packages.md) + diff --git a/Documentation/toc.yml b/Documentation/toc.yml index 1be7e18ce14..6da18580fc4 100644 --- a/Documentation/toc.yml +++ b/Documentation/toc.yml @@ -20,6 +20,9 @@ items: - name: Packages href: Packaging/MRTK_Packages.md + items: + - name: Mixed Reality Toolkit Componentization + href: Packaging/MRTK_Modularization.md - name: Service Provider href: MixedRealityConfigurationGuide.md - name: Boundary System diff --git a/External/ReadMeImages/Packaging/AccessingViaInterfaces.png b/External/ReadMeImages/Packaging/AccessingViaInterfaces.png new file mode 100644 index 0000000000000000000000000000000000000000..5c27c0de61030ee9e61517a5029eefa59415de31 GIT binary patch literal 12615 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

H z_*QuzACB;LJ;JN#KPUgGC;z8(`F{tdP`s2fNcA;!jY*%QeD6_>2y*fW=9!tu~O-_0d&TLajza@f1Id(~PiJp;WY-ncLN=K7<@!cA4#0E1` zI<4K^q1@vbB69NJUyY*15n1m4F6!ysE|a)G>&VrBP47&d#H7uqKepkc4A$QP!)8{!pcFd zUhWgIv86@x_UHy{k>ufi4(i5IYZrV||97JYMM9X>lo?_xw6X z4rTSW6NQ>=r(TqoSH3ypOe_RX&b7-O`_53ku0pQ2j<95W99PeAKnVqPW#omZZ+jto z^L$(Q96!0ZEk>(=I8_veQC)4(H5Es_f4c@!MsN-6V)Puv)>DWVwmnR<^ZDZwW?k8; zjSIb{oyxjce6G*vq{36~#OE1OA-^Z4gL!k1F)jl63sFGAb@f(un9->F^DdtCWaBZL zN@ZzCG;12iz5ZUaDR%CXRPBcWBd%b(@Aq%akEHcvRx9dwnV8+&wpGXGMu8M>RL2dX zB6#JO`0EV~sMEte4MR0xc*?fPJ^2t>j9-nPhnP$<4YRgNj`nisF=ewPW5K zk`ywa<00HNnb*)$1`3v5G$!iN4+VlNE}o4VNPy^1}2_cH)l^w#VnZoO8%g208vi_qqOpc^WlqQPW7?yb*@)o zmU`i@qsDVbw$TGt!yLx$H+ffHLXy%OLIbz#AjnBqf7dcgkV$?crpuVEJ5Jgi7(Cpr zs6XmM9$T)_|GXo8Fw%`LR_pgTG4{CB)!)_je4^9cw}cnB@He^!KyB~mD{Llp#1?T$ zJ?S;ZGe+Fn#m1LjR!SQ4$bIa%0x66d@L;TWMuiR39?#_lND-P)CJeRHeVHb?&RN0gSVnN9z;cV!eY z)oxoxa<5Y&dZu#bm6cZTg6<^bSQY?J`+l`3aX2B7!h=|WF?A!=IlY!QEE#GW32ytU z4*UK_RevQ(BzX$ra-&a9Yyhcy#NlCp55Z5!Z_GVEDM6}hc*WARH_Aqkq^;1@zsa@K zMM^?y@B>(@Xk{7J{ArkS4OJHAvcQvkZET~>A>sz|d`}4#p-8*r`JP?KtH@50DG@?8 zKlsm*8=pZJiBqdhC_#$_7h>`t@uvx-*=jcQ>ssD8~Ev%9Y4>> zy$V0Y;c^j8U;?vt!%eIL8@&gUNemGEiW)QYCfhaZBy_;%67W7zV|C2*=V7EAF^cm{<(gw<7ua$uql=Bxti^GwG`|Zp(zvIHdj-$-knX*qBz!U&%4!J7pZhGcO1ppv#p4`!Y6u z^jK)&@M=cF4WS&PU1t5(X{X~0)t{rp zTjh6HPy&GcZ`OCZ{XeShf8!-4%tlT@UGdG!CUf`}`>AnW@DX1{-18%W9`61CJsLY) c^F3iC`sjHrbyyFHXHS5Vg1UUZ?9(^@3-{Q1cK`qY literal 0 HcmV?d00001 From 50f0201a2d89169941bd41362715822072ae6495 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Fri, 5 Apr 2019 14:33:54 -0700 Subject: [PATCH 027/183] fix bad link --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 70103c80184..85a9fc95f48 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -124,7 +124,7 @@ component. This component includes support for configuring MRTK systems and data and manages component lifespans and core behaviors (ex: when to update). All systems are represented in the core configuration inspector, regardless of whether or not they are present or -enabled in the project. Please see the [Mixed Reality Configuration Guide](../MixedRealityConfiguratonGuide.md) for more +enabled in the project. Please see the [Mixed Reality Configuration Guide](../MixedRealityConfigurationGuide.md) for more information. #### Individual Service Components From 5396e75b0dd6c3546dcdf93d38e165d4f7b9a520 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Fri, 5 Apr 2019 14:35:07 -0700 Subject: [PATCH 028/183] fix bad references --- Documentation/Packaging/MRTK_Modularization.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 85a9fc95f48..f0ca465a318 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -85,7 +85,7 @@ be reduced by deleting unneeded folders from: > NOTE: MRTK v2 **_requires_** the contents of the Assets\MixedRealityToolkit folder. -## Release Candicate 2 Plan +## Release Candidate 2 Plan In addition to the [RC1](#release-candidate-1-status) functionality, the RC2 release will include support for: @@ -143,7 +143,7 @@ and instance property which application code could use to directly access serivc Some developers have requested the ability to create a custom service locator component. Custom service locators would implement the [IMixedRealityServiceRegistrar](xref:Microsoft.MixedReality.Toolkit.IMixedRealityServiceRegistrar) interface and manage the lifecycle and core behaviors of active services. -#### Hybrid Architectures +#### Hybrid Architecture RC2 is planned to support a hybrid architecture in which developers can combine the previous approaches as needed or desired. For example, a developer could start with the [MixedRealityToolkit](xref:Microsoft.MixedReality.Toolkit.MixedRealityToolkit) service locator and add a self-registering From af1e8ee7b210555910b36b65778ff5447ec3e040 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Fri, 5 Apr 2019 14:53:50 -0700 Subject: [PATCH 029/183] fix item indentation --- Documentation/toc.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/toc.yml b/Documentation/toc.yml index 6da18580fc4..421c9e8fbdc 100644 --- a/Documentation/toc.yml +++ b/Documentation/toc.yml @@ -22,7 +22,7 @@ href: Packaging/MRTK_Packages.md items: - name: Mixed Reality Toolkit Componentization - href: Packaging/MRTK_Modularization.md + href: Packaging/MRTK_Modularization.md - name: Service Provider href: MixedRealityConfigurationGuide.md - name: Boundary System From ed5cc2202a8b01b42f8d0f09bb12e8a88e7f20f3 Mon Sep 17 00:00:00 2001 From: David Kline Date: Sat, 6 Apr 2019 16:49:03 -0700 Subject: [PATCH 030/183] Update Documentation/Packaging/MRTK_Modularization.md --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index f0ca465a318..10894c81148 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -7,7 +7,7 @@ The following sections describe the status of the componentization work for each - [Release Candidate 1](#release-candidate-1-status) - [Release Candidate 2](#release-candidate-2-plan) -- [Official Releaee](#official-release-plan) +- [Official Release](#official-release-plan) > Some features may, by design, take dependencies on MRTK or other components (ex: Unity Plug-ins). The package management tools will ensure that the correct dependencies are imported when one of these From 1606292edd06f065342049f0c3fcacaee31c5b57 Mon Sep 17 00:00:00 2001 From: David Kline Date: Sat, 6 Apr 2019 16:49:19 -0700 Subject: [PATCH 031/183] Update Documentation/Packaging/MRTK_Modularization.md --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 10894c81148..77d3a8399a7 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -15,7 +15,7 @@ features is selected. ## Release Candidate 1 Status -With the RC1 release of MRTK v2,the majority of the componentization work has been completed. +With the RC1 release of MRTK v2, the majority of the componentization work has been completed. - [Minimized dependencies](#minimized-dependencies) between features - [Component communication](#component-communication) is performed though interfaces From 2a3e672127c746e7d0f7b3313263223413e8214f Mon Sep 17 00:00:00 2001 From: David Kline Date: Sat, 6 Apr 2019 16:49:31 -0700 Subject: [PATCH 032/183] Update Documentation/Packaging/MRTK_Modularization.md --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 77d3a8399a7..89a72b59313 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -18,7 +18,7 @@ features is selected. With the RC1 release of MRTK v2, the majority of the componentization work has been completed. - [Minimized dependencies](#minimized-dependencies) between features -- [Component communication](#component-communication) is performed though interfaces +- [Component communication](#component-communication) is performed through interfaces Scenarios that are not yet fully supported include: - Built-in package discovery and importing From 5f5a1b77955edc59beb848ea01f6e420343a57bd Mon Sep 17 00:00:00 2001 From: Daniel Hofmann <36995331+danielhofmann-ms@users.noreply.github.com> Date: Mon, 8 Apr 2019 15:49:02 +0100 Subject: [PATCH 033/183] Add TargetPositionLockedOnFocusLock for pointers to to allow the cursor to not be position-locked on HandInteractionPan surfaces (#3862) Since focus lock is handled per pointer, cursor lock needs to be handled on the same level. --- .../Scripts/Pointers/BaseControllerPointer.cs | 3 + .../UX/Scripts/Pointers/GGVPointer.cs | 3 + .../UX/Scripts/Pointers/LinePointer.cs | 4 +- .../Scripts/Pointers/ShellHandRayPointer.cs | 6 +- .../Scripts/Pointers/SpherePointerVisual.cs | 4 +- .../UX/Scripts/Slate/HandInteractionPan.cs | 259 +++++++++--------- .../InputSystem/FocusProvider.cs | 56 ++-- .../InputSystem/GazeProvider.cs | 3 +- .../InputSystem/MixedRealityInputSystem.cs | 9 +- .../Definitions/Physics/FocusDetails.cs | 2 + .../Handlers/IMixedRealityPointerHandler.cs | 8 +- .../InputSystem/IMixedRealityPointer.cs | 5 + .../Providers/GenericPointer.cs | 3 + .../Physics/MixedRealityRaycaster.cs | 19 ++ 14 files changed, 219 insertions(+), 165 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/BaseControllerPointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/BaseControllerPointer.cs index 588977cbccb..9f91b29cf13 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/BaseControllerPointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/BaseControllerPointer.cs @@ -261,6 +261,9 @@ public virtual bool IsInteractionEnabled /// public bool IsFocusLocked { get; set; } + /// + public bool IsTargetPositionLockedOnFocusLock { get; set; } + [SerializeField] private bool overrideGlobalPointerExtent = false; diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/GGVPointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/GGVPointer.cs index c70b8d75c13..d5be33a17e3 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/GGVPointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/GGVPointer.cs @@ -90,6 +90,9 @@ public string PointerName /// public bool IsFocusLocked { get; set; } + /// + public bool IsTargetPositionLockedOnFocusLock { get; set; } + public RayStep[] Rays { get; protected set; } = { new RayStep(Vector3.zero, Vector3.forward) }; public LayerMask[] PrioritizedLayerMasksOverride { get; set; } diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/LinePointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/LinePointer.cs index 49557091d17..57c442fa1dc 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/LinePointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/LinePointer.cs @@ -114,7 +114,7 @@ public override void OnPreSceneQuery() lineBase.UpdateMatrix(); // Set our first and last points - if (IsFocusLocked && Result?.Details != null) + if (IsFocusLocked && IsTargetPositionLockedOnFocusLock && Result != null) { // Make the final point 'stick' to the target at the distance of the target SetLinePoints(Position, Result.Details.Point, Result.Details.RayDistance); @@ -191,7 +191,7 @@ public override void OnPostSceneQuery() // If focus is locked, we're sticking to the target // So don't clamp the world length - if (IsFocusLocked) + if (IsFocusLocked && IsTargetPositionLockedOnFocusLock) { float cursorOffsetLocalLength = LineBase.GetNormalizedLengthFromWorldLength(cursorOffsetWorldLength); LineBase.LineEndClamp = 1 - cursorOffsetLocalLength; diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/ShellHandRayPointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/ShellHandRayPointer.cs index 230c4528259..9c727dbe07b 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/ShellHandRayPointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/ShellHandRayPointer.cs @@ -98,9 +98,9 @@ public override void OnPostSceneQuery() lineRenderer.LineColor = lineColor; } - // If focus is locked, we're sticking to the target + // If focus and target point is locked, we're sticking to the target // So don't clamp the world length - if (IsFocusLocked) + if (IsFocusLocked && IsTargetPositionLockedOnFocusLock) { float cursorOffsetLocalLength = LineBase.GetNormalizedLengthFromWorldLength(cursorOffsetWorldLength); LineBase.LineEndClamp = 1 - cursorOffsetLocalLength; @@ -118,7 +118,7 @@ protected override void SetLinePoints(Vector3 startPoint, Vector3 endPoint, floa LineBase.FirstPoint = startPoint; LineBase.LastPoint = endPoint; - if (IsFocusLocked) + if (IsFocusLocked && IsTargetPositionLockedOnFocusLock) { inertia.enabled = false; // Project forward based on pointer direction to get an 'expected' position of the first control point diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/SpherePointerVisual.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/SpherePointerVisual.cs index 79ae40b8876..45804581297 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/SpherePointerVisual.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/SpherePointerVisual.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. -using Microsoft.MixedReality.Toolkit.Input; using Microsoft.MixedReality.Toolkit.Utilities; using UnityEngine; @@ -34,7 +33,6 @@ public void OnValidate() public void OnEnable() { CheckInitialization(); - } public void OnDestroy() @@ -79,7 +77,7 @@ private void CheckAsset(object asset, string fieldname) public void Update() { bool tetherVisualsEnabled = false; - if (pointer.IsFocusLocked) + if (pointer.IsFocusLocked && pointer.IsTargetPositionLockedOnFocusLock && pointer.Result != null) { NearInteractionGrabbable grabbedObject = GetGrabbedObject(); if (grabbedObject != null && grabbedObject.ShowTetherWhenManipulating) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs index 23fdd6f8bb0..4ef17127251 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Slate/HandInteractionPan.cs @@ -2,14 +2,13 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.MixedReality.Toolkit.Input; -using Microsoft.MixedReality.Toolkit.Utilities; +using Microsoft.MixedReality.Toolkit.Physics; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; -using UnityEngine.SceneManagement; using UnityEngine.Serialization; -public class HandInteractionPan : BaseFocusHandler, IMixedRealityTouchHandler, IMixedRealityInputHandler +public class HandInteractionPan : BaseFocusHandler, IMixedRealityTouchHandler, IMixedRealityPointerHandler { private enum TouchType { @@ -50,7 +49,6 @@ private enum TouchType private Mesh mesh; private Vector2 uvOffset = Vector2.zero; private Vector2 uvTotalOffset = Vector2.zero; - private IMixedRealityInputSource touchingSource; private Vector3 touchingInitialPt; private Vector3 touchingPoint; private Vector2 touchingUV; @@ -58,14 +56,10 @@ private enum TouchType private Vector2 touchingUVOffset; private Vector2 touchingUVTotalOffset; private List handlerInterfaces = new List(); - private IMixedRealityController currentController = null; - private bool TouchActive - { - get - { - return touchingPoint != Vector3.zero; - } - } + private IMixedRealityPointer currentPointer = null; + + private bool TouchActive { get => (currentPointer != null); } + #endregion Private Properties #region MonoBehaviour Handlers @@ -73,6 +67,7 @@ private void Awake() { ValidityCheck(); } + private void Update() { if (isEnabled == false) @@ -80,82 +75,83 @@ private void Update() return; } - if (currentController != null) + touchingPoint = Vector3.zero; + if (currentPointer != null) { - if (touchType == TouchType.IndexFinger) - { - if (true == TryGetHandPoint(currentController, TrackedHandJoint.IndexTip, out Vector3 tryHandPoint)) - { - touchingPoint = SnapFingerToQuad(tryHandPoint); - } - else - { - return; - } - } - else if (touchType == TouchType.HandRay) + if (false == TryGetPointerPosition(currentPointer, out touchingPoint)) { - if (true == TryGetHandPoint(currentController, TrackedHandJoint.Palm, out Vector3 tryHandPoint)) - { - touchingPoint = SnapFingerToQuad(tryHandPoint); - } - else - { - return; - } + return; } MoveTouch(); - - if (touchVisual) - { - touchVisual.transform.position = touchingPoint; - } } - else + + if (touchVisual != null) { - if (touchVisual) - { - touchVisual.transform.position = Vector3.zero; - } + touchVisual.transform.position = touchingPoint; } UpdateIdle(); UpdateUVMapping(); } + #endregion MonoBehaviour Handlers - #region Private Methods - private bool TryGetHandPoint(IMixedRealityController controller, TrackedHandJoint joint, out Vector3 handPoint) + + private bool TryGetPointerPosition(IMixedRealityPointer pointer, out Vector3 handRayPoint) { - Vector3 point = Vector3.zero; - if (true == HandJointUtils.TryGetJointPose(joint, controller.ControllerHandedness, out MixedRealityPose pose)) + Vector3 planePoint = transform.TransformPoint( + (mesh != null && mesh.vertices.Length > 0) ? mesh.vertices[0] : Vector3.zero); + Vector3 planeNormal = transform.forward; + + if (touchType == TouchType.IndexFinger) { - handPoint = pose.Position; + handRayPoint = Vector3.ProjectOnPlane(pointer.Position - planePoint, planeNormal) + pointer.Position; return true; } + else if (touchType == TouchType.HandRay) + { + if (pointer.Result != null) + { + Plane plane = new Plane(planeNormal, planePoint); + + // Compute intersection of ray with quad plane. + // The ray may be outside of the object since we disable target position focus locking. + foreach (RayStep step in pointer.Rays) + { + if (MixedRealityRaycaster.RaycastPlanePhysicsStep(step, plane, out handRayPoint)) + { + return true; + } + } - handPoint = point; + handRayPoint = pointer.Result.Details.Point; + return true; + } + } + + handRayPoint = Vector3.zero; return false; } + private void ValidityCheck() { - //check for box collider + // check for box collider Collider collider = GetComponent(); if (collider == null) { - Debug.Log("The GameObject that runs this script must have a Collider attached."); + Debug.LogWarning("The GameObject that runs this script must have a Collider attached."); } else { - this.GetComponent().material.mainTexture.wrapMode = TextureWrapMode.Repeat; + GetComponent().material.mainTexture.wrapMode = TextureWrapMode.Repeat; } - //get event targets + // get event targets foreach (GameObject gameObject in panEventReceivers) { - if(gameObject != null) + if (gameObject != null) { IMixedRealityHandPanHandler handler = gameObject.GetComponent(); if (handler != null) @@ -165,34 +161,19 @@ private void ValidityCheck() } } - //precache references + // precache references meshFilter = gameObject.GetComponent(); if (meshFilter == null) { - Debug.Log("The GameObject: " + this.gameObject.name + " " + "does not have a Mesh component."); + mesh = null; + Debug.LogWarning($"The GameObject: '{gameObject.name}' does not have a Mesh component."); } else { mesh = meshFilter.mesh; } } - private IMixedRealityHandPanHandler[] GetInterfaces() - { - List interfaces = new List(); - GameObject[] gameObjects = SceneManager.GetActiveScene().GetRootGameObjects(); - - foreach (var gameObject in gameObjects) - { - IMixedRealityHandPanHandler[] childrenInterfaces = gameObject.GetComponentsInChildren(); - foreach (var childInterface in childrenInterfaces) - { - interfaces.Add(childInterface); - } - } - - return interfaces.ToArray(); - } private void UpdateIdle() { if (TouchActive == false) @@ -206,27 +187,29 @@ private void UpdateIdle() if (velocityActive == true) { uvOffset = new Vector2(uvOffset.x * velocityDamping.x, uvOffset.y * velocityDamping.y); - FirePanning(0); + FirePanning(); } if (springActive == true) { List uvCurrent = new List(); - mesh.GetUVs(0, uvCurrent); + GetMeshUVs(uvCurrent); uvOffset = -(uvsTouchStart[0] - uvCurrent[0]) * 0.1f; - FirePanning(0); + FirePanning(); } } } } + private void UpdateTouchPoint() { Vector2 newUV = GetUVFromPoint(touchingPoint); - + uvOffset = newUV - touchingUV; uvOffset.y = -uvOffset.y; touchingUV = newUV; } + private void UpdateUVMapping() { if (velocityActive) @@ -235,7 +218,7 @@ private void UpdateUVMapping() List uvs = new List(); List uvsOrig = new List(); - mesh.GetUVs(0, uvs); + GetMeshUVs(uvs); uvsOrig.AddRange(uvs); bool oobX = false; @@ -271,39 +254,51 @@ private void UpdateUVMapping() mesh.uv = uvs.ToArray(); } } + + void GetMeshUVs(List uvs) + { + if (mesh != null) + { + mesh.GetUVs(0, uvs); + } + else + { + uvs.Clear(); + } + } + private Vector2 GetUVFromPoint(Vector3 point) { Vector2 uv = GetPlanePoint(point); uv = new Vector2(lockHorizontal ? 0.0f : uv.x, lockVertical ? 0.0f : uv.y); return uv; } + private Vector2 GetPlanePoint(Vector3 point) { + if (mesh == null) + { + return Vector2.zero; + } + Vector3[] vertices = mesh.vertices; Vector3 upperLeft = transform.TransformPoint(vertices[3]); - Vector3 upperRight = transform.TransformPoint(vertices[1]);//lower left + Vector3 upperRight = transform.TransformPoint(vertices[1]); Vector3 lowerLeft = transform.TransformPoint(vertices[0]); float magVertical = (lowerLeft - upperLeft).magnitude; float magHorizontal = (upperRight - upperLeft).magnitude; float v = Vector3.Dot(point - upperLeft, (lowerLeft - upperLeft) / magVertical); - float h = Vector3.Dot(point - upperLeft, (upperRight - upperLeft)/magHorizontal); + float h = Vector3.Dot(point - upperLeft, (upperRight - upperLeft) / magHorizontal); v /= magVertical; h /= magHorizontal; return new Vector2(h, v); } - private Vector3 SnapFingerToQuad(Vector3 pointToSnap) - { - Vector3 planePoint = this.transform.TransformPoint(mesh.vertices[0]); - Vector3 planeNormal = gameObject.transform.forward; - return Vector3.ProjectOnPlane(pointToSnap - planePoint, planeNormal) + planePoint; - } private void DisconnectTouch() { - currentController = null; - touchingSource = null; + currentPointer = null; touchingPoint = Vector3.zero; touchingInitialPt = Vector3.zero; touchingUV = Vector2.zero; @@ -311,34 +306,38 @@ private void DisconnectTouch() touchingUVOffset = Vector2.zero; EndTouch(); } + #endregion Private Methods - #region Internal State Handlers + private void StartTouch() { UpdateTouchPoint(); - mesh.GetUVs(0, uvsTouchStart); - FirePanStarted(touchingSource.SourceId); + GetMeshUVs(uvsTouchStart); + FirePanStarted(); } + private void EndTouch() { touchingUVTotalOffset += uvOffset; - FirePanEnded(0); + FirePanEnded(); } + private void MoveTouch() { UpdateTouchPoint(); - FirePanning(touchingSource.SourceId); + FirePanning(); } + #endregion Internal State Handlers - #region Fire Events to Listening Objects - private void FirePanStarted(uint id) + + private void FirePanStarted() { HandPanEventData eventData = new HandPanEventData(EventSystem.current); - eventData.Initialize(touchingSource, uvOffset); + eventData.Initialize(currentPointer == null ? null : currentPointer.InputSourceParent, uvOffset); foreach (IMixedRealityHandPanHandler handler in handlerInterfaces) { @@ -348,7 +347,8 @@ private void FirePanStarted(uint id) } } } - private void FirePanEnded(uint id) + + private void FirePanEnded() { HandPanEventData eventData = new HandPanEventData(EventSystem.current); eventData.Initialize(null, Vector2.zero); @@ -361,10 +361,11 @@ private void FirePanEnded(uint id) } } } - private void FirePanning(uint id) + + private void FirePanning() { HandPanEventData eventData = new HandPanEventData(EventSystem.current); - eventData.Initialize(touchingSource, uvOffset); + eventData.Initialize(currentPointer == null ? null : currentPointer.InputSourceParent, uvOffset); foreach (IMixedRealityHandPanHandler handler in handlerInterfaces) { @@ -374,23 +375,22 @@ private void FirePanning(uint id) } } } + #endregion Fire Events to Listening Objects + #region IMixedRealityTouchHandler implementation - #region IMixedRealityHandTrackHandler - public void OnTouchStarted(HandTrackingInputEventData eventData) + void IMixedRealityTouchHandler.OnTouchStarted(HandTrackingInputEventData eventData) { if (touchType == TouchType.IndexFinger) { - if (touchingSource == null) + if (currentPointer == null) { - touchingSource = eventData.InputSource; - currentController = touchingSource.Pointers[0].Controller; - - TryGetHandPoint(eventData.Controller, TrackedHandJoint.IndexTip, out Vector3 handPt); + currentPointer = eventData.InputSource.Pointers[0]; - touchingPoint = SnapFingerToQuad(handPt); + TryGetPointerPosition(currentPointer, out touchingPoint); touchingInitialPt = touchingPoint; + touchingUV = GetUVFromPoint(touchingPoint); touchingInitialUV = touchingUV; touchingUVOffset = touchingUVTotalOffset; @@ -401,64 +401,73 @@ public void OnTouchStarted(HandTrackingInputEventData eventData) } } } - public void OnTouchCompleted(HandTrackingInputEventData eventData) + void IMixedRealityTouchHandler.OnTouchCompleted(HandTrackingInputEventData eventData) { if (touchType == TouchType.IndexFinger) { - if (touchingSource == eventData.InputSource) + if (currentPointer == eventData.InputSource.Pointers[0]) { DisconnectTouch(); eventData.Use(); } } } - public void OnTouchUpdated(HandTrackingInputEventData eventData) { } + void IMixedRealityTouchHandler.OnTouchUpdated(HandTrackingInputEventData eventData) { } #endregion IMixedRealityHandTrackHandler - #region BaseFocusHandler Methods - public override void OnFocusEnter(FocusEventData eventData){} + + public override void OnFocusEnter(FocusEventData eventData) { } + public override void OnFocusExit(FocusEventData eventData) { DisconnectTouch(); } + #endregion + #region IMixedRealityPointerHandler implementation - #region IMixedRealityInputHandler Methods - public void OnInputDown(InputEventData eventData) + void IMixedRealityPointerHandler.OnPointerDown(MixedRealityPointerEventData eventData) { - if (touchType == TouchType.HandRay) + if (touchType == TouchType.HandRay) { - if (touchingSource == null) + if (currentPointer == null) { - touchingSource = eventData.InputSource; - currentController = touchingSource.Pointers[0].Controller; - TryGetHandPoint(currentController, TrackedHandJoint.Palm, out touchingPoint); - touchingPoint = SnapFingerToQuad(touchingPoint); + currentPointer = eventData.InputSource.Pointers[0]; + + TryGetPointerPosition(currentPointer, out touchingPoint); touchingInitialPt = touchingPoint; + touchingUV = GetUVFromPoint(touchingPoint); touchingInitialUV = touchingUV; touchingUVOffset = touchingUVTotalOffset; StartTouch(); + // Pointer cursor needs to be able to move on focus lock when panning. + currentPointer.IsTargetPositionLockedOnFocusLock = false; + eventData.Use(); } } } - public void OnInputUp(InputEventData eventData) + + void IMixedRealityPointerHandler.OnPointerUp(MixedRealityPointerEventData eventData) { if (touchType == TouchType.HandRay) { - if (touchingSource == eventData.InputSource) + if (currentPointer == eventData.Pointer) { DisconnectTouch(); eventData.Use(); } } } - public void OnPositionInputChanged(InputEventData eventData){} - public void OnInputPressed(InputEventData eventData){} - #endregion IMixedRealityInputHandler Methods -} + + void IMixedRealityPointerHandler.OnPointerClicked(MixedRealityPointerEventData eventData) + { + } + + #endregion +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs b/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs index 8feed8858c4..9b69fb508b6 100644 --- a/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.MixedReality.Toolkit.Physics; -using Microsoft.MixedReality.Toolkit.Input; using Microsoft.MixedReality.Toolkit.Utilities; using System; using System.Collections.Generic; @@ -150,7 +149,7 @@ private class PointerHitResult public Vector3 hitNormalOnObject = Vector3.zero; public RayStep ray; - public int rayStepIndex; + public int rayStepIndex = -1; public float rayDistance; public void Clear() @@ -163,7 +162,7 @@ public void Clear() hitNormalOnObject = Vector3.zero; ray = default(RayStep); - rayStepIndex = 0; + rayStepIndex = -1; rayDistance = 0.0f; } @@ -270,26 +269,29 @@ public void UpdateHit(PointerHitResult hitResult) if (hitResult.hitObject != CurrentPointerTarget) { Pointer.OnPreCurrentPointerTargetChange(); + + // Set to default: + Pointer.IsTargetPositionLockedOnFocusLock = true; } PreviousPointerTarget = CurrentPointerTarget; - if (hitResult.hitObject != null) + focusDetails.Object = hitResult.hitObject; + focusDetails.LastRaycastHit = hitResult.raycastHit; + focusDetails.LastGraphicsRaycastResult = hitResult.graphicsRaycastResult; + + if (hitResult.rayStepIndex >= 0) { RayStepIndex = hitResult.rayStepIndex; StartPoint = hitResult.ray.Origin; - focusDetails.LastRaycastHit = hitResult.raycastHit; - focusDetails.LastGraphicsRaycastResult = hitResult.graphicsRaycastResult; - focusDetails.Object = hitResult.hitObject; focusDetails.RayDistance = hitResult.rayDistance; focusDetails.Point = hitResult.hitPointOnObject; focusDetails.Normal = hitResult.hitNormalOnObject; - focusDetails.PointLocalSpace = hitResult.hitObject.transform.InverseTransformPoint(focusDetails.Point); - focusDetails.NormalLocalSpace = hitResult.hitObject.transform.InverseTransformPoint(focusDetails.Normal); } else { + // If we don't have a valid ray cast, use the whole pointer ray. RayStep firstStep = Pointer.Rays[0]; RayStep finalStep = Pointer.Rays[Pointer.Rays.Length - 1]; RayStepIndex = 0; @@ -302,12 +304,18 @@ public void UpdateHit(PointerHitResult hitResult) rayDist += Pointer.Rays[i].Length; } - focusDetails.LastRaycastHit = default(RaycastHit); - focusDetails.LastGraphicsRaycastResult = default(RaycastResult); - focusDetails.Object = null; focusDetails.RayDistance = rayDist; focusDetails.Point = finalStep.Terminus; focusDetails.Normal = -finalStep.Direction; + } + + if (hitResult.hitObject != null) + { + focusDetails.PointLocalSpace = hitResult.hitObject.transform.InverseTransformPoint(focusDetails.Point); + focusDetails.NormalLocalSpace = hitResult.hitObject.transform.InverseTransformPoint(focusDetails.Normal); + } + else + { focusDetails.PointLocalSpace = Vector3.zero; focusDetails.NormalLocalSpace = Vector3.zero; } @@ -326,6 +334,8 @@ public void UpdateFocusLockedHit() // In case the focused object is moving, we need to update the focus point based on the object's new transform. focusDetails.Point = focusDetails.Object.transform.TransformPoint(focusDetails.PointLocalSpace); focusDetails.Normal = focusDetails.Object.transform.TransformDirection(focusDetails.NormalLocalSpace); + focusDetails.PointLocalSpace = focusDetails.Object.transform.InverseTransformPoint(focusDetails.Point); + focusDetails.NormalLocalSpace = focusDetails.Object.transform.InverseTransformPoint(focusDetails.Normal); } StartPoint = Pointer.Rays[0].Origin; @@ -722,13 +732,15 @@ private void UpdatePointer(PointerData pointer) } else { - // If the pointer is locked - // Keep the focus objects the same + // If the pointer is locked, keep the focused object the same. // This will ensure that we execute events on those objects - // even if the pointer isn't pointing at them - if (!pointer.Pointer.IsFocusLocked) + // even if the pointer isn't pointing at them. + if (pointer.Pointer.IsFocusLocked && pointer.Pointer.IsTargetPositionLockedOnFocusLock) + { + pointer.UpdateFocusLockedHit(); + } + else { - // Otherwise, continue LayerMask[] prioritizedLayerMasks = (pointer.Pointer.PrioritizedLayerMasksOverride ?? FocusLayerMasks); // Perform raycast to determine focused object @@ -746,16 +758,18 @@ private void UpdatePointer(PointerData pointer) hit = GetPrioritizedHitResult(hit, hitResultUi, prioritizedLayerMasks); } + // Make sure to keep focus on the previous object if focus is locked (no target position lock here). + if (pointer.Pointer.IsFocusLocked && pointer.Pointer.Result?.CurrentPointerTarget != null) + { + hit.hitObject = pointer.Pointer.Result.CurrentPointerTarget; + } + // Apply the hit result only now so changes in the current target are detected only once per frame. pointer.UpdateHit(hit); // Set the pointer's result last pointer.Pointer.Result = pointer; } - else - { - pointer.UpdateFocusLockedHit(); - } } // Call the pointer's OnPostSceneQuery function. diff --git a/Assets/MixedRealityToolkit.Services/InputSystem/GazeProvider.cs b/Assets/MixedRealityToolkit.Services/InputSystem/GazeProvider.cs index a3590d05939..941d6b41f3c 100644 --- a/Assets/MixedRealityToolkit.Services/InputSystem/GazeProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSystem/GazeProvider.cs @@ -359,7 +359,8 @@ private void Update() // If flagged to do so (setCursorInvisibleWhenFocusLocked) and active (IsInteractionEnabled), set the visibility to !IsFocusLocked, // but don't touch the visibility when not active or not flagged. - if (setCursorInvisibleWhenFocusLocked && (GazePointer?.IsInteractionEnabled ?? false) && GazePointer?.IsFocusLocked == GazeCursor?.IsVisible) + if (setCursorInvisibleWhenFocusLocked && GazePointer != null && + GazePointer.IsInteractionEnabled && GazePointer.IsFocusLocked == GazeCursor.IsVisible) { GazeCursor.SetVisibility(!GazePointer.IsFocusLocked); } diff --git a/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputSystem.cs b/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputSystem.cs index 2a93ff9c638..da36bc6b1a9 100644 --- a/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputSystem.cs +++ b/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputSystem.cs @@ -868,14 +868,11 @@ public void RaiseFocusExit(IMixedRealityPointer pointer, GameObject unfocusedObj /// public void RaisePointerDown(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, Handedness handedness = Handedness.None, IMixedRealityInputSource inputSource = null) { + pointer.IsFocusLocked = (pointer.Result?.Details.Object != null); + pointerEventData.Initialize(pointer, inputAction, handedness, inputSource); HandlePointerEvent(pointerEventData, OnPointerDownEventHandler); - - if (pointer.Result?.Details.Object != null) - { - pointer.IsFocusLocked = true; - } } #endregion Pointer Down @@ -923,7 +920,7 @@ public void RaisePointerUp(IMixedRealityPointer pointer, MixedRealityInputAction pointerEventData.Initialize(pointer, inputAction, handedness, inputSource); HandlePointerEvent(pointerEventData, OnPointerUpEventHandler); - + pointer.IsFocusLocked = false; } diff --git a/Assets/MixedRealityToolkit/Definitions/Physics/FocusDetails.cs b/Assets/MixedRealityToolkit/Definitions/Physics/FocusDetails.cs index 5ca09d6c11c..efb6a6a62d8 100644 --- a/Assets/MixedRealityToolkit/Definitions/Physics/FocusDetails.cs +++ b/Assets/MixedRealityToolkit/Definitions/Physics/FocusDetails.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using Microsoft.MixedReality.Toolkit.Input; using UnityEngine; using UnityEngine.EventSystems; @@ -41,6 +42,7 @@ public struct FocusDetails /// The last raycast hit info for graphic raycast ///

public RaycastResult LastGraphicsRaycastResult { get; set; } + public Vector3 PointLocalSpace { get; set; } public Vector3 NormalLocalSpace { get; set; } } diff --git a/Assets/MixedRealityToolkit/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs b/Assets/MixedRealityToolkit/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs index 1d919c02923..7e784d703aa 100644 --- a/Assets/MixedRealityToolkit/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs +++ b/Assets/MixedRealityToolkit/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs @@ -11,16 +11,16 @@ namespace Microsoft.MixedReality.Toolkit.Input public interface IMixedRealityPointerHandler : IEventSystemHandler { /// - /// When a pointer up event is raised, this method is used to pass along the event data to the input handler. + /// When a pointer down event is raised, this method is used to pass along the event data to the input handler. /// /// - void OnPointerUp(MixedRealityPointerEventData eventData); + void OnPointerDown(MixedRealityPointerEventData eventData); /// - /// When a pointer down event is raised, this method is used to pass along the event data to the input handler. + /// When a pointer up event is raised, this method is used to pass along the event data to the input handler. /// /// - void OnPointerDown(MixedRealityPointerEventData eventData); + void OnPointerUp(MixedRealityPointerEventData eventData); /// /// When a pointer clicked event is raised, this method is used to pass along the event data to the input handler. diff --git a/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityPointer.cs b/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityPointer.cs index dcf85f48757..5f815c54c64 100644 --- a/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityPointer.cs +++ b/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityPointer.cs @@ -57,6 +57,11 @@ public interface IMixedRealityPointer : IEqualityComparer /// bool IsFocusLocked { get; set; } + /// + /// Specifies whether the pointer's target position (cursor) is locked to the target object when focus is locked. + /// + bool IsTargetPositionLockedOnFocusLock { get; set; } + /// /// The scene query rays. /// diff --git a/Assets/MixedRealityToolkit/Providers/GenericPointer.cs b/Assets/MixedRealityToolkit/Providers/GenericPointer.cs index d1a71c6a2d0..81b6e8af164 100644 --- a/Assets/MixedRealityToolkit/Providers/GenericPointer.cs +++ b/Assets/MixedRealityToolkit/Providers/GenericPointer.cs @@ -87,6 +87,9 @@ public bool IsInteractionEnabled /// public bool IsFocusLocked { get; set; } + /// + public bool IsTargetPositionLockedOnFocusLock { get; set; } + /// /// The pointer's maximum extent when raycasting. /// diff --git a/Assets/MixedRealityToolkit/Utilities/Physics/MixedRealityRaycaster.cs b/Assets/MixedRealityToolkit/Utilities/Physics/MixedRealityRaycaster.cs index 238f35c946d..3b9c8ecfa40 100644 --- a/Assets/MixedRealityToolkit/Utilities/Physics/MixedRealityRaycaster.cs +++ b/Assets/MixedRealityToolkit/Utilities/Physics/MixedRealityRaycaster.cs @@ -121,6 +121,25 @@ public static bool RaycastSpherePhysicsStep(RayStep step, float radius, LayerMas return RaycastSpherePhysicsStep(step, radius, step.Length, prioritizedLayerMasks, out physicsHit); } + /// + /// Intersection test of ray step with given plane. + /// + /// Whether the ray step intersects the ray step. + public static bool RaycastPlanePhysicsStep(RayStep step, Plane plane, out Vector3 hitPoint) + { + if (plane.Raycast(step, out float intersectDistance)) + { + if (intersectDistance <= step.Length) + { + hitPoint = ((Ray)step).GetPoint(intersectDistance); + return true; + } + } + + hitPoint = Vector3.zero; + return false; + } + /// /// Sphere raycasts each physics within a specified maximum distance. /// From f4fb362d4f06a577029ad7ab7be1545db8559c35 Mon Sep 17 00:00:00 2001 From: Addison Linville Date: Mon, 8 Apr 2019 09:45:34 -0700 Subject: [PATCH 034/183] Adding EventRouting for Camera events, added option to ClippingPrimitive (#3886) * Adding EventRouting for Camera events, added option to ClippingPrimitive * added missing space after 'if' * wrapping LateUpdate's UpdateRender to defer to OnCameraPreRender when true --- .../Utilities/CameraEventRouter.cs | 24 +++++++ .../Utilities/CameraEventRouter.cs.meta | 11 ++++ .../Utilities/ClippingPrimitive.cs | 62 ++++++++++++++++++- 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs.meta diff --git a/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs b/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs new file mode 100644 index 00000000000..0ae1b6a9501 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Utilities +{ + /// + /// A helper class to provide hooks into the Unity camera exclusive Lifecycle events + /// + public class CameraEventRouter : MonoBehaviour + { + /// + /// A callback to act upon without a script needing to exist on a component + /// + public event Action OnCameraPreRender; + + private void OnPreRender() + { + OnCameraPreRender?.Invoke(this); + } + } +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs.meta b/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs.meta new file mode 100644 index 00000000000..bdf8516e137 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8b9c599bb8dcccf448a8788e94533644 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/Utilities/ClippingPrimitive.cs b/Assets/MixedRealityToolkit/Utilities/ClippingPrimitive.cs index 9bd6a1d9406..0e3baa1cc31 100644 --- a/Assets/MixedRealityToolkit/Utilities/ClippingPrimitive.cs +++ b/Assets/MixedRealityToolkit/Utilities/ClippingPrimitive.cs @@ -1,4 +1,4 @@ - // Copyright (c) Microsoft Corporation. All rights reserved. +// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. using System.Collections.Generic; @@ -36,6 +36,39 @@ public Side ClippingSide set { clippingSide = value; } } + + /// + /// Toggles whether the primitive will use the Camera OnPreRender event + /// + /// This is especially helpful if you're trying to clip dynamically created objects that may be added to the scene after LateUpdate such as OnWillRender + [SerializeField] + [Tooltip("Toggles whether the primitive will use the Camera OnPreRender event")] + private bool useOnPreRender; + + public bool UseOnPreRender + { + get { return useOnPreRender; } + set + { + if (cameraMethods == null) + { + cameraMethods = CameraCache.Main.gameObject.EnsureComponent(); + } + + if (value) + { + cameraMethods.OnCameraPreRender += OnCameraPreRender; + } + else + { + cameraMethods.OnCameraPreRender -= OnCameraPreRender; + } + + useOnPreRender = value; + } + } + + protected abstract string Keyword { get; } protected abstract string KeywordProperty { get; } protected abstract string ClippingSideProperty { get; } @@ -46,6 +79,10 @@ public Side ClippingSide private int clippingSideID; + [SerializeField] + [HideInInspector] + private CameraEventRouter cameraMethods; + public void AddRenderer(Renderer _renderer) { if (_renderer != null && !renderers.Contains(_renderer)) @@ -93,6 +130,20 @@ protected void OnDisable() { UpdateRenderers(); ToggleClippingFeature(false); + + if (cameraMethods != null) + { + cameraMethods.OnCameraPreRender -= OnCameraPreRender; + } + } + + protected void Start() + { + if (useOnPreRender) + { + cameraMethods = CameraCache.Main.gameObject.EnsureComponent(); + cameraMethods.OnCameraPreRender += OnCameraPreRender; + } } #if UNITY_EDITOR @@ -113,6 +164,15 @@ protected void Update() #endif protected void LateUpdate() + { + //Deferring the LateUpdate() call to OnCameraPreRender() + if (!useOnPreRender) + { + UpdateRenderers(); + } + } + + protected void OnCameraPreRender(CameraEventRouter router) { UpdateRenderers(); } From 3e5a7e1ad45c7b3dc3678ce76a57c70343e6c304 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Mon, 8 Apr 2019 10:07:01 -0700 Subject: [PATCH 035/183] Added Utilities Menu --- Assets/MixedRealityToolkit/Inspectors/ChannelPackerWindow.cs | 2 +- .../Utilities/BuildAndDeploy/BuildDeployWindow.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/ChannelPackerWindow.cs b/Assets/MixedRealityToolkit/Inspectors/ChannelPackerWindow.cs index 74a1aba3dbf..968535c030f 100644 --- a/Assets/MixedRealityToolkit/Inspectors/ChannelPackerWindow.cs +++ b/Assets/MixedRealityToolkit/Inspectors/ChannelPackerWindow.cs @@ -38,7 +38,7 @@ private enum Channel private const string StandardRoughnessShaderName = "Standard (Roughness setup)"; private const string StandardSpecularShaderName = "Standard (Specular setup)"; - [MenuItem("Mixed Reality Toolkit/Channel Packer")] + [MenuItem("Mixed Reality Toolkit/Utilities/Channel Packer")] private static void ShowWindow() { ChannelPackerWindow window = GetWindow(); diff --git a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs index 4bf3d2c68ac..a2892514312 100644 --- a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs +++ b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs @@ -181,7 +181,7 @@ private static bool IsHoloLensConnectedUsb #region Methods - [MenuItem("Mixed Reality Toolkit/Build Window", false, 0)] + [MenuItem("Mixed Reality Toolkit/Utilities/Build Window", false, 0)] public static void OpenWindow() { // Dock it next to the Scene View. From 96b6bb085490e77197cf3475ccb34a4a6a718e71 Mon Sep 17 00:00:00 2001 From: David Kline Date: Mon, 8 Apr 2019 12:03:50 -0700 Subject: [PATCH 036/183] Update Documentation/Packaging/MRTK_Modularization.md --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 89a72b59313..e1bcf1df328 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -50,7 +50,7 @@ To ensure that there are no direct links between components, MRTK v2 utilizes in services, data providers and application code. These interfaces are defined in and all communication is routed through the Mixed Reality Toolkit core component. -![Using thespatial awareness system via interfaces](../../External/ReadMeImages/Packaging/AccessingViaInterfaces.png) +![Using the spatial awareness system via interfaces](../../External/ReadMeImages/Packaging/AccessingViaInterfaces.png) ### Manual Componentization From 0a644472776353e96ad3d77275dd669756c0be89 Mon Sep 17 00:00:00 2001 From: David Kline Date: Mon, 8 Apr 2019 12:04:07 -0700 Subject: [PATCH 037/183] Update Documentation/Packaging/MRTK_Modularization.md --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index e1bcf1df328..72fb37f3abe 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -1,7 +1,7 @@ # Mixed Reality Toolkit Componentization One of the great new features of Mixed Reality Toolkit v2 is improved componentization. Wherever possible, -individual components are isolated from all but the core layer << >> of the foundation. +individual components are isolated from all but the core layer of the foundation. The following sections describe the status of the componentization work for each major milestone: From e19c765611f58362bc2804fc4cf18f1aa1d65393 Mon Sep 17 00:00:00 2001 From: David Kline Date: Mon, 8 Apr 2019 12:04:20 -0700 Subject: [PATCH 038/183] Update Documentation/Packaging/MRTK_Modularization.md --- Documentation/Packaging/MRTK_Modularization.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 72fb37f3abe..4b7bfb86857 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -107,7 +107,7 @@ for filtering based on: ### Application Architecture -RC2 will have support completed to enable applications to be built with a variety of architectures, including: +RC2 will have support to enable applications to be built with a variety of architectures, including: - [MixedRealityToolkit service locator](#mixedrealitytoolkit-service-locator) - [Individual services](#individual-service-components) From c26b1964b168bcbabe8f0cbc5ac2539a75c0319e Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Mon, 8 Apr 2019 12:07:37 -0700 Subject: [PATCH 039/183] pr feedback --- Documentation/Packaging/MRTK_Modularization.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 4b7bfb86857..49616a75362 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -9,10 +9,6 @@ The following sections describe the status of the componentization work for each - [Release Candidate 2](#release-candidate-2-plan) - [Official Release](#official-release-plan) -> Some features may, by design, take dependencies on MRTK or other components (ex: Unity Plug-ins). -The package management tools will ensure that the correct dependencies are imported when one of these -features is selected. - ## Release Candidate 1 Status With the RC1 release of MRTK v2, the majority of the componentization work has been completed. From b8481076d524e81d6ffab248e277a4aaf7720a17 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Mon, 8 Apr 2019 16:12:54 -0700 Subject: [PATCH 040/183] checkpoint getting started --- Documentation/GettingStartedWithTheMRTK.md | 23 ++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 6a46bf179e2..7055d8056e7 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -14,18 +14,16 @@ To get started with the Mixed Reality Toolkit you will need: * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) * [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) -## Upgrading from the HoloToolkit (HTK/MRTK v1) - -There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and start work migrating your implementation if you wish. +## Open and run the HandInteractionExample scene +1. Go to the [MRTK release page](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases). +2. Under Assets, download both `Microsoft.MixedRealityToolkit.Unity.Examples` .unitypackage and `Microsoft.MixedRealityToolkit.Unity.Foundation` +3. Create a new Unity project. We used 2018.3.9f1 for this tutorial. -* [HoloToolkit to Mixed Reality Toolkit Porting Guide](HTKToMRTKPortingGuide.md) - - -## Starting your new MRTK v2 project +> The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. -We have done an incredible amount of work to ensure the new project experience is as streamlined as possible. To this end, we endeavoured to get you up and running as fast as possible. +## Add MRTK to a new scene or new project -To get your first project up and running, the steps are as follows: +If you want to add mrtk to a branch new project or empty scene, the steps are as follows: ### 1. Create your new project (or start a new scene in your current project) @@ -33,7 +31,6 @@ To get your first project up and running, the steps are as follows: ### 2. [Import the Mixed Reality Toolkit asset](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) -> The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. Get the asset and import it in to your Unity project using "Asset -> Import Package -> Custom Package" from the Unity Editor menu. @@ -98,6 +95,12 @@ Switch to other platforms (ensure they have XR enabled in their player settings) +## Upgrading from the HoloToolkit (HTK/MRTK v1) + +There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and start work migrating your implementation if you wish. + +* [HoloToolkit to Mixed Reality Toolkit Porting Guide](HTKToMRTKPortingGuide.md) + ## Configuring your project The Mixed Reality Toolkit configuration is all centralized on one place and attached to the MixedRealityToolkit object in your active scene. From 888e0ff45bc6e157c14cc0982a03e5b051703319 Mon Sep 17 00:00:00 2001 From: cellarmation Date: Tue, 9 Apr 2019 09:17:48 +0100 Subject: [PATCH 041/183] Make sure UI raycast camera has near clip plane set to zero --- Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs b/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs index 9b69fb508b6..028d3da0a9e 100644 --- a/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs @@ -947,6 +947,7 @@ private static void UpdatePointerRayOnHit(RayStep[] raySteps, RaycastHit physics private void RaycastGraphics(IMixedRealityPointer pointer, PointerEventData graphicEventData, LayerMask[] prioritizedLayerMasks, PointerHitResult hit) { Debug.Assert(UIRaycastCamera != null, "Missing UIRaycastCamera!"); + Debug.Assert(UIRaycastCamera.nearClipPlane == 0, "Near plane must be zero for raycast distances to be correct"); RaycastResult raycastResult = default(RaycastResult); From 2f9845f0b7e4ac6907a13dd133116c4f282ef50b Mon Sep 17 00:00:00 2001 From: Luis Valverde <47451126+luis-valverde-ms@users.noreply.github.com> Date: Tue, 9 Apr 2019 09:20:44 +0100 Subject: [PATCH 042/183] Regenerated input system profile for speech sample so we have the default data providers (#3885) --- ...peech.MixedRealityInputSystemProfile.asset | 56 +++++++++++++++++++ ....MixedRealityInputSystemProfile.asset.meta | 2 +- ...edRealityToolkitConfigurationProfile.asset | 3 +- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset index 805696e76c1..acdef013509 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset +++ b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset @@ -13,6 +13,62 @@ MonoBehaviour: m_Name: Speech.MixedRealityInputSystemProfile m_EditorClassIdentifier: isCustomProfile: 1 + dataProviderConfigurations: + - componentType: + reference: Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input.WindowsMixedRealityDeviceManager, + Microsoft.MixedReality.Toolkit.Providers.WindowsMixedReality + componentName: Windows Mixed Reality Device Manager + priority: 0 + runtimePlatform: 8 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.OpenVR.Input.OpenVRDeviceManager, + Microsoft.MixedReality.Toolkit.Providers.OpenVR + componentName: OpenVR Device Manager + priority: 0 + runtimePlatform: 7 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.Input.UnityInput.UnityJoystickManager, + Microsoft.MixedReality.Toolkit + componentName: Unity Joystick Manager + priority: 0 + runtimePlatform: -1 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.Input.UnityInput.UnityTouchDeviceManager, + Microsoft.MixedReality.Toolkit + componentName: Unity Touch Device Manager + priority: 0 + runtimePlatform: -1 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.Windows.Input.WindowsSpeechInputProvider, + Microsoft.MixedReality.Toolkit.Providers.WindowsVoiceInput + componentName: Windows Speech Input + priority: 0 + runtimePlatform: 25 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.Windows.Input.WindowsDictationInputProvider, + Microsoft.MixedReality.Toolkit.Providers.WindowsVoiceInput + componentName: Windows Dictation Input + priority: 0 + runtimePlatform: 25 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.Input.HandJointService, Microsoft.MixedReality.Toolkit + componentName: Hand Joint Service + priority: 0 + runtimePlatform: -1 + deviceManagerProfile: {fileID: 0} + - componentType: + reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation + componentName: Input Simulation Service + priority: 0 + runtimePlatform: 16 + deviceManagerProfile: {fileID: 11400000, guid: 41478039094d47641bf4e09c20e61a5a, + type: 2} focusProviderType: reference: Microsoft.MixedReality.Toolkit.Input.FocusProvider, Microsoft.MixedReality.Toolkit.Services.InputSystem inputActionsProfile: {fileID: 11400000, guid: 723eb97b02944311b92861f473eee53e, diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset.meta b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset.meta index f5d287dd270..5535ec8b1e3 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset.meta +++ b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 00e306afacaf92a4a88a13bb31a11e4f +guid: 2a6b327d88d172543b7526be8cb2018e NativeFormatImporter: externalObjects: {} mainObjectFileID: 11400000 diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityToolkitConfigurationProfile.asset b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityToolkitConfigurationProfile.asset index 672e97b1d49..7e70da525e9 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityToolkitConfigurationProfile.asset +++ b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityToolkitConfigurationProfile.asset @@ -17,7 +17,7 @@ MonoBehaviour: enableCameraProfile: 1 cameraProfile: {fileID: 11400000, guid: 8089ccfdd4494cd38f676f9fc1f46a04, type: 2} enableInputSystem: 1 - inputSystemProfile: {fileID: 11400000, guid: 00e306afacaf92a4a88a13bb31a11e4f, type: 2} + inputSystemProfile: {fileID: 11400000, guid: 2a6b327d88d172543b7526be8cb2018e, type: 2} inputSystemType: reference: Microsoft.MixedReality.Toolkit.Input.MixedRealityInputSystem, Microsoft.MixedReality.Toolkit.Services.InputSystem enableBoundarySystem: 1 @@ -34,6 +34,7 @@ MonoBehaviour: spatialAwarenessSystemType: reference: Microsoft.MixedReality.Toolkit.SpatialAwareness.MixedRealitySpatialAwarenessSystem, Microsoft.MixedReality.Toolkit.Services.SpatialAwarenessSystem + spatialAwarenessSystemProfile: {fileID: 0} diagnosticsSystemProfile: {fileID: 11400000, guid: 478436bd1083882479a52d067e98e537, type: 2} enableDiagnosticsSystem: 0 From b79072ec7be348e5fadf3528e2460ce0e8044507 Mon Sep 17 00:00:00 2001 From: "REDMOND\\witian" Date: Tue, 9 Apr 2019 13:21:54 +0100 Subject: [PATCH 043/183] Renamed IGameObjectCreator to IGameObjectListener. Updated comment that had a reference to Longbow.Helpers --- .../Utilities/GameObjectManagement/GameObjectCreator.cs | 8 ++++---- .../GameObjectManagement/GenericPrefabInstanceCreator.cs | 2 +- ...ectCreatorHandler.cs => IGameObjectCreatorListener.cs} | 2 +- ...Handler.cs.meta => IGameObjectCreatorListener.cs.meta} | 0 4 files changed, 6 insertions(+), 6 deletions(-) rename Assets/MixedRealityToolkit/Utilities/GameObjectManagement/{IGameObjectCreatorHandler.cs => IGameObjectCreatorListener.cs} (95%) rename Assets/MixedRealityToolkit/Utilities/GameObjectManagement/{IGameObjectCreatorHandler.cs.meta => IGameObjectCreatorListener.cs.meta} (100%) diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs index 56857c6cd01..ce130221ae5 100644 --- a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GameObjectCreator.cs @@ -27,9 +27,9 @@ public virtual void PrepareForRecycle(GameObject obj) var components = obj.GetComponents(); foreach (var component in components) { - if (component is IGameObjectCreatorHandler) + if (component is IGameObjectCreatorListener) { - (component as IGameObjectCreatorHandler).PrepareForRecycle(); + (component as IGameObjectCreatorListener).PrepareForRecycle(); } } } @@ -45,9 +45,9 @@ public virtual void PrepareForUse(GameObject obj) var components = obj.GetComponents(); foreach (var component in components) { - if (component is IGameObjectCreatorHandler) + if (component is IGameObjectCreatorListener) { - (component as IGameObjectCreatorHandler).PrepareForUse(); + (component as IGameObjectCreatorListener).PrepareForUse(); } } } diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs index e40b1d47122..d4304d549f7 100644 --- a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/GenericPrefabInstanceCreator.cs @@ -7,7 +7,7 @@ namespace Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement /// /// Creator for making prefab instances /// - /// + /// public class GenericPrefabInstanceCreator : GameObjectCreator { /// diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorListener.cs similarity index 95% rename from Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs rename to Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorListener.cs index ae6fc53ac1c..cb523d33c6f 100644 --- a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs +++ b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorListener.cs @@ -8,7 +8,7 @@ namespace Microsoft.MixedReality.Toolkit.Utilities.GameObjectManagement /// GameObjectPool) can implement in order to handle preparation for /// recycling and reuse. /// - public interface IGameObjectCreatorHandler + public interface IGameObjectCreatorListener { /// /// Called when the GameObject is about to be recycled by the GameObjectPool. This allows you to potentially free diff --git a/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs.meta b/Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorListener.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorHandler.cs.meta rename to Assets/MixedRealityToolkit/Utilities/GameObjectManagement/IGameObjectCreatorListener.cs.meta From 0737ae2e4c54a7bb9d74214b54d1fac5e0eff496 Mon Sep 17 00:00:00 2001 From: Niall Milsom Date: Tue, 9 Apr 2019 15:35:56 +0100 Subject: [PATCH 044/183] Add docs ci badge to readme --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cde2056b69f..5c15a924e64 100644 --- a/README.md +++ b/README.md @@ -17,9 +17,9 @@ MRTK is a Microsoft Driven open source project. MRTK-Unity... # Build Status -| Branch | Status | -|---|---| -| `mrtk_development` |[![Build status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_development-CI)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=1)| +| Branch | CI Status | Docs Status | +|---|---|---| +| `mrtk_development` |[![CI Status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_development-CI)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=1)|[![Docs Status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_docs)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=7) # Required Software | [![Windows 10 Creators Update](External/ReadMeImages/MRTK170802_Short_17.png)](https://www.microsoft.com/software-download/windows10) [Windows 10 FCU](https://www.microsoft.com/software-download/windows10)| [![Unity](External/ReadMeImages/MRTK170802_Short_18.png)](https://unity3d.com/get-unity/download/archive) [Unity 3D](https://unity3d.com/get-unity/download/archive)| [![Visual Studio 2017](External/ReadMeImages/MRTK170802_Short_19.png)](http://dev.windows.com/downloads) [Visual Studio 2017](http://dev.windows.com/downloads)| [![Simulator (optional)](External/ReadMeImages/MRTK170802_Short_20.png)](https://go.microsoft.com/fwlink/?linkid=852626) [Simulator (optional)](https://go.microsoft.com/fwlink/?linkid=852626)| From 29efd191a7022a9f58cef7d74a0a06b9898090f4 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 10:57:50 -0700 Subject: [PATCH 045/183] Checkpoint --- Documentation/GettingStartedWithTheMRTK.md | 46 ++++++++++++------ .../Images/MRTK_GettingStarted_TMPro.png | Bin 0 -> 12317 bytes 2 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 External/Documentation/Images/MRTK_GettingStarted_TMPro.png diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 7055d8056e7..7b8f08fc8e3 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -14,37 +14,51 @@ To get started with the Mixed Reality Toolkit you will need: * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) * [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) -## Open and run the HandInteractionExample scene +## Get the latest MRTK Unity packages 1. Go to the [MRTK release page](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases). -2. Under Assets, download both `Microsoft.MixedRealityToolkit.Unity.Examples` .unitypackage and `Microsoft.MixedRealityToolkit.Unity.Foundation` -3. Create a new Unity project. We used 2018.3.9f1 for this tutorial. - +2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. -## Add MRTK to a new scene or new project +## Open and run the HandInteractionExample scene +1. Create a new Unity project. We used 2018.3.9f1 for this tutorial. -If you want to add mrtk to a branch new project or empty scene, the steps are as follows: +2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -### 1. Create your new project (or start a new scene in your current project) +3. Import the Microsoft.MixedRealityToolkit.Unity.Examples following the same steps as above. -> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. Please stay tuned to the MRTK GitHub site for future announcements on SRP support. +> The examples package contains demonstration scenes for current MRTK features. + +6. Open the HandInteractionExamples scene under `Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes\HandInteractionExamples` +7. You will get a prompt asking you to import "TMP Essentials". +![TMP Essentials](../External/Documentation/Images/MRTK_GettingStarted_TMPro.png) + +8. Select "Import TMP essentials" button. "TMP Essentials" refers to TextMeshPro plugin, which some of the MRTK examples use for improved text rendering. -### 2. [Import the Mixed Reality Toolkit asset](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) +9. Close the TMPPro dialog. After this you need to reload Unity, so close unity and re-open unity, then open your project and go back to the scene +10. Press the play button to start the scene. -Get the asset and import it in to your Unity project using "Asset -> Import Package -> Custom Package" from the Unity Editor menu. +11. Press WASD keys to fly around the scene. Press and hold right mouse to look around. -![](../External/ReadMeImages/Unity_ImportAssetOption.png) +12. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. -Accept all the content and continue. +13. Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. + +Congratulations, you just used your first MRTK scene! Now onto creating your own stuff... + +## Add MRTK to a new scene or new project + +1. Create a new project, or start a new scene in your current project + +> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. Please stay tuned to the MRTK GitHub site for future announcements on SRP support. -![](../External/ReadMeImages/MRTK_AssetImportDialog.png) +2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -> The SDK is optional but highly recommended for new users. Once you have a feel for how the toolkit works, you can remove these safely if you are not using them. +3. Import the Microsoft.MixedRealityToolkit.Unity.Examples following the same steps as above. -> The MRTK also provides a [separate "Examples" asset](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases), which currently contains demonstration scenes for current MRTK features. In the future this will also contain educational "Example" scenes to aid with learning implementation tricks with the toolkit. +> The examples package contains demonstration scenes for current MRTK features. -Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). +> Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. ### 3. Accept the Setup prompt (optional) ![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) diff --git a/External/Documentation/Images/MRTK_GettingStarted_TMPro.png b/External/Documentation/Images/MRTK_GettingStarted_TMPro.png new file mode 100644 index 0000000000000000000000000000000000000000..aced6baf8bd153964f6ddbfccc4503aaad602d55 GIT binary patch literal 12317 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 Xl%|J+xET#v`e9@w6hBpp83q48gPJXJ literal 0 HcmV?d00001 From a96171eee863f619e58d0dd5054e329238dcbae5 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 11:47:01 -0700 Subject: [PATCH 046/183] Finish pass 1 of getting started --- Documentation/GettingStartedWithTheMRTK.md | 122 +++++------------- .../ReadMeImages/MRTK_ConfigureDialog.png | Bin 0 -> 8547 bytes External/ReadMeImages/MRTK_SceneSetup.png | Bin 2668 -> 7679 bytes .../MRTK_SelectConfigurationDialog.png | Bin 0 -> 9072 bytes 4 files changed, 34 insertions(+), 88 deletions(-) create mode 100644 External/ReadMeImages/MRTK_ConfigureDialog.png create mode 100644 External/ReadMeImages/MRTK_SelectConfigurationDialog.png diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 7b8f08fc8e3..c433b2d7db3 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -44,126 +44,59 @@ To get started with the Mixed Reality Toolkit you will need: 13. Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. +14. Explore the scene! Learn more about the components in the scene [here](README_HandInteractionExamples.md). + Congratulations, you just used your first MRTK scene! Now onto creating your own stuff... ## Add MRTK to a new scene or new project -1. Create a new project, or start a new scene in your current project +### 1. Create a new project, or start a new scene in your current project > *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. Please stay tuned to the MRTK GitHub site for future announcements on SRP support. -2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". +### 2. Import MRTK Packages +1. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -3. Import the Microsoft.MixedRealityToolkit.Unity.Examples following the same steps as above. +2. Import the Microsoft.MixedRealityToolkit.Unity.Examples following the same steps as above. -> The examples package contains demonstration scenes for current MRTK features. +> The examples package is optional but contains useful demonstration scenes for current MRTK features. > Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. -### 3. Accept the Setup prompt (optional) -![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) - -Once imported, the MRTK will attempt to setup your project automatically for building Mixed Reality solutions, namely setting: - -* Enable XR Settings for your current platform (enabling the XR checkbox) -> Note, you need to do this for each platform you wish to deploy on -* Force Text Serialization / Visible Meta files (recommended for Unity projects using source control) -* Change the Scripting back-end to use IL2CPP (as Unity is deprecating the .NET scripting back-end) +### 3. Configure your first Mixed Reality Toolkit scene -> The only option which is mandatory (and not listed above) is to set Unity to use the .NET 4 scripting runtime by default, as the MRTK uses advanced coding functions only available in .NET4+. -> From Unity 2018.3 and above, this will be the default for new Unity Projects. +The toolkit has been designed so that there is just one object that is mandatory in your scene. This is there to provide the core configuration and runtime for the Mixed Reality Toolkit. -This prompt will automatically set the above options for you and restart Unity (for the .NET update) ready to start building your MRTK project. +Configuring your scene is extremely simple by simply selecting the following from the Editor menu: +> Mixed Reality Toolkit -> Add to Scene and Configure -Accepting these options is completely optional (except .NET 4), if you click **Later**, the MRTK will not ask you again and leave you to it. You can then choose to set these options manually later as you see fit. +![](../External/ReadMeImages/MRTK_ConfigureScene.png) -### 4. Configure your first Mixed Reality Toolkit scene +You will see a prompt like this: -The toolkit has been designed so that there is just one object that is mandatory in your scene. This is there to provide the core configuration and runtime for the Mixed Reality Toolkit (one of the key advantages in the new framework). +![](../External/ReadMeImages/MRTK_ConfigureDialog.png) -Configuring your scene is extremely simple by simply selecting the following from the Editor menu: -> Mixed Reality Toolkit -> Add to Scene and Configure +Click "OK". You will then be prompted to choose an MRTK Configuration profile. Select "DefaultMixedRealityToolkitConfigurationProfile". -![](../External/ReadMeImages/MRTK_ConfigureScene.png) +![](../External/ReadMeImages/MRTK_SelectConfigurationDialog.png) Once this completes, you will see the following in your Scene hierarchy: ![](../External/ReadMeImages/MRTK_SceneSetup.png) -> The MRTK will also select the configured profile, [click here for more details on this configuration screens](#configuring) - Which contains the following: * Mixed Reality Toolkit - The toolkit itself, providing the central configuration entry point for the entire framework. * MixedRealityPlayspace - The parent object for the headset, which ensures the headset / controllers and other required systems are managed correctly in the scene. * The Main Camera is moved as a child to the Playspace - Which allows the playspace to manage the camera in conjunction with the SDK's -* UIRaycastCamera added as a child to the Main Camera - To enable seamless UI interactions through the toolkit > **Note** While working in your scene, **DON'T move the Main Camera** (or the playspace) from the scene origin (0,0,0). This is controlled by the MRTK and the active SDK. > If you need to move the players start point, then **move the scene content and NOT the camera**! ### 5. Hit play +Press the play button to start the scene. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. -You are now ready to start building your Mixed Reality Solution, just start adding content and get building. -Switch to other platforms (ensure they have XR enabled in their player settings) and your project will still run as expected without change. - - - -## Upgrading from the HoloToolkit (HTK/MRTK v1) - -There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and start work migrating your implementation if you wish. - -* [HoloToolkit to Mixed Reality Toolkit Porting Guide](HTKToMRTKPortingGuide.md) - -## Configuring your project - -The Mixed Reality Toolkit configuration is all centralized on one place and attached to the MixedRealityToolkit object in your active scene. - -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png) - -Clicking on this profile will show the configuration screens for the Mixed Reality Toolkit: - -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png) - -From here you can navigate to all the configuration profiles for the MRTK, including: - -> The "Default" profiles provided by the Mixed Reality Toolkit are locked by default, so when you view these in the inspector they will appear greyed out. This is to ensure you always have a common default for any project. We recommend you create your own profiles (see below) when you need to customize the configuration for your project. - -* Main Mixed Reality Toolkit Configuration -* Camera Settings -* Input System Settings -* Boundary Visualization Settings -* Teleporting Settings -* Spatial Awareness Settings -* Diagnostics Settings -* Additional Services Settings -* Input Actions Settings -* Input Actions Rules -* Pointer Configuration -* Gestures Configuration -* Speech Commands -* Controller Mapping Configuration -* Controller Visualization Settings - -As you can see there are lots of options available and more will come available as we progress through the beta. - -When you start a new project, we provide a default set of configurations with every option turned on, styled for a fully cross platform project. These defaults are "Locked" to ensure you always have a common start point for your project and we encourage you to start defining your own settings as your project evolves. For this we provide options to either: - -* Copy the defaults in to a new profile for you to start customizing it for your project -* Start afresh with a brand-new profile. - -![](../External/ReadMeImages/MRTK_CopyCreateConfigurationOptions.png) - -When profiles are created by the MRTK, they are then placed in the following folder: - -> "Assets\MixedRealityToolkit-Generated\CustomProfiles" - -At each step in the configuration, you can choose to remove and create a new profile, or simply copy the existing settings and continue to customize: - -![](../External/ReadMeImages/MRTK_CopyProfileOptions.png) - -### **[For more information on customizing the Configuration Profiles](MixedRealityConfigurationGuide.md)** -Please check out the [Mixed Reality Configuration Guide](MixedRealityConfigurationGuide.md) +You are now ready to start building your Mixed Reality Solution, just start adding content and get building. Here are suggested next steps. ## Get building your project @@ -171,7 +104,12 @@ Now your project is up and running, you can start building your Mixed Reality pr For more information on the rest of the toolkit, please check the following guides: -* [Mixed Reality Configuration Guide](MixedRealityConfigurationGuide.md) +* Explore the [hand interaction examples scene](README_HandInteractionExamples.md). Instructions to get started are above. +* Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. +* Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md) +* Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). + +The following guides are coming soon: * [Getting to know the Mixed Reality Toolkit Input System]() (Coming Soon) * [Customizing your controllers in the MRTK]() (Coming Soon) * [A walkthrough the UX components of the MRTK SDK]() (Coming Soon) @@ -192,7 +130,15 @@ For more information on the rest of the toolkit, please check the following guid | [![App Bar](../External/ReadMeImages/AppBar/MRTK_AppBar_Main.png)](README_AppBar.md) [App Bar](README_AppBar.md) | [![Pointers](../External/ReadMeImages/Pointers/MRTK_Pointer_Main.png)](README_Pointers.md) [Pointers](README_Pointers.md) | [![Fingertip Visualization](../External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png)](README_FingertipVisualization.md) [Fingertip Visualization](README_FingertipVisualization.md) | | UI for Bounding Box's manual activation | Learn about various types of pointers | Visual affordance on the fingertip which improves the confidence for the direct interaction | -## Example Scene -You can find various types of interactions and UI controls in this example scene. +## MRTK Example Scene +You can find various types of interactions and UI controls in the [hand interaction examples scene](README_HandInteractionExamples.md). [![Button](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) + + +# Upgrading from the HoloToolkit (HTK/MRTK v1) + +There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and start work migrating your implementation if you wish. + +* [HoloToolkit to Mixed Reality Toolkit Porting Guide](HTKToMRTKPortingGuide.md) + diff --git a/External/ReadMeImages/MRTK_ConfigureDialog.png b/External/ReadMeImages/MRTK_ConfigureDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..79c277cdd70ebf267b8118897dd3171c8d39bdc4 GIT binary patch literal 8547 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 literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/MRTK_SceneSetup.png b/External/ReadMeImages/MRTK_SceneSetup.png index 5f7d2b50f8d85a99f7153c047309e2feed4f0baa..3a2a15325696d67d2ef5402174e4f2bfb830024c 100644 GIT binary patch literal 7679 zcmc(kcR1T`)c>_=@1i!PwQ5&Y5!7fEtvwU7HYN5RwM*@&QM+oj1SM3gqIPW(wUt=0 z6|tX>exE;{zkdJza$Q+h?&P|2&beRj_c@;!Ee#b4Qf5*-JUj~37s@(#csJ#N*M7u= zz$5D6Qz-Cs!$U_!5f47dx(>X#WvB2;0S~V_k?h=(0C-R0`oh=)50A3r`hKGuT564l z$Cj$9tf1#>wly1&{pxUzXm{sV54mMKIVFaj|EEXOXN~m-DeBAqW@7xSMau>hY^kG4 zvJqVTnk6L%$|QEo^kRJJs=3-c>q&~3+sWAPs?TB~iR1GXBre+LB4nPCxV zGp8Z26EviJ2zz{1F>m+|xC!%Gq6BDYXtXn7v+DleM+YG(_f}1y(Ggeb1`&-uz$Y{x z6fF03GG4@2iI!pgC2wRg1_R$K-RyI_5O1HslFKVAE9==tM)p53{3Epn4o-WMY46O# z_5bhoiJCqwJ3Bl4!%pj!8MxNIfTcg|+ffjo=ZyEXvnA>Q4Glp-Ri?O|Bd+03tbnJI zaY|;ULj?`NU{CTrCg8t?8BJ=+UwmGSeiy3(<9T)ccf*WgBJyhNhWc`41FX9f*uDjw zd2fYnj268I{T)_9@xJR5j^g0@v|zBg$SWqM-Ey`qBjvlBpDJQ*Hkc#B>)_xpT4kx^ zcY;Z;(4_fbdL6Sip&5Un6fy>3`vv1>e?;KfR=rMZaFE|-b+`3!zCucFEf4vfzyIgG$j0gB?;4x^<=)W}O%7EJjkLZG0{tCS-Mxz)(Fm3} z(qiKpTNE>pK6)Ywd1C(e3?fGj7Oj%RG9t}?Q_3Or8W6wdag3Z3Uk%Yg0tV$tiE^he z2&vcwn*)xMdwO1|s;Z6zdE*n3Cl#tBf_H=+M?c3P4BRzxLHtAVS0MIRX=y@`z8|6Z z5={i*F|@pWhUP&OyM`x039M0Fc$|5w5O~#<* z^3;g}Y96>3iKzFCXO>W#^T!HZNRwGLxELCqUqzSc$-y~=t#1-8kS@_3#bur1YqNrNm$vA84!Y&UdIEd{=M zd+^%t;t-8NL7)>>g61tVQ`oDWk^OKtU2SdcQ`yOVB_QV@_pAU{kK^n$>YeIY+M860 zuM7;*gp-poMJ5gINH(%|a+hsJV&{w@|AWi39VaaH%?aGz5(3fTvN2w^zumag_ji5F zX0FLE<>SW(Ay;SfUL1jTV@WKD*n@GF z4rq8z9E+sJC2omomT+wp^4+!IXJ@BFKOLbbiw4>{TIGD?gZFYzGDx%We7LkC^<{0v@(o~n> z_nGzbarsKEIBx1QTU5blPg1RfeTQXUKAsOji%G6Aclf!nO;QryAg1zu^7tlIK7s_D zo0OCv$}J-UXFq=p>W^?8Le zd%N>?>0@aB$%O_T(&Xwma6IQ7-#ZM`TDY5(p_yM1e2IQ1s4bpZNW%WN@8N_YqO+@1 zha1fEGUINRBsA^hVAZLr%{n>*+no+ZI69DN6+Vv_X1WR&#rMr-U%c^N_I|!P#jwo; z(#vVE6axv9sOH;czOs(%DChOIFBuq!*Sa=; z^+o^d#$=k~#24cbj4iTxbGMdJ@xwZolB@qxyrkz3(G@a9hTDV^g^d)V!h}mcq6YRI zQ52`K7f-Gv=K~AFGn?CV^>82_+n@O^CI=Z}R`;c)!N+;hUTTd8sB+^%bcCC#5m5-* zdgtio(DCJEt|CKYGXPykb$UGxC{)B5DSjdipC~o+!3~7-v;idgU7z%Syyc2~HKO({ z;Mm1k;q?_L*dY$~J5rR5aSIjeo_8Z)-Jr zI}>sMRZ2=~>9O*Qe=m)L*O!&eDooU#N%X~UG@i{TEm6-kt-5n+8iMMoLoAvIbbfbt zVb4XJ>=8JU+8>XTPe|w$zE&hDy(f>uC#}(zpn&U5-My3KA|i8(<>q z7q;_PmihMfssigCbSt=%i>#;TazNFz@hmK=yw6!#w(lkO^wKXk(&nXCo-8wKMj9BY z{3aR4@Aw=8XjG%Mx6O}u7BU{f&5^?Bm$@KgJJmWR)9ODfOpI!OSWhqlO?2H7VvN8x zjP<1#ySc^hDQV;g*W1cyFr#-P)`BiQy!{jUbb5VG#zSGa`I2JfBbS!(q)u=a=DqJi>vO4XOrj(R9Mu#^%jsd zllh^K66(0o`s%TX4sJs=xO`S>%k;fA zePLYZ8A(>=uCOkFWy$mW4?QFg2CQBtC#R%v0j6X04nstqdGJZ+)V-AK>~gCZQ9PD# z_?}dV)?I|p&YW}t3H_F?u5N{_%M*4&k9sGxaQ&(5`O!4=q1zwjb#!H(_bi)y@XVC1 zCoaLw&FxfH^z96+(&;)FUx8q}%)fCaeV38*Z^nYv9q~Io9JM;NjuU5@Hxfr?2jL( zZ(83>2>oH9NL{xxg;0NOWmVCf-fqM>PIAjAgv#Y)YCU4=s%P7uLs3@(NiW#B`sNES&V%jg=X z<*|i8Z^Tcs#G%)R3&KHws!3}xTlsFFE1_G5RN*NjnDN$-kgX#}RCy*s#TwAHsrbmY zACu@Nzk`{ry}dm^vlxP)(LsRBkF<4^+9w{Lgu>w^x&CTIvJ8)0GZcDl_adBrWEB4| zc0KGykGlVNXFB}Q8^!uWrs_hF+F^J_^V!k5TwHUTi9E5K9*Ft@P4LQ4UZs$=p1TQW zDn{tqZT^4+lY2rrXDovAZ1RG598lTvzMolPY!7jC9JQx29z(MGK(1FCC1L?5Uj6`) z#vwDl{jf&d>YHL*5GSern-fkhQkNpszEyNpxSv~65JkwZ%bCpHT zwT=Irs)nm3V%NR-3BWt@2VfpCKVxW5Go=3Ei4?#Sj{VpDxD!9E-e!#)>8Xjx?wM)} zHXCm02vIy{1>z9Er6}vM0yU*&U!z_49PD^wk*J7X%fBsxquh$+Xi=O`D72NI9C|QE zr?1L72D@MlePSMrIYx%9e~fwe4nzPtx6grRv*yeb(QX$|-idYM+FYRV8J}xsmG`~H zZu%NP*#Ve}T+&F-x?V|J>ny(ht~fIT;b0^|V)E4%G(;eoDS2z2v$dezB)y)Sn$%+e z*iop?{}N50q0ouUb1()oUj_7ySx5V4fF*;Gvp&(PbDp-{qG9vB_$5Bn z11u2;C!(sWTZvqVx*(!rudVwo#m1mDc#|HZt!OpzMIVJ~`sGvA`teX9oUj*F0r6t1 z1k8FV{489|kZ)_G+DauzB7CsTAx{J+d$pGsVziT8nF*w}76`4cQ)jPxBunj0PSyny z5#3j_x9*!S5=pM5rqT(4Vht#6QJcHoGY33&9UnJ0w}X%nzC@d=$8!q7@x707K}g^z z0Q8f_W0{!e)yTGY9w5_%FHQoYUW4cySpWW(s}vv|YFj$HJH}3c@~&P5&{v>gFxX*G zaMRJ0lRID!94&s%sFm_SpKKiv=5@UFgtiS&O8{~GP?t|E&$B$qpu0d97|B7Nv^~>M z6UQzKhG-4nTq4V5@1Qu1;mu95?1;i-zNEPUG$5+}Z*2lxaK!0%QpRh%Ae z36zzUq1ac0a;ayijrRT#Bo-hDt^JP{O5*3lvOKtq&NzboVxTvXo?8tiVy~*hMY%>8 zaK~|f>yR4$W(DR0tcw+pM%XglmtDWwDT{M$e}5!m0*DLHKGvE5zIN){w>Q5ZIytpj zB;h2`CWRr1hU9ld$UTKl|I|{o?Uv*P|Ixbzh=C4pd>qG1IkR+iJs@vi{t$Dmk>Dhr z);^Ja{1`PAz(2E_E^N9{FG$!m-*hl2^U!XPHB-h1o`4aXs&%+WLP8>aL~LbJtdZlm zMdJVvjGZIYVQUHj6b`uV4gXSCJj`LN7~@dnE-l<8iEx<(SDy8YwAR*1cR*K9l$ns1 zyE#CsAm{Wxqymf>6_$)ZM3OOV1avs$@dmB}O<3kbn^^Q6*?S9SM2c<`hvy!!P--Q!S>mIiwN7XaNEfJ^ zMXJqh*A(fqBRn5;Y?`aKqjA=xup6+Ptg?J@JYQe8jM=&dikfbjzL#W$^jehT?@y6) zKaRJjOU^_e6M9_S#U+W87kAORUn-IkXapE|@p6$m-hiHn4L3)+hVMP)8OL3~@fmxoM%n zBuIYk&-7B%WX~-&sdz|!f+UTq{`KxUYTW0O_=)^^Z&it_uPJ+|?fL8I<@M@pAo-## zM2Cf1{baDemMCjauSGE*K_e9@l3SeQZ=X~Dx$l3y&g6RCZwsL9`25c-J}`ur7u^GF zzjU1?hnz0ZKwo6FKV6UcV{p6sueH2NX)qBN*Cz}8&n3-Tb9fa`S}bf=0P=u$W<;Z@ zRu1_&nD~K4Q+gF(XmL1~vmD#l_Wbw|;AUY^pV+6<*lF5c{5x zS@GvSroYGu4d37I7lA;+@!`%uiziLyS!K!s=$He)4z5hEEalGlU&86?c^HYj{cKyx zHtCbnph&T&r9P3rV`=^~ptvs^b6*Wba+axpYAv!G%0;?lpr|rLEyDu$dwG$Ua{)WO zWFk%Z*tcm#c6mVtykx9TT=NYcNQ&;BX4>VB^lkB(FH(fD9C3hrho}Cmc$z$QAkzyB z*=-}T`G1gkx&TA;%zTR;BYT3RELjSFcT7yGv;%m2GI@F zp4u!FHWFIG_%PG3*7+o$)be9ND?}0%ps(;H*}8zG3VPmtdY56+2o{#yT}4C2jJL}I z=lP{}YHG39o(UpF{WMS^r-Fd&&f35eetuP~BU6p-z-ZQEwP*Q+XrTYEko`nIEe1gR z_m-re45%T>DgcEBSdjmAZDZmqqLFgd?KQG&*AYcS49H6fwzs#}%+CLLRknOc3u0TX%h^{LN$1XEqMweo6t5gS4<`kw|p1{&i<8GQqIvxbqfsRV98Hjbb8+obBEl z<8K`lv`axC=#RO(tOfccrh?v2h``=2zxI8Ua4MJmWR;SwNH3RYKo%#jrm0z9hm>MN zlPBa#c@zsm>V8duMSZy_Id6p|qQAnCeL%zD@yUs#La;P_C4THWzIiH)ryE}@AEo++ z!+!w-IBd?<&KvOgW_GX=aE#me(sskM($-hnzt(4E06y#gSZ*;no?DhO4_cSX#LQil z%#faC^WPX5W%dVUc6xy6lQkf$(rMlH{~2$42AVFGS2@xXQ};&8jm2fNrE-^@mpsBM_%sZvUb|x(>|HizU#x*k^n`Xh*GWs z^FJUdwY&KOuE31RFZakpnn5m__i%VC#^qNpj2G)&@~@&rW4X_t0*Zv_B&yV?lIP)h zo?-w`U8=(i%MW)Er1htM?5g|B%V*~Ad&jOgrqOz+xx-{tf#>?@vw0Rqst6YEtIG=n zJ$`66quA?+C=T-N*>5)Q5r;a&L2Cvb6!Wgq!pI;%Ht^rd;>U~JQ%Oh#M5{R%U(>z7 z=9fp4cJN6frFplCI>V*yuMDwM*)7qGCP=*txZHbfxBz9a>ao}u1k7KhshL~#4^{@e z8poh70OB$h8BEO9ZsdO;KDb;UY(#r05yWACWYFB=aE}W8;j2iwSa6^2FOJbJV!NzA z6Dzp@0_M63<&)rGQqoxnu_U8r&1TKe{jJo1K@QNLxIKPyxyynNxs@klw6PdnDrkI_7xEehSo+sRs4aa@sgw_X z1`h|%3&>EwFT6V^sosU%`<=O-;Yx6V)$y_UZl!Z?csG6Bi9V_a{Yt zClPIns_FOd_`XNJ#Pv!w=oVANrIqe4Ho*8^D=LT^bCDK&%*@|Q9o8}z)dqHpH7Je293n{1(1KrkIQ?h)K8vgu*|7eNkl-IUx4evfFq^g6Ve z;MG%rIou-F?V8>O#VxkB*7gLxzepk)!l=DpzNb)UCRsC__%7Z64xangKc7{~v4X=`d;h2z?Cqi3UV!-H!hCrt$A}{-m z53cRku+ivH?u5T4UvA7t?Tkp=T5{pkMWj}0GDhb7+-b>pJ)r*s^783)?7ntik!Gxr z{{sU9d2`)MdJX|Lut8NF5|Th(-aV_WdfOz=c>g6uLycc5VpT`e^NS#qJ12!6GRnR6 zrjAt}Cd4l@)L*MPTCVwBD#vH}Lf^VKgL!{sjd`@&>tb)#WXE*1)7|I&`_%+EBfJ7) zZ+SYuDCT}4!9Z5?=Lrq`>QIbI8S6)GzRC^s`%a1_7+#s31=}8^s{$mn4mvH&v?}i2 zeKYfIsxtwPra-HDde%o}wShHahmfGu@+trIG0Py^b51rh(ETO(Ck1Vt=`i@+gIyLC zn~fA$LY|ZNA^m;`ylN?N%M^j%CnOl{gUO}nCNn$ldBdWdj-Nk_MR69Sk&Z@NF8<3J)gKR zFw888Ba`|Dk}xf%EPr4g7^3mebZ2Wr?|l+Ub7cxa;cFXI;lyW0?s@sKlvj2bJ!B(2 zZ(VGozyM3!+e1lG)Vv?9?#$|`?Xe$;2iv9J zMkulGjSV^-FqU##d7UBHa|}d`)T_WFz2+uGhO5;=j7S7KZD5tPE#`&M_nm4`41D43 zo}7A1OKras*hJ#@9;7(V|2V_b@1zPbVT>xG(DmB{`6^6FxUtW}<`4XH`wwKpM(}kh zu?uemeVP|QFB(PX)8D=0(*q7uOt}uk%(zKKqquQe^JR~i=wNq5K5Vt!W{yGSFEmi0 zU&Rm|&%Oi&>Bo}7gj%g%fc@)c{7v`BU*y74i%oTN!1_rK=-a(aG^V?f9|pKeU}-yj z=AhnoFNVD7i@sq&VjnteJdc}Z&2rWLoB=};g0D#=^4j{?-pW-Lwe#$O{X_WsS!3d- znEv!3=fe~4${wsh&9ZXmr>Rm%9VR`|*Gp9RdU--&VmbO^uJI}^1$Uj}wg~iaY@h2**}&{sbiUckN!Pep=s}56NKPl} z!FbIzlZ67lEq5!?JhT}Z`nD5@|8I8dP8TL5&tUpOp3^RI)3XBeqBDa>2d+4mnH8gk z|DQRZ1njKR<8x|)!lSKe@#|r(n8unSu%&c*083n4$a2x^V?JUN30&|4u7?WzyP)aG cL~{}nz5Rk}+@U5AxM+)~`b(e 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 diff --git a/External/ReadMeImages/MRTK_SelectConfigurationDialog.png b/External/ReadMeImages/MRTK_SelectConfigurationDialog.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba2244a41c79f91bcb51500c65aaf5e6fcfb676 GIT binary patch literal 9072 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 literal 0 HcmV?d00001 From 8e36c5770ffc7341cd1cbb3ef4f86b14a3830252 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 11:55:57 -0700 Subject: [PATCH 047/183] First pass --- Documentation/GettingStartedWithTheMRTK.md | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index c433b2d7db3..3aaaf87d043 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -3,7 +3,7 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) The Mixed Reality Toolkit (MRTK) is a new platform for building your Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR), aimed at accelerating your content production by removing any of the common complexities that complicate projects in a true multi-platform / multi-vr solution. -The MRTK solves this by providing a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. Al these components are geared towards the new MRTK platform that abstracts out all the different ways that each platform delivers its experience. +The MRTK solves this by providing a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. ## Prerequisites @@ -12,24 +12,25 @@ To get started with the Mixed Reality Toolkit you will need: * [Visual Studio 2017](http://dev.windows.com/downloads) * [Unity 2018.3+](https://unity3d.com/get-unity/download/archive) * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) -* [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) ## Get the latest MRTK Unity packages 1. Go to the [MRTK release page](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases). 2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. -## Open and run the HandInteractionExample scene -1. Create a new Unity project. We used 2018.3.9f1 for this tutorial. +## Open and run the HandInteractionExample scene in editor +1. Create a new Unity project. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. 2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -3. Import the Microsoft.MixedRealityToolkit.Unity.Examples following the same steps as above. +3. Import Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. > The examples package contains demonstration scenes for current MRTK features. 6. Open the HandInteractionExamples scene under `Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes\HandInteractionExamples` + 7. You will get a prompt asking you to import "TMP Essentials". + ![TMP Essentials](../External/Documentation/Images/MRTK_GettingStarted_TMPro.png) 8. Select "Import TMP essentials" button. "TMP Essentials" refers to TextMeshPro plugin, which some of the MRTK examples use for improved text rendering. @@ -38,13 +39,9 @@ To get started with the Mixed Reality Toolkit you will need: 10. Press the play button to start the scene. -11. Press WASD keys to fly around the scene. Press and hold right mouse to look around. - -12. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. - -13. Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. +11. Use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. -14. Explore the scene! Learn more about the components in the scene [here](README_HandInteractionExamples.md). +14. Explore the scene! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). Congratulations, you just used your first MRTK scene! Now onto creating your own stuff... @@ -57,7 +54,7 @@ Congratulations, you just used your first MRTK scene! Now onto creating your own ### 2. Import MRTK Packages 1. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -2. Import the Microsoft.MixedRealityToolkit.Unity.Examples following the same steps as above. +2. Import the Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. > The examples package is optional but contains useful demonstration scenes for current MRTK features. From f38ac2b720aed1697059eff161eeab45449788f8 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:03:50 -0700 Subject: [PATCH 048/183] Pass 2 --- Documentation/GettingStartedWithTheMRTK.md | 24 ++++-------------- .../MRTK_SelectConfigurationDialog.png | Bin 9072 -> 10054 bytes 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 3aaaf87d043..b46731eeeea 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -25,8 +25,6 @@ To get started with the Mixed Reality Toolkit you will need: 3. Import Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. -> The examples package contains demonstration scenes for current MRTK features. - 6. Open the HandInteractionExamples scene under `Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes\HandInteractionExamples` 7. You will get a prompt asking you to import "TMP Essentials". @@ -37,19 +35,17 @@ To get started with the Mixed Reality Toolkit you will need: 9. Close the TMPPro dialog. After this you need to reload Unity, so close unity and re-open unity, then open your project and go back to the scene -10. Press the play button to start the scene. - -11. Use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. +Finally, press the play button to start the scene and explore the scene! You can use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. -14. Explore the scene! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). +There's quite a bit to explore in this scene, have fun! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. -Congratulations, you just used your first MRTK scene! Now onto creating your own stuff... +Congratulations, you just used your first MRTK scene. Now onto creating your own stuff... ## Add MRTK to a new scene or new project ### 1. Create a new project, or start a new scene in your current project -> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. Please stay tuned to the MRTK GitHub site for future announcements on SRP support. +> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. ### 2. Import MRTK Packages 1. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". @@ -101,20 +97,10 @@ Now your project is up and running, you can start building your Mixed Reality pr For more information on the rest of the toolkit, please check the following guides: +* Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). * Explore the [hand interaction examples scene](README_HandInteractionExamples.md). Instructions to get started are above. * Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. * Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md) -* Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). - -The following guides are coming soon: -* [Getting to know the Mixed Reality Toolkit Input System]() (Coming Soon) -* [Customizing your controllers in the MRTK]() (Coming Soon) -* [A walkthrough the UX components of the MRTK SDK]() (Coming Soon) -* [Using Solvers to bind your objects together]() (Coming Soon) -* [Creating interactions between the player and your project]() (Coming Soon) -* [Configuration Profile Usage Guide]() (Coming Soon) -* [Guide to building Registered Services]() (Coming Soon) -* [Guide to Pointers documentation]() (Coming Soon) ## Building blocks for UI and Interactions | [![Button](../External/ReadMeImages/Button/MRTK_Button_Main.png)](README_Button.md) [Button](README_Button.md) | [![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png)](README_BoundingBox.md) [Bounding Box](README_BoundingBox.md) | [![Manipulation Handler](../External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png)](README_ManipulationHandler.md) [Manipulation Handler](README_ManipulationHandler.md) | diff --git a/External/ReadMeImages/MRTK_SelectConfigurationDialog.png b/External/ReadMeImages/MRTK_SelectConfigurationDialog.png index 6ba2244a41c79f91bcb51500c65aaf5e6fcfb676..0d9a011cc1678de13bc5c5a9c9c471d712522217 100644 GIT binary patch literal 10054 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 literal 9072 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 From 2c028ee167f714e9977b319df7a7fcaaf7f460d5 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:10:01 -0700 Subject: [PATCH 049/183] Pass 3. --- Documentation/GettingStartedWithTheMRTK.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index b46731eeeea..b2feeaba715 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -93,12 +93,10 @@ You are now ready to start building your Mixed Reality Solution, just start addi ## Get building your project -Now your project is up and running, you can start building your Mixed Reality project. - -For more information on the rest of the toolkit, please check the following guides: +Now your project is up and running, you can start building your Mixed Reality project. Here are some suggested next steps: +* Explore the [hand interaction examples scene](README_HandInteractionExamples.md) if you haven't already. Instructions to get started are above. * Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). -* Explore the [hand interaction examples scene](README_HandInteractionExamples.md). Instructions to get started are above. * Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. * Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md) From 5cf73f1da08220ceb0b970bdd5598f1d2100f172 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:12:24 -0700 Subject: [PATCH 050/183] pass 4 --- Documentation/GettingStartedWithTheMRTK.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index b2feeaba715..2d9819b91cf 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -12,6 +12,8 @@ To get started with the Mixed Reality Toolkit you will need: * [Visual Studio 2017](http://dev.windows.com/downloads) * [Unity 2018.3+](https://unity3d.com/get-unity/download/archive) * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) +* You don't need this to simulate in Unity Editor, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) + ## Get the latest MRTK Unity packages 1. Go to the [MRTK release page](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases). From 91c6ff928c3663ac3643ddeb9200cbfa84c61a38 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:23:53 -0700 Subject: [PATCH 051/183] Fix images and add example scene image in header. --- Documentation/GettingStartedWithTheMRTK.md | 26 +++++++++------------ External/ReadMeImages/MRTK_SceneSetup.png | Bin 7679 -> 5346 bytes 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 2d9819b91cf..031b61829c1 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -12,7 +12,7 @@ To get started with the Mixed Reality Toolkit you will need: * [Visual Studio 2017](http://dev.windows.com/downloads) * [Unity 2018.3+](https://unity3d.com/get-unity/download/archive) * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) -* You don't need this to simulate in Unity Editor, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) +* You don't need this to simulate in Unity Editor, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK). ## Get the latest MRTK Unity packages @@ -21,6 +21,10 @@ To get started with the Mixed Reality Toolkit you will need: > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. ## Open and run the HandInteractionExample scene in editor + +[![HandInteractionExample scene](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) + +The [hand interaction examples scene](README_HandInteractionExamples.md) is a great place to get started with because it shows a wide variety of UX controls and interactions in MRTK. To get started we will import MRTK, open the example scene, and explore the scene in the editor. 1. Create a new Unity project. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. 2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". @@ -35,11 +39,11 @@ To get started with the Mixed Reality Toolkit you will need: 8. Select "Import TMP essentials" button. "TMP Essentials" refers to TextMeshPro plugin, which some of the MRTK examples use for improved text rendering. -9. Close the TMPPro dialog. After this you need to reload Unity, so close unity and re-open unity, then open your project and go back to the scene +9. Close the TMPPro dialog. After this you need to reload Unity, so close unity and re-open unity, then open your project and go back to the scene. -Finally, press the play button to start the scene and explore the scene! You can use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. +Finally, press the play button to start the scene and explore the scene! You can use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space bar to use a simulated hand. -There's quite a bit to explore in this scene, have fun! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). Read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. +There's quite a bit to explore in this scene, have fun! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). You can also read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn more about in-editor hand input simulation in MRTK. Congratulations, you just used your first MRTK scene. Now onto creating your own stuff... @@ -50,9 +54,9 @@ Congratulations, you just used your first MRTK scene. Now onto creating your own > *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. ### 2. Import MRTK Packages -1. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". +Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -2. Import the Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. +We also recommend that you import the Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. > The examples package is optional but contains useful demonstration scenes for current MRTK features. @@ -89,9 +93,7 @@ Which contains the following: > If you need to move the players start point, then **move the scene content and NOT the camera**! ### 5. Hit play -Press the play button to start the scene. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space to turn on right hand. Try pressing buttons using either the far hand ray or near interaction by moving the hand. - -You are now ready to start building your Mixed Reality Solution, just start adding content and get building. Here are suggested next steps. +Press the play button to start the scene. You are now ready to start building your project, just start adding content and get building. Here are suggested next steps. ## Get building your project @@ -113,12 +115,6 @@ Now your project is up and running, you can start building your Mixed Reality pr | [![App Bar](../External/ReadMeImages/AppBar/MRTK_AppBar_Main.png)](README_AppBar.md) [App Bar](README_AppBar.md) | [![Pointers](../External/ReadMeImages/Pointers/MRTK_Pointer_Main.png)](README_Pointers.md) [Pointers](README_Pointers.md) | [![Fingertip Visualization](../External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png)](README_FingertipVisualization.md) [Fingertip Visualization](README_FingertipVisualization.md) | | UI for Bounding Box's manual activation | Learn about various types of pointers | Visual affordance on the fingertip which improves the confidence for the direct interaction | -## MRTK Example Scene -You can find various types of interactions and UI controls in the [hand interaction examples scene](README_HandInteractionExamples.md). - -[![Button](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) - - # Upgrading from the HoloToolkit (HTK/MRTK v1) There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and start work migrating your implementation if you wish. diff --git a/External/ReadMeImages/MRTK_SceneSetup.png b/External/ReadMeImages/MRTK_SceneSetup.png index 3a2a15325696d67d2ef5402174e4f2bfb830024c..00976a75b1d7e8dbdb9532fce3943a672a349c72 100644 GIT binary patch delta 5344 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 cL~{}nz5Rk}+@U5AxM+)~`b Date: Tue, 9 Apr 2019 12:26:15 -0700 Subject: [PATCH 052/183] Tighten up intro --- Documentation/GettingStartedWithTheMRTK.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 031b61829c1..1ceb8d6c17d 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -2,8 +2,9 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) -The Mixed Reality Toolkit (MRTK) is a new platform for building your Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR), aimed at accelerating your content production by removing any of the common complexities that complicate projects in a true multi-platform / multi-vr solution. -The MRTK solves this by providing a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. +The Mixed Reality Toolkit (MRTK) is a new platform for building your Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR), aimed at accelerating your content production in a true multi-platform / multi-vr solution. + +The MRTK provides a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. ## Prerequisites From a8d4551efe3955744debb8aa5a9331581691b917 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:27:44 -0700 Subject: [PATCH 053/183] More tighten up intro --- Documentation/GettingStartedWithTheMRTK.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 1ceb8d6c17d..3e766ac20e7 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -2,9 +2,7 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) -The Mixed Reality Toolkit (MRTK) is a new platform for building your Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR), aimed at accelerating your content production in a true multi-platform / multi-vr solution. - -The MRTK provides a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. +The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). It provides a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. ## Prerequisites From b3cb94426066f326db990c3804bcf4beabe47156 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:28:35 -0700 Subject: [PATCH 054/183] more fix of intro --- Documentation/GettingStartedWithTheMRTK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 3e766ac20e7..a245aa1f81a 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -2,7 +2,7 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) -The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). It provides a common logical platform to build your dream, together with a rich set of services and SDK components for building your project. +The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). It provides a common logical platform to build your dream, together with a rich set of services, SDK components, UI controls, and examples. ## Prerequisites From 18d5908109dacfa2a5a25c73df237acb38a880b0 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:29:37 -0700 Subject: [PATCH 055/183] More Windows prereq clarification --- Documentation/GettingStartedWithTheMRTK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index a245aa1f81a..d012699b06b 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -11,7 +11,7 @@ To get started with the Mixed Reality Toolkit you will need: * [Visual Studio 2017](http://dev.windows.com/downloads) * [Unity 2018.3+](https://unity3d.com/get-unity/download/archive) * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) -* You don't need this to simulate in Unity Editor, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK). +* You don't need this to simulate in Unity Editor or run in VR, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK). ## Get the latest MRTK Unity packages From 181ef3e89cb443ec68d85ae72c923653c16e1854 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:30:59 -0700 Subject: [PATCH 056/183] More tighen --- Documentation/GettingStartedWithTheMRTK.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index d012699b06b..8f2b1b06eca 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -19,7 +19,7 @@ To get started with the Mixed Reality Toolkit you will need: 2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. -## Open and run the HandInteractionExample scene in editor +## Open and run the HandInteractionExamples scene in editor [![HandInteractionExample scene](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) @@ -40,7 +40,7 @@ The [hand interaction examples scene](README_HandInteractionExamples.md) is a gr 9. Close the TMPPro dialog. After this you need to reload Unity, so close unity and re-open unity, then open your project and go back to the scene. -Finally, press the play button to start the scene and explore the scene! You can use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space bar to use a simulated hand. +10. Finally, press the play button to start the scene and explore the scene! You can use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space bar to use a simulated hand. There's quite a bit to explore in this scene, have fun! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). You can also read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn more about in-editor hand input simulation in MRTK. @@ -48,11 +48,11 @@ Congratulations, you just used your first MRTK scene. Now onto creating your own ## Add MRTK to a new scene or new project -### 1. Create a new project, or start a new scene in your current project +1. Create a new project, or start a new scene in your current project > *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. -### 2. Import MRTK Packages +2. Import MRTK Packages Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". We also recommend that you import the Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. @@ -61,7 +61,7 @@ We also recommend that you import the Microsoft.MixedRealityToolkit.Unity.Exampl > Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. -### 3. Configure your first Mixed Reality Toolkit scene +3. Configure your first Mixed Reality Toolkit scene The toolkit has been designed so that there is just one object that is mandatory in your scene. This is there to provide the core configuration and runtime for the Mixed Reality Toolkit. From 47cf56ce7ec8d348c153adc0ce65f3d445eabe17 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 12:31:13 -0700 Subject: [PATCH 057/183] hit play --- Documentation/GettingStartedWithTheMRTK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 8f2b1b06eca..f217d477be1 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -91,7 +91,7 @@ Which contains the following: > **Note** While working in your scene, **DON'T move the Main Camera** (or the playspace) from the scene origin (0,0,0). This is controlled by the MRTK and the active SDK. > If you need to move the players start point, then **move the scene content and NOT the camera**! -### 5. Hit play +5. Hit play Press the play button to start the scene. You are now ready to start building your project, just start adding content and get building. Here are suggested next steps. ## Get building your project From bb0a7efda38f5bd4b0d82c565dd0fa37681abf19 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Tue, 9 Apr 2019 13:30:39 -0700 Subject: [PATCH 058/183] Fix the broken doc build. --- Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs b/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs index 0ae1b6a9501..9a4d6d14231 100644 --- a/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs +++ b/Assets/MixedRealityToolkit/Utilities/CameraEventRouter.cs @@ -12,7 +12,7 @@ namespace Microsoft.MixedReality.Toolkit.Utilities public class CameraEventRouter : MonoBehaviour { /// - /// A callback to act upon without a script needing to exist on a component + /// A callback to act upon MonoBehaviour.OnPreRender() without a script needing to exist on a Camera component /// public event Action OnCameraPreRender; From 966ebfe9e87f051b7cb2f847b868d7252bcd6022 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Tue, 9 Apr 2019 16:23:59 -0700 Subject: [PATCH 059/183] Moved SelectRepairedTypeWindow into separate file --- .../SelectRepairedTypeWindow.cs | 57 +++++++++++++++++++ .../SelectRepairedTypeWindow.cs.meta | 11 ++++ .../TypeReferencePropertyDrawer.cs | 49 ---------------- 3 files changed, 68 insertions(+), 49 deletions(-) create mode 100644 Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs create mode 100644 Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs.meta diff --git a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs new file mode 100644 index 00000000000..42b864cdc99 --- /dev/null +++ b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using Microsoft.MixedReality.Toolkit.Utilities; +using System; +using UnityEditor; +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Editor +{ + public class SelectRepairedTypeWindow : EditorWindow + { + private static Type[] repairedTypeOptions; + private static SerializedProperty property; + private static SelectRepairedTypeWindow window; + + public static bool WindowOpen { get { return window != null; } } + + public static void Display(Type[] repairedTypeOptions, SerializedProperty property) + { + if (window != null) + { + window.Close(); + } + + SelectRepairedTypeWindow.repairedTypeOptions = repairedTypeOptions; + SelectRepairedTypeWindow.property = property; + + window = ScriptableObject.CreateInstance(typeof(SelectRepairedTypeWindow)) as SelectRepairedTypeWindow; + window.titleContent = new GUIContent("Select repaired type"); + window.ShowUtility(); + } + + private void OnGUI() + { + for (int i = 0; i < repairedTypeOptions.Length; i++) + { + if (GUILayout.Button(repairedTypeOptions[i].FullName, EditorStyles.miniButton)) + { + property.stringValue = SystemType.GetReference(repairedTypeOptions[i]); + property.serializedObject.ApplyModifiedProperties(); + Close(); + } + } + } + + private void OnDisable() + { + window = null; + } + + private void OnInspectorUpdate() + { + Repaint(); + } + } +} diff --git a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs.meta b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs.meta new file mode 100644 index 00000000000..d2ef70b7264 --- /dev/null +++ b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/SelectRepairedTypeWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1816cf73665b5c648a1545d130811675 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 961230b29c294bb780054c5d02eb6180, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs index 6202bad3d64..8771450f4b3 100644 --- a/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs +++ b/Assets/MixedRealityToolkit/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs @@ -356,54 +356,5 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten { DrawTypeSelectionControl(position, property.FindPropertyRelative("reference"), label, attribute as SystemTypeAttribute); } - - #region popup window definition - - public class SelectRepairedTypeWindow : EditorWindow - { - private static Type[] repairedTypeOptions; - private static SerializedProperty property; - private static SelectRepairedTypeWindow window; - - public static bool WindowOpen { get { return window != null; } } - - public static void Display (Type[] repairedTypeOptions, SerializedProperty property) - { - if (window != null) - window.Close(); - - SelectRepairedTypeWindow.repairedTypeOptions = repairedTypeOptions; - SelectRepairedTypeWindow.property = property; - - window = ScriptableObject.CreateInstance(typeof(SelectRepairedTypeWindow)) as SelectRepairedTypeWindow; - window.titleContent = new GUIContent("Select repaired type"); - window.ShowUtility(); - } - - private void OnGUI() - { - for (int i = 0; i < repairedTypeOptions.Length; i++) - { - if (GUILayout.Button(repairedTypeOptions[i].FullName, EditorStyles.miniButton)) - { - property.stringValue = SystemType.GetReference(repairedTypeOptions[i]); - property.serializedObject.ApplyModifiedProperties(); - Close(); - } - } - } - - private void OnDisable() - { - window = null; - } - - private void OnInspectorUpdate() - { - Repaint(); - } - } - - #endregion } } From 20d403b31b06dc5185391f5267e7a07227548c61 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 20:07:36 -0700 Subject: [PATCH 060/183] Add back section on accepting setup screen --- Documentation/GettingStartedWithTheMRTK.md | 54 ++++++++++++++-------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index f217d477be1..063ae6cd164 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -19,20 +19,43 @@ To get started with the Mixed Reality Toolkit you will need: 2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. -## Open and run the HandInteractionExamples scene in editor - -[![HandInteractionExample scene](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) - -The [hand interaction examples scene](README_HandInteractionExamples.md) is a great place to get started with because it shows a wide variety of UX controls and interactions in MRTK. To get started we will import MRTK, open the example scene, and explore the scene in the editor. +## Create a new Unity project and import the MRTK packages 1. Create a new Unity project. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. +> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. + 2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". +3. Accept the Setup prompt (optional) + +![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) + + +Once imported, the MRTK will attempt to setup your project automatically for building Mixed Reality solutions by doing the following: + +* Enable XR Settings for your current platform (enabling the XR checkbox). **Note:** you need to do this for each platform you wish to deploy on +* Force Text Serialization / Visible Meta files (recommended for Unity projects using source control) +* Change the Scripting back-end to use IL2CPP (as Unity is deprecating the .NET scripting back-end) + + +Accepting these options is completely optional (except .NET 4), if you click **Later**, the MRTK will not ask you again and leave you to it. You can then choose to set these options manually later as you see fit. + 3. Import Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. -6. Open the HandInteractionExamples scene under `Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes\HandInteractionExamples` +> The examples package is optional but contains useful demonstration scenes for current MRTK features. + +> Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. + + +## Open and run the HandInteractionExamples scene in editor +[![HandInteractionExample scene](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) + +The [hand interaction examples scene](README_HandInteractionExamples.md) is a great place to get started because it shows a wide variety of UX controls and interactions in MRTK. To get started we will import MRTK, open the example scene, and explore the scene in the editor. -7. You will get a prompt asking you to import "TMP Essentials". +1. Create a new Unity project and then import both the **Foundation** and **Examples** unity packages following [the steps above](#import-mrtk-packages-into-your-unity-project). +2. Open the HandInteractionExamples scene under `Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes\HandInteractionExamples` + +3. You will get a prompt asking you to import "TMP Essentials". ![TMP Essentials](../External/Documentation/Images/MRTK_GettingStarted_TMPro.png) @@ -46,20 +69,12 @@ There's quite a bit to explore in this scene, have fun! Learn more about the com Congratulations, you just used your first MRTK scene. Now onto creating your own stuff... -## Add MRTK to a new scene or new project -1. Create a new project, or start a new scene in your current project - -> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. - -2. Import MRTK Packages -Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". - -We also recommend that you import the Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. +## Add MRTK to a new scene or new project -> The examples package is optional but contains useful demonstration scenes for current MRTK features. +1. Create a new Unity project, or start a new scene in your current project. -> Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. +2. Make sure you have imported the MRTK packages (we recommend both Foundation and Examples, though Examples is not required) following [the steps above](#import-mrtk-packages-into-your-unity-project). 3. Configure your first Mixed Reality Toolkit scene @@ -98,9 +113,10 @@ Press the play button to start the scene. You are now ready to start building yo Now your project is up and running, you can start building your Mixed Reality project. Here are some suggested next steps: -* Explore the [hand interaction examples scene](README_HandInteractionExamples.md) if you haven't already. Instructions to get started are above. +* Explore the [hand interaction examples scene](README_HandInteractionExamples.md) if you haven't already. Instructions to get started [are above](#Open-and-run-the-HandInteractionExamples-scene-in-editor). * Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). * Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. +* Create a scene with a pressable button that logs a message (read about [Interactable](README_Interactable.md) to see how to make the button respond both to click and button presses), and a movable cube. * Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md) ## Building blocks for UI and Interactions From 35700de802f809c8e4ddc53598c3b12e7c5df9a5 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 20:22:21 -0700 Subject: [PATCH 061/183] Tighten up intro --- Documentation/GettingStartedWithTheMRTK.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 063ae6cd164..f5f4b9df3ee 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -2,7 +2,7 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) -The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). It provides a common logical platform to build your dream, together with a rich set of services, SDK components, UI controls, and examples. +The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). This guide covers how to get MRTK, try out the hand interactions example in editor, how to add MRTK to your Unity project or Unity scene. ## Prerequisites @@ -19,8 +19,8 @@ To get started with the Mixed Reality Toolkit you will need: 2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. -## Create a new Unity project and import the MRTK packages -1. Create a new Unity project. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. +## Import MRTK packages into your project +1. Create a new Unity project, or open an existing project. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. > *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. From 75abb3bad4174ab9903ebf31a57d48f2300d4f2f Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 20:33:38 -0700 Subject: [PATCH 062/183] CR Comments --- Documentation/GettingStartedWithTheMRTK.md | 24 ++++++++++------------ 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index f5f4b9df3ee..ece81f93c55 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -20,9 +20,7 @@ To get started with the Mixed Reality Toolkit you will need: > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. ## Import MRTK packages into your project -1. Create a new Unity project, or open an existing project. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. - -> *Note* when creating a new project with Unity 2018, Unity gives you several templates to choose from. Currently the **MRTK does not yet support the Scriptable Render Pipeline**, so the LWSRP, HDSRP and VRSRP projects are not compatible with MRTK projects. +1. Create a new Unity project, or open an existing project. When creating a project, make sure to select "3D" as the template type, currently MRTK does not support the other project types. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. 2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". @@ -61,13 +59,16 @@ The [hand interaction examples scene](README_HandInteractionExamples.md) is a gr 8. Select "Import TMP essentials" button. "TMP Essentials" refers to TextMeshPro plugin, which some of the MRTK examples use for improved text rendering. -9. Close the TMPPro dialog. After this you need to reload Unity, so close unity and re-open unity, then open your project and go back to the scene. +9. Close the TMPPro dialog. After this you need to reload the scene, so close and re-open your scene. -10. Finally, press the play button to start the scene and explore the scene! You can use simulated hands to interact in editor. Press WASD keys to fly around the scene. Press and hold right mouse to look around. Press and hold space bar to use a simulated hand. +10. Finally, press the play button to start and explore the scene! You can use simulated hands to interact in editor. You can: +- Press WASD keys to fly / move. +- Press and hold right mouse to look around. +- Press and hold space bar to use a simulated hand. -There's quite a bit to explore in this scene, have fun! Learn more about the components in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). You can also read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn more about in-editor hand input simulation in MRTK. +There's quite a bit to explore here! You can learn more about the ux controls here in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). Also, read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn more about in-editor hand input simulation in MRTK. -Congratulations, you just used your first MRTK scene. Now onto creating your own stuff... +Congratulations, you just used your first MRTK scene. Now onto creating your own experiences... ## Add MRTK to a new scene or new project @@ -109,11 +110,10 @@ Which contains the following: 5. Hit play Press the play button to start the scene. You are now ready to start building your project, just start adding content and get building. Here are suggested next steps. -## Get building your project +## Next steps -Now your project is up and running, you can start building your Mixed Reality project. Here are some suggested next steps: +Here are some suggested next steps: -* Explore the [hand interaction examples scene](README_HandInteractionExamples.md) if you haven't already. Instructions to get started [are above](#Open-and-run-the-HandInteractionExamples-scene-in-editor). * Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). * Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. * Create a scene with a pressable button that logs a message (read about [Interactable](README_Interactable.md) to see how to make the button respond both to click and button presses), and a movable cube. @@ -132,7 +132,5 @@ Now your project is up and running, you can start building your Mixed Reality pr # Upgrading from the HoloToolkit (HTK/MRTK v1) -There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and start work migrating your implementation if you wish. - -* [HoloToolkit to Mixed Reality Toolkit Porting Guide](HTKToMRTKPortingGuide.md) +There is not a direct upgrade path from the HoloToolkit to Mixed Reality Toolkit v2 due to the rebuilt framework. However, it is possible to import the MRTK into your HoloToolkit project and migrate your implementation. For more information please see the [HoloToolkit to Mixed Reality Toolkit Porting Guide](HTKToMRTKPortingGuide.md) From 5b891eec8df1846df0ff99dd839fb36d535dc950 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 20:51:01 -0700 Subject: [PATCH 063/183] Improve notes in the import MRTK section --- Documentation/GettingStartedWithTheMRTK.md | 35 ++++++++++------------ 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index ece81f93c55..250b2037975 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -2,7 +2,7 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) -The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). This guide covers how to get MRTK, try out the hand interactions example in editor, how to add MRTK to your Unity project or Unity scene. +The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). This guide covers how to get started with MRTK. ## Prerequisites @@ -17,30 +17,27 @@ To get started with the Mixed Reality Toolkit you will need: ## Get the latest MRTK Unity packages 1. Go to the [MRTK release page](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases). 2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage -> The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will also be available via the Unity package manager once Unity makes that option available. +> The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will be available via the Unity package manager. ## Import MRTK packages into your project -1. Create a new Unity project, or open an existing project. When creating a project, make sure to select "3D" as the template type, currently MRTK does not support the other project types. We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. +1. Create a new Unity project, or open an existing project. When creating a project, make sure to select "3D" as the template type. -2. Import the Microsoft.MixedRealityToolkit.Unity.Foundation package you've downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". +> We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. -3. Accept the Setup prompt (optional) +2. Import the `Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage` you downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". -![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) +> After importing the Foundation package, you may see a setup prompt like the following: +> +> ![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) +> +> MRTK is attempting to set up your project for building Mixed Reality solutions by doing the following: +> * Enable XR Settings for your current platform (enabling the XR checkbox). +> * Force Text Serialization / Visible Meta files (recommended for Unity projects using source control). +> * Change the Scripting back-end to use IL2CPP (as Unity is deprecating the .NET scripting back-end). +> +> Accepting these options is completely optional. If you click **Later**, MRTK will not ask you again. You can then set these options manually if you wish. - -Once imported, the MRTK will attempt to setup your project automatically for building Mixed Reality solutions by doing the following: - -* Enable XR Settings for your current platform (enabling the XR checkbox). **Note:** you need to do this for each platform you wish to deploy on -* Force Text Serialization / Visible Meta files (recommended for Unity projects using source control) -* Change the Scripting back-end to use IL2CPP (as Unity is deprecating the .NET scripting back-end) - - -Accepting these options is completely optional (except .NET 4), if you click **Later**, the MRTK will not ask you again and leave you to it. You can then choose to set these options manually later as you see fit. - -3. Import Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage following the same steps as above. - -> The examples package is optional but contains useful demonstration scenes for current MRTK features. +3. Import `Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage` following the same steps as above. The examples package is optional but contains useful demonstration scenes for current MRTK features. > Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. From 9ae93f73bb6f2781cab9c72e373cfa2151b5b0b8 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 21:03:42 -0700 Subject: [PATCH 064/183] Tweaking 'add mrtk to your scene' section --- Documentation/GettingStartedWithTheMRTK.md | 36 ++++++++++++---------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 250b2037975..5f2c8eadaba 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -16,15 +16,15 @@ To get started with the Mixed Reality Toolkit you will need: ## Get the latest MRTK Unity packages 1. Go to the [MRTK release page](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases). -2. Under Assets, download both Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage and Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage +2. Under Assets, download both `Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage` and `Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage` > The Mixed Reality Toolkit is available via [multiple delivery mechanisms](DownloadingTheMRTK.md) and in the future will be available via the Unity package manager. -## Import MRTK packages into your project +## Import MRTK packages into your Unity project 1. Create a new Unity project, or open an existing project. When creating a project, make sure to select "3D" as the template type. > We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. -2. Import the `Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage` you downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensuring all items to import are checked, and then selecting "Import". +2. Import the `Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage` you downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensure all items to import are checked, and then selecting "Import". > After importing the Foundation package, you may see a setup prompt like the following: > @@ -58,12 +58,14 @@ The [hand interaction examples scene](README_HandInteractionExamples.md) is a gr 9. Close the TMPPro dialog. After this you need to reload the scene, so close and re-open your scene. -10. Finally, press the play button to start and explore the scene! You can use simulated hands to interact in editor. You can: +10. Press the play button. + +Have fun exploring the scene! You can use simulated hands to interact in editor. You can: - Press WASD keys to fly / move. - Press and hold right mouse to look around. - Press and hold space bar to use a simulated hand. -There's quite a bit to explore here! You can learn more about the ux controls here in the scene [in the hand interaction examples guide](README_HandInteractionExamples.md). Also, read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn more about in-editor hand input simulation in MRTK. +There's quite a bit to explore here. You can learn more about the UI controls [in the hand interaction examples guide](README_HandInteractionExamples.md). Also, read through [input simulation docs](InputSimulation/InputSimulationService.md) to learn more about in-editor hand input simulation in MRTK. Congratulations, you just used your first MRTK scene. Now onto creating your own experiences... @@ -74,24 +76,22 @@ Congratulations, you just used your first MRTK scene. Now onto creating your own 2. Make sure you have imported the MRTK packages (we recommend both Foundation and Examples, though Examples is not required) following [the steps above](#import-mrtk-packages-into-your-unity-project). -3. Configure your first Mixed Reality Toolkit scene - -The toolkit has been designed so that there is just one object that is mandatory in your scene. This is there to provide the core configuration and runtime for the Mixed Reality Toolkit. - -Configuring your scene is extremely simple by simply selecting the following from the Editor menu: -> Mixed Reality Toolkit -> Add to Scene and Configure +3. From the menu bar, select Mixed Reality Toolkit -> Add to Scene and Configure ![](../External/ReadMeImages/MRTK_ConfigureScene.png) -You will see a prompt like this: +4. You will see a prompt like this: ![](../External/ReadMeImages/MRTK_ConfigureDialog.png) -Click "OK". You will then be prompted to choose an MRTK Configuration profile. Select "DefaultMixedRealityToolkitConfigurationProfile". +Click "OK". + +5. You will then be prompted to choose an MRTK Configuration profile. Double click "DefaultMixedRealityToolkitConfigurationProfile". ![](../External/ReadMeImages/MRTK_SelectConfigurationDialog.png) -Once this completes, you will see the following in your Scene hierarchy: + +You will then see the following in your Scene hierarchy: ![](../External/ReadMeImages/MRTK_SceneSetup.png) @@ -101,11 +101,13 @@ Which contains the following: * MixedRealityPlayspace - The parent object for the headset, which ensures the headset / controllers and other required systems are managed correctly in the scene. * The Main Camera is moved as a child to the Playspace - Which allows the playspace to manage the camera in conjunction with the SDK's -> **Note** While working in your scene, **DON'T move the Main Camera** (or the playspace) from the scene origin (0,0,0). This is controlled by the MRTK and the active SDK. +> **Note** While working in your scene, **DO NOT move the Main Camera** (or the playspace) from the scene origin (0,0,0). This is controlled by the MRTK and the active SDK. > If you need to move the players start point, then **move the scene content and NOT the camera**! -5. Hit play -Press the play button to start the scene. You are now ready to start building your project, just start adding content and get building. Here are suggested next steps. +6. Hit play and test out hand simulation by pressing spacebar. + + +You are now ready to start building your project, just start adding content such as a [PressableButton](README_button.md) prefab, or a cube with a [ManipulationHandler](README_ManipulationHandler.md) component. ## Next steps From 1a38a8e27b163c9d168932729799a126c0f6cdd6 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 21:12:10 -0700 Subject: [PATCH 065/183] Fix broken link --- Documentation/GettingStartedWithTheMRTK.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 5f2c8eadaba..29b26cd75ca 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -37,6 +37,7 @@ To get started with the Mixed Reality Toolkit you will need: > > Accepting these options is completely optional. If you click **Later**, MRTK will not ask you again. You can then set these options manually if you wish. + 3. Import `Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage` following the same steps as above. The examples package is optional but contains useful demonstration scenes for current MRTK features. > Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. @@ -107,7 +108,7 @@ Which contains the following: 6. Hit play and test out hand simulation by pressing spacebar. -You are now ready to start building your project, just start adding content such as a [PressableButton](README_button.md) prefab, or a cube with a [ManipulationHandler](README_ManipulationHandler.md) component. +You are now ready to start building your project, just start adding content such as a [PressableButton](README_Button.md) prefab, or a cube with a [ManipulationHandler](README_ManipulationHandler.md) component. ## Next steps From 60c24ef301b8c8c52e94bbbbd50b990803e834ff Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 21:27:27 -0700 Subject: [PATCH 066/183] Improved next steps. --- Documentation/GettingStartedWithTheMRTK.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 29b26cd75ca..04372277888 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -108,15 +108,16 @@ Which contains the following: 6. Hit play and test out hand simulation by pressing spacebar. -You are now ready to start building your project, just start adding content such as a [PressableButton](README_Button.md) prefab, or a cube with a [ManipulationHandler](README_ManipulationHandler.md) component. +You are now ready to start building your project! ## Next steps Here are some suggested next steps: +* Add a [PressableButton](README_Button.md) to your scene (we recommend using the `PressableButtonPlated` prefab to start)). +* Add a cube to your scene, then make it movable using the [ManipulationHandler](README_ManipulationHandler.md) component. * Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). * Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. -* Create a scene with a pressable button that logs a message (read about [Interactable](README_Interactable.md) to see how to make the button respond both to click and button presses), and a movable cube. * Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md) ## Building blocks for UI and Interactions From c6628e080e46fee29be84eba2a7d42f062270c76 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 21:30:40 -0700 Subject: [PATCH 067/183] Fix missing period. --- Documentation/GettingStartedWithTheMRTK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index 04372277888..aba7f7baae1 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -118,7 +118,7 @@ Here are some suggested next steps: * Add a cube to your scene, then make it movable using the [ManipulationHandler](README_ManipulationHandler.md) component. * Learn about the UX controls available in MRTK in [building blocks for UI and interactions](#building-blocks-for-ui-and-interactions). * Read through [input simulation guide](InputSimulation/InputSimulationService.md) to learn how to simulate hand input in editor. -* Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md) +* Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md). ## Building blocks for UI and Interactions | [![Button](../External/ReadMeImages/Button/MRTK_Button_Main.png)](README_Button.md) [Button](README_Button.md) | [![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png)](README_BoundingBox.md) [Bounding Box](README_BoundingBox.md) | [![Manipulation Handler](../External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png)](README_ManipulationHandler.md) [Manipulation Handler](README_ManipulationHandler.md) | From f67c12fa6f6236c98bdce906a741c0b5d6819395 Mon Sep 17 00:00:00 2001 From: Julia Schwarz Date: Tue, 9 Apr 2019 23:45:44 -0700 Subject: [PATCH 068/183] put package import steps near each other. --- Documentation/GettingStartedWithTheMRTK.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index aba7f7baae1..dc77a9fcd64 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -2,7 +2,7 @@ ![](../External/ReadMeImages/MRTK_Logo_Rev.png) -The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). This guide covers how to get started with MRTK. +The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). ## Prerequisites @@ -26,6 +26,8 @@ To get started with the Mixed Reality Toolkit you will need: 2. Import the `Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage` you downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensure all items to import are checked, and then selecting "Import". +3. Import `Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage` following the same steps as above. The examples package is optional but contains useful demonstration scenes for current MRTK features. + > After importing the Foundation package, you may see a setup prompt like the following: > > ![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) @@ -35,12 +37,10 @@ To get started with the Mixed Reality Toolkit you will need: > * Force Text Serialization / Visible Meta files (recommended for Unity projects using source control). > * Change the Scripting back-end to use IL2CPP (as Unity is deprecating the .NET scripting back-end). > -> Accepting these options is completely optional. If you click **Later**, MRTK will not ask you again. You can then set these options manually if you wish. +> Accepting these options is completely optional, but recommended. -3. Import `Microsoft.MixedRealityToolkit.Unity.Examples.unitypackage` following the same steps as above. The examples package is optional but contains useful demonstration scenes for current MRTK features. - -> Note that some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. +> Some prefabs and assets require TextMesh Pro, meaning you have to have the TextMesh Pro package installed and the assets in your project (Window -> TextMeshPro -> Import TMP Essential Resources). **After you import TMP Essentials Resources, you need to restart Unity to see changes**. ## Open and run the HandInteractionExamples scene in editor From 8b95cc700d40caec6bd17a760bb8b77f23ea6453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20T=C3=B6nne?= Date: Wed, 10 Apr 2019 10:04:40 +0100 Subject: [PATCH 069/183] Hand simulation cleanup to better define the purpose of SimulatedHand Data vs. SimulatedHandState. (#3881) * Hand simulation cleanup to better define the purpose of SimulatedHandData vs. SimulatedHandState. SimulatedHandData contains all information necessary for SimulatedHand. It can be used to reproduce hand movement (this will become important for tests!) SimulatedHandState is used only for keeping track of changes through keyboard and mouse input. It gets baked into SimulatedHandData when hand simulation is used, but other methods of creating hand movement are possible (test animation). The InputSimulationService now owns the actual SimulatedHandData instances (for both hands) and exposes them publicly. This will later allow tests to modify the hand data without using the SimulatedHandDataProvider, thus separating it from keyboard and mouse input. Testing for update hand device data happens in the service now instead of the SimulatedHandDataProvider. This avoids the indirection through OnHandDataChanged callbacks and makes the service less dependent on the SimulatedHandDataProvider. * Move input sim hand updates into LateUpdate in order to pick up external changes. * Comments to change DateTime.UtcNow to Stopwatch.GetTimestamp in future. * Fix typo. * Clarify that UtcNow is the culprit wrt. timestamps, not DateTime. * Update Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs Co-Authored-By: lukastoenneMS * Update Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs Co-Authored-By: lukastoenneMS --- .../InputSimulation/InputSimulationService.cs | 60 +++- ...ityToolkit.Services.InputSimulation.asmdef | 3 +- .../InputSimulation/SimulatedHand.cs | 67 ++++ .../SimulatedHandDataProvider.cs | 339 +++++++++--------- .../InputSimulation/SimulatedHandPose.cs | 2 +- 5 files changed, 281 insertions(+), 190 deletions(-) diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs index 53b4f7dce51..15a327290c3 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.MixedReality.Toolkit.Utilities; +using System; using System.Collections.Generic; using UnityEngine; @@ -18,11 +19,24 @@ public class InputSimulationService : BaseInputDeviceManager private ManualCameraControl cameraControl = null; private SimulatedHandDataProvider handDataProvider = null; + public readonly SimulatedHandData HandDataLeft = new SimulatedHandData(); + public readonly SimulatedHandData HandDataRight = new SimulatedHandData(); + + /// + /// If true then keyboard and mouse input are used to simulate hands. + /// + public bool UserInputEnabled = true; + /// /// Dictionary to capture all active hands detected /// private readonly Dictionary trackedHands = new Dictionary(); + /// + /// Timestamp of the last hand device update + /// + private long lastHandUpdateTimestamp = 0; + #region BaseInputDeviceManager Implementation public InputSimulationService( @@ -83,17 +97,45 @@ public override void Update() break; case HandSimulationMode.Articulated: - EnableHandSimulation(); - handDataProvider.Update(); - break; - case HandSimulationMode.Gestures: EnableHandSimulation(); - handDataProvider.Update(); + + if (UserInputEnabled) + { + handDataProvider.UpdateHandData(HandDataLeft, HandDataRight); + } break; } } + /// + public override void LateUpdate() + { + var profile = GetInputSimulationProfile(); + + // Apply hand data in LateUpdate to ensure external changes are applied. + // HandDataLeft/Right can be modified after the services Update() call. + if (profile.HandSimulationMode != HandSimulationMode.Disabled) + { + DateTime currentTime = DateTime.UtcNow; + double msSinceLastHandUpdate = currentTime.Subtract(new DateTime(lastHandUpdateTimestamp)).TotalMilliseconds; + // TODO implement custom hand device update frequency here, use 1000/fps instead of 0 + if (msSinceLastHandUpdate > 0) + { + if (HandDataLeft.Timestamp > lastHandUpdateTimestamp) + { + UpdateHandInputSource(Handedness.Left, HandDataLeft); + } + if (HandDataRight.Timestamp > lastHandUpdateTimestamp) + { + UpdateHandInputSource(Handedness.Right, HandDataRight); + } + + lastHandUpdateTimestamp = currentTime.Ticks; + } + } + } + #endregion BaseInputDeviceManager Implementation /// @@ -130,7 +172,6 @@ private void EnableHandSimulation() if (handDataProvider == null) { handDataProvider = new SimulatedHandDataProvider(GetInputSimulationProfile()); - handDataProvider.OnHandDataChanged += OnHandDataChanged; } } @@ -140,17 +181,10 @@ private void DisableHandSimulation() if (handDataProvider != null) { - handDataProvider.OnHandDataChanged -= OnHandDataChanged; handDataProvider = null; } } - private void OnHandDataChanged() - { - UpdateHandInputSource(Handedness.Left, handDataProvider.CurrentFrameLeft); - UpdateHandInputSource(Handedness.Right, handDataProvider.CurrentFrameRight); - } - // Register input sources for hands based on changes of the data provider private void UpdateHandInputSource(Handedness handedness, SimulatedHandData handData) { diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef index 25b1d2c3c23..b5c1602dd38 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef @@ -1,7 +1,8 @@ { "name": "Microsoft.MixedReality.Toolkit.Services.InputSimulation", "references": [ - "Microsoft.MixedReality.Toolkit" + "Microsoft.MixedReality.Toolkit", + "Microsoft.MixedReality.Toolkit.SDK" ], "optionalUnityReferences": [], "includePlatforms": [ diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs index 04127763c95..363bc51ba2d 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs @@ -8,6 +8,73 @@ namespace Microsoft.MixedReality.Toolkit.Input { + /// + /// Snapshot of simulated hand data. + /// + [System.Serializable] + public class SimulatedHandData + { + private static readonly int jointCount = Enum.GetNames(typeof(TrackedHandJoint)).Length; + + // Timestamp of hand data, as FileTime, e.g. DateTime.UtcNow.ToFileTime() + private long timestamp = 0; + public long Timestamp => timestamp; + + [SerializeField] + private bool isTracked = false; + public bool IsTracked => isTracked; + [SerializeField] + private Vector3[] joints = new Vector3[jointCount]; + public Vector3[] Joints => joints; + [SerializeField] + private bool isPinching = false; + public bool IsPinching => isPinching; + + public delegate void HandJointDataGenerator(Vector3[] jointPositions); + + public void Copy(SimulatedHandData other) + { + timestamp = other.timestamp; + isTracked = other.isTracked; + isPinching = other.isPinching; + for (int i = 0; i < jointCount; ++i) + { + joints[i] = other.joints[i]; + } + } + + public bool Update(bool isTrackedNew, bool isPinchingNew, HandJointDataGenerator generator) + { + // TODO: DateTime.UtcNow can be quite imprecise, better use Stopwatch.GetTimestamp + // https://stackoverflow.com/questions/2143140/c-sharp-datetime-now-precision + return UpdateWithTimestamp(DateTime.UtcNow.Ticks, isTrackedNew, isPinchingNew, generator); + } + + public bool UpdateWithTimestamp(long timestampNew, bool isTrackedNew, bool isPinchingNew, HandJointDataGenerator generator) + { + bool handDataChanged = false; + + if (isTracked != isTrackedNew || isPinching != isPinchingNew) + { + isTracked = isTrackedNew; + isPinching = isPinchingNew; + handDataChanged = true; + } + + if (timestamp != timestampNew) + { + timestamp = timestampNew; + if (isTracked) + { + generator(Joints); + handDataChanged = true; + } + } + + return handDataChanged; + } + } + public abstract class SimulatedHand : BaseHand { public abstract HandSimulationMode SimulationMode { get; } diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs index 962b9931562..f230734d4b8 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs @@ -15,45 +15,57 @@ /// namespace Microsoft.MixedReality.Toolkit.Input { - public class SimulatedHandData - { - private static readonly int jointCount = Enum.GetNames(typeof(TrackedHandJoint)).Length; - - // Timestamp of hand data, as FileTime, e.g. DateTime.UtcNow.ToFileTime() - public long Timestamp; - public bool IsTracked; - public Vector3[] Joints = new Vector3[jointCount]; - public bool IsPinching; - } - + /// + /// Internal class to define current gesture and smoothly animate hand data points. + /// + [Serializable] internal class SimulatedHandState { + [SerializeField] private Handedness handedness = Handedness.None; public Handedness Handedness => handedness; // Show a tracked hand device - public bool IsVisible = false; - // Hand is simulated - public bool IsSimulated = false; - // Device is always tracked, regardless if simulating - public bool IsAlwaysTracked = false; + public bool IsTracked = false; // Activate the pinch gesture public bool IsPinching { get; private set; } - private Vector3 screenPosition; + public Vector3 ScreenPosition; // Rotation of the hand - private Vector3 handRotateEulerAngles = Vector3.zero; + public Vector3 HandRotateEulerAngles = Vector3.zero; // Random offset to simulate tracking inaccuracy - private Vector3 jitterOffset = Vector3.zero; - // Remaining time until the hand is hidden - private float timeUntilHide = 0.0f; + public Vector3 JitterOffset = Vector3.zero; - // Interpolation between current pose and target gesture - private float lastGestureAnim = 0.0f; - private float currentGestureAnim = 0.0f; + [SerializeField] private SimulatedHandPose.GestureId gesture = SimulatedHandPose.GestureId.None; - public SimulatedHandPose.GestureId Gesture => gesture; + public SimulatedHandPose.GestureId Gesture + { + get { return gesture; } + set + { + if (value != SimulatedHandPose.GestureId.None && value != gesture) + { + gesture = value; + gestureBlending = 0.0f; + } + } + } + + // Interpolation between current pose and target gesture + private float gestureBlending = 0.0f; + public float GestureBlending + { + get { return gestureBlending; } + set + { + gestureBlending = Mathf.Clamp(value, gestureBlending, 1.0f); + // Pinch is a special gesture that triggers the Select and TriggerPress input actions + IsPinching = (gesture == SimulatedHandPose.GestureId.Pinch && gestureBlending > 0.9f); + } + } + + private float poseBlending = 0.0f; private SimulatedHandPose pose = new SimulatedHandPose(); public SimulatedHandState(Handedness _handedness) @@ -61,170 +73,154 @@ public SimulatedHandState(Handedness _handedness) handedness = _handedness; } - public void Reset(float defaultHandDistance, SimulatedHandPose.GestureId defaultGesture) + public void Reset() { - // Start at current mouse position - Vector3 mousePos = UnityEngine.Input.mousePosition; - screenPosition = new Vector3(mousePos.x, mousePos.y, defaultHandDistance); - - gesture = defaultGesture; - lastGestureAnim = 1.0f; - currentGestureAnim = 1.0f; - - SimulatedHandPose gesturePose = SimulatedHandPose.GetGesturePose(gesture); - if (gesturePose != null) - { - pose.Copy(gesturePose); - } + ScreenPosition = Vector3.zero; + HandRotateEulerAngles = Vector3.zero; + JitterOffset = Vector3.zero; - handRotateEulerAngles = Vector3.zero; - jitterOffset = Vector3.zero; + ResetGesture(); } - // Update hand state - // If hideTimeout value is null, hands will stay visible after tracking stops - public void UpdateVisibility(float hideTimeout) + /// + /// Set the position in viewport space rather than screen space (pixels). + /// + public void SetViewportPosition(Vector3 point) { - if (IsAlwaysTracked) - { - IsVisible = true; - } - else - { - timeUntilHide = IsSimulated ? hideTimeout : timeUntilHide - Time.deltaTime; - IsVisible = (timeUntilHide > 0.0f); - } + ScreenPosition = CameraCache.Main.ViewportToScreenPoint(point); } public void SimulateInput(Vector3 mouseDelta, float noiseAmount, Vector3 rotationDeltaEulerAngles) { - if (!IsSimulated) - { - return; - } - // Apply mouse delta x/y in screen space, but depth offset in world space - screenPosition.x += mouseDelta.x; - screenPosition.y += mouseDelta.y; - Vector3 newWorldPoint = CameraCache.Main.ScreenToWorldPoint(screenPosition); + ScreenPosition.x += mouseDelta.x; + ScreenPosition.y += mouseDelta.y; + Vector3 newWorldPoint = CameraCache.Main.ScreenToWorldPoint(ScreenPosition); newWorldPoint += CameraCache.Main.transform.forward * mouseDelta.z; - screenPosition = CameraCache.Main.WorldToScreenPoint(newWorldPoint); + ScreenPosition = CameraCache.Main.WorldToScreenPoint(newWorldPoint); - handRotateEulerAngles += rotationDeltaEulerAngles; + HandRotateEulerAngles += rotationDeltaEulerAngles; - jitterOffset = UnityEngine.Random.insideUnitSphere * noiseAmount; + JitterOffset = UnityEngine.Random.insideUnitSphere * noiseAmount; } - public void AnimateGesture(SimulatedHandPose.GestureId newGesture, float gestureAnimDelta) + public void ResetGesture() { - if (!IsSimulated) - { - return; - } - - if (newGesture != SimulatedHandPose.GestureId.None && newGesture != gesture) - { - gesture = newGesture; - lastGestureAnim = 0.0f; - currentGestureAnim = Mathf.Clamp01(gestureAnimDelta); - } - else - { - lastGestureAnim = currentGestureAnim; - currentGestureAnim = Mathf.Clamp01(currentGestureAnim + gestureAnimDelta); - } + gestureBlending = 1.0f; SimulatedHandPose gesturePose = SimulatedHandPose.GetGesturePose(gesture); if (gesturePose != null) { - pose.TransitionTo(gesturePose, lastGestureAnim, currentGestureAnim); + pose.Copy(gesturePose); } - - // Pinch is a special gesture that triggers the Select and TriggerPress input actions - IsPinching = (gesture == SimulatedHandPose.GestureId.Pinch && currentGestureAnim > 0.9f); } internal void FillCurrentFrame(Vector3[] jointsOut) { - Quaternion rotation = Quaternion.Euler(handRotateEulerAngles); - Vector3 position = CameraCache.Main.ScreenToWorldPoint(screenPosition + jitterOffset); + SimulatedHandPose gesturePose = SimulatedHandPose.GetGesturePose(gesture); + if (gesturePose != null) + { + pose.TransitionTo(gesturePose, poseBlending, gestureBlending); + } + poseBlending = gestureBlending; + + Quaternion rotation = Quaternion.Euler(HandRotateEulerAngles); + Vector3 position = CameraCache.Main.ScreenToWorldPoint(ScreenPosition + JitterOffset); pose.ComputeJointPositions(handedness, rotation, position, jointsOut); } } + /// + /// Produces simulated data every frame that defines joint positions. + /// public class SimulatedHandDataProvider { private static readonly int jointCount = Enum.GetNames(typeof(TrackedHandJoint)).Length; + protected MixedRealityInputSimulationProfile profile; + /// - /// This event is raised whenever the hand data changes. - /// Hand data changes at 45 fps. + /// If true then the hand is always visible, regardless of simulating. /// - public event Action OnHandDataChanged = delegate { }; - - public SimulatedHandData CurrentFrameLeft = new SimulatedHandData(); - public SimulatedHandData CurrentFrameRight = new SimulatedHandData(); + public bool IsAlwaysVisibleLeft = false; + /// + /// If true then the hand is always visible, regardless of simulating. + /// + public bool IsAlwaysVisibleRight = false; - private MixedRealityInputSimulationProfile profile; + private SimulatedHandState HandStateLeft; + private SimulatedHandState HandStateRight; - private SimulatedHandState stateLeft; - private SimulatedHandState stateRight; + // If true then hands are controlled by user input + private bool isSimulatingLeft = false; + private bool isSimulatingRight = false; // Last frame's mouse position for computing delta private Vector3? lastMousePosition = null; + // Last timestamp when hands were tracked + private long lastSimulatedTimestampLeft = 0; + private long lastSimulatedTimestampRight = 0; public SimulatedHandDataProvider(MixedRealityInputSimulationProfile _profile) { profile = _profile; - stateLeft = new SimulatedHandState(Handedness.Left); - stateRight = new SimulatedHandState(Handedness.Right); + HandStateLeft = new SimulatedHandState(Handedness.Left); + HandStateRight = new SimulatedHandState(Handedness.Right); + + HandStateLeft.Gesture = profile.DefaultHandGesture; + HandStateRight.Gesture = profile.DefaultHandGesture; + + HandStateLeft.Reset(); + HandStateRight.Reset(); } - public void Update() + /// + /// Capture a snapshot of simulated hand data based on current state. + /// + public bool UpdateHandData(SimulatedHandData handDataLeft, SimulatedHandData handDataRight) { - bool wasLeftVisible = stateLeft.IsVisible; - bool wasRightVisible = stateRight.IsVisible; + SimulateUserInput(); + bool handDataChanged = false; + // TODO: DateTime.UtcNow can be quite imprecise, better use Stopwatch.GetTimestamp + // https://stackoverflow.com/questions/2143140/c-sharp-datetime-now-precision + long timestamp = DateTime.UtcNow.Ticks; + handDataChanged |= handDataLeft.UpdateWithTimestamp(timestamp, HandStateLeft.IsTracked, HandStateLeft.IsPinching, HandStateLeft.FillCurrentFrame); + handDataChanged |= handDataRight.UpdateWithTimestamp(timestamp, HandStateRight.IsTracked, HandStateRight.IsPinching, HandStateRight.FillCurrentFrame); + + return handDataChanged; + } + + /// + /// Update hand state based on keyboard and mouse input + /// + private void SimulateUserInput() + { if (UnityEngine.Input.GetKeyDown(profile.ToggleLeftHandKey)) { - stateLeft.IsAlwaysTracked = !stateLeft.IsAlwaysTracked; + IsAlwaysVisibleLeft = !IsAlwaysVisibleLeft; } if (UnityEngine.Input.GetKeyDown(profile.ToggleRightHandKey)) { - stateRight.IsAlwaysTracked = !stateRight.IsAlwaysTracked; + IsAlwaysVisibleRight = !IsAlwaysVisibleRight; } if (UnityEngine.Input.GetKeyDown(profile.LeftHandManipulationKey)) { - stateLeft.IsSimulated = true; + isSimulatingLeft = true; } if (UnityEngine.Input.GetKeyUp(profile.LeftHandManipulationKey)) { - stateLeft.IsSimulated = false; + isSimulatingLeft = false; } if (UnityEngine.Input.GetKeyDown(profile.RightHandManipulationKey)) { - stateRight.IsSimulated = true; + isSimulatingRight = true; } if (UnityEngine.Input.GetKeyUp(profile.RightHandManipulationKey)) { - stateRight.IsSimulated = false; - } - - // Hide cursor if either of the hands is simulated - Cursor.visible = !stateLeft.IsSimulated && !stateRight.IsSimulated; - - stateLeft.UpdateVisibility(profile.HandHideTimeout); - stateRight.UpdateVisibility(profile.HandHideTimeout); - // Reset when enabling - if (!wasLeftVisible && stateLeft.IsVisible) - { - stateLeft.Reset(profile.DefaultHandDistance, profile.DefaultHandGesture); - } - if (!wasRightVisible && stateRight.IsVisible) - { - stateRight.Reset(profile.DefaultHandDistance, profile.DefaultHandGesture); + isSimulatingRight = false; } Vector3 mouseDelta = (lastMousePosition.HasValue ? UnityEngine.Input.mousePosition - lastMousePosition.Value : Vector3.zero); @@ -255,41 +251,66 @@ public void Update() { rotationDeltaEulerAngles.z = -rotationDelta; } - stateLeft.SimulateInput(mouseDelta, profile.HandJitterAmount, rotationDeltaEulerAngles); - stateRight.SimulateInput(mouseDelta, profile.HandJitterAmount, rotationDeltaEulerAngles); + + SimulateHandInput(ref lastSimulatedTimestampLeft, HandStateLeft, isSimulatingLeft, IsAlwaysVisibleLeft, mouseDelta, rotationDeltaEulerAngles); + SimulateHandInput(ref lastSimulatedTimestampRight, HandStateRight, isSimulatingRight, IsAlwaysVisibleRight, mouseDelta, rotationDeltaEulerAngles); float gestureAnimDelta = profile.HandGestureAnimationSpeed * Time.deltaTime; - AnimateGesture(stateLeft, gestureAnimDelta); - AnimateGesture(stateRight, gestureAnimDelta); + HandStateLeft.GestureBlending += gestureAnimDelta; + HandStateRight.GestureBlending += gestureAnimDelta; lastMousePosition = UnityEngine.Input.mousePosition; - - ApplyHandData(); } - private void ApplyHandData() + /// Apply changes to one hand and update tracking + private void SimulateHandInput( + ref long lastSimulatedTimestamp, + SimulatedHandState state, + bool isSimulating, + bool isAlwaysVisible, + Vector3 mouseDelta, + Vector3 rotationDeltaEulerAngles) { - bool handDataChanged = false; - handDataChanged |= UpdateHandDataFromState(CurrentFrameLeft, stateLeft); - handDataChanged |= UpdateHandDataFromState(CurrentFrameRight, stateRight); + if (!state.IsTracked && isSimulating) + { + // Start at current mouse position + Vector3 mousePos = UnityEngine.Input.mousePosition; + state.ScreenPosition = new Vector3(mousePos.x, mousePos.y, profile.DefaultHandDistance); + } - if (handDataChanged) + if (isSimulating) { - OnHandDataChanged(); + state.SimulateInput(mouseDelta, profile.HandJitterAmount, rotationDeltaEulerAngles); + + if (isAlwaysVisible) + { + // Toggle gestures on/off + state.Gesture = ToggleGesture(state.Gesture); + } + else + { + // Enable gesture while mouse button is pressed + state.Gesture = SelectGesture(); + } } - } - private void AnimateGesture(SimulatedHandState state, float gestureAnimDelta) - { - if (state.IsAlwaysTracked) + // Update tracked state of a hand. + // If hideTimeout value is null, hands will stay visible after tracking stops. + // TODO: DateTime.UtcNow can be quite imprecise, better use Stopwatch.GetTimestamp + // https://stackoverflow.com/questions/2143140/c-sharp-datetime-now-precision + DateTime currentTime = DateTime.UtcNow; + if (isAlwaysVisible || isSimulating) { - // Toggle gestures on/off - state.AnimateGesture(ToggleGesture(state.Gesture), gestureAnimDelta); + state.IsTracked = true; + lastSimulatedTimestamp = currentTime.Ticks; } else { - // Enable gesture while mouse button is pressed - state.AnimateGesture(SelectGesture(), gestureAnimDelta); + float timeSinceTracking = (float)currentTime.Subtract(new DateTime(lastSimulatedTimestamp)).TotalSeconds; + if (timeSinceTracking > profile.HandHideTimeout) + { + state.IsTracked = false; + } } } @@ -333,37 +354,5 @@ private SimulatedHandPose.GestureId ToggleGesture(SimulatedHandPose.GestureId ge return SimulatedHandPose.GestureId.None; } } - - private bool UpdateHandDataFromState(SimulatedHandData frame, SimulatedHandState state) - { - bool handDataChanged = false; - bool wasTracked = frame.IsTracked; - bool wasPinching = frame.IsPinching; - - frame.IsTracked = state.IsVisible; - frame.IsPinching = state.IsPinching; - if (wasTracked != frame.IsTracked || wasPinching != frame.IsPinching) - { - handDataChanged = true; - } - - if (frame.IsTracked) - { - var prevTime = frame.Timestamp; - frame.Timestamp = DateTime.UtcNow.Ticks; - if (frame.Timestamp != prevTime) - { - state.FillCurrentFrame(frame.Joints); - handDataChanged = true; - } - } - else - { - // If frame is not tracked, set timestamp to zero - frame.Timestamp = 0; - } - - return handDataChanged; - } } -} \ No newline at end of file +} diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs index 9541ba08080..65650018798 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs @@ -48,7 +48,7 @@ public void ComputeJointPositions(Handedness handedness, Quaternion rotation, Ve // Apply camera transform for (int i = 0; i < jointCount; i++) { - jointsOut[i] = Camera.main.transform.TransformDirection(jointsOut[i]); + jointsOut[i] = CameraCache.Main.transform.TransformDirection(jointsOut[i]); } for (int i = 0; i < jointCount; i++) From b8383d50a1011206c6f8e153481b8e5541aa7311 Mon Sep 17 00:00:00 2001 From: Alexander Seeck Date: Wed, 10 Apr 2019 14:04:37 +0200 Subject: [PATCH 070/183] fixes --- .../Collections/GridObjectCollection.cs | 48 +++++++++++-------- .../Collections/ScatterObjectCollection.cs | 6 +-- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/GridObjectCollection.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/GridObjectCollection.cs index eca9c5223e4..2fbeec888b2 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/GridObjectCollection.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/GridObjectCollection.cs @@ -147,19 +147,15 @@ public float CellHeight /// protected override void LayoutChildren() { - float startOffsetX; - float startOffsetY; var nodeGrid = new Vector3[NodeList.Count]; Vector3 newPos; // Now lets lay out the grid Columns = Mathf.CeilToInt((float)NodeList.Count / rows); - startOffsetX = (Columns * 0.5f) * CellWidth; - startOffsetY = (rows * 0.5f) * CellHeight; HalfCell = new Vector2(CellWidth * 0.5f, CellHeight * 0.5f); // First start with a grid then project onto surface - ResolveGridLayout(nodeGrid, startOffsetX, startOffsetY, layout); + ResolveGridLayout(nodeGrid, layout); switch (SurfaceType) { @@ -168,7 +164,6 @@ protected override void LayoutChildren() { ObjectCollectionNode node = NodeList[i]; newPos = nodeGrid[i]; - //Debug.Log(newPos); node.Transform.localPosition = newPos; UpdateNodeFacing(node); NodeList[i] = node; @@ -225,31 +220,46 @@ protected override void LayoutChildren() } } - protected void ResolveGridLayout(Vector3[] grid, float offsetX, float offsetY, LayoutOrder order) + protected void ResolveGridLayout(Vector3[] grid, LayoutOrder order) { int cellCounter = 0; - float iMax; - float jMax; + int iMax, jMax; - if (order == LayoutOrder.RowThenColumn) + switch (order) { - iMax = Rows; - jMax = Columns; - } - else - { - iMax = Columns; - jMax = Rows; + case LayoutOrder.RowThenColumn: + iMax = Rows; + jMax = Columns; + break; + case LayoutOrder.ColumnThenRow: + iMax = Columns; + jMax = Rows; + break; + case LayoutOrder.Vertical: + iMax = 1; + jMax = NodeList.Count; + break; + case LayoutOrder.Horizontal: + iMax = NodeList.Count; + jMax = 1; + break; + default: + iMax = Mathf.CeilToInt((float)NodeList.Count / rows); + jMax = rows; + break; } + float startOffsetX = (iMax * 0.5f) * CellWidth; + float startOffsetY = (jMax * 0.5f) * CellHeight; + for (int i = 0; i < iMax; i++) { for (int j = 0; j < jMax; j++) { if (cellCounter < NodeList.Count) { - grid[cellCounter].Set(((i * CellWidth) - offsetX + HalfCell.x) + NodeList[cellCounter].Offset.x, - (-(j * CellHeight) + offsetY - HalfCell.y) + NodeList[cellCounter].Offset.y, + grid[cellCounter].Set((-startOffsetX + (i * CellWidth) + HalfCell.x) + NodeList[cellCounter].Offset.x, + (startOffsetY - (j * CellHeight) - HalfCell.y) + NodeList[cellCounter].Offset.y, 0.0f); } cellCounter++; diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/ScatterObjectCollection.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/ScatterObjectCollection.cs index 6e8f2d57b7f..c53c1382ca4 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/ScatterObjectCollection.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Collections/ScatterObjectCollection.cs @@ -17,19 +17,15 @@ public class ScatterObjectCollection : GridObjectCollection /// protected override void LayoutChildren() { - float startOffsetX; - float startOffsetY; Vector3[] nodeGrid = new Vector3[NodeList.Count]; Vector3 newPos; // Now lets lay out the grid Columns = Mathf.CeilToInt((float)NodeList.Count / Rows); - startOffsetX = (Columns * 0.5f) * CellWidth; - startOffsetY = (Rows * 0.5f) * CellHeight; HalfCell = new Vector2(CellWidth * 0.5f, CellHeight * 0.5f); // First start with a grid then project onto surface - ResolveGridLayout(nodeGrid, startOffsetX, startOffsetY, Layout); + ResolveGridLayout(nodeGrid, Layout); // Get randomized planar mapping // Calculate radius of each node while we're here From 922d1f0f31318d8509884a5699637d85472787a0 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Wed, 10 Apr 2019 09:12:12 -0700 Subject: [PATCH 071/183] Fixes inspector for buttons with odd offsets. Disabled moving content transform. --- .../HandTracking/Prefabs/PianoKey.prefab | 36 ++++- .../Interactable/PressableButtonInspector.cs | 144 +++++++++--------- 2 files changed, 106 insertions(+), 74 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab index 669318d9b92..45d9cfaa154 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab @@ -1,5 +1,35 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &4912089897891260336 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8799049236978119711} + m_Layer: 0 + m_Name: Initial Marker + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8799049236978119711 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4912089897891260336} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.0000005, y: 1.0000002, z: 1.0000002} + m_Children: [] + m_Father: {fileID: 6066724869436565231} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6069707849138787997 GameObject: m_ObjectHideFlags: 0 @@ -34,6 +64,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 1623408358297322333} + - {fileID: 8799049236978119711} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 179.99998} @@ -67,6 +98,7 @@ MonoBehaviour: pressDistance: 0.008 releaseDistanceDelta: 0.001 returnRate: 10 + initialTransform: {fileID: 8799049236978119711} TouchBegin: m_PersistentCalls: m_Calls: @@ -142,6 +174,8 @@ MonoBehaviour: m_CallState: 2 m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + isTouching: 0 + isPressing: 0 --- !u!114 &1598528672386795578 MonoBehaviour: m_ObjectHideFlags: 0 @@ -160,7 +194,7 @@ MonoBehaviour: eventsToReceive: 0 touchableSurface: 0 bounds: {x: 0.004711149, y: 0.024825739} - collider: {fileID: 6113324524881885153} + touchableCollider: {fileID: 6113324524881885153} --- !u!82 &6132438213147574949 AudioSource: m_ObjectHideFlags: 0 diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs index 6793974f313..09bd0130815 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs @@ -10,7 +10,9 @@ namespace Microsoft.MixedReality.Toolkit.Editor [CustomEditor(typeof(PressableButton))] public class PressableButtonInspector : UnityEditor.Editor { - private static bool editingEnabled = true; + const string EditingEnabledKey = "MRTK_PressableButtonInspector_EditingEnabledKey"; + private static bool EditingEnabled = false; + private const float labelMouseOverDistance = 0.025f; private static GUIStyle labelStyle; @@ -63,108 +65,104 @@ private void OnSceneGUI() // Instruct the button to create its path markers button.FindOrCreatePathMarkers(); - + Vector3 touchCageSize = touchCage.size; Vector3 touchCageCenter = touchCage.center; Bounds touchCageLocalBounds = new Bounds(touchCageCenter, touchCageSize); + // Get the start pos for touch + Vector3 touchStartPos = touchCageLocalBounds.center; + touchStartPos.z -= touchCageLocalBounds.extents.z; Transform buttonContentTransform = transform; if (movingButtonVisuals.objectReferenceValue != null) buttonContentTransform = (movingButtonVisuals.objectReferenceValue as GameObject).transform; // Get the start and end pos for moving content - Vector3 startPos = buttonContentTransform.localPosition; - Vector3 endPos = buttonContentTransform.localPosition; - endPos.z += maxPushDistance.floatValue; - // Get the start pos for touch - Vector3 touchStartPos = touchCageLocalBounds.center; - touchStartPos.z -= touchCageLocalBounds.extents.z; + float startPos = buttonContentTransform.localPosition.z; + float endPos = buttonContentTransform.localPosition.z; + endPos += maxPushDistance.floatValue; // This is where we'll store the results of our manipulations float newMaxPushDistance = maxPushDistance.floatValue; float newPressDistance = pressDistance.floatValue; float newReleaseDistanceDelta = releaseDistanceDelta.floatValue; - Vector3 newStartPos = startPos; - Vector3 newEndPos = endPos; - Vector3 newPressDistPos = startPos + (Vector3.forward * newPressDistance) / transform.lossyScale.z; - Vector3 newTouchStartPos = touchStartPos; - Vector3 newReleaseDistPos = newPressDistPos + (Vector3.back * newReleaseDistanceDelta) / transform.lossyScale.z; - Vector3 newTouchCageSize = touchCageSize; - Vector3 newTouchCageCenter = touchCageCenter; - - if (editingEnabled) + + float newEndPos = endPos; + float newPressDistPos = startPos + (newPressDistance / transform.lossyScale.z); + float newTouchStartPos = touchStartPos.z; + float newReleaseDistPos = newPressDistPos - (newReleaseDistanceDelta / transform.lossyScale.z); + float newTouchCageSize = touchCageSize.z; + float newTouchCageCenter = touchCageCenter.z; + + if (EditingEnabled) { EditorGUI.BeginChangeCheck(); } - float handleSize = touchCageSize.x * 0.065f; + float handleSize = Mathf.Max(touchCageSize.x * 0.065f, 0.0025f); - // END POINT + // PRESS END Handles.color = Color.cyan; - DrawPlaneAndHandle(targetEndPlane, touchCageSize * 0.5f, handleSize, ref newEndPos, "Max move distance"); + DrawPlaneAndHandle(targetEndPlane, touchCageSize * 0.5f, handleSize, ref newEndPos, touchStartPos, "Max move distance"); - if (editingEnabled) + if (EditingEnabled) { // Clamp the z value to start position - newEndPos.z = Mathf.Max(startPos.z, newEndPos.z); - newMaxPushDistance = Vector3.Distance(startPos, newEndPos); + newEndPos = Mathf.Max(startPos, newEndPos); + newMaxPushDistance = Mathf.Abs(startPos - newEndPos); } // PRESS DISTANCE Handles.color = Color.yellow; - DrawPlaneAndHandle(pressDistancePlane, touchCageLocalBounds.size * 0.35f, handleSize, ref newPressDistPos, "Press event"); + DrawPlaneAndHandle(pressDistancePlane, touchCageLocalBounds.size * 0.35f, handleSize, ref newPressDistPos, touchStartPos, "Press event"); - if (editingEnabled) + if (EditingEnabled) { // Clamp the z values to target start / end - newPressDistPos.z = Mathf.Max(startPos.z, newPressDistPos.z); - newPressDistPos.z = Mathf.Min(newEndPos.z, newPressDistPos.z); + newPressDistPos = Mathf.Max(startPos, newPressDistPos); + newPressDistPos = Mathf.Min(newEndPos, newPressDistPos); // Set based on distance from start // Adjust for scaled objects - newPressDistance = Vector3.Distance(newPressDistPos, startPos) * transform.lossyScale.z; + newPressDistance = Mathf.Abs(newPressDistPos - startPos) * transform.lossyScale.z; } // RELEASE DISTANCE DELTA Handles.color = Color.red; - DrawPlaneAndHandle(releasePlane, touchCageLocalBounds.size * 0.3f, handleSize, ref newReleaseDistPos, "Release event"); + DrawPlaneAndHandle(releasePlane, touchCageLocalBounds.size * 0.3f, handleSize, ref newReleaseDistPos, touchStartPos, "Release event"); - if (editingEnabled) + if (EditingEnabled) { - // Clamp the z values to start / press distance - newReleaseDistPos.z = Mathf.Max(startPos.z, newReleaseDistPos.z); - newReleaseDistPos.z = Mathf.Min(newPressDistPos.z, newReleaseDistPos.z); + // Clamp the z values to press distance + newReleaseDistPos = Mathf.Min(newPressDistPos, newReleaseDistPos); // Set based on distance from press distance // Adjust for scaled objects - newReleaseDistanceDelta = Vector3.Distance(newReleaseDistPos, newPressDistPos) * transform.lossyScale.z; + newReleaseDistanceDelta = Mathf.Abs(newReleaseDistPos - newPressDistPos) * transform.lossyScale.z; } // BUTTON CONTENT ORIGIN + // Don't allow editing of button position Handles.color = Color.green; - DrawPlaneAndHandle(pressStartPlane, touchCageLocalBounds.size * 0.4f, handleSize, ref newStartPos, "Button begins moving (content origin)"); - - if (editingEnabled) - { - if (buttonContentTransform != transform) - { - newStartPos.z = Mathf.Max(newTouchStartPos.z, newStartPos.z); - buttonContentTransform.localPosition = newStartPos; - } - } + float editStartPos = startPos; + DrawPlaneAndHandle(pressStartPlane, touchCageLocalBounds.size * 0.4f, handleSize, ref editStartPos, touchStartPos, "Moving Button Visuals", false); // START POINT + // Start point doesn't need a display offset because it's based on the touch cage center Handles.color = Color.cyan; - DrawPlaneAndHandle(targetStartPlane, touchCageLocalBounds.size * 0.5f, handleSize, ref newTouchStartPos, "Touch event"); + DrawPlaneAndHandle(targetStartPlane, touchCageLocalBounds.size * 0.5f, handleSize, ref newTouchStartPos, touchStartPos, "Touch event"); - if (editingEnabled) + if (EditingEnabled) { // The touch event is defined by the collider bounds // If we've moved the start pos, we've moved the bounds - float difference = touchStartPos.z - newTouchStartPos.z; - newTouchCageCenter.z -= difference / 2; - newTouchCageSize.z += difference; + float difference = (touchStartPos.z - newTouchStartPos); + if (Mathf.Abs(difference) > 0) + { + newTouchCageCenter -= difference / 2; + newTouchCageSize += difference; + } } - if (editingEnabled && EditorGUI.EndChangeCheck()) + if (EditingEnabled && EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Changing push button properties"); @@ -172,9 +170,11 @@ private void OnSceneGUI() pressDistance.floatValue = newPressDistance; releaseDistanceDelta.floatValue = newReleaseDistanceDelta; - boxColliderSize.vector3Value = newTouchCageSize; - boxColliderCenter.vector3Value = newTouchCageCenter; + boxColliderSize.vector3Value = new Vector3(touchCageSize.x, touchCageSize.y, newTouchCageSize); + boxColliderCenter.vector3Value = new Vector3(touchCageCenter.x, touchCageCenter.y, newTouchCageCenter); boxColliderObject.ApplyModifiedProperties(); + + serializedObject.ApplyModifiedProperties(); } // Draw dotted lines showing path from beginning to end of button path @@ -183,34 +183,38 @@ private void OnSceneGUI() Handles.DrawDottedLine(targetStartPlane[1], targetEndPlane[1], 2.5f); Handles.DrawDottedLine(targetStartPlane[2], targetEndPlane[2], 2.5f); Handles.DrawDottedLine(targetStartPlane[3], targetEndPlane[3], 2.5f); - - serializedObject.ApplyModifiedProperties(); } - private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, float handleSize, ref Vector3 position, string label) + private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, float handleSize, ref float zPosition, Vector3 cagePosition, string label, bool drawArrows = true) { - MakePlaneFromPoint(plane, position, planeSize, transform); + cagePosition.z = zPosition; + MakePlaneFromPoint(plane, cagePosition, planeSize, transform); Handles.DrawSolidRectangleWithOutline(plane, Color.Lerp(Handles.color, Color.clear, 0.65f), Handles.color); Vector3 mousePosition = SceneView.currentDrawingSceneView.camera.ScreenToViewportPoint(Event.current.mousePosition); mousePosition.y = 1f - mousePosition.y; mousePosition.z = 0; - Vector3 handlePos = SceneView.currentDrawingSceneView.camera.WorldToViewportPoint(plane[1]); - handlePos.z = 0; + Vector3 handleVisiblePos = SceneView.currentDrawingSceneView.camera.WorldToViewportPoint(plane[1]); + handleVisiblePos.z = 0; - if (Vector3.Distance(mousePosition, handlePos) < labelMouseOverDistance) + if (Vector3.Distance(mousePosition, handleVisiblePos) < labelMouseOverDistance) { DrawLabel(plane[1], transform.up - transform.right, label, labelStyle); SceneView.RepaintAll(); } - if (editingEnabled) + if (EditingEnabled) { - position = Handles.FreeMoveHandle(plane[1], Quaternion.identity, handleSize, Vector3.zero, Handles.SphereHandleCap); + Vector3 handlePosition = Handles.FreeMoveHandle(plane[1], Quaternion.identity, handleSize, Vector3.zero, Handles.SphereHandleCap); // Draw forward / backward arrows so people know they can drag - Handles.ArrowHandleCap(0, plane[1], Quaternion.LookRotation(transform.forward, Vector3.up), handleSize * 2, EventType.Repaint); - Handles.ArrowHandleCap(0, plane[1], Quaternion.LookRotation(-transform.forward, Vector3.up), handleSize * 2, EventType.Repaint); - position = InverseTransformAndConstrain(position, transform); + if (drawArrows) + { + Handles.ArrowHandleCap(0, handlePosition, Quaternion.LookRotation(transform.forward, Vector3.up), handleSize * 2, EventType.Repaint); + Handles.ArrowHandleCap(0, handlePosition, Quaternion.LookRotation(-transform.forward, Vector3.up), handleSize * 2, EventType.Repaint); + } + // Remove the offset from the handle position + handlePosition = transform.InverseTransformPoint(handlePosition); + zPosition = handlePosition.z; } } @@ -220,15 +224,9 @@ public override void OnInspectorGUI() base.OnInspectorGUI(); EditorGUILayout.LabelField("Editor Settings", EditorStyles.boldLabel); - editingEnabled = EditorGUILayout.Toggle("Show Handles", editingEnabled); - } - - private Vector3 InverseTransformAndConstrain(Vector3 value, Transform transform) - { - value = transform.InverseTransformPoint(value); - value.x = 0; - value.y = 0; - return value; + EditingEnabled = SessionState.GetBool(EditingEnabledKey, false); + EditingEnabled = EditorGUILayout.Toggle("Show Handles", EditingEnabled); + SessionState.SetBool(EditingEnabledKey, EditingEnabled); } private void DrawLabel(Vector3 origin, Vector3 direction, string content, GUIStyle labelStyle) From d421b1c91da0e253c6bef56bd799408802123ec4 Mon Sep 17 00:00:00 2001 From: Daniel Hofmann <36995331+danielhofmann-ms@users.noreply.github.com> Date: Wed, 10 Apr 2019 17:14:40 +0100 Subject: [PATCH 072/183] Fix .NET backend build (#3923) --- .../InputSystem/FocusProvider.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs b/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs index 028d3da0a9e..951ef3cec33 100644 --- a/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSystem/FocusProvider.cs @@ -169,7 +169,7 @@ public void Clear() /// /// Set hit focus information from a closest-colliders-to pointer check. /// - public void Set(GameObject hitObject, in Vector3 hitPointOnObject, in Vector4 hitNormalOnObject, in RayStep ray, int rayStepIndex, float rayDistance) + public void Set(GameObject hitObject, Vector3 hitPointOnObject, Vector4 hitNormalOnObject, RayStep ray, int rayStepIndex, float rayDistance) { raycastHit = default(RaycastHit); graphicsRaycastResult = default(RaycastResult); @@ -186,7 +186,7 @@ public void Set(GameObject hitObject, in Vector3 hitPointOnObject, in Vector4 hi /// /// Set hit focus information from a physics raycast. /// - public void Set(in RaycastHit hit, in RayStep ray, int rayStepIndex, float rayDistance) + public void Set(RaycastHit hit, RayStep ray, int rayStepIndex, float rayDistance) { raycastHit = hit; graphicsRaycastResult = default(RaycastResult); @@ -203,7 +203,7 @@ public void Set(in RaycastHit hit, in RayStep ray, int rayStepIndex, float rayDi /// /// Set hit information from a canvas raycast. /// - public void Set(in RaycastResult result, in Vector3 hitPointOnObject, in Vector4 hitNormalOnObject, in RayStep ray, int rayStepIndex, float rayDistance) + public void Set(RaycastResult result, Vector3 hitPointOnObject, Vector4 hitNormalOnObject, RayStep ray, int rayStepIndex, float rayDistance) { raycastHit = default(RaycastHit); graphicsRaycastResult = result; From 4e7c69a28b1ffa25d90839c1b81640fb5276ef33 Mon Sep 17 00:00:00 2001 From: Bernadette Thalhammer Date: Wed, 10 Apr 2019 18:20:22 +0100 Subject: [PATCH 073/183] added new icons for mr dev center readme update --- .../mrdevcenter/icon-azurespatialanchors.png | Bin 0 -> 5042 bytes .../mrdevcenter/icon-azurespeechservices.png | Bin 0 -> 7913 bytes .../mrdevcenter/icon-azurevisionservices.png | Bin 0 -> 8211 bytes .../ReadMeImages/mrdevcenter/icon-design.png | Bin 0 -> 7525 bytes .../ReadMeImages/mrdevcenter/icon-develop.png | Bin 0 -> 8654 bytes .../ReadMeImages/mrdevcenter/icon-discover.png | Bin 0 -> 6993 bytes .../ReadMeImages/mrdevcenter/icon-distribute.png | Bin 0 -> 7435 bytes 7 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png create mode 100644 External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png create mode 100644 External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png create mode 100644 External/ReadMeImages/mrdevcenter/icon-design.png create mode 100644 External/ReadMeImages/mrdevcenter/icon-develop.png create mode 100644 External/ReadMeImages/mrdevcenter/icon-discover.png create mode 100644 External/ReadMeImages/mrdevcenter/icon-distribute.png diff --git a/External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png b/External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png new file mode 100644 index 0000000000000000000000000000000000000000..51828fd40d0f89032543d045fdc780ce062140bb GIT binary patch literal 5042 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 JSDbOZ@*hoP{4M|h literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png b/External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png new file mode 100644 index 0000000000000000000000000000000000000000..42e75a3a22e611f35dd63172f02f072af8828dff GIT binary patch literal 7913 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 E0i)KSKmY&$ literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png b/External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png new file mode 100644 index 0000000000000000000000000000000000000000..5603d057e4d1f77d6e3c163d8900a5288fd783f1 GIT binary patch literal 8211 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 jkKX>8$gRaZQdl5i_>phZ*O04~u?YP?L+7_l literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/mrdevcenter/icon-design.png b/External/ReadMeImages/mrdevcenter/icon-design.png new file mode 100644 index 0000000000000000000000000000000000000000..aab130cbe3ba1d2ecbd9889c624016ef150b8daa GIT binary patch literal 7525 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 MtLmy$DcOhpKcH|9-2eap literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/mrdevcenter/icon-discover.png b/External/ReadMeImages/mrdevcenter/icon-discover.png new file mode 100644 index 0000000000000000000000000000000000000000..6f02aa50f831bffd41bddeaf385faea768c00c87 GIT binary patch literal 6993 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 MsOzcKsM4Lu5JcF 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 H93%b*6`g-8 literal 0 HcmV?d00001 From f61da811a20d5fa0b18640d93cb09bcbff5fc9d1 Mon Sep 17 00:00:00 2001 From: rwinj <27970582+rwinj@users.noreply.github.com> Date: Wed, 10 Apr 2019 10:44:21 -0700 Subject: [PATCH 074/183] updated MR dev center content and icons /azp run mrtk_docs --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1dd63fe2f8b..bf61ddbca36 100644 --- a/README.md +++ b/README.md @@ -85,10 +85,16 @@ For issues related to Windows Mixed Reality that aren't directly related to the This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. -# Useful Resources on Microsoft Windows Dev Center -| ![Academy](External/ReadMeImages/icon_academy.png) [Academy](https://developer.microsoft.com/en-us/windows/mixed-reality/academy)| ![Design](External/ReadMeImages/icon_design.png) [Design](https://developer.microsoft.com/en-us/windows/mixed-reality/design)| ![Development](External/ReadMeImages/icon_development.png) [Development](https://developer.microsoft.com/en-us/windows/mixed-reality/development)| ![Community)](External/ReadMeImages/icon_community.png) [Community](https://developer.microsoft.com/en-us/windows/mixed-reality/community)| +# Useful resources on the Mixed Reality Dev Center +| ![Discover](External/ReadMeImages/mrdevcenter/icon-discover.png) [Discover](https://docs.microsoft.com/en-us/windows/mixed-reality/)| ![Design](External/ReadMeImages/mrdevcenter/icon-design.png) [Design](https://docs.microsoft.com/en-us/windows/mixed-reality/design)| ![Develop](External/ReadMeImages/mrdevcenter/icon-develop.png) [Develop](https://docs.microsoft.com/en-us/windows/mixed-reality/development)| ![Distribute)](External/ReadMeImages/mrdevcenter/icon-distribute.png) [Distribute](https://docs.microsoft.com/en-us/windows/mixed-reality/implementing-3d-app-launchers)| | :--------------------- | :----------------- | :------------------ | :------------------------ | -| See code examples. Do a coding tutorial. Watch guest lectures. | Get design guides. Build user interface. Learn interactions and input. | Get development guides. Learn the technology. Understand the science. | Join open source projects. Ask questions on forums. Attend events and meetups. | +| Learn to build mixed reality experiences for HoloLens and immersive headsets (VR). | Get design guides. Build user interface. Learn interactions and input. | Get development guides. Learn the technology. Understand the science. | Get your app ready for others and consider creating a 3D launcher. | + +# Useful resouces on Azure +| ![Spatial Anchors](External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png) [Spatial Anchors](https://docs.microsoft.com/en-us/azure/spatial-anchors/)| ![Speech Services](External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png) [Speech Services](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/)| ![Vision Services](External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png) [Vision Services](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/)| +| :------------------------| :--------------------- | :---------------------- | +| Spatial Anchors is a cross-platform developer service that allows you to create Mixed Reality experiences using objects that persist their location across devices over time.| Discover and integrate Azure powered speech capabilities like speech to text, speaker recognition or speech translation into your application.| Identify and analyze your image or video content using Vision Services like computer vision, face detection, emotion recognition or video indexer. | + ### Learn more about MRTK Project You can find our planning material on [our wiki](https://github.com/Microsoft/MixedRealityToolkit-Unity/wiki) under Project Management Section. You can always see the items the team is actively working on in the Iteration Plan issue. From f1277bd91a5f84c50f20b9801915fc0bc1609f80 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Wed, 10 Apr 2019 12:04:16 -0700 Subject: [PATCH 075/183] Removed initial transforms from prefabs, enabled accurate preview during press / push --- .../HandTracking/Prefabs/PianoKey.prefab | 32 ---- .../Prefabs/PressableButton.prefab | 32 ---- .../PressableButtons/PressableButton.cs | 8 +- .../Interactable/PressableButtonInspector.cs | 155 ++++++++++++------ 4 files changed, 107 insertions(+), 120 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab index 45d9cfaa154..cd5024c0b27 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab @@ -1,35 +1,5 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &4912089897891260336 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 8799049236978119711} - m_Layer: 0 - m_Name: Initial Marker - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &8799049236978119711 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 4912089897891260336} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1.0000005, y: 1.0000002, z: 1.0000002} - m_Children: [] - m_Father: {fileID: 6066724869436565231} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &6069707849138787997 GameObject: m_ObjectHideFlags: 0 @@ -64,7 +34,6 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 1623408358297322333} - - {fileID: 8799049236978119711} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 90, y: 0, z: 179.99998} @@ -98,7 +67,6 @@ MonoBehaviour: pressDistance: 0.008 releaseDistanceDelta: 0.001 returnRate: 10 - initialTransform: {fileID: 8799049236978119711} TouchBegin: m_PersistentCalls: m_Calls: diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Interactable/Prefabs/PressableButton.prefab b/Assets/MixedRealityToolkit.SDK/Features/UX/Interactable/Prefabs/PressableButton.prefab index 2cb084871d6..ccee1426da3 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Interactable/Prefabs/PressableButton.prefab +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Interactable/Prefabs/PressableButton.prefab @@ -113,7 +113,6 @@ Transform: - {fileID: 1019827636} - {fileID: 1184125596} - {fileID: 8608155427408040960} - - {fileID: 4932697658088180369} m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -147,7 +146,6 @@ MonoBehaviour: pressDistance: 0.006 releaseDistanceDelta: 0.001 returnRate: 25 - initialTransform: {fileID: 0} TouchBegin: m_PersistentCalls: m_Calls: @@ -1116,36 +1114,6 @@ Transform: m_Father: {fileID: 1944713263} m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &1919625447641687090 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 4932697658088180369} - m_Layer: 0 - m_Name: Initial Marker - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!4 &4932697658088180369 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1919625447641687090} - m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] - m_Father: {fileID: 1944713263} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &4787196022339850713 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs index c656ab8ea30..bde94a14a3f 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs @@ -42,11 +42,6 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [Tooltip("Speed of the object movement on release.")] private float returnRate = 25.0f; - [Header("Position markers")] - [Tooltip("Used to mark where button movement begins. If null, it will be automatically generated.")] - [SerializeField] - private Transform initialTransform; - [Header("Events")] public UnityEvent TouchBegin; public UnityEvent TouchEnd; @@ -71,6 +66,9 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [SerializeField] private bool isPressing = false; + private Transform initialTransform; + + /// /// Represents the state of whether or not a finger is currently touching this button. /// diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs index 09bd0130815..4b7f23cf26b 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs @@ -10,6 +10,30 @@ namespace Microsoft.MixedReality.Toolkit.Editor [CustomEditor(typeof(PressableButton))] public class PressableButtonInspector : UnityEditor.Editor { + // Struct use to store state of preview + // This lets us display accurate info while button is being pressed + private struct ButtonInfo + { + // Convenience fields for box collider info + public Bounds touchCageLocalBounds; + // Start pos for touch, also the origin of our cage + public Vector3 touchStartOrigin; + // Start and end pos for moving content + public float startPos; + public float endPos; + // Press, touch and release positions in z axis + public float pressDistPos; + public float touchStartPos; + public float releaseDistPos; + // Cage values + public float touchCageCenter; + public float touchCageSize; + // The actual values that the button uses + public float maxPushDistance; + public float pressDistance; + public float releaseDistanceDelta; + } + const string EditingEnabledKey = "MRTK_PressableButtonInspector_EditingEnabledKey"; private static bool EditingEnabled = false; @@ -21,10 +45,14 @@ public class PressableButtonInspector : UnityEditor.Editor private Transform transform; private BoxCollider touchCage; + private ButtonInfo currentInfo; + private SerializedProperty maxPushDistance; private SerializedProperty pressDistance; private SerializedProperty releaseDistanceDelta; private SerializedProperty movingButtonVisuals; + private SerializedProperty isTouching; + private SerializedProperty isPressing; private SerializedObject boxColliderObject; private SerializedProperty boxColliderSize; private SerializedProperty boxColliderCenter; @@ -51,6 +79,8 @@ private void OnEnable() pressDistance = serializedObject.FindProperty("pressDistance"); releaseDistanceDelta = serializedObject.FindProperty("releaseDistanceDelta"); movingButtonVisuals = serializedObject.FindProperty("movingButtonVisuals"); + isTouching = serializedObject.FindProperty("isTouching"); + isPressing = serializedObject.FindProperty("isPressing"); boxColliderObject = new SerializedObject(touchCage); boxColliderSize = boxColliderObject.FindProperty("m_Size"); @@ -63,115 +93,135 @@ private void OnSceneGUI() if (Selection.activeObject != button.gameObject) return; - // Instruct the button to create its path markers - button.FindOrCreatePathMarkers(); - - Vector3 touchCageSize = touchCage.size; - Vector3 touchCageCenter = touchCage.center; - Bounds touchCageLocalBounds = new Bounds(touchCageCenter, touchCageSize); + // If the button is being pressed, don't gather new info + // Just display the info we already gathered + // This lets people view button presses in real-time + if (isTouching.boolValue || isPressing.boolValue) + { + DrawButtonInfo(currentInfo, false); + } + else + { + currentInfo = GatherCurrentInfo(); + DrawButtonInfo(currentInfo, EditingEnabled); + } + } + + private ButtonInfo GatherCurrentInfo() + { + ButtonInfo info = new ButtonInfo(); + + info.touchCageLocalBounds = new Bounds(touchCage.center, touchCage.size); // Get the start pos for touch - Vector3 touchStartPos = touchCageLocalBounds.center; - touchStartPos.z -= touchCageLocalBounds.extents.z; + Vector3 touchStartOrigin = info.touchCageLocalBounds.center; + touchStartOrigin.z -= info.touchCageLocalBounds.extents.z; + info.touchStartOrigin = touchStartOrigin; + info.touchCageCenter = info.touchCageLocalBounds.center.z; + info.touchCageSize = info.touchCageLocalBounds.size.z; Transform buttonContentTransform = transform; if (movingButtonVisuals.objectReferenceValue != null) buttonContentTransform = (movingButtonVisuals.objectReferenceValue as GameObject).transform; // Get the start and end pos for moving content - float startPos = buttonContentTransform.localPosition.z; - float endPos = buttonContentTransform.localPosition.z; - endPos += maxPushDistance.floatValue; - - // This is where we'll store the results of our manipulations - float newMaxPushDistance = maxPushDistance.floatValue; - float newPressDistance = pressDistance.floatValue; - float newReleaseDistanceDelta = releaseDistanceDelta.floatValue; - - float newEndPos = endPos; - float newPressDistPos = startPos + (newPressDistance / transform.lossyScale.z); - float newTouchStartPos = touchStartPos.z; - float newReleaseDistPos = newPressDistPos - (newReleaseDistanceDelta / transform.lossyScale.z); - float newTouchCageSize = touchCageSize.z; - float newTouchCageCenter = touchCageCenter.z; + info.startPos = buttonContentTransform.localPosition.z; + info.endPos = buttonContentTransform.localPosition.z; + info.endPos += maxPushDistance.floatValue; - if (EditingEnabled) + info.maxPushDistance = maxPushDistance.floatValue; + info.pressDistance = pressDistance.floatValue; + info.releaseDistanceDelta = releaseDistanceDelta.floatValue; + + info.pressDistPos = info.startPos + (info.pressDistance / transform.lossyScale.z); + info.touchStartPos = info.touchStartOrigin.z; + info.releaseDistPos = info.pressDistPos - (info.releaseDistanceDelta / transform.lossyScale.z); + + return info; + } + + private void DrawButtonInfo(ButtonInfo info, bool editingEnabled) + { + // This is where we'll store our new values to compare against + ButtonInfo newInfo = info; + + if (editingEnabled) { EditorGUI.BeginChangeCheck(); } - float handleSize = Mathf.Max(touchCageSize.x * 0.065f, 0.0025f); + float handleSize = Mathf.Max(info.touchCageLocalBounds.size.x * 0.065f, 0.0025f); // PRESS END Handles.color = Color.cyan; - DrawPlaneAndHandle(targetEndPlane, touchCageSize * 0.5f, handleSize, ref newEndPos, touchStartPos, "Max move distance"); + DrawPlaneAndHandle(targetEndPlane, info.touchCageLocalBounds.size * 0.5f, handleSize, ref newInfo.endPos, info.touchStartOrigin, "Max move distance"); - if (EditingEnabled) + if (editingEnabled) { // Clamp the z value to start position - newEndPos = Mathf.Max(startPos, newEndPos); - newMaxPushDistance = Mathf.Abs(startPos - newEndPos); + newInfo.endPos = Mathf.Max(newInfo.startPos, newInfo.endPos); + newInfo.maxPushDistance = Mathf.Abs(newInfo.startPos - newInfo.endPos); } // PRESS DISTANCE Handles.color = Color.yellow; - DrawPlaneAndHandle(pressDistancePlane, touchCageLocalBounds.size * 0.35f, handleSize, ref newPressDistPos, touchStartPos, "Press event"); + DrawPlaneAndHandle(pressDistancePlane, info.touchCageLocalBounds.size * 0.35f, handleSize, ref newInfo.pressDistPos, info.touchStartOrigin, "Press event"); - if (EditingEnabled) + if (editingEnabled) { // Clamp the z values to target start / end - newPressDistPos = Mathf.Max(startPos, newPressDistPos); - newPressDistPos = Mathf.Min(newEndPos, newPressDistPos); + newInfo.pressDistPos = Mathf.Max(newInfo.startPos, newInfo.pressDistPos); + newInfo.pressDistPos = Mathf.Min(newInfo.endPos, newInfo.pressDistPos); // Set based on distance from start // Adjust for scaled objects - newPressDistance = Mathf.Abs(newPressDistPos - startPos) * transform.lossyScale.z; + newInfo.pressDistance = Mathf.Abs(newInfo.pressDistPos - newInfo.startPos) * transform.lossyScale.z; } // RELEASE DISTANCE DELTA Handles.color = Color.red; - DrawPlaneAndHandle(releasePlane, touchCageLocalBounds.size * 0.3f, handleSize, ref newReleaseDistPos, touchStartPos, "Release event"); + DrawPlaneAndHandle(releasePlane, info.touchCageLocalBounds.size * 0.3f, handleSize, ref newInfo.releaseDistPos, info.touchStartOrigin, "Release event"); - if (EditingEnabled) + if (editingEnabled) { // Clamp the z values to press distance - newReleaseDistPos = Mathf.Min(newPressDistPos, newReleaseDistPos); + newInfo.releaseDistPos = Mathf.Min(newInfo.pressDistPos, newInfo.releaseDistPos); // Set based on distance from press distance // Adjust for scaled objects - newReleaseDistanceDelta = Mathf.Abs(newReleaseDistPos - newPressDistPos) * transform.lossyScale.z; + newInfo.releaseDistanceDelta = Mathf.Abs(newInfo.releaseDistPos - newInfo.pressDistPos) * transform.lossyScale.z; } // BUTTON CONTENT ORIGIN // Don't allow editing of button position Handles.color = Color.green; - float editStartPos = startPos; - DrawPlaneAndHandle(pressStartPlane, touchCageLocalBounds.size * 0.4f, handleSize, ref editStartPos, touchStartPos, "Moving Button Visuals", false); + float editStartPos = newInfo.startPos; + DrawPlaneAndHandle(pressStartPlane, info.touchCageLocalBounds.size * 0.4f, handleSize, ref editStartPos, info.touchStartOrigin, "Moving Button Visuals", false); // START POINT // Start point doesn't need a display offset because it's based on the touch cage center Handles.color = Color.cyan; - DrawPlaneAndHandle(targetStartPlane, touchCageLocalBounds.size * 0.5f, handleSize, ref newTouchStartPos, touchStartPos, "Touch event"); + DrawPlaneAndHandle(targetStartPlane, info.touchCageLocalBounds.size * 0.5f, handleSize, ref newInfo.touchStartPos, info.touchStartOrigin, "Touch event"); - if (EditingEnabled) + if (editingEnabled) { // The touch event is defined by the collider bounds // If we've moved the start pos, we've moved the bounds - float difference = (touchStartPos.z - newTouchStartPos); + float difference = (info.touchStartPos - newInfo.touchStartPos); if (Mathf.Abs(difference) > 0) { - newTouchCageCenter -= difference / 2; - newTouchCageSize += difference; + newInfo.touchCageCenter -= difference / 2; + newInfo.touchCageSize += difference; } } - if (EditingEnabled && EditorGUI.EndChangeCheck()) + if (editingEnabled && EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Changing push button properties"); - maxPushDistance.floatValue = newMaxPushDistance; - pressDistance.floatValue = newPressDistance; - releaseDistanceDelta.floatValue = newReleaseDistanceDelta; + maxPushDistance.floatValue = newInfo.maxPushDistance; + pressDistance.floatValue = newInfo.pressDistance; + releaseDistanceDelta.floatValue = newInfo.releaseDistanceDelta; - boxColliderSize.vector3Value = new Vector3(touchCageSize.x, touchCageSize.y, newTouchCageSize); - boxColliderCenter.vector3Value = new Vector3(touchCageCenter.x, touchCageCenter.y, newTouchCageCenter); + boxColliderSize.vector3Value = new Vector3(info.touchCageLocalBounds.size.x, info.touchCageLocalBounds.size.y, newInfo.touchCageSize); + boxColliderCenter.vector3Value = new Vector3(info.touchCageLocalBounds.center.x, info.touchCageLocalBounds.center.y, newInfo.touchCageCenter); boxColliderObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties(); @@ -205,6 +255,8 @@ private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, float handle if (EditingEnabled) { + Color startColor = Handles.color; + Handles.color = drawArrows ? startColor : Color.Lerp(startColor, Color.clear, 0.5f); Vector3 handlePosition = Handles.FreeMoveHandle(plane[1], Quaternion.identity, handleSize, Vector3.zero, Handles.SphereHandleCap); // Draw forward / backward arrows so people know they can drag if (drawArrows) @@ -215,6 +267,7 @@ private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, float handle // Remove the offset from the handle position handlePosition = transform.InverseTransformPoint(handlePosition); zPosition = handlePosition.z; + Handles.color = startColor; } } From c197abc0a5c56a731c218614779d35c3cabaaac5 Mon Sep 17 00:00:00 2001 From: Will Date: Wed, 10 Apr 2019 17:10:37 -0700 Subject: [PATCH 076/183] Update Documentation/EyeTracking/EyeTracking_Cursor.md Co-Authored-By: sostel <32180789+sostel@users.noreply.github.com> --- Documentation/EyeTracking/EyeTracking_Cursor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/EyeTracking/EyeTracking_Cursor.md b/Documentation/EyeTracking/EyeTracking_Cursor.md index 2214f8f699a..ce41f5d8288 100644 --- a/Documentation/EyeTracking/EyeTracking_Cursor.md +++ b/Documentation/EyeTracking/EyeTracking_Cursor.md @@ -4,7 +4,7 @@ This page will cover design guidelines on when and how to use an eye gaze cursor _We're currently restructuring and improving the MRTK documentation. This content will be updated soon! -If you have any questions regarding this section please post in our MRTK slack channel._ +If you have any questions regarding this section please post in our [MRTK slack channel](https://holodevelopers.slack.com/)._ @zi>^uhDNz+g`HjE)eDXQg+elgq8{k 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

uz0S3Zt-04k#0$1o~th9+(V}!75%pT<7ij7 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 iC$?_DKvseEtbbu4S1ma)U=eDt8&zlSk3yURsj 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 + /// The max expected sources is two - two controllers and/or two hands. + /// We'll set it to 20 just to be certain we can't run out of sources. + /// + public const int MaxInteractionSourceStates = 20; /// /// Dictionary to capture all active controllers detected @@ -52,7 +56,7 @@ public WindowsMixedRealityDeviceManager( /// /// Cache of the states captured from the Unity InteractionManager for UWP /// - InteractionSourceState[] interactionmanagerStates = new InteractionSourceState[MaxInteractionSourceState]; + InteractionSourceState[] interactionmanagerStates = new InteractionSourceState[MaxInteractionSourceStates]; /// /// The number of states captured most recently From 3ed9025340596ecdf17ebac5437ee3a37b57d3ac Mon Sep 17 00:00:00 2001 From: Will Wei Date: Fri, 12 Apr 2019 14:40:38 -0700 Subject: [PATCH 086/183] Update the MixedRealityPreferences to explicitly provide a SettingScope Interestingly enough this appears to be the only compile-time incompatibility with Unity 2019.1. 2019.1 support in the MRTK is still highly experiemental but with this change the UWP should build (and be deployable to HL2) Also note that this change doesn't affect 2018.3 behavior, see: https://github.com/Unity-Technologies/UnityCsReference/blob/2018.3/Editor/Mono/Settings/SettingsProvider.cs vs https://github.com/Unity-Technologies/UnityCsReference/blob/2019.1/Editor/Mono/Settings/SettingsProvider.cs The constructor for this object used to default to SettingsScope.Project 2019.1 removed the default (for the second parameter only). --- .../MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs b/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs index 3ab601fabc2..05cefb3d41a 100644 --- a/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs +++ b/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs @@ -67,7 +67,7 @@ public static bool IgnoreSettingsPrompt [SettingsProvider] private static SettingsProvider Preferences() { - var provider = new SettingsProvider("Project/MRTK") + var provider = new SettingsProvider("Project/MRTK", SettingsScope.Project) { label = "MRTK", From 285b4e5606bc8c1b110e8f4c5014aaae7acf829e Mon Sep 17 00:00:00 2001 From: "David Johnson (COGNITION)" Date: Fri, 12 Apr 2019 15:21:12 -0700 Subject: [PATCH 087/183] Implementing GetActiveControllers for InputSimulationService so that the list of simulated controllers can be queried while testing in the editor. --- .../InputSimulation/InputSimulationService.cs | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs index 15a327290c3..96d1606c9e3 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs @@ -4,6 +4,7 @@ using Microsoft.MixedReality.Toolkit.Utilities; using System; using System.Collections.Generic; +using System.Linq; using UnityEngine; namespace Microsoft.MixedReality.Toolkit.Input @@ -32,6 +33,11 @@ public class InputSimulationService : BaseInputDeviceManager /// private readonly Dictionary trackedHands = new Dictionary(); + /// + /// Active controllers + /// + private IMixedRealityController[] activeControllers = new IMixedRealityController[0]; + /// /// Timestamp of the last hand device update /// @@ -50,6 +56,12 @@ public InputSimulationService( { } + /// + public override IMixedRealityController[] GetActiveControllers() + { + return activeControllers; + } + /// public override void Initialize() { @@ -273,6 +285,7 @@ private SimulatedHand GetOrAddHandDevice(Handedness handedness, HandSimulationMo MixedRealityToolkit.InputSystem?.RaiseSourceDetected(controller.InputSource, controller); trackedHands.Add(handedness, controller); + UpdateActiveControllers(); return controller; } @@ -285,6 +298,7 @@ private void RemoveHandDevice(Handedness handedness) MixedRealityToolkit.InputSystem?.RaiseSourceLost(controller.InputSource, controller); trackedHands.Remove(handedness); + UpdateActiveControllers(); } } @@ -295,6 +309,12 @@ private void RemoveAllHandDevices() MixedRealityToolkit.InputSystem?.RaiseSourceLost(controller.InputSource, controller); } trackedHands.Clear(); + UpdateActiveControllers(); + } + + private void UpdateActiveControllers() + { + activeControllers = trackedHands.Values.ToArray(); } } } \ No newline at end of file From c86f540a3c785f33d0070e56b5a041f503a0db55 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Fri, 12 Apr 2019 15:56:40 -0700 Subject: [PATCH 088/183] Update some of the MRTK-specific .NET scripting backend callouts. A couple of things here: BuildDeployWindow.cs - The user already gets .NET backend deprecation warnings in the regular Unity build window. The language of this warning is a bit strong telling people to switch to IL2CPP that may have good reason to stick to .NET (i.e. they actually want a debuggable experience and a faster inner loop). This changes the message to be closer to what Unity says - i.e. it's deprecated, try to use the new thing, but you don't have to. Originally I was going to remove this but then opted to keep it around in case people are only using this build window (in which case they still have some notification that this isn't going to be supported going forward.) MixedRealityEditorSettings.cs - This was actually a fairly problematic suggestion, because really going to IL2CPP is not actually required in Unity 2018.3.x (whose LTS version we are going to support.) What's worse is pressing "ignore" actually set a UNITY APPLICATION WIDE setting which would disable this prompt in other projects as well, and would also stop you from seeing suggestions to enable XR settings (i.e. if you switched from Standalone -> UWP, you would never see suggestion to enable XR settings). People who are enabling the .NET backend are doing so explicitly (and likely because they want a more debuggable experience) and we shouldn't force them away from that. --- .../Utilities/BuildAndDeploy/BuildDeployWindow.cs | 2 +- .../Editor/Setup/MixedRealityEditorSettings.cs | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs index a2892514312..cda2c9f3214 100644 --- a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs +++ b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs @@ -455,7 +455,7 @@ private void AppxBuildGUI() if (curScriptingBackend == ScriptingImplementation.WinRTDotNET) { - EditorGUILayout.HelpBox(".NET Scripting backend is depreciated, please use IL2CPP.", MessageType.Warning); + EditorGUILayout.HelpBox(".NET Scripting backend is deprecated in Unity 2018 and is removed in Unity 2019.", MessageType.Warning); } var newScriptingBackend = (ScriptingImplementation)EditorGUILayout.IntPopup("Scripting Backend", (int)curScriptingBackend, scriptingBackendNames, scriptingBackendEnum, GUILayout.Width(HALF_WIDTH)); diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs index 26a8a1f3540..d07526dbff7 100644 --- a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs @@ -68,13 +68,6 @@ static MixedRealityEditorSettings() message += "- Force Text Serialization\n"; } - var il2Cpp = PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup) == ScriptingImplementation.IL2CPP; - - if (!il2Cpp) - { - message += "- Change the Scripting Backend to use IL2CPP\n"; - } - var visibleMetaFiles = EditorSettings.externalVersionControl.Equals("Visible Meta Files"); if (!visibleMetaFiles) @@ -89,7 +82,7 @@ static MixedRealityEditorSettings() message += "\nWould you like to make this change?"; - if (!forceTextSerialization || !il2Cpp || !visibleMetaFiles || !PlayerSettings.virtualRealitySupported) + if (!forceTextSerialization || !visibleMetaFiles || !PlayerSettings.virtualRealitySupported) { var choice = EditorUtility.DisplayDialogComplex("Apply Mixed Reality Toolkit Default Settings?", message, "Apply", "Ignore", "Later"); @@ -98,7 +91,6 @@ static MixedRealityEditorSettings() case 0: EditorSettings.serializationMode = SerializationMode.ForceText; EditorSettings.externalVersionControl = "Visible Meta Files"; - PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup, ScriptingImplementation.IL2CPP); PlayerSettings.virtualRealitySupported = true; refresh = true; break; From 5c64443ab79b13c6499ea2e0897f6537b9483a8b Mon Sep 17 00:00:00 2001 From: Will Wei Date: Fri, 12 Apr 2019 16:58:13 -0700 Subject: [PATCH 089/183] Build and deploy window fixes While looking into other build related issues (i.e. IL2CPP vs .NET) I noticed that there were some issues with the build window (with respect to SDK versioning and chosing the right SDK). There were a couple of issues: 1) There was a concept of a "min" SDK, but the code was actually doing an equality comparison to look for it. That is, if you had GREATER than the min SDK it would fall over. 2) It looks like even if you set a different target SDK than you current (i.e. if you had a higher target SDK than the current min one specified by the MRTK), it would lower your target. This does change things a bit in that this will now prefer the latest SDK (over always the min SDK). It's a marginal improvement over the old in that now future progress (where new SDK version drops occur) don't cause you to fall over because you didn't detect the "minimum" (because you actually have higher than the minimum). --- .../BuildAndDeploy/BuildDeployWindow.cs | 50 +++++++++---------- .../BuildAndDeploy/UwpAppxBuildTools.cs | 2 +- .../UwpBuildDeployPreferences.cs | 3 +- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs index a2892514312..744a4450856 100644 --- a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs +++ b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/BuildDeployWindow.cs @@ -162,7 +162,7 @@ private static bool IsHoloLensConnectedUsb private static float timeLastUpdatedBuilds; private string[] targetIps; - private string[] windowsSdkPaths; + private List windowsSdkVersions = new List(); private Vector2 scrollPosition; @@ -195,13 +195,7 @@ private void OnEnable() titleContent = new GUIContent("Build Window"); minSize = new Vector2(512, 256); - windowsSdkPaths = Directory.GetDirectories(@"C:\Program Files (x86)\Windows Kits\10\Lib"); - - for (int i = 0; i < windowsSdkPaths.Length; i++) - { - windowsSdkPaths[i] = windowsSdkPaths[i].Substring(windowsSdkPaths[i].LastIndexOf(@"\", StringComparison.Ordinal) + 1); - } - + LoadWindowsSdkPaths(); UpdateBuilds(); currentConnectionInfoIndex = lastSessionConnectionInfoIndex; @@ -406,30 +400,24 @@ private void AppxBuildGUI() { GUILayout.BeginVertical(); - // SDK and MS Build Version(and save setting, if it's changed) + // SDK and MS Build Version (and save setting, if it's changed) string currentSDKVersion = EditorUserBuildSettings.wsaMinUWPSDK; - int currentSDKVersionIndex = -1; - - for (var i = 0; i < windowsSdkPaths.Length; i++) + Version chosenSDKVersion = null; + for (var i = 0; i < windowsSdkVersions.Count; i++) { - if (string.IsNullOrEmpty(currentSDKVersion)) + // windowsSdkVersions is sorted in ascending order, so we always take + // the highest SDK version that is above our minimum. + if (windowsSdkVersions[i] >= UwpBuildDeployPreferences.MIN_SDK_VERSION) { - currentSDKVersionIndex = windowsSdkPaths.Length - 1; - } - else - { - if (windowsSdkPaths[i].Equals(UwpBuildDeployPreferences.MIN_SDK_VERSION)) - { - currentSDKVersionIndex = i; - } + chosenSDKVersion = windowsSdkVersions[i]; } } - EditorGUILayout.HelpBox($"Minimum Required SDK Version: {currentSDKVersion}", MessageType.Info); + EditorGUILayout.HelpBox($"Windows SDK Version: {currentSDKVersion}", MessageType.Info); // Throw exception if user has no Windows 10 SDK installed - if (currentSDKVersionIndex < 0) + if (chosenSDKVersion == null) { if (IsValidSdkInstalled) { @@ -444,8 +432,7 @@ private void AppxBuildGUI() IsValidSdkInstalled = true; - string newSDKVersion = windowsSdkPaths[currentSDKVersionIndex]; - + string newSDKVersion = chosenSDKVersion.ToString(); if (!newSDKVersion.Equals(currentSDKVersion)) { EditorUserBuildSettings.wsaMinUWPSDK = newSDKVersion; @@ -1244,6 +1231,19 @@ private static string UpdatePackageName() return string.Empty; } + private void LoadWindowsSdkPaths() + { + var windowsSdkPaths = Directory.GetDirectories(@"C:\Program Files (x86)\Windows Kits\10\Lib"); + for (int i = 0; i < windowsSdkPaths.Length; i++) + { + windowsSdkVersions.Add(new Version(windowsSdkPaths[i].Substring(windowsSdkPaths[i].LastIndexOf(@"\", StringComparison.Ordinal) + 1))); + } + + // There is no well-defined enumeration of Directory.GetDirectories, so the list + // is sorted prior to use later in this class. + windowsSdkVersions.Sort(); + } + #endregion Utilities #region Device Portal Commands diff --git a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpAppxBuildTools.cs b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpAppxBuildTools.cs index 875fea60591..4776d73dd86 100644 --- a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpAppxBuildTools.cs +++ b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpAppxBuildTools.cs @@ -260,7 +260,7 @@ private static void UpdateDependenciesElement(XElement dependencies, XNamespace if (string.IsNullOrWhiteSpace(EditorUserBuildSettings.wsaMinUWPSDK)) { - EditorUserBuildSettings.wsaMinUWPSDK = UwpBuildDeployPreferences.MIN_SDK_VERSION; + EditorUserBuildSettings.wsaMinUWPSDK = UwpBuildDeployPreferences.MIN_SDK_VERSION.ToString(); } string minVersion = EditorUserBuildSettings.wsaMinUWPSDK; diff --git a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpBuildDeployPreferences.cs b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpBuildDeployPreferences.cs index 96cfd5e9630..8e35e5bde01 100644 --- a/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpBuildDeployPreferences.cs +++ b/Assets/MixedRealityToolkit/Utilities/BuildAndDeploy/UwpBuildDeployPreferences.cs @@ -3,13 +3,14 @@ using Microsoft.MixedReality.Toolkit.Utilities.Editor; using Microsoft.MixedReality.Toolkit.WindowsDevicePortal; +using System; using UnityEngine; namespace Microsoft.MixedReality.Toolkit.Build.Editor { public static class UwpBuildDeployPreferences { - public const string MIN_SDK_VERSION = "10.0.17134.0"; + public static Version MIN_SDK_VERSION = new Version("10.0.17134.0"); private const string EDITOR_PREF_BUILD_CONFIG = "BuildDeployWindow_BuildConfig"; private const string EDITOR_PREF_FORCE_REBUILD = "BuildDeployWindow_ForceRebuild"; private const string EDITOR_PREF_CONNECT_INFOS = "BuildDeployWindow_DeviceConnections"; From 4bb45176528acd2de4da66cfef60eebd5c2d2b90 Mon Sep 17 00:00:00 2001 From: Daniel Hofmann <36995331+danielhofmann-ms@users.noreply.github.com> Date: Mon, 15 Apr 2019 10:53:02 +0100 Subject: [PATCH 090/183] Add option to enable / disable pressableButton back press detection (#3942) * Fix back-press detection when initalTransform is already present by keeping track of the currently active touch points. * Add option to disable back-press detection for PressableButtons. --- .../HandTracking/Prefabs/PianoKey.prefab | 4 +- .../UX/Scripts/Pointers/PokePointer.cs | 27 +++++-- .../PressableButtons/PressableButton.cs | 74 ++++++++++++------- .../Interactable/PressableButtonInspector.cs | 3 - 4 files changed, 70 insertions(+), 38 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab index 669318d9b92..0b8012be461 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/PianoKey.prefab @@ -67,6 +67,7 @@ MonoBehaviour: pressDistance: 0.008 releaseDistanceDelta: 0.001 returnRate: 10 + enforceFrontPush: 0 TouchBegin: m_PersistentCalls: m_Calls: @@ -160,7 +161,7 @@ MonoBehaviour: eventsToReceive: 0 touchableSurface: 0 bounds: {x: 0.004711149, y: 0.024825739} - collider: {fileID: 6113324524881885153} + touchableCollider: {fileID: 6113324524881885153} --- !u!82 &6132438213147574949 AudioSource: m_ObjectHideFlags: 0 @@ -343,7 +344,6 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8538809683663889752} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 6066724869436565231} diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/PokePointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/PokePointer.cs index eafa382d463..7d941866dc9 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/PokePointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/PokePointer.cs @@ -138,13 +138,10 @@ public override void OnPostSceneQuery() public override void OnPreCurrentPointerTargetChange() { - if (currentTouchableObjectDown != null) - { - // We need to raise the event now, since the pointer's focused object or touchable will change - // after we leave this function. This will make sure the same object that received the Down event - // will also receive the Up event. - TryRaisePokeUp(Result.CurrentPointerTarget, Position); - } + // We need to raise the event now, since the pointer's focused object or touchable will change + // after we leave this function. This will make sure the same object that received the Down event + // will also receive the Up event. + TryRaisePokeUp(); } private void TryRaisePokeDown(GameObject targetObject, Vector3 touchPosition) @@ -191,6 +188,14 @@ private void TryRaisePokeUp(GameObject targetObject, Vector3 touchPosition) } } + private void TryRaisePokeUp() + { + if (currentTouchableObjectDown != null) + { + TryRaisePokeUp(Result.CurrentPointerTarget, Position); + } + } + private void RaiseTouchUpdated(GameObject targetObject, Vector3 touchPosition) { if (currentTouchableObjectDown != null) @@ -234,5 +239,13 @@ bool IMixedRealityNearPointer.TryGetNormalToNearestSurface(out Vector3 normal) normal = (closestProximityTouchable != null) ? closestProximityTouchable.Forward : Vector3.forward; return true; } + + /// + public override void OnSourceLost(SourceStateEventData eventData) + { + TryRaisePokeUp(); + + base.OnSourceLost(eventData); + } } } diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs index c656ab8ea30..9b1141ff995 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs @@ -42,6 +42,10 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [Tooltip("Speed of the object movement on release.")] private float returnRate = 25.0f; + [SerializeField] + [Tooltip("Ensures that the button can only be pushed from the front. Touching the button from the back or side is prevented.")] + private bool enforceFrontPush = true; + [Header("Position markers")] [Tooltip("Used to mark where button movement begins. If null, it will be automatically generated.")] [SerializeField] @@ -59,8 +63,8 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler private const float MaxRetractDistanceBeforeReset = 0.0001f; private float currentPushDistance = 0.0f; - - private List touchPoints = new List(); + + private Dictionary touchPoints = new Dictionary(); [Header("Button State")] [ReadOnly] @@ -111,9 +115,8 @@ private Vector3 WorldSpacePressDirection { return -1.0f * nearInteractionTouchable.Forward; } - - Vector3 localSpacePressDirection = new Vector3(0, 0, 1); - return transform.TransformDirection(localSpacePressDirection); + + return transform.forward; } } @@ -123,7 +126,7 @@ private void Start() { if (gameObject.layer == 2) { - Debug.LogWarning("PhysicalButtonMovement will not work if game object layer is set to 'Ignore Raycast'."); + Debug.LogWarning("PressableButton will not work if game object layer is set to 'Ignore Raycast'."); } } @@ -133,12 +136,12 @@ private void Update() if (IsTouching) { - float previousPushDistance = currentPushDistance; currentPushDistance = GetFarthestPushDistanceAlongButtonAxis(); + UpdateMovingVisualsPosition(); // Hand Press is only allowed to happen while touching. - UpdatePressedState(currentPushDistance, previousPushDistance); + UpdatePressedState(currentPushDistance); } else if (currentPushDistance > 0.0f) { @@ -152,25 +155,32 @@ private void Update() UpdateMovingVisualsPosition(); } - - touchPoints.Clear(); } #region OnTouch void IMixedRealityTouchHandler.OnTouchStarted(HandTrackingInputEventData eventData) { - touchPoints.Add(eventData.InputData); + FindOrCreatePathMarkers(); - if (initialTransform == null) + if (enforceFrontPush) { - FindOrCreatePathMarkers(); - // Make sure to initialize currentPushDistance now to correctly handle back-presses in - // HandlePressProgress(). - currentPushDistance = GetFarthestPushDistanceAlongButtonAxis(); + // Back-Press Detection: + // Accept touch only if controller pushed from the front. + // Extrapolate to get previous position. + Vector3 previousPosition = eventData.InputData - eventData.Controller.Velocity * Time.deltaTime; + float previousDistance = GetProjectedDistance(initialTransform.position, WorldSpacePressDirection, previousPosition); + + if (previousDistance > 0.0f) + { + return; + } } - // Pulse each proximity light on pointer cursors's interacting with this button. + Debug.Assert(!touchPoints.ContainsKey(eventData.Controller)); + touchPoints.Add(eventData.Controller, eventData.InputData); + + // Pulse each proximity light on pointer cursors' interacting with this button. foreach (var pointer in eventData.InputSource.Pointers) { ProximityLight[] proximityLights = pointer.BaseCursor?.GameObjectReference?.GetComponentsInChildren(); @@ -189,18 +199,29 @@ void IMixedRealityTouchHandler.OnTouchStarted(HandTrackingInputEventData eventDa void IMixedRealityTouchHandler.OnTouchUpdated(HandTrackingInputEventData eventData) { - touchPoints.Add(eventData.InputData); + if (touchPoints.ContainsKey(eventData.Controller)) + { + touchPoints[eventData.Controller] = eventData.InputData; + + eventData.Use(); + } } void IMixedRealityTouchHandler.OnTouchCompleted(HandTrackingInputEventData eventData) { + if (touchPoints.ContainsKey(eventData.Controller)) + { + touchPoints.Remove(eventData.Controller); + + eventData.Use(); + } } #endregion OnTouch #region private Methods - public void FindOrCreatePathMarkers() + private void FindOrCreatePathMarkers() { Transform sourcePositionTransform = (movingButtonVisuals != null) ? movingButtonVisuals.transform : transform; @@ -214,7 +235,7 @@ public void FindOrCreatePathMarkers() if (initialTransform == null) { initialTransform = new GameObject(InitialMarkerTransformName).transform; - initialTransform.parent = transform; + initialTransform.parent = sourcePositionTransform.parent; initialTransform.position = sourcePositionTransform.position; } } @@ -235,22 +256,23 @@ private float GetFarthestPushDistanceAlongButtonAxis() Debug.Assert(initialTransform != null); float farthestDistance = 0.0f; - foreach (Vector3 p in touchPoints) + + foreach (var touchEntry in touchPoints) { - float testDistance = GetProjectedDistance(initialTransform.position, WorldSpacePressDirection, p); - farthestDistance = Mathf.Max(farthestDistance, testDistance); + float testDistance = GetProjectedDistance(initialTransform.position, WorldSpacePressDirection, touchEntry.Value); + farthestDistance = Mathf.Max(testDistance, farthestDistance); } return Mathf.Clamp(farthestDistance, 0.0f, maxPushDistance); } - private void UpdatePressedState(float pushDistance, float previousPushDistance) + private void UpdatePressedState(float pushDistance) { // If we aren't in a press and can't start a simple one. if (!isPressing) { // Compare to our previous push depth. Use previous push distance to handle back-presses. - if (pushDistance >= pressDistance && previousPushDistance < pressDistance) + if (pushDistance >= pressDistance) { isPressing = true; ButtonPressed.Invoke(); @@ -260,7 +282,7 @@ private void UpdatePressedState(float pushDistance, float previousPushDistance) else { float releaseDistance = pressDistance - releaseDistanceDelta; - if (pushDistance <= releaseDistance && previousPushDistance > releaseDistance) + if (pushDistance <= releaseDistance) { isPressing = false; ButtonReleased.Invoke(); diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs index 6793974f313..c7bbd5c0183 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs @@ -61,9 +61,6 @@ private void OnSceneGUI() if (Selection.activeObject != button.gameObject) return; - // Instruct the button to create its path markers - button.FindOrCreatePathMarkers(); - Vector3 touchCageSize = touchCage.size; Vector3 touchCageCenter = touchCage.center; Bounds touchCageLocalBounds = new Bounds(touchCageCenter, touchCageSize); From 8047529c496ff6083b44ef0f9f20fb9b6dce2d93 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Mon, 15 Apr 2019 09:16:10 -0700 Subject: [PATCH 091/183] Update SimulatedHandDataProvider.cs --- .../InputSimulation/SimulatedHandDataProvider.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs index 37de1fb4559..d348e3dece4 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs @@ -189,12 +189,16 @@ public bool UpdateHandData(SimulatedHandData handDataLeft, SimulatedHandData han // https://stackoverflow.com/questions/2143140/c-sharp-datetime-now-precision long timestamp = DateTime.UtcNow.Ticks; - // Cache the generator delegates so we don't cg alloc every frame + // Cache the generator delegates so we don't gc alloc every frame if (generatorLeft == null) + { generatorLeft = HandStateLeft.FillCurrentFrame; + } if (generatorRight == null) + { generatorRight = HandStateRight.FillCurrentFrame; + } handDataChanged |= handDataLeft.UpdateWithTimestamp(timestamp, HandStateLeft.IsTracked, HandStateLeft.IsPinching, generatorLeft); handDataChanged |= handDataRight.UpdateWithTimestamp(timestamp, HandStateRight.IsTracked, HandStateRight.IsPinching, generatorRight); From 8176adb72289636caccdace2ddf3298a8ff1c92d Mon Sep 17 00:00:00 2001 From: Will Wei Date: Mon, 15 Apr 2019 13:19:29 -0700 Subject: [PATCH 092/183] Update the MRTK root profile picker to select a reasonable default. One of the points of customer feedback we've seen internally is that as a new person configuring a scene for the first time, they see a list of ~5 profiles of which they don't know what to pick. We should at least point to a reasonable default (i.e. the default profile), even if we don't want to filter down this list further to avoid breaking advanced user scenarios. --- .../MixedRealityToolkitInspector.cs | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/MixedRealityToolkitInspector.cs b/Assets/MixedRealityToolkit/Inspectors/MixedRealityToolkitInspector.cs index 94b3f005fa8..a26b57f4cd6 100644 --- a/Assets/MixedRealityToolkit/Inspectors/MixedRealityToolkitInspector.cs +++ b/Assets/MixedRealityToolkit/Inspectors/MixedRealityToolkitInspector.cs @@ -35,7 +35,9 @@ public override void OnInspectorGUI() { EditorUtility.DisplayDialog("Attention!", "You must choose a profile for the Mixed Reality Toolkit.", "OK"); currentPickerWindow = GUIUtility.GetControlID(FocusType.Passive); - EditorGUIUtility.ShowObjectPicker(null, false, string.Empty, currentPickerWindow); + // Shows the list of MixedRealityToolkitConfigurationProfiles in our project, + // selecting the default profile by default (if it exists). + EditorGUIUtility.ShowObjectPicker(GetDefaultProfile(allConfigProfiles), false, string.Empty, currentPickerWindow); } else if (allConfigProfiles.Length == 1) { @@ -101,5 +103,21 @@ public static void CreateMixedRealityToolkitGameObject() Debug.Assert(playspace != null); EditorGUIUtility.PingObject(MixedRealityToolkit.Instance); } + + /// + /// Given a list of MixedRealityToolkitConfigurationProfile objects, returns + /// the one that matches the default profile name. + /// + private MixedRealityToolkitConfigurationProfile GetDefaultProfile(MixedRealityToolkitConfigurationProfile[] allProfiles) + { + for (int i = 0; i < allProfiles.Length; i++) + { + if (allProfiles[i].name == "DefaultMixedRealityToolkitConfigurationProfile") + { + return allProfiles[i]; + } + } + return null; + } } } From 116ff7ad963a7e3a63e67c257265db9d8a1c7293 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Mon, 15 Apr 2019 13:35:15 -0700 Subject: [PATCH 093/183] Update the Getting Started doc to clarify what the other MRTK profiles are in the initial picker. We've gotten some feedback that the fact that the user sees 5 different profiles when they load in for the first time is really confusing - no where do we talk about what they do or why they're there. We're hoping to improve the flow here a little bit improving the documentation (i.e. explaining what to pick - the default one - and what the other ones are for - the example scenes) and by choosing a reasonable default (i.e. highlighting the default one when opening the picker) --- Documentation/GettingStartedWithTheMRTK.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index dc77a9fcd64..c1689af4f46 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -9,7 +9,7 @@ The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed To get started with the Mixed Reality Toolkit you will need: * [Visual Studio 2017](http://dev.windows.com/downloads) -* [Unity 2018.3+](https://unity3d.com/get-unity/download/archive) +* [Unity 2018.3.x (The latest Unity 2019 release)](https://unity3d.com/get-unity/download/archive) * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) * You don't need this to simulate in Unity Editor or run in VR, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK). @@ -22,7 +22,7 @@ To get started with the Mixed Reality Toolkit you will need: ## Import MRTK packages into your Unity project 1. Create a new Unity project, or open an existing project. When creating a project, make sure to select "3D" as the template type. -> We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.X release should work. +> We used 2018.3.9f1 for this tutorial, though any Unity 2018.3.x release should work. 2. Import the `Microsoft.MixedRealityToolkit.Unity.Foundation.unitypackage` you downloaded by going into "Asset -> Import Package -> Custom Package", selecting the .unitypackage file, ensure all items to import are checked, and then selecting "Import". @@ -35,7 +35,6 @@ To get started with the Mixed Reality Toolkit you will need: > MRTK is attempting to set up your project for building Mixed Reality solutions by doing the following: > * Enable XR Settings for your current platform (enabling the XR checkbox). > * Force Text Serialization / Visible Meta files (recommended for Unity projects using source control). -> * Change the Scripting back-end to use IL2CPP (as Unity is deprecating the .NET scripting back-end). > > Accepting these options is completely optional, but recommended. @@ -91,6 +90,12 @@ Click "OK". ![](../External/ReadMeImages/MRTK_SelectConfigurationDialog.png) +> **Note** Note that the other configuration profiles in this picker are from other scenes in the examples +package. If you did not install the examples package, you would not have been prompted to +choose a specific profile (as the foundation package only contains a single +MixedRealityToolkitConfigurationProfile - the default one). The other profiles are part of their +respective example scenes (for example, the HandInteractionAllExampleMixedRealityToolkitConfigurationProfile) +is part of the [HandInteractionExamples scene](README_HandInteractionExamples.md). You will then see the following in your Scene hierarchy: From 73ecdd5c9c5bdc442a102f8b0e2575c113ab63b8 Mon Sep 17 00:00:00 2001 From: yoyo <40645158+Yoyozilla@users.noreply.github.com> Date: Mon, 15 Apr 2019 13:36:13 -0700 Subject: [PATCH 094/183] Updating Unity version There's confusion with 2018.3+ means it supports 2019 as well. clarifying --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb416f11072..64b2aed073e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ MRTK-Unity provides a set of foundational components and features to accelerate | `mrtk_development` |[![CI Status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_development-CI)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=1)|[![Docs Status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_docs)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=7) # Required Software - | [![Windows SDK 18362+](External/ReadMeImages/MRTK170802_Short_17.png)](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK)| [![Unity](External/ReadMeImages/MRTK170802_Short_18.png)](https://unity3d.com/get-unity/download/archive) [Unity 2018.3+](https://unity3d.com/get-unity/download/archive)| [![Visual Studio 2017](External/ReadMeImages/MRTK170802_Short_19.png)](http://dev.windows.com/downloads) [Visual Studio 2017](http://dev.windows.com/downloads)| [![Simulator (optional)](External/ReadMeImages/MRTK170802_Short_20.png)](https://go.microsoft.com/fwlink/?linkid=852626) [Simulator (optional)](https://go.microsoft.com/fwlink/?linkid=852626)| + | [![Windows SDK 18362+](External/ReadMeImages/MRTK170802_Short_17.png)](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK)| [![Unity](External/ReadMeImages/MRTK170802_Short_18.png)](https://unity3d.com/get-unity/download/archive) [Unity 2018.3.x](https://unity3d.com/get-unity/download/archive)| [![Visual Studio 2017](External/ReadMeImages/MRTK170802_Short_19.png)](http://dev.windows.com/downloads) [Visual Studio 2017](http://dev.windows.com/downloads)| [![Simulator (optional)](External/ReadMeImages/MRTK170802_Short_20.png)](https://go.microsoft.com/fwlink/?linkid=852626) [Simulator (optional)](https://go.microsoft.com/fwlink/?linkid=852626)| | :--- | :--- | :--- | :--- | | To develop apps for Windows Mixed Reality headsets, you need the Windows 10 Fall Creators Update | The Unity 3D engine provides support for building mixed reality projects in Windows 10 | Visual Studio is used for code editing, deploying and building UWP app packages | The Emulators allow you test your app without the device in a simulated environment | From bdaccd6544f8fdc85965f52761a063e7bf479a8d Mon Sep 17 00:00:00 2001 From: Will Wei Date: Mon, 15 Apr 2019 13:40:22 -0700 Subject: [PATCH 095/183] Fix up the odd reference to 2019, that wasn't intentional. Meant to write "latest Unity 2018" but mistyped 2019. Then I realized this should just be consistent with the version that we're using on the main readme. --- Documentation/GettingStartedWithTheMRTK.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index c1689af4f46..d724b2919f4 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -9,7 +9,7 @@ The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed To get started with the Mixed Reality Toolkit you will need: * [Visual Studio 2017](http://dev.windows.com/downloads) -* [Unity 2018.3.x (The latest Unity 2019 release)](https://unity3d.com/get-unity/download/archive) +* [Unity 2018.3.x](https://unity3d.com/get-unity/download/archive) * [Latest MRTK release](https://github.com/Microsoft/MixedRealityToolkit-Unity/releases) * You don't need this to simulate in Unity Editor or run in VR, but if you want to build your MRTK project as a UWP to run on HoloLens, you will need [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK). From 38a936dfe66d1a2941c224bbe23402cf5d8a5de9 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Mon, 15 Apr 2019 16:21:39 -0700 Subject: [PATCH 096/183] Clean up the data provider profile selection confusion. In the Input Data Provider section, each data provider has an optional (or required) profile that configures that particular profile. There are a couple of issues: 1) The Add button doesn't actually work on these, because these data providers have abstract (BasedMixedRealityProfile) for their targets. This means pressing the + button ends up just throwing an exception. Unfortunately fixing this up requires some more invasive changes to the way services/data providers are configured, so I'm opting here to just kill off the + button in these cases (and then add documentation for each data provider about what configuration profile it needs). 2) If there already exist profiles that support that particular service (for example, input simulation), this change restricts the set of options in the picker to only assets/profiles that support the service. This prevents the user from seeing every possible profile and having to know which one to pick. Now for things like the input simulation service, we would only show one thing (i.e. the default one) or two (including the custom one if you've cloned it). --- .../BaseMixedRealityProfileInspector.cs | 119 ++++++++++++++---- 1 file changed, 95 insertions(+), 24 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs index 52f70ee0b6e..183acd8bfc3 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs @@ -3,7 +3,9 @@ using Microsoft.MixedReality.Toolkit.Utilities; using System; +using System.Collections.Generic; using System.Text; +using System.Linq; using UnityEditor; using UnityEngine; @@ -16,6 +18,7 @@ public abstract class BaseMixedRealityProfileInspector : UnityEditor.Editor { private const string IsCustomProfileProperty = "isCustomProfile"; private static readonly GUIContent NewProfileContent = new GUIContent("+", "Create New Profile"); + private static readonly String BaseMixedRealityProfileClassName = typeof(BaseMixedRealityProfile).Name; private static BaseMixedRealityProfile profile; private static SerializedObject targetProfile; @@ -69,41 +72,21 @@ private static bool RenderProfileInternal(SerializedProperty property, GUIConten // If it isn't, issue a warning. if (serviceType != null && oldObject != null) { - bool profileTypeIsValid = false; - - foreach (MixedRealityServiceProfileAttribute serviceProfileAttribute in oldObject.GetType().GetCustomAttributes(typeof(MixedRealityServiceProfileAttribute), true)) - { - if (serviceProfileAttribute.ServiceType.IsAssignableFrom(serviceType)) - { - profileTypeIsValid = true; - break; - } - } - - if (!profileTypeIsValid) + if (!IsProfileForService(oldObject.GetType(), serviceType)) { EditorGUILayout.HelpBox("This profile is not supported for " + serviceType.Name + ". Using an unsupported service may result in unexpected behavior.", MessageType.Warning); } } EditorGUILayout.BeginHorizontal(); - - if (guiContent == null) - { - EditorGUILayout.PropertyField(property); - } - else - { - EditorGUILayout.PropertyField(property, guiContent); - } - + RenderProfileField(property, guiContent, GetProfileTypesForService(serviceType)); if (property.objectReferenceValue == null) { - if (showAddButton) + var profileTypeName = property.type.Replace("PPtr<$", string.Empty).Replace(">", string.Empty); + if (showAddButton && IsConcreteProfileType(profileTypeName)) { if (GUILayout.Button(NewProfileContent, EditorStyles.miniButton, GUILayout.Width(20f))) { - var profileTypeName = property.type.Replace("PPtr<$", string.Empty).Replace(">", string.Empty); Debug.Assert(profileTypeName != null, "No Type Found"); ScriptableObject instance = CreateInstance(profileTypeName); @@ -246,5 +229,93 @@ private static async void PasteProfileValuesDelay(BaseMixedRealityProfile newPro PasteProfileValues(); Selection.activeObject = newProfile; } + + /// + /// Given a service type, finds all sub-classes of BaseMixedRealityProfile that are + /// designed to configure that service. + /// + private static IReadOnlyCollection GetProfileTypesForService(Type serviceType) + { + if (serviceType == null) + { + return Array.Empty(); + } + + // This is a little inefficient in that it has to enumerate all of the mixed reality + // profiles in order to make this enumeration. It would be possible to cache the results + // of this, but then it would be necessary to listen to file/asset creation/destruction + // events in order to refresh the cache. If this ends up being a perf bottleneck + // in inspectors this would be one possible way to alleviate the issue. + HashSet allTypes = new HashSet(); + BaseMixedRealityProfile[] allProfiles = ScriptableObjectExtensions.GetAllInstances(); + for (int i = 0; i < allProfiles.Length; i++) + { + BaseMixedRealityProfile profile = allProfiles[i]; + if (IsProfileForService(profile.GetType(), serviceType)) + { + allTypes.Add(profile.GetType()); + } + } + return allTypes.ToReadOnlyCollection(); + } + + /// + /// Returns true if the given profile type is designed to configure the given service. + /// + private static bool IsProfileForService(Type profileType, Type serviceType) + { + foreach (MixedRealityServiceProfileAttribute serviceProfileAttribute in profileType.GetCustomAttributes(typeof(MixedRealityServiceProfileAttribute), true)) + { + if (serviceProfileAttribute.ServiceType.IsAssignableFrom(serviceType)) + { + return true; + } + } + return false; + } + + /// + /// Renders the profile field, optionally restricting the set of selectable types based on the given + /// profileTypes parameter. + /// + /// + /// If profileTypes has a count greater than one, then it won't be possible to use + /// EditorGUILayout.ObjectField to restrict the set of profiles to a single type - in this + /// case all profiles of BaseMixedRealityProfile will be visible in the picker. + /// + /// However in the case where there is just a single profile type for the service, we can improve + /// upon the user experience by limiting the set of things that show in the picker by restricting + /// the set of profiles listed to only that type. + /// + private static void RenderProfileField(SerializedProperty property, GUIContent guiContent, IReadOnlyCollection profileTypes) + { + if (profileTypes.Count == 1) + { + if (guiContent != null) + { + EditorGUILayout.ObjectField(property, profileTypes.Single(), guiContent); + } + else + { + EditorGUILayout.ObjectField(property, profileTypes.Single()); + } + } + else + { + if (guiContent != null) + { + EditorGUILayout.ObjectField(property, guiContent); + } + else + { + EditorGUILayout.ObjectField(property); + } + } + } + + private static bool IsConcreteProfileType(String profileTypeName) + { + return profileTypeName != BaseMixedRealityProfileClassName; + } } } \ No newline at end of file From 17855e0b45f732c3369defac4c59769c50bfd8ce Mon Sep 17 00:00:00 2001 From: Will Wei Date: Mon, 15 Apr 2019 17:13:49 -0700 Subject: [PATCH 097/183] Update the default location that profiles are cloned to. Currently there place where we clone profiles is somewhat inconsistent - if you clone default root MRTK profile it will go into the CustomProfiles by default. If you use the clone button for the other profiles, they will get dumped in the root Assets folder, which isn't optimal. This makes it so that we at least default to a reasonable thing (the CustomProfiles) while providing a way to override that if so desired. --- .../MixedRealityProfileCloneWindow.cs | 50 +++++++++++-------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs index cca32d75da3..9337ff96479 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System.Collections.Generic; +using System.IO; using System.Reflection; using UnityEditor; using UnityEngine; @@ -37,8 +38,9 @@ public SubProfileAction(ProfileCloneBehavior behavior, SerializedProperty proper public System.Type ProfileType; } + private const string DefaultCustomProfileFolder = "Assets/MixedRealityToolkit.Generated/CustomProfiles"; private const string IsCustomProfileProperty = "isCustomProfile"; - private static readonly Vector2 MinWindowSizeBasic = new Vector2(500, 140); + private static readonly Vector2 MinWindowSizeBasic = new Vector2(500, 170); private const float SubProfileSizeMultiplier = 70f; private static MixedRealityProfileCloneWindow cloneWindow; @@ -188,14 +190,15 @@ private void OnGUI() GUILayout.FlexibleSpace(); // Get the selected folder in the project window - GetSelectedPathOrFallback(ref targetFolder); - targetFolder = EditorGUILayout.ObjectField("Target Folder", targetFolder, typeof(Object), false); + targetFolder = EditorGUILayout.ObjectField("Target Folder", targetFolder, typeof(DefaultAsset), false); + EditorGUILayout.HelpBox("If no folder is provided, the profile will be cloned to the Assets/MixedRealityToolkit.Generated/CustomProfiles folder.", MessageType.Info); childProfileAssetName = EditorGUILayout.TextField("Profile Name", childProfileAssetName); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("Clone")) { + targetFolder = EnsureTargetFolder(targetFolder); CloneMainProfile(); } if (GUILayout.Button("Cancel")) @@ -298,24 +301,6 @@ private static void PasteProfileValues(BaseMixedRealityProfile parentProfile, Ba AssetDatabase.SaveAssets(); } - public static void GetSelectedPathOrFallback(ref Object folderObject) - { - foreach (Object obj in Selection.GetFiltered(typeof(Object), SelectionMode.Assets)) - { - string path = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(path) && System.IO.Directory.Exists(path)) - { - folderObject = obj; - return; - } - } - - if (folderObject == null) - { - folderObject = AssetDatabase.LoadAssetAtPath("Assets", typeof(Object)); - } - } - private static System.Type FindProfileType(string profileTypeName) { System.Type type = null; @@ -333,5 +318,28 @@ private static System.Type FindProfileType(string profileTypeName) return type; } + + /// + /// If the targetFolder is invalid asset folder, this will create the CustomProfiles + /// folder and use that as the default target. + /// + private static Object EnsureTargetFolder(Object targetFolder) + { + if (targetFolder != null && AssetDatabase.IsValidFolder(AssetDatabase.GetAssetPath(targetFolder))) + { + return targetFolder; + } + + if (!AssetDatabase.IsValidFolder(DefaultCustomProfileFolder)) + { + // AssetDatabase.CreateFolder must be called to create each child of the asset folder + // path individually. + // Calling AssetDatabase.CreateFolder("Assets", "MixedRealityToolkit.Generated/CustomProfiles") + // generates a folder that looks like "Assets/MixedRealityToolkit.Generated_CustomProfiles". + AssetDatabase.CreateFolder("Assets", "MixedRealityToolkit.Generated"); + AssetDatabase.CreateFolder("Assets/MixedRealityToolkit.Generated", "CustomProfiles"); + } + return AssetDatabase.LoadAssetAtPath(DefaultCustomProfileFolder, typeof(Object)); + } } } \ No newline at end of file From 50f7737b6392f5f70c1fc96ab6498f51d1d5f767 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Mon, 15 Apr 2019 17:19:10 -0700 Subject: [PATCH 098/183] Remove stale System.IO reference. --- .../Inspectors/Profiles/MixedRealityProfileCloneWindow.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs index 9337ff96479..705fa830148 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using System.Collections.Generic; -using System.IO; using System.Reflection; using UnityEditor; using UnityEngine; From 841f8c3396b10d1b7ad723d3d1131c5d7c132f2d Mon Sep 17 00:00:00 2001 From: Eric Provencher Date: Tue, 16 Apr 2019 08:51:05 -0400 Subject: [PATCH 099/183] Exposed manipulation handler parameters to be publicly set - Previously the only way to modify settings like rotation constraints was by modifying the serialized property fields. This made it difficult to configure handlers when adding them via another script, as in a factory pattern. --- .../Input/Handlers/ManipulationHandler.cs | 44 +++++++++++++++---- 1 file changed, 36 insertions(+), 8 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/Input/Handlers/ManipulationHandler.cs b/Assets/MixedRealityToolkit.SDK/Features/Input/Handlers/ManipulationHandler.cs index fa4d7961431..7ebcb446bb7 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/Input/Handlers/ManipulationHandler.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/Input/Handlers/ManipulationHandler.cs @@ -66,13 +66,21 @@ public enum ReleaseBehaviorType [Tooltip("Can manipulation be done only with one hand, only with two hands, or with both?")] private HandMovementType manipulationType = HandMovementType.OneAndTwoHanded; - public HandMovementType ManipulationType => manipulationType; + public HandMovementType ManipulationType + { + get => manipulationType; + set => manipulationType = value; + } [SerializeField] [Tooltip("What manipulation will two hands perform?")] private TwoHandedManipulation twoHandedManipulationType = TwoHandedManipulation.MoveRotateScale; - - public TwoHandedManipulation TwoHandedManipulationType => twoHandedManipulationType; + + public TwoHandedManipulation TwoHandedManipulationType + { + get => twoHandedManipulationType; + set => twoHandedManipulationType = value; + } [SerializeField] [Tooltip("Specifies whether manipulation can be done using far interaction with pointers.")] @@ -93,34 +101,54 @@ public enum ReleaseBehaviorType [Tooltip("Rigid body behavior of the dragged object when releasing it.")] private ReleaseBehaviorType releaseBehavior = ReleaseBehaviorType.KeepVelocity | ReleaseBehaviorType.KeepAngularVelocity; - public ReleaseBehaviorType ReleaseBehavior => releaseBehavior; + public ReleaseBehaviorType ReleaseBehavior + { + get => releaseBehavior; + set => releaseBehavior = value; + } [Header("Constraints")] [SerializeField] [Tooltip("Constrain rotation along an axis")] private RotationConstraintType constraintOnRotation = RotationConstraintType.None; - public RotationConstraintType ConstraintOnRotation => constraintOnRotation; + public RotationConstraintType ConstraintOnRotation + { + get => constraintOnRotation; + set => constraintOnRotation = value; + } [SerializeField] [Tooltip("Constrain movement")] private MovementConstraintType constraintOnMovement = MovementConstraintType.None; - public MovementConstraintType ConstraintOnMovement => constraintOnMovement; + public MovementConstraintType ConstraintOnMovement + { + get => constraintOnMovement; + set => constraintOnMovement = value; + } [Header("Smoothing")] [SerializeField] [Tooltip("Check to enable frame-rate independent smoothing. ")] private bool smoothingActive = true; - public bool SmoothingActive => smoothingActive; + public bool SmoothingActive + { + get => smoothingActive; + set => smoothingActive = value; + } [SerializeField] [Range(0, 1)] [Tooltip("Enter amount representing amount of smoothing to apply to the movement, scale, rotation. Smoothing of 0 means no smoothing. Max value means no change to value.")] private float smoothingAmountOneHandManip = 0.001f; - public float SmoothingAmoutOneHandManip => smoothingAmountOneHandManip; + public float SmoothingAmoutOneHandManip + { + get => smoothingAmountOneHandManip; + set => smoothingAmountOneHandManip = value; + } #endregion Serialized Fields From 49ea7238455347c05b3152e2c8dd6b8477d9ab6d Mon Sep 17 00:00:00 2001 From: Eric Provencher Date: Tue, 16 Apr 2019 09:00:06 -0400 Subject: [PATCH 100/183] Prevent MRTK instance from being created OnAppQuitting - Generating a new instance during app shutdown in the editor allows instances to persist into edit mode, which cause unwanted behavior --- .../MixedRealityToolkit/Services/MixedRealityToolkit.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs index 94a073dadc1..cfb361a593b 100644 --- a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs +++ b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs @@ -557,6 +557,14 @@ public static MixedRealityToolkit Instance switch (objects.Length) { case 0: +#if UNITY_EDITOR + // Generating a new instance during app shutdown in the editor allows instances to persist into edit mode, which cause unwanted behavior + if (isApplicationQuitting) + { + Debug.LogWarning("Trying to find instance during application shutdown."); + return null; + } +#endif Debug.Assert(!newInstanceBeingInitialized, "We shouldn't be initializing another MixedRealityToolkit unless we errored on the previous."); newInstanceBeingInitialized = true; newInstance = new GameObject(nameof(MixedRealityToolkit)).AddComponent(); From 0744bddeff4b9928c29f59733b43b5c663d122a6 Mon Sep 17 00:00:00 2001 From: Eric Provencher Date: Tue, 16 Apr 2019 09:05:09 -0400 Subject: [PATCH 101/183] Improved comment grammar --- Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs index cfb361a593b..6e20244748b 100644 --- a/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs +++ b/Assets/MixedRealityToolkit/Services/MixedRealityToolkit.cs @@ -558,7 +558,7 @@ public static MixedRealityToolkit Instance { case 0: #if UNITY_EDITOR - // Generating a new instance during app shutdown in the editor allows instances to persist into edit mode, which cause unwanted behavior + // Generating a new instance during app shutdown in the editor allows instances to persist into edit mode, which may cause unwanted behavior if (isApplicationQuitting) { Debug.LogWarning("Trying to find instance during application shutdown."); From e52ea870409e1b5efa0d8665cc5cc6f6397fcf79 Mon Sep 17 00:00:00 2001 From: Bernadette Thalhammer Date: Tue, 16 Apr 2019 15:48:10 +0100 Subject: [PATCH 102/183] Fixed Mouse pointer / controller: - mouse cursor not stuck anymore in center of screen - only one mouse cursor gameobject is created / controller won't be enabled more than once - screenspace cursor will be hidden when spatial cursor is used - fixed other controllers interferring with mouse cursor visibility (hands / camera) - removed spatial mouse cursor (retrieved the mouse cursor position and sent it back to the mouse cursor to set the position of the cursor to that same position again) - removed mouse wheel scrolling that modified mouse cursor position (not needed as spatial cursor is snapping to interactable objects) - added ray to world space position calc to enable object manipulation (bounding box) - added spatial grab to controller mapping to support dragging of objects - added mouse cursor speed adjustment setting --- .../UX/Prefabs/Pointers/MousePointer.prefab | 8 +-- .../UX/Scripts/Pointers/MousePointer.cs | 59 +++++++++++-------- .../UX/Pointers/MousePointerInspector.cs | 3 + ...MixedRealityControllerMappingProfile.asset | 55 ++++++++++------- .../InputSimulation/ManualCameraControl.cs | 11 +++- .../SimulatedHandDataProvider.cs | 10 +++- .../InputSystem/IMixedRealityMousePointer.cs | 6 ++ .../Providers/UnityInput/MouseController.cs | 58 +++++------------- .../UnityInput/MouseDeviceManager.cs | 7 +++ 9 files changed, 122 insertions(+), 95 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab b/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab index 493645b055f..ee2fc134b3b 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab @@ -45,15 +45,15 @@ MonoBehaviour: m_EditorClassIdentifier: handedness: 0 destroyOnSourceLost: 0 - useSourcePoseData: 1 + useSourcePoseData: 0 poseAction: id: 12 description: Mouse Delta axisConstraint: 4 cursorPrefab: {fileID: 1151083198953756, guid: 667821d88830305449757690d22f71e0, type: 3} - disableCursorOnStart: 1 - setCursorVisibilityOnSourceDetected: 0 + disableCursorOnStart: 0 + setCursorVisibilityOnSourceDetected: 1 raycastOrigin: {fileID: 0} activeHoldAction: id: 0 @@ -69,7 +69,7 @@ MonoBehaviour: pointerExtent: 10 defaultPointerExtent: 10 sphereCastRadius: 0.1 - pointerOrientation: 0 hideCursorWhenInactive: 1 movementThresholdToUnHide: 0.5 hideTimeout: 3 + speed: 0.2 diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs index 18432539618..f64714eb873 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs @@ -45,6 +45,13 @@ public class MousePointer : BaseControllerPointer, IMixedRealityMousePointer /// float IMixedRealityMousePointer.HideTimeout => hideTimeout; + [SerializeField] + [Range(0.1f, 1f)] + [Tooltip("Mouse cursor speed that gets applied to the mouse delta.")] + private float speed = 0.25f; + + float IMixedRealityMousePointer.Speed => speed; + #endregion IMixedRealityMousePointer Implementation #region IMixedRealityPointer Implementation @@ -54,6 +61,8 @@ public class MousePointer : BaseControllerPointer, IMixedRealityMousePointer private IMixedRealityController controller; + private Vector3 cachedWorldSpacePosition; + /// public override IMixedRealityController Controller { @@ -75,15 +84,33 @@ public override IMixedRealityController Controller /// public override void OnPreSceneQuery() { + // screenspace to ray conversion transform.position = CameraCache.Main.transform.position; - Ray ray = new Ray(Position, Rotation * Vector3.forward); + Ray ray = new Ray(transform.position, transform.rotation * Vector3.forward); Rays[0].CopyRay(ray, PointerExtent); if (MixedRealityRaycaster.DebugEnabled) { Debug.DrawRay(ray.origin, ray.direction * PointerExtent, Color.green); } + + // ray to worldspace conversion + Camera RaycastCamera = MixedRealityToolkit.InputSystem.FocusProvider.UIRaycastCamera; + RaycastCamera.transform.position = Rays[0].Origin; + RaycastCamera.transform.rotation = Quaternion.LookRotation(Rays[0].Direction); + + // The RayCastCamera is placed so that the current cursor position is in the center of the camera's view space. + Vector3 viewportPos = new Vector3(0.5f, 0.5f, 1.0f); + cachedWorldSpacePosition = RaycastCamera.ViewportToWorldPoint(viewportPos); + } + + public override Vector3 Position + { + get + { + return cachedWorldSpacePosition; + } } #endregion IMixedRealityPointer Implementation @@ -105,6 +132,7 @@ public override void OnSourceDetected(SourceStateEventData eventData) isInteractionEnabled = true; } } + /// public override void OnSourceLost(SourceStateEventData eventData) @@ -117,22 +145,6 @@ public override void OnSourceLost(SourceStateEventData eventData) } } - /// - public override void OnSourcePoseChanged(SourcePoseEventData eventData) - { - if (Controller == null || - eventData.Controller == null || - eventData.Controller.InputSource.SourceId != Controller.InputSource.SourceId) - { - return; - } - - if (UseSourcePoseData) - { - UpdateMousePosition(eventData.SourceData.x, eventData.SourceData.y); - } - } - #endregion IMixedRealitySourcePoseHandler Implementation #region IMixedRealityInputHandler Implementation @@ -167,8 +179,7 @@ public override void OnInputChanged(InputEventData eventData) { if (eventData.SourceId == Controller?.InputSource.SourceId) { - if (!UseSourcePoseData && - PoseAction == eventData.MixedRealityInputAction) + if (PoseAction == eventData.MixedRealityInputAction) { UpdateMousePosition(eventData.InputData.x, eventData.InputData.y); } @@ -218,8 +229,10 @@ private void Update() private void UpdateMousePosition(float mouseX, float mouseY) { - if (Mathf.Abs(mouseX) >= movementThresholdToUnHide || - Mathf.Abs(mouseY) >= movementThresholdToUnHide) + float scaledMouseX = mouseX * speed; + float scaledMouseY = mouseY * speed; + if (Mathf.Abs(scaledMouseX) >= movementThresholdToUnHide || + Mathf.Abs(scaledMouseY) >= movementThresholdToUnHide) { if (isDisabled) { @@ -236,8 +249,8 @@ private void UpdateMousePosition(float mouseX, float mouseY) } var newRotation = Vector3.zero; - newRotation.x += mouseX; - newRotation.y += mouseY; + newRotation.x += scaledMouseX; + newRotation.y += scaledMouseY; transform.Rotate(newRotation, Space.World); } } diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs index 689492a1c84..f2781b24475 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs @@ -14,6 +14,7 @@ public class MousePointerInspector : BaseControllerPointerInspector private SerializedProperty hideTimeout; private SerializedProperty movementThresholdToUnHide; private bool mousePointerFoldout = true; + private SerializedProperty speed; protected override void OnEnable() { @@ -23,6 +24,7 @@ protected override void OnEnable() hideCursorWhenInactive = serializedObject.FindProperty("hideCursorWhenInactive"); movementThresholdToUnHide = serializedObject.FindProperty("movementThresholdToUnHide"); hideTimeout = serializedObject.FindProperty("hideTimeout"); + speed = serializedObject.FindProperty("speed"); } public override void OnInspectorGUI() @@ -44,6 +46,7 @@ public override void OnInspectorGUI() } EditorGUI.indentLevel--; + EditorGUILayout.PropertyField(speed); } serializedObject.ApplyModifiedProperties(); diff --git a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset index 87f0691cde8..ca716b298aa 100644 --- a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset +++ b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset @@ -705,19 +705,6 @@ MonoBehaviour: handedness: 7 interactions: - id: 0 - description: Spatial Mouse Position - axisType: 7 - inputType: 3 - inputAction: - id: 4 - description: Pointer Pose - axisConstraint: 7 - keyCode: 0 - axisCodeX: - axisCodeY: - invertXAxis: 0 - invertYAxis: 0 - - id: 1 description: Mouse Delta Position axisType: 4 inputType: 4 @@ -730,7 +717,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 2 + - id: 1 description: Mouse Scroll Position axisType: 4 inputType: 50 @@ -743,7 +730,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 3 + - id: 2 description: Left Mouse Button axisType: 2 inputType: 7 @@ -756,7 +743,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 + - id: 3 description: Right Mouse Button axisType: 2 inputType: 7 @@ -769,7 +756,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 + - id: 4 description: Mouse Button 2 axisType: 2 inputType: 7 @@ -782,7 +769,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 6 + - id: 5 description: Mouse Button 3 axisType: 2 inputType: 7 @@ -795,7 +782,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 7 + - id: 6 description: Mouse Button 4 axisType: 2 inputType: 7 @@ -808,7 +795,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 8 + - id: 7 description: Mouse Button 5 axisType: 2 inputType: 7 @@ -821,7 +808,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 9 + - id: 8 description: Mouse Button 6 axisType: 2 inputType: 7 @@ -834,6 +821,32 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 + - id: 9 + description: Spatial Pointer + axisType: 7 + inputType: 3 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 10 + description: Spatial Grip + axisType: 7 + inputType: 14 + inputAction: + id: 0 + description: None + axisConstraint: 0 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 - controllerType: reference: Microsoft.MixedReality.Toolkit.Input.UnityInput.UnityTouchController, Microsoft.MixedReality.Toolkit diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs index bc4499a142a..0ce6f22cee7 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs @@ -19,6 +19,7 @@ public class ManualCameraControl private Vector3 lastTrackerToUnityTranslation = Vector3.zero; private Quaternion lastTrackerToUnityRotation = Quaternion.identity; private bool wasLooking = false; + private bool wasCursorVisible = true; public ManualCameraControl(MixedRealityInputSimulationProfile _profile) { @@ -149,6 +150,8 @@ private void OnStartMouseLook() { // if mousebutton is either control, shift or focused UnityEngine.Cursor.lockState = CursorLockMode.Locked; + // save current cursor visibility before hiding it + wasCursorVisible = UnityEngine.Cursor.visible; UnityEngine.Cursor.visible = false; } @@ -166,7 +169,7 @@ private void OnEndMouseLook() { // if mousebutton is either control, shift or focused UnityEngine.Cursor.lockState = CursorLockMode.None; - UnityEngine.Cursor.visible = true; + UnityEngine.Cursor.visible = wasCursorVisible; } // do nothing if (this.MouseLookButton == MouseButton.None) @@ -255,6 +258,8 @@ private void SetWantsMouseJumping(bool wantsJumping) // unlock the cursor if it was locked UnityEngine.Cursor.lockState = CursorLockMode.None; + // save original state of cursor before hiding + wasCursorVisible = UnityEngine.Cursor.visible; // hide the cursor UnityEngine.Cursor.visible = false; @@ -266,8 +271,8 @@ private void SetWantsMouseJumping(bool wantsJumping) UnityEngine.Cursor.lockState = CursorLockMode.Locked; UnityEngine.Cursor.lockState = CursorLockMode.None; - // show the cursor - UnityEngine.Cursor.visible = true; + // restore the cursor + UnityEngine.Cursor.visible = wasCursorVisible; } #if UNITY_EDITOR diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs index 962b9931562..1a546ad0d5d 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs @@ -180,6 +180,8 @@ public SimulatedHandDataProvider(MixedRealityInputSimulationProfile _profile) stateRight = new SimulatedHandState(Handedness.Right); } + private bool isAnyHandSimulated = false; + public void Update() { bool wasLeftVisible = stateLeft.IsVisible; @@ -213,7 +215,13 @@ public void Update() } // Hide cursor if either of the hands is simulated - Cursor.visible = !stateLeft.IsSimulated && !stateRight.IsSimulated; + // only set this if we have a state change, else we might interfere with some other controllers mouse behavior + bool isHandSimulated = stateLeft.IsSimulated || stateRight.IsSimulated; + if (isAnyHandSimulated != isHandSimulated) + { + isAnyHandSimulated = isHandSimulated; + Cursor.visible = !isHandSimulated; + } stateLeft.UpdateVisibility(profile.HandHideTimeout); stateRight.UpdateVisibility(profile.HandHideTimeout); diff --git a/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs b/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs index b6e10a4f56c..04a21b2c3f4 100644 --- a/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs +++ b/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs @@ -22,5 +22,11 @@ public interface IMixedRealityMousePointer : IMixedRealityPointer /// How long should it take before the mouse cursor is hidden? /// float HideTimeout { get; } + + /// + /// Defines the mouse cursor speed. + /// Multiplier that gets applied to the mouse delta before converting to world space. + /// + float Speed { get; } } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs index 6451df515da..82d1ef19beb 100644 --- a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs +++ b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs @@ -28,16 +28,17 @@ public MouseController(TrackingState trackingState, Handedness controllerHandedn /// public override MixedRealityInteractionMapping[] DefaultInteractions { get; } = { - new MixedRealityInteractionMapping(0, "Spatial Mouse Position", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(1, "Mouse Delta Position", AxisType.DualAxis, DeviceInputType.PointerPosition, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(2, "Mouse Scroll Position", AxisType.DualAxis, DeviceInputType.Scroll, ControllerMappingLibrary.AXIS_3), - new MixedRealityInteractionMapping(3, "Left Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse0), - new MixedRealityInteractionMapping(4, "Right Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse1), - new MixedRealityInteractionMapping(5, "Mouse Button 2", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse2), - new MixedRealityInteractionMapping(6, "Mouse Button 3", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse3), - new MixedRealityInteractionMapping(7, "Mouse Button 4", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse4), - new MixedRealityInteractionMapping(8, "Mouse Button 5", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse5), - new MixedRealityInteractionMapping(9, "Mouse Button 6", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse6), + new MixedRealityInteractionMapping(0, "Mouse Delta Position", AxisType.DualAxis, DeviceInputType.PointerPosition, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Mouse Scroll Position", AxisType.DualAxis, DeviceInputType.Scroll, ControllerMappingLibrary.AXIS_3), + new MixedRealityInteractionMapping(2, "Left Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse0), + new MixedRealityInteractionMapping(3, "Right Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse1), + new MixedRealityInteractionMapping(4, "Mouse Button 2", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse2), + new MixedRealityInteractionMapping(5, "Mouse Button 3", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse3), + new MixedRealityInteractionMapping(6, "Mouse Button 4", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse4), + new MixedRealityInteractionMapping(7, "Mouse Button 5", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse5), + new MixedRealityInteractionMapping(8, "Mouse Button 6", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse6), + new MixedRealityInteractionMapping(9, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(10, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), }; /// @@ -47,7 +48,6 @@ public override void SetupDefaultInteractions(Handedness controllerHandedness) } private MixedRealityPose controllerPose = MixedRealityPose.ZeroIdentity; - private Vector2 mouseDelta; /// /// Update controller. @@ -65,32 +65,14 @@ public void Update() return; } - if (InputSource.Pointers[0].BaseCursor != null) - { - controllerPose.Position = InputSource.Pointers[0].BaseCursor.Position; - controllerPose.Rotation = InputSource.Pointers[0].BaseCursor.Rotation; - } - - mouseDelta.x = -UInput.GetAxis("Mouse Y"); - mouseDelta.y = UInput.GetAxis("Mouse X"); - MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, mouseDelta); - MixedRealityToolkit.InputSystem?.RaiseSourcePoseChanged(InputSource, this, controllerPose); - MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, UInput.mouseScrollDelta); - for (int i = 0; i < Interactions.Length; i++) { - if (Interactions[i].InputType == DeviceInputType.SpatialPointer) - { - Interactions[i].PoseData = controllerPose; - - if (Interactions[i].Changed) - { - MixedRealityToolkit.InputSystem?.RaisePoseInputChanged(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction, Interactions[i].PoseData); - } - } - + if (Interactions[i].InputType == DeviceInputType.PointerPosition) { + Vector2 mouseDelta; + mouseDelta.x = -UInput.GetAxis("Mouse Y"); + mouseDelta.y = UInput.GetAxis("Mouse X"); Interactions[i].Vector2Data = mouseDelta; if (Interactions[i].Changed) @@ -99,16 +81,6 @@ public void Update() } } - if (Interactions[i].InputType == DeviceInputType.Scroll) - { - Interactions[i].Vector2Data = UInput.mouseScrollDelta; - - if (Interactions[i].Changed) - { - MixedRealityToolkit.InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction, Interactions[i].Vector2Data); - } - } - if (Interactions[i].AxisType == AxisType.Digital) { var keyButton = UInput.GetKey(Interactions[i].KeyCode); diff --git a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs index 8dd9091dd2c..f3e605879c2 100644 --- a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs +++ b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs @@ -47,6 +47,12 @@ public override void Enable() return; } + if (Controller != null) + { + // device manager has already been set up + return; + } + #if UNITY_EDITOR if (UnityEditor.EditorWindow.focusedWindow != null) { @@ -111,6 +117,7 @@ public override void Disable() if (Controller != null) { inputSystem?.RaiseSourceLost(Controller.InputSource, Controller); + Controller = null; } } } From 5aebeff239f0dec28905d687dedcb40dd17775f1 Mon Sep 17 00:00:00 2001 From: Bernadette Thalhammer Date: Tue, 16 Apr 2019 17:17:23 +0100 Subject: [PATCH 103/183] moved images from all readMeImages to Documentation/Images moved all docs from external to documentation or subfolders of documentation patched up links --- .../Demos/Audio/Scripts/obj.meta | 8 ++++ .../Demos/Gltf/Models/BoomBox/README.md | 2 +- .../Demos/Gltf/Models/Lantern/README.md | 2 +- .../Features/UX/Scripts/Controllers/README.md | 2 +- ...edRealityControllerConfigurationProfile.md | 8 ++-- .../SpatialAwarenessSystemArchitecture.md | 2 +- .../Boundary/BoundarySystemGettingStarted.md | 8 ++-- .../ConfiguringBoundaryVisualization.md | 12 ++--- .../Contributing/BreakingChanges.md | 0 .../Contributing/CONTRIBUTING.md | 6 +-- .../Contributing/CodingGuidelines.md | 0 .../{ => Contributing}/DevDocGuide.md | 2 +- Documentation/{ => Contributing}/DocsToDo.md | 0 .../{ => Contributing}/DocumentationGuide.md | 6 +-- .../Feature_Contribution_Process.md | 0 .../Contributing/Roadmap.md | 0 .../Diagnostics/ConfiguringDiagnostics.md | 4 +- .../DiagnosticsSystemGettingStarted.md | 8 ++-- .../Diagnostics/UsingVisualProfiler.md | 6 +-- Documentation/DownloadingTheMRTK.md | 2 +- .../EyeTracking/EyeTracking_BasicSetup.md | 14 +++--- .../EyeTracking_ExamplesOverview.md | 4 +- Documentation/EyeTracking/EyeTracking_Main.md | 2 +- .../EyeTracking/EyeTracking_Navigation.md | 10 ++-- .../EyeTracking/EyeTracking_Positioning.md | 4 +- .../EyeTracking_TargetSelection.md | 6 +-- .../EyeTracking/EyeTracking_Visualization.md | 2 +- Documentation/GettingStartedWithTheMRTK.md | 24 +++++----- .../Images}/AppBar/MRTK_AppBar_Main.png | Bin .../Images}/AppBar/MRTK_AppBar_Setup1.png | Bin .../Images}/AppBar/MRTK_AppBar_Setup2.png | Bin .../Boundary/BoundarySelectSystemType.png | Bin .../BoundaryVisualizationCeilingSettings.png | Bin .../BoundaryVisualizationFloorSettings.png | Bin .../BoundaryVisualizationGeneralSettings.png | Bin .../BoundaryVisualizationPlayAreaSettings.png | Bin .../Boundary/BoundaryVisualizationProfile.png | Bin ...undaryVisualizationTrackedAreaSettings.png | Bin .../BoundaryVisualizationWallSettings.png | Bin .../Images}/Boundary/MRTKConfig_Boundary.png | Bin .../BoundingBox/MRTK_BoundingBox_Assign.png | Bin .../BoundingBox/MRTK_BoundingBox_Events.png | Bin .../BoundingBox/MRTK_BoundingBox_Examples.png | Bin .../BoundingBox/MRTK_BoundingBox_Main.png | Bin .../MRTK_BoundingBox_ManipulationHandler.png | Bin .../MRTK_BoundingBox_Structure.png | Bin .../Images}/Button/MRTK_Button_Custom1.png | Bin .../Images}/Button/MRTK_Button_Custom2.png | Bin .../Images}/Button/MRTK_Button_Custom3.png | Bin .../MRTK_Button_HowToUse_Interactable.png | Bin .../Button/MRTK_Button_HowTo_Events.png | Bin .../MRTK_Button_HowTo_PressableButton.png | Bin .../Button/MRTK_Button_InteractionStates.png | Bin .../Images}/Button/MRTK_Button_Layout.png | Bin .../Images}/Button/MRTK_Button_Main.png | Bin .../Images}/Button/MRTK_Button_SeeItSayIt.png | Bin .../Images}/Button/MRTK_Button_Speech1.png | Bin .../Images}/Button/MRTK_Button_Speech2.png | Bin .../Images}/Button/MRTK_Button_Speech3.png | Bin .../Images}/Button/MRTK_Button_Structure.png | Bin ...ontrollerConfigurationProfileInspector.png | Bin .../02-ControllerTemplateDefinition.png | Bin .../03-ControllerTemplate.png | Bin .../04-WMRInteractions.png | Bin .../05-OculusTouchInteractions.png | Bin .../06-ViveWandInteractions.png | Bin .../ControllerVisualizerInspector.png | Bin .../DiagnosticsGeneralSettings.png | Bin .../Diagnostics/DiagnosticsProfile.png | Bin .../DiagnosticsProfilerSettings.png | Bin .../DiagnosticsSelectSystemType.png | Bin .../Diagnostics/MRTKConfig_Diagnostics.png | Bin .../Images}/Diagnostics/VisualProfiler.png | Bin .../Diagnostics/VisualProfilerMemory.png | Bin .../VisualProfilerMissedFrames.png | Bin .../EyeTracking/mrtk_et_EyeTrackingTarget.jpg | Bin ...mrtk_et_EyeTrackingTarget_Notification.jpg | Bin .../EyeTracking/mrtk_et_compilation.png | Bin .../Images}/EyeTracking/mrtk_et_gazeinput.jpg | Bin .../Images}/EyeTracking/mrtk_et_heatmaps.png | Bin .../EyeTracking/mrtk_et_nav_panzoom.jpg | Bin .../EyeTracking/mrtk_et_nav_rotate.jpg | Bin .../EyeTracking/mrtk_et_nav_scroll.jpg | Bin .../mrtk_et_nav_scroll_ettarget.jpg | Bin .../EyeTracking/mrtk_et_navigation.png | Bin .../EyeTracking/mrtk_et_placeholder.png | Bin .../EyeTracking/mrtk_et_positioning.png | Bin .../mrtk_et_positioning_slider.png | Bin .../EyeTracking/mrtk_et_rootscene_onload.png | Bin .../EyeTracking/mrtk_et_rootscene_onload2.png | Bin .../EyeTracking/mrtk_et_targetselect.png | Bin .../EyeTracking/mrtk_setup_configprofile.png | Bin .../EyeTracking/mrtk_setup_configure.png | Bin .../mrtk_setup_eyes_dataprovider.png | Bin .../mrtk_setup_eyes_gazeprovider.png | Bin .../mrtk_setup_eyes_gazesettings.png | Bin .../EyeTracking/mrtk_setup_eyes_simulate.png | Bin ...pVisualization_Finger_Cursor_Inspector.png | Bin .../MRTK_FingertipVisualization_Main.png | Bin ...ixed_Reality_Standard_Shader_Inspector.png | Bin ...isualization_Proximity_Light_Inspector.png | Bin .../MRTK_FingertipVisualization_States.png | Bin .../MRTK_Examples_BoundingBox.png | Bin .../MRTK_Examples_Keyboard.png | Bin .../MRTK_Examples_Manipulation.png | Bin .../MRTK_Examples_PressTouch.png | Bin .../MRTK_Examples_Slate.png | Bin .../MRTK_Examples_TMP1.png | Bin .../MRTK_Examples_TMP2.png | Bin .../MRTK_Examples_Unity.png | Bin .../Images}/Input/ControllerInputMapping.png | Bin .../Images}/Input/Diagrams.vsdx | Bin .../Images}/Input/DictationDataProvider.png | Bin .../Images}/Input/DictationDemo.png | Bin .../Images}/Input/DictationHandler.png | Bin .../Images}/Input/EventFlow.png | Bin .../Images}/Input/GestureProfile.png | Bin .../Images}/Input/InputActions.png | Bin .../Images}/Input/PointerProfile.png | Bin .../Input/RegisteredServiceProviders.PNG | Bin .../Images}/Input/SpeechCommands.PNG | Bin ...K_Core_Input_Hands_ArticulatedHandMesh.png | Bin ...K_Core_Input_Hands_HandTrackingProfile.png | Bin ...ore_Input_Hands_JointVisualizerPrefabs.png | Bin ..._InputSimulation_CameraControlSettings.png | Bin ...TK_InputSimulation_HandControlSettings.png | Bin ...TK_InputSimulation_HandGestureSettings.png | Bin ..._InputSimulation_HandPlacementSettings.png | Bin ...K_InputSimulation_HandRotationSettings.png | Bin ...RTK_InputSimulation_HandSimulationMode.png | Bin ...InputSimulation_HandSimulationSettings.png | Bin ...InputSimulation_InputSimulationProfile.png | Bin ...putSimulation_InputSystemDataProviders.png | Bin .../MRTK_InputSimulation_SwitchToGGV.png | Bin .../Images}/Interactable/Buttons.png | Bin .../Images}/Interactable/DefaultStates.png | Bin .../Interactable/DefaultTheme_button.png | Bin .../Interactable/DefaultTheme_values.png | Bin .../Images}/Interactable/Event_audioClip.png | Bin .../Images}/Interactable/Event_hold.png | Bin .../Images}/Interactable/Event_toggle.png | Bin .../Images}/Interactable/Events.png | Bin .../Images}/Interactable/InputFeatures.png | Bin .../Interactable/InputFeatures_short.png | Bin .../Interactable/InteractableExamples.png | Bin .../Interactable/InteractableInspector.png | Bin .../InteractableInspector_basic.png | Bin .../InteractableInspector_basicSteps.png | Bin .../Interactable/InteractableReceiver.png | Bin .../Images}/Interactable/Profile_toggle.png | Bin .../Interactable/Profiles_noTarget.png | Bin .../Interactable/StatesScriptableObject.png | Bin .../Images}/Interactable/Theme.png | Bin .../Images}/MRTK-ControllerDiagram.png | Bin .../Images}/MRTK-HeadsetDefinition.png | Bin .../Images}/MRTK-InputActions.png | Bin .../Images}/MRTK-NameSpaceExample.png | Bin .../Images}/MRTK-vNext-HLA.png | Bin .../Images}/MRTK170802_Short_17.png | Bin .../Images}/MRTK170802_Short_18.png | Bin .../Images}/MRTK170802_Short_19.png | Bin .../Images}/MRTK170802_Short_20.png | Bin .../Images}/MRTK_AssetImportDialog.png | Bin .../Images}/MRTK_ConfigureDialog.png | Bin .../Images}/MRTK_ConfigureScene.png | Bin .../Images}/MRTK_ConfiguredHierarchy.png | Bin .../MRTK_CopyCreateConfigurationOptions.png | Bin .../Images}/MRTK_CopyProfileOptions.png | Bin .../Images}/MRTK_Examples.png | Bin .../Images}/MRTK_Logo_Rev.png | Bin .../Images}/MRTK_SceneSetup.png | Bin .../MRTK_SelectConfigurationDialog.png | Bin .../Images}/MRTK_UnitySetupPrompt.png | Bin .../MRTK_ManipulationHandler_Howto.png | Bin .../MRTK_ManipulationHandler_Structure.png | Bin .../MRTK_ManipulationHandler_TwoHanded.jpg | Bin .../MRTK_Manipulation_Main.png | Bin .../MRTK_ActiveConfiguration.png | Bin .../MRTK_BoundaryVisualizationProfile.png | Bin .../MRTK_CameraProfile.png | Bin .../MRTK_ControllerMappingProfile.png | Bin .../MRTK_ControllerVisualizationProfile.png | Bin .../MRTK_DiagnosticsProfile.png | Bin .../MRTK_DiagnosticsSystemSelection.png | Bin .../MRTK_ExperienceSettings.png | Bin .../MRTK_GesturesProfile.png | Bin .../MRTK_InputActionRulesProfile.png | Bin .../MRTK_InputActionsProfile.png | Bin .../MRTK_InputPointerProfile.png | Bin .../MRTK_InputSystemProfile.png | Bin .../MRTK_InputSystemSelection.png | Bin ...MixedRealityToolkitConfigurationScreen.png | Bin .../MRTK_OculusTouchConfigScreen.png | Bin ...MRTK_RegisteredServiceProfidersProfile.png | Bin .../MRTK_SpatialAwarenessProfile.png | Bin .../MRTK_SpatialAwarenessSystemSelection.png | Bin .../MRTK_SpeechCommandsProfile.png | Bin .../MRTK_TeleportationSystemSelection.png | Bin .../MRTK_ObjectCollection_3DObjects.jpg | Bin .../MRTK_ObjectCollection_ExampleScene1.jpg | Bin .../MRTK_ObjectCollection_Layout_2DImages.jpg | Bin .../MRTK_ObjectCollection_Main.png | Bin .../MRTK_ObjectCollection_Types.jpg | Bin .../MRTK_ObjectCollection_Unity.jpg | Bin .../Images}/OpenXR-HLA.jpg | Bin .../Packaging/AccessingViaInterfaces.png | Bin .../Images}/Packaging/MRTKExperimental.png | Bin .../Images}/Packaging/MRTKExtensions.png | Bin .../Images}/Packaging/MRTKFoundation.png | Bin .../Images}/Pointers/MRTK_GGVPointer_HL1.jpg | Bin .../Images}/Pointers/MRTK_GGVPointer_HL2.jpg | Bin .../Images}/Pointers/MRTK_GrabPointer.jpg | Bin .../Images}/Pointers/MRTK_MousePointer.jpg | Bin .../Images}/Pointers/MRTK_PointerProfile.jpg | Bin .../Images}/Pointers/MRTK_Pointer_Main.png | Bin .../Images}/Pointers/MRTK_Pointers_Line.png | Bin .../Pointers/MRTK_Pointers_Parabolic.png | Bin .../Images}/Pointers/MRTK_PokePointer.jpg | Bin .../Images}/Slate/MRTK_Slate_Box.png | Bin .../Images}/Slate/MRTK_Slate_Buttons.png | Bin .../Images}/Slate/MRTK_Slate_Main.png | Bin .../Images}/Slate/MRTK_Slate_Scale.png | Bin .../Images}/Slate/MRTK_Slate_Scripts.png | Bin .../Images}/Slate/MRTK_Slate_Structure.png | Bin .../Images}/Solver/MRTK_Solver_Main.png | Bin .../Images}/Solver/MRTK_Solver_Orbital.png | Bin .../MRTKConfig_SpatialAwareness.png | Bin .../MRTK_SpatialAwareness_Main.png | Bin .../MeshObserverDisplaySettings.png | Bin .../MeshObserverGeneralSettings.png | Bin .../MeshObserverLevelOfDetailSettings.png | Bin .../MeshObserverPhysicsSettings.png | Bin .../SpatialAwarenessMeshObserverProfile.png | Bin .../SpatialAwarenessProfile.png | Bin .../SpatialAwarenessSelectObserver.png | Bin .../SpatialAwarenessSelectSystemType.png | Bin .../SpatialAwarenessSystemArchitecture.png | Bin .../MRTK_SystemKeyboard_Main.png | Bin .../Images}/Tooltip/MRTK_Tooltip_Main.png | Bin .../Images}/Unity_ImportAssetOption.png | Bin .../Images}/favicon.ico | Bin .../MRTK_GettingStarted_TMPro.png | Bin .../Images}/gltf/boombox_screenshot.jpg | Bin .../Images}/gltf/lantern_screenshot.jpg | Bin .../Images}/icon_academy.png | Bin .../Images}/icon_community.png | Bin .../Images}/icon_design.png | Bin .../Images}/icon_development.png | Bin .../Images}/issue_selection_prompt.png | Bin .../mrdevcenter/icon-azurespatialanchors.png | Bin .../mrdevcenter/icon-azurespeechservices.png | Bin .../mrdevcenter/icon-azurevisionservices.png | Bin .../Images}/mrdevcenter/icon-design.png | Bin .../Images}/mrdevcenter/icon-develop.png | Bin .../Images}/mrdevcenter/icon-discover.png | Bin .../Images}/mrdevcenter/icon-distribute.png | Bin .../Images}/mrt_logo.png | Bin .../Images}/mrt_logo_icon.png | Bin Documentation/Input/Controllers.md | 2 +- Documentation/Input/Dictation.md | 6 +-- Documentation/Input/Gestures.md | 2 +- Documentation/Input/InputActions.md | 2 +- Documentation/Input/InputProviders.md | 2 +- Documentation/Input/Overview.md | 2 +- Documentation/Input/Pointers.md | 2 +- Documentation/Input/Speech.md | 2 +- .../InputSimulation/InputSimulationService.md | 38 +++++++-------- Documentation/InputSystem/HandTracking.md | 12 ++--- NOTICE.md => Documentation/Legal/NOTICE.md | 0 MRTK-vNext.md => Documentation/MRTK-vNext.md | 4 +- .../MixedRealityConfigurationGuide.md | 44 +++++++++--------- .../MixedRealityServices.md | 0 .../Packaging/MRTK_Modularization.md | 2 +- Documentation/Packaging/MRTK_Packages.md | 6 +-- Documentation/README_AppBar.md | 6 +-- Documentation/README_BoundingBox.md | 12 ++--- Documentation/README_Button.md | 26 +++++------ .../README_FingertipVisualization.md | 10 ++-- .../README_HandInteractionExamples.md | 16 +++---- Documentation/README_Interactable.md | 30 ++++++------ Documentation/README_ManipulationHandler.md | 8 ++-- Documentation/README_ObjectCollection.md | 12 ++--- Documentation/README_Pointers.md | 18 +++---- Documentation/README_Slate.md | 12 ++--- Documentation/README_Solver.md | 4 +- Documentation/README_SystemKeyboard.md | 2 +- Documentation/README_Tooltip.md | 4 +- ...ConfiguringSpatialAwarenessMeshObserver.md | 8 ++-- .../SpatialAwarenessGettingStarted.md | 14 +++--- .../howto_migrate.md | 0 Documentation/toc.yml | 20 ++++---- README.md | 20 ++++---- docfx.json | 2 +- 293 files changed, 251 insertions(+), 243 deletions(-) create mode 100644 Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta rename BreakingChanges.md => Documentation/Contributing/BreakingChanges.md (100%) rename CONTRIBUTING.md => Documentation/Contributing/CONTRIBUTING.md (97%) rename CodingGuidelines.md => Documentation/Contributing/CodingGuidelines.md (100%) rename Documentation/{ => Contributing}/DevDocGuide.md (99%) rename Documentation/{ => Contributing}/DocsToDo.md (100%) rename Documentation/{ => Contributing}/DocumentationGuide.md (98%) rename Feature_Contribution_Process.md => Documentation/Contributing/Feature_Contribution_Process.md (100%) rename Roadmap.md => Documentation/Contributing/Roadmap.md (100%) rename {External/ReadMeImages => Documentation/Images}/AppBar/MRTK_AppBar_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/AppBar/MRTK_AppBar_Setup1.png (100%) rename {External/ReadMeImages => Documentation/Images}/AppBar/MRTK_AppBar_Setup2.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundarySelectSystemType.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationCeilingSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationFloorSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationGeneralSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationPlayAreaSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationTrackedAreaSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/BoundaryVisualizationWallSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Boundary/MRTKConfig_Boundary.png (100%) rename {External/ReadMeImages => Documentation/Images}/BoundingBox/MRTK_BoundingBox_Assign.png (100%) rename {External/ReadMeImages => Documentation/Images}/BoundingBox/MRTK_BoundingBox_Events.png (100%) rename {External/ReadMeImages => Documentation/Images}/BoundingBox/MRTK_BoundingBox_Examples.png (100%) rename {External/ReadMeImages => Documentation/Images}/BoundingBox/MRTK_BoundingBox_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/BoundingBox/MRTK_BoundingBox_ManipulationHandler.png (100%) rename {External/ReadMeImages => Documentation/Images}/BoundingBox/MRTK_BoundingBox_Structure.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Custom1.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Custom2.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Custom3.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_HowToUse_Interactable.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_HowTo_Events.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_HowTo_PressableButton.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_InteractionStates.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Layout.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_SeeItSayIt.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Speech1.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Speech2.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Speech3.png (100%) rename {External/ReadMeImages => Documentation/Images}/Button/MRTK_Button_Structure.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerConfigurationProfile/03-ControllerTemplate.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerConfigurationProfile/04-WMRInteractions.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerConfigurationProfile/05-OculusTouchInteractions.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerConfigurationProfile/06-ViveWandInteractions.png (100%) rename {External/ReadMeImages => Documentation/Images}/ControllerVisualizer/ControllerVisualizerInspector.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/DiagnosticsGeneralSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/DiagnosticsProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/DiagnosticsProfilerSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/DiagnosticsSelectSystemType.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/MRTKConfig_Diagnostics.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/VisualProfiler.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/VisualProfilerMemory.png (100%) rename {External/ReadMeImages => Documentation/Images}/Diagnostics/VisualProfilerMissedFrames.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_EyeTrackingTarget.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_EyeTrackingTarget_Notification.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_compilation.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_gazeinput.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_heatmaps.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_nav_panzoom.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_nav_rotate.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_nav_scroll.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_navigation.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_placeholder.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_positioning.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_positioning_slider.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_rootscene_onload.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_rootscene_onload2.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_et_targetselect.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_setup_configprofile.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_setup_configure.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_setup_eyes_dataprovider.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_setup_eyes_gazeprovider.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_setup_eyes_gazesettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/EyeTracking/mrtk_setup_eyes_simulate.png (100%) rename {External/ReadMeImages => Documentation/Images}/Fingertip/MRTK_FingertipVisualization_Finger_Cursor_Inspector.png (100%) rename {External/ReadMeImages => Documentation/Images}/Fingertip/MRTK_FingertipVisualization_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Fingertip/MRTK_FingertipVisualization_Mixed_Reality_Standard_Shader_Inspector.png (100%) rename {External/ReadMeImages => Documentation/Images}/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png (100%) rename {External/ReadMeImages => Documentation/Images}/Fingertip/MRTK_FingertipVisualization_States.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_BoundingBox.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_Keyboard.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_Manipulation.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_PressTouch.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_Slate.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_TMP1.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_TMP2.png (100%) rename {External/ReadMeImages => Documentation/Images}/HandInteractionExamples/MRTK_Examples_Unity.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/ControllerInputMapping.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/Diagrams.vsdx (100%) rename {External/ReadMeImages => Documentation/Images}/Input/DictationDataProvider.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/DictationDemo.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/DictationHandler.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/EventFlow.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/GestureProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/InputActions.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/PointerProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/Input/RegisteredServiceProviders.PNG (100%) rename {External/ReadMeImages => Documentation/Images}/Input/SpeechCommands.PNG (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_Core_Input_Hands_ArticulatedHandMesh.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_Core_Input_Hands_HandTrackingProfile.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_Core_Input_Hands_JointVisualizerPrefabs.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_CameraControlSettings.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_HandControlSettings.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_HandGestureSettings.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_HandPlacementSettings.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_HandRotationSettings.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_HandSimulationMode.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_HandSimulationSettings.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_InputSimulationProfile.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_InputSystemDataProviders.png (100%) rename {External/Documentation/Images => Documentation/Images/InputSimulation}/MRTK_InputSimulation_SwitchToGGV.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Buttons.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/DefaultStates.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/DefaultTheme_button.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/DefaultTheme_values.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Event_audioClip.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Event_hold.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Event_toggle.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Events.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InputFeatures.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InputFeatures_short.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InteractableExamples.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InteractableInspector.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InteractableInspector_basic.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InteractableInspector_basicSteps.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/InteractableReceiver.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Profile_toggle.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Profiles_noTarget.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/StatesScriptableObject.png (100%) rename {External/ReadMeImages => Documentation/Images}/Interactable/Theme.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK-ControllerDiagram.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK-HeadsetDefinition.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK-InputActions.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK-NameSpaceExample.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK-vNext-HLA.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK170802_Short_17.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK170802_Short_18.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK170802_Short_19.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK170802_Short_20.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_AssetImportDialog.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_ConfigureDialog.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_ConfigureScene.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_ConfiguredHierarchy.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_CopyCreateConfigurationOptions.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_CopyProfileOptions.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_Examples.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_Logo_Rev.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_SceneSetup.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_SelectConfigurationDialog.png (100%) rename {External/ReadMeImages => Documentation/Images}/MRTK_UnitySetupPrompt.png (100%) rename {External/ReadMeImages => Documentation/Images}/ManipulationHandler/MRTK_ManipulationHandler_Howto.png (100%) rename {External/ReadMeImages => Documentation/Images}/ManipulationHandler/MRTK_ManipulationHandler_Structure.png (100%) rename {External/ReadMeImages => Documentation/Images}/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/ManipulationHandler/MRTK_Manipulation_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png (100%) rename {External/ReadMeImages => Documentation/Images}/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/ObjectCollection/MRTK_ObjectCollection_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/ObjectCollection/MRTK_ObjectCollection_Types.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/ObjectCollection/MRTK_ObjectCollection_Unity.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/OpenXR-HLA.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Packaging/AccessingViaInterfaces.png (100%) rename {External/ReadMeImages => Documentation/Images}/Packaging/MRTKExperimental.png (100%) rename {External/ReadMeImages => Documentation/Images}/Packaging/MRTKExtensions.png (100%) rename {External/ReadMeImages => Documentation/Images}/Packaging/MRTKFoundation.png (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_GGVPointer_HL1.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_GGVPointer_HL2.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_GrabPointer.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_MousePointer.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_PointerProfile.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_Pointer_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_Pointers_Line.png (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_Pointers_Parabolic.png (100%) rename {External/ReadMeImages => Documentation/Images}/Pointers/MRTK_PokePointer.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/Slate/MRTK_Slate_Box.png (100%) rename {External/ReadMeImages => Documentation/Images}/Slate/MRTK_Slate_Buttons.png (100%) rename {External/ReadMeImages => Documentation/Images}/Slate/MRTK_Slate_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Slate/MRTK_Slate_Scale.png (100%) rename {External/ReadMeImages => Documentation/Images}/Slate/MRTK_Slate_Scripts.png (100%) rename {External/ReadMeImages => Documentation/Images}/Slate/MRTK_Slate_Structure.png (100%) rename {External/ReadMeImages => Documentation/Images}/Solver/MRTK_Solver_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Solver/MRTK_Solver_Orbital.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/MRTKConfig_SpatialAwareness.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/MRTK_SpatialAwareness_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/MeshObserverDisplaySettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/MeshObserverGeneralSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/MeshObserverLevelOfDetailSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/MeshObserverPhysicsSettings.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/SpatialAwarenessProfile.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/SpatialAwarenessSelectObserver.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/SpatialAwarenessSelectSystemType.png (100%) rename {External/ReadMeImages => Documentation/Images}/SpatialAwareness/SpatialAwarenessSystemArchitecture.png (100%) rename {External/ReadMeImages => Documentation/Images}/SystemKeyboard/MRTK_SystemKeyboard_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Tooltip/MRTK_Tooltip_Main.png (100%) rename {External/ReadMeImages => Documentation/Images}/Unity_ImportAssetOption.png (100%) rename {External/ReadMeImages => Documentation/Images}/favicon.ico (100%) rename {External/Documentation/Images => Documentation/Images/getting_started}/MRTK_GettingStarted_TMPro.png (100%) rename {External/ReadMeImages => Documentation/Images}/gltf/boombox_screenshot.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/gltf/lantern_screenshot.jpg (100%) rename {External/ReadMeImages => Documentation/Images}/icon_academy.png (100%) rename {External/ReadMeImages => Documentation/Images}/icon_community.png (100%) rename {External/ReadMeImages => Documentation/Images}/icon_design.png (100%) rename {External/ReadMeImages => Documentation/Images}/icon_development.png (100%) rename {External/ReadMeImages => Documentation/Images}/issue_selection_prompt.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-azurespatialanchors.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-azurespeechservices.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-azurevisionservices.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-design.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-develop.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-discover.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrdevcenter/icon-distribute.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrt_logo.png (100%) rename {External/ReadMeImages => Documentation/Images}/mrt_logo_icon.png (100%) rename NOTICE.md => Documentation/Legal/NOTICE.md (100%) rename MRTK-vNext.md => Documentation/MRTK-vNext.md (98%) rename {External/Documentation => Documentation}/MixedRealityServices.md (100%) rename External/HowTo/README.md => Documentation/howto_migrate.md (100%) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta b/Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta new file mode 100644 index 00000000000..34710595a9e --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4fa88bc39f3050b43b8578ff8f19e9b7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/BoomBox/README.md b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/BoomBox/README.md index 92fac0249fc..9ea9d900a43 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/BoomBox/README.md +++ b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/BoomBox/README.md @@ -1,7 +1,7 @@ # Boom Box ## Screenshot -![screenshot](../../../../../../External/ReadMeImages/gltf/boombox_screenshot.jpg) +![screenshot](../../../../../../Documentation/Images/gltf/boombox_screenshot.jpg) ## License Information diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/Lantern/README.md b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/Lantern/README.md index 7c467b30a62..9eba20cb432 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/Lantern/README.md +++ b/Assets/MixedRealityToolkit.Examples/Demos/Gltf/Models/Lantern/README.md @@ -1,7 +1,7 @@ # Lantern ## Screenshot -![screenshot](../../../../../../External/ReadMeImages/gltf/lantern_screenshot.jpg) +![screenshot](../../../../../../Documentation/Images/gltf/lantern_screenshot.jpg) ## License Information diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Controllers/README.md b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Controllers/README.md index bc3ee938aa3..98702824634 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Controllers/README.md +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Controllers/README.md @@ -18,7 +18,7 @@ The framework is flexible enough to allow you to provide offsets to rotate and r Using the visualizer is extremely simple, just add it to an existing GameObject in your scene and provided you have configured your controller correctly, they will simply be instantiated into the scene at runtime when controllers are detected. -![](../../../../../../External/ReadMeImages/ControllerVisualizer/ControllerVisualizerInspector.png) +![](../../../../../../Documentation/Images/ControllerVisualizer/ControllerVisualizerInspector.png) Check the documentation on configuring Controller Profiles for more details: diff --git a/Assets/MixedRealityToolkit.SDK/Profiles/MixedRealityControllerConfigurationProfile.md b/Assets/MixedRealityToolkit.SDK/Profiles/MixedRealityControllerConfigurationProfile.md index 9eeafb67643..db13b08f533 100644 --- a/Assets/MixedRealityToolkit.SDK/Profiles/MixedRealityControllerConfigurationProfile.md +++ b/Assets/MixedRealityToolkit.SDK/Profiles/MixedRealityControllerConfigurationProfile.md @@ -2,7 +2,7 @@ When you need to use input controllers for your Mixed Reality project, they are registered and configured centrally within the Controller configuration profile as you can see here: -![](../../../External/ReadMeImages/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png) +![](../../../Documentation/Images/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png) This enables you to very quickly define which SDK's / controllers you want to support in your project and configure how each are intended to work. @@ -10,7 +10,7 @@ The configuration is broken down in to several key components, as detailed below ## Main Controller Template definition --- -![](../../../External/ReadMeImages/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png) +![](../../../Documentation/Images/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png) In the first section of the configuration, the options are detailed as follows: @@ -34,7 +34,7 @@ This enables you to add a new controller definition (detailed below) to the prof ## Controller Template --- -![](../../../External/ReadMeImages/ControllerConfigurationProfile/03-ControllerTemplate.png) +![](../../../Documentation/Images/ControllerConfigurationProfile/03-ControllerTemplate.png) Each controller template allows you to configure any of the supported controllers for the various SDK's that have been enabled through the Mixed Reality Toolkit. Each controller is added by SDK and the prevailing hand. @@ -84,7 +84,7 @@ These are different for each controller type, as shown below: | Motion Controller | Oculus Touch | Vive Wand | |---|---|---| -|![](../../../External/ReadMeImages/ControllerConfigurationProfile/04-WMRInteractions.png)|![](../../../External/ReadMeImages/ControllerConfigurationProfile/05-OculusTouchInteractions.png)|![](../../../External/ReadMeImages/ControllerConfigurationProfile/06-ViveWandInteractions.png)| +|![](../../../Documentation/Images/ControllerConfigurationProfile/04-WMRInteractions.png)|![](../../../Documentation/Images/ControllerConfigurationProfile/05-OculusTouchInteractions.png)|![](../../../Documentation/Images/ControllerConfigurationProfile/06-ViveWandInteractions.png)| > In the future custom mappings may become available, for now they are defined per the devices own specification according to the input definitions set out by Unity diff --git a/Documentation/Architecture/SpatialAwareness/SpatialAwarenessSystemArchitecture.md b/Documentation/Architecture/SpatialAwareness/SpatialAwarenessSystemArchitecture.md index a3abde72728..55751292d78 100644 --- a/Documentation/Architecture/SpatialAwareness/SpatialAwarenessSystemArchitecture.md +++ b/Documentation/Architecture/SpatialAwareness/SpatialAwarenessSystemArchitecture.md @@ -6,7 +6,7 @@ It is expected that many platforms may not support support one or more spatial a Each interface defined will implement one or more Properties, Methods and/or Events (PMEs) that can be accessed by application code. - + ## System diff --git a/Documentation/Boundary/BoundarySystemGettingStarted.md b/Documentation/Boundary/BoundarySystemGettingStarted.md index 3541d0b4aaa..bf04aaf365e 100644 --- a/Documentation/Boundary/BoundarySystemGettingStarted.md +++ b/Documentation/Boundary/BoundarySystemGettingStarted.md @@ -31,15 +31,15 @@ The boundary system is managed by the MixedRealityToolkit object (or another 1. Select the MixedRealityToolkit object in the scene hierarchy. -![MRTK Configured Scene Hierarchy](../../External/ReadMeImages/MRTK_ConfiguredHierarchy.png) +![MRTK Configured Scene Hierarchy](../../Documentation/Images/MRTK_ConfiguredHierarchy.png) 2. Navigate the Inspector panel to the Boundary System section and check Enable -![Enable the Boundary System](../../External/ReadMeImages/Boundary/MRTKConfig_Boundary.png) +![Enable the Boundary System](../../Documentation/Images/Boundary/MRTKConfig_Boundary.png) 3. Select the Boundary System implementation -![Select the Boundarys System Implementation](../../External/ReadMeImages/Boundary/BoundarySelectSystemType.png) +![Select the Boundarys System Implementation](../../Documentation/Images/Boundary/BoundarySelectSystemType.png) > Users of the default profile (DefaultMixedRealityToolkitConfigurationProfile) will have the boundary system pre-configured to use the MixedRealityBoundarySystem from the Mixed Reality Toolkit Boundary System Service package. @@ -48,7 +48,7 @@ Toolkit Boundary System Service package. The boundary system uses a configuration profile to specify which boundary components are to be displayed and to configure their appearance. Please see [Configuring the Boundary Visualization](ConfiguringBoundaryVisualization.md) for more information pertaining to the available visualization options. -![Boundary Visualization Options](../../External/ReadMeImages/Boundary/BoundaryVisualizationProfile.png) +![Boundary Visualization Options](../../Documentation/Images/Boundary/BoundaryVisualizationProfile.png) > Users of the default profile (DefaultMixedRealitBoundarySystemProfile) will have the boundary system pre-configured to display a floor plane, the play area and the tracked area. diff --git a/Documentation/Boundary/ConfiguringBoundaryVisualization.md b/Documentation/Boundary/ConfiguringBoundaryVisualization.md index c20e939e52d..4d56a2930e0 100644 --- a/Documentation/Boundary/ConfiguringBoundaryVisualization.md +++ b/Documentation/Boundary/ConfiguringBoundaryVisualization.md @@ -13,14 +13,14 @@ Boundary visualizations are attached to the Mixed Reality Playspace object in th ## General Settings -![Boundary Visualization General Settings](../../External/ReadMeImages/Boundary/BoundaryVisualizationGeneralSettings.png) +![Boundary Visualization General Settings](../../Documentation/Images/Boundary/BoundaryVisualizationGeneralSettings.png) ### Boundary Height The boundary height indicates the distance above the floor plane at which the boundary ceiling should be rendered. The default value is 3 meters. ## Floor Settings -![Boundary Visualization Floor Settings](../../External/ReadMeImages/Boundary/BoundaryVisualizationFloorSettings.png) +![Boundary Visualization Floor Settings](../../Documentation/Images/Boundary/BoundaryVisualizationFloorSettings.png) ### Show @@ -40,7 +40,7 @@ The layer on which the floor plane should be set. The default value is the Defau ## Play Area Settings -![Boundary Visualization Play Area Settings](../../External/ReadMeImages/Boundary/BoundaryVisualizationPlayAreaSettings.png) +![Boundary Visualization Play Area Settings](../../Documentation/Images/Boundary/BoundaryVisualizationPlayAreaSettings.png) ### Show @@ -56,7 +56,7 @@ The layer on which the play area should be set. The default value is the Ignore ## Tracked Area Settings -![Boundary Visualization Tracked Area Settings](../../External/ReadMeImages/Boundary/BoundaryVisualizationTrackedAreaSettings.png) +![Boundary Visualization Tracked Area Settings](../../Documentation/Images/Boundary/BoundaryVisualizationTrackedAreaSettings.png) ### Show @@ -72,7 +72,7 @@ The layer on which the tracked area should be sets. The default value is the Ign ## Boundary Wall Settings -![Boundary Visualization Boundary Wall Settings](../../External/ReadMeImages/Boundary/BoundaryVisualizationWallSettings.png) +![Boundary Visualization Boundary Wall Settings](../../Documentation/Images/Boundary/BoundaryVisualizationWallSettings.png) ### Show @@ -90,7 +90,7 @@ The layer on which the boundary walls should be set. The default value is the Ig ## Boundary Ceiling Settings -![Boundary Visualization Boundary Ceiling Settings](../../External/ReadMeImages/Boundary/BoundaryVisualizationCeilingSettings.png) +![Boundary Visualization Boundary Ceiling Settings](../../Documentation/Images/Boundary/BoundaryVisualizationCeilingSettings.png) ### Show diff --git a/BreakingChanges.md b/Documentation/Contributing/BreakingChanges.md similarity index 100% rename from BreakingChanges.md rename to Documentation/Contributing/BreakingChanges.md diff --git a/CONTRIBUTING.md b/Documentation/Contributing/CONTRIBUTING.md similarity index 97% rename from CONTRIBUTING.md rename to Documentation/Contributing/CONTRIBUTING.md index a4d725c3d35..7b93cb1141e 100644 --- a/CONTRIBUTING.md +++ b/Documentation/Contributing/CONTRIBUTING.md @@ -11,7 +11,7 @@ If you have any questions, please reach out on the [HoloLens forums](https://for # Submission process We provide several paths to enable developers to contribute to the Mixed Reality Toolkit, all starting with [creating a new Issue](https://github.com/Microsoft/MixedRealityToolkit-Unity/issues/new/choose) -![](External/ReadMeImages/issue_selection_prompt.png) +![](../Images/issue_selection_prompt.png) From here you can either: @@ -43,11 +43,11 @@ To get started, simply follow these steps 1. Fork the repository. Click on the "Fork" button on the top right of the page and follow the flow. 2. Create a branch in your fork (off of the [mrtk_development](https://github.com/microsoft/mixedrealitytoolkit-unity/tree/mrtk_development) branch) to make it easier for you to isolate your fork. > for the legacy HoloToolkit use the [htk_development](https://github.com/Microsoft/MixedRealityToolkit-Unity/tree/htk_development) branch -3. Instructions for getting the project building and running the tests are in the [README](README.md). +3. Instructions for getting the project building and running the tests are in the [README](../../README.md). 4. Make **small and frequent** commits that include tests which could be a unity scene showing usage of your feature. 5. Make sure that all the tests continue to pass. 6. Follow the [Coding Guidelines](CodingGuidelines.md). -7. Ensure the code and feature(s) are documented as described in the [Documentation Guidelines](Documentation/DocumentationGuide.md). +7. Ensure the code and feature(s) are documented as described in the [Documentation Guidelines](DocumentationGuide.md). 8. Ensure the code works as intended on all [platforms](#supported-platforms). - For Windows UWP projects, your code must be [WACK compliant](https://developer.microsoft.com/en-us/windows/develop/app-certification-kit). To do this, generate a Visual Studio solution, right click on project; Store -> Create App Packages. Follow the prompts and run WACK tests. Make sure they all succeed. 9. Update the [documentation](#contributing) with additional information as needed. diff --git a/CodingGuidelines.md b/Documentation/Contributing/CodingGuidelines.md similarity index 100% rename from CodingGuidelines.md rename to Documentation/Contributing/CodingGuidelines.md diff --git a/Documentation/DevDocGuide.md b/Documentation/Contributing/DevDocGuide.md similarity index 99% rename from Documentation/DevDocGuide.md rename to Documentation/Contributing/DevDocGuide.md index ae20599bc69..7bfcfaaa500 100644 --- a/Documentation/DevDocGuide.md +++ b/Documentation/Contributing/DevDocGuide.md @@ -77,7 +77,7 @@ Currently there's a definition for the following resource types: ResourceType Path -Images External/ReadMeImages/ +Images Documentation/Images/ diff --git a/Documentation/DocsToDo.md b/Documentation/Contributing/DocsToDo.md similarity index 100% rename from Documentation/DocsToDo.md rename to Documentation/Contributing/DocsToDo.md diff --git a/Documentation/DocumentationGuide.md b/Documentation/Contributing/DocumentationGuide.md similarity index 98% rename from Documentation/DocumentationGuide.md rename to Documentation/Contributing/DocumentationGuide.md index b1f8be4f9e5..d7fadc0c16e 100644 --- a/Documentation/DocumentationGuide.md +++ b/Documentation/Contributing/DocumentationGuide.md @@ -1,4 +1,4 @@ - + # Documentation guidelines @@ -93,7 +93,7 @@ General rule of thumb: Try to **sound professional**. That usually means to avoi * Use **Sentence case for headlines**. Ie. capitalize the first letter and names, but nothing else. * Use regular English for everything else. That means **do not capitalize arbitrary words**, even if they hold a special meaning in that context. Prefer *italic text*, if you really want to highlight certain words, [see below](#emphasis-and-highlighting). -* When a link is embedded in a sentence (which is the preferred method), the standard chapter name always uses capital letters, thus breaking the rule of no arbitrary capitalization inside text. Therefore use a custom link name to fix the capitalization. As an example, here is a link to the [bounding box](README_BoundingBox.md) documentation. +* When a link is embedded in a sentence (which is the preferred method), the standard chapter name always uses capital letters, thus breaking the rule of no arbitrary capitalization inside text. Therefore use a custom link name to fix the capitalization. As an example, here is a link to the [bounding box](../README_BoundingBox.md) documentation. * Do capitalize names, such as *Unity*. * Do NOT capitalize "editor" when writing *Unity editor*. @@ -287,7 +287,7 @@ Performance notes are recommended for CPU and/or GPU heavy components and **may* ## Breaking changes -Breaking changes documentation is to consist of a top level [file](../BreakingChanges.md) which links to each feature area's individual BreakingChanges.md. +Breaking changes documentation is to consist of a top level [file](BreakingChanges.md) which links to each feature area's individual BreakingChanges.md. The feature area BreakingChanges.md files are to contain the list of all known breaking changes for a given release **as well as** the history of breaking changes from past releases. diff --git a/Feature_Contribution_Process.md b/Documentation/Contributing/Feature_Contribution_Process.md similarity index 100% rename from Feature_Contribution_Process.md rename to Documentation/Contributing/Feature_Contribution_Process.md diff --git a/Roadmap.md b/Documentation/Contributing/Roadmap.md similarity index 100% rename from Roadmap.md rename to Documentation/Contributing/Roadmap.md diff --git a/Documentation/Diagnostics/ConfiguringDiagnostics.md b/Documentation/Diagnostics/ConfiguringDiagnostics.md index 9706773946f..3845a5302b4 100644 --- a/Documentation/Diagnostics/ConfiguringDiagnostics.md +++ b/Documentation/Diagnostics/ConfiguringDiagnostics.md @@ -6,7 +6,7 @@ The diagnostics system profile provides options for configuring: ## General Settings -![Diagnostics General Settings](../../External/ReadMeImages/Diagnostics/DiagnosticsGeneralSettings.png) +![Diagnostics General Settings](../../Documentation/Images/Diagnostics/DiagnosticsGeneralSettings.png) ### Show Diagnostics @@ -16,7 +16,7 @@ Indicates whether or not the diagnostics system is to display the configured dia ## Profiler Settings -![Diagnostics Profiler Settings](../../External/ReadMeImages/Diagnostics/DiagnosticsProfilerSettings.png) +![Diagnostics Profiler Settings](../../Documentation/Images/Diagnostics/DiagnosticsProfilerSettings.png) ### Show Profiler diff --git a/Documentation/Diagnostics/DiagnosticsSystemGettingStarted.md b/Documentation/Diagnostics/DiagnosticsSystemGettingStarted.md index 08fec3b06c9..c01e8c5b3d4 100644 --- a/Documentation/Diagnostics/DiagnosticsSystemGettingStarted.md +++ b/Documentation/Diagnostics/DiagnosticsSystemGettingStarted.md @@ -24,15 +24,15 @@ The diagnostics system is managed by the MixedRealityToolkit object (or another 1. Select the MixedRealityToolkit object in the scene hierarchy. -![MRTK Configured Scene Hierarchy](../../External/ReadMeImages/MRTK_ConfiguredHierarchy.png) +![MRTK Configured Scene Hierarchy](../../Documentation/Images/MRTK_ConfiguredHierarchy.png) 2. Navigate the Inspector panel to the Diagnostics System section and check Enable -![Enable the Diagnostics System](../../External/ReadMeImages/Diagnostics/MRTKConfig_Diagnostics.png) +![Enable the Diagnostics System](../../Documentation/Images/Diagnostics/MRTKConfig_Diagnostics.png) 3. Select the Diagnostics System implementation -![Select the Diagnostics System Implementation](../../External/ReadMeImages/Diagnostics/DiagnosticsSelectSystemType.png) +![Select the Diagnostics System Implementation](../../Documentation/Images/Diagnostics/DiagnosticsSelectSystemType.png) > Users of the default profile (DefaultMixedRealityToolkitConfigurationProfile) will have the diagnostics system pre-configured to use the MixedRealityDiagnosticsSystem object. @@ -43,7 +43,7 @@ The diagnostics system uses a configuration profile to specify which components and to configure their settings. Please see [Configuring the Diagnostics System](ConfiguringDiagnostics.md) for more information pertaining to the available component settings. -![Diagnostics Options](../../External/ReadMeImages/Diagnostics/DiagnosticsProfile.png) +![Diagnostics Options](../../Documentation/Images/Diagnostics/DiagnosticsProfile.png) ### Build and Deploy diff --git a/Documentation/Diagnostics/UsingVisualProfiler.md b/Documentation/Diagnostics/UsingVisualProfiler.md index e9a1e280629..44ea4dc5eda 100644 --- a/Documentation/Diagnostics/UsingVisualProfiler.md +++ b/Documentation/Diagnostics/UsingVisualProfiler.md @@ -13,7 +13,7 @@ While developing an application, be sure to focus on multiple parts of the scene ## Visual Profiler Interface -![Visual Profiler Interface](../../External/ReadMeImages/Diagnostics/VisualProfiler.png) +![Visual Profiler Interface](../../Documentation/Images/Diagnostics/VisualProfiler.png) The Visual Profiler interface includes the following components: @@ -44,7 +44,7 @@ To the right of the frame rate is the frame time, in milliseconds, spent on the The frame graph provides a graphical display of the application frame rate history. -![Visual Profiler Frame Graph](../../External/ReadMeImages/Diagnostics/VisualProfilerMissedFrames.png) +![Visual Profiler Frame Graph](../../Documentation/Images/Diagnostics/VisualProfilerMissedFrames.png) > When using the application, look for missed frames. Missed frames indicate the application is not hitting its target frame rate and may need optimization work. @@ -52,7 +52,7 @@ The frame graph provides a graphical display of the application frame rate histo The memory utilization display allows for easy understanding of how the current view is impacting an application's memory consumption. -![Visual Profiler Frame Graph](../../External/ReadMeImages/Diagnostics/VisualProfilerMemory.png) +![Visual Profiler Frame Graph](../../Documentation/Images/Diagnostics/VisualProfilerMemory.png) > When using application, look for total memory usage. Key indicators include: nearing the memory limit and rapid changes in usage. diff --git a/Documentation/DownloadingTheMRTK.md b/Documentation/DownloadingTheMRTK.md index 484619ce5bb..55e7ebd73d3 100644 --- a/Documentation/DownloadingTheMRTK.md +++ b/Documentation/DownloadingTheMRTK.md @@ -1,6 +1,6 @@ # How to download the Mixed Reality Toolkit -![](../External/ReadMeImages/MRTK_Logo_Rev.png) +![](../Documentation/Images/MRTK_Logo_Rev.png) Recognizing there are multiple ways in which developers want to be able to get access to project through Unity, the Mixed Reality Toolkit has been engineered to be available through the following methods: diff --git a/Documentation/EyeTracking/EyeTracking_BasicSetup.md b/Documentation/EyeTracking/EyeTracking_BasicSetup.md index c3462d32836..422d0c99f3f 100644 --- a/Documentation/EyeTracking/EyeTracking_BasicSetup.md +++ b/Documentation/EyeTracking/EyeTracking_BasicSetup.md @@ -8,14 +8,14 @@ Alternatively, you can check out our already configured Eye Tracking examples: ### Setting up the scene Set up the _MixedRealityToolkit_ by simply clicking _'Mixed Reality Toolkit -> Configure…'_ in the menu bar. -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_setup_configure.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_setup_configure.png) ### Setting up the MRTK profiles required for Eye Tracking After setting up your MRTK scene, you will be asked to choose a profile for MRTK. You can simply select _DefaultMixedRealityToolkitConfigurationProfile_ and then select the _'Copy & Customize'_ option. -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_setup_configprofile.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_setup_configprofile.png) ### Create an "Eye Gaze Data Provider" @@ -30,14 +30,14 @@ You can simply select _DefaultMixedRealityToolkitConfigurationProfile_ and then - For **Platform(s)** select _'Windows Universal'_. -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_setup_eyes_dataprovider.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_setup_eyes_dataprovider.png) ### Enabling Eye Tracking in the GazeProvider In HoloLens v1, head gaze was used as primary pointing technique. While head gaze is still available via the _GazeProvider_ in MRTK which is attached to your [Camera](https://docs.unity3d.com/ScriptReference/Camera.html), you can check to use eye gaze instead by ticking the _'Prefer Eye Tracking'_ checkbox as shown in the screenshot below. -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_setup_eyes_gazeprovider.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_setup_eyes_gazeprovider.png) ### Simulating Eye Tracking in the Unity Editor @@ -50,7 +50,7 @@ For this, it is better to ensure frequent tests of your eye-based interactions o - Navigate to your main _'MRTK Configuration Profile'_ -> _'Input System Profile'_ -> _'Data Providers'_ -> _'Input Simulation Service'_. - Check the _'Simulate Eye Position'_ checkbox. -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_setup_eyes_simulate.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_setup_eyes_simulate.png) 2. **Disable default head gaze cursor**: In general, we recommend to avoid showing an eye gaze cursor or if you insist on showing one to make it _very_ subtle. @@ -59,7 +59,7 @@ We do recommend to hide the default head gaze cursor that is attached to the MRT - Navigate to your main _'MRTK Configuration Profile'_ -> _'Input System Profile'_ -> _'PointerSettings.PointerProfile'_ - At the bottom of the _'PointerProfile'_, you should assign an invisible cursor prefab to the _'GazeCursor'_. If you downloaded the MRTK Examples folder, you can simply reference the included -'EyeGazeCursor'_ prefab. -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_setup_eyes_gazesettings.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_setup_eyes_gazesettings.png) ### Accessing eye gaze data Now that your scene is set up to use Eye Tracking, let's take a look at how to access it in your scripts: @@ -75,7 +75,7 @@ So, follow these steps: 2. Open your compiled Visual Studio project and then open the _'Package.appxmanifest'_ in your solution. 3. Make sure to tick the _'Gaze Input'_ checkbox under _Capabilities_. -![Enabling Gaze Input in Visual Studio](../../External/ReadMeImages/EyeTracking/mrtk_et_gazeinput.jpg) +![Enabling Gaze Input in Visual Studio](../../Documentation/Images/EyeTracking/mrtk_et_gazeinput.jpg) --- [Back to "Eye Tracking in the MixedRealityToolkit"](EyeTracking_Main.md) diff --git a/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md b/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md index be5d30ffd57..4d67b383aae 100644 --- a/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md +++ b/Documentation/EyeTracking/EyeTracking_ExamplesOverview.md @@ -17,7 +17,7 @@ It comes with a graphical scene menu that allows you to easily switch between th To try out the Eye Tracking demos in your Unity Player, all you have to do is to load this scene and hit play. Make sure that the _'OnLoad_StartScene'_ script is enabled for this so that the root scene knows which additive scene to load first. -![Example for the OnLoad_StartScene script](/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png) +![Example for the OnLoad_StartScene script](/Documentation/Images/EyeTracking/mrtk_et_rootscene_onload.png) - Individual Eye Tracking sample scenes - See [Demo Scenarios](#demo-scenarios) for a description of each: - [mrtk_eyes_01_BasicSetup.unity](/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/) @@ -32,7 +32,7 @@ No problem! - Disable the _'OnLoad_StartScene'_ script - _Drag and drop_ one of the Eye Tracking test scenes that are described below (or any other scene) into your _Hierarchy_ view. -![Example for the OnLoad_StartScene script](/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png) +![Example for the OnLoad_StartScene script](/Documentation/Images/EyeTracking/mrtk_et_rootscene_onload2.png) ### Demo Scenarios [**Eye-Supported Target Selection**](EyeTracking_TargetSelection.md) diff --git a/Documentation/EyeTracking/EyeTracking_Main.md b/Documentation/EyeTracking/EyeTracking_Main.md index 7cd505255f3..d78da87f3c7 100644 --- a/Documentation/EyeTracking/EyeTracking_Main.md +++ b/Documentation/EyeTracking/EyeTracking_Main.md @@ -1,4 +1,4 @@ -![Eye Tracking in MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_compilation.png) +![Eye Tracking in MRTK](../../Documentation/Images/EyeTracking/mrtk_et_compilation.png) # Eye Tracking in the Mixed Reality Toolkit The [Mixed Reality Toolkit](https://github.com/Microsoft/MixedRealityToolkit-Unity) (MRTK) supports amongst others _'HoloLens 2'_ which offers an exciting and powerful new input: Eye Tracking! diff --git a/Documentation/EyeTracking/EyeTracking_Navigation.md b/Documentation/EyeTracking/EyeTracking_Navigation.md index f2691875d1a..c10c880af4c 100644 --- a/Documentation/EyeTracking/EyeTracking_Navigation.md +++ b/Documentation/EyeTracking/EyeTracking_Navigation.md @@ -1,4 +1,4 @@ -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_navigation.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_et_navigation.png) # Eye-Supported Navigation in MRTK @@ -44,7 +44,7 @@ MinDistFromCenterForAutoScroll | Normalized minimal distance in x and y from cen UseSkimProofing | If enabled, it prevents sudden scroll movements when quickly looking around. This may make scrolling feel less responsive though. It can be tuned with the *SkimProofUpdateSpeed* value. SkimProofUpdateSpeed | The lower the value, the slower the scrolling will speed up after skimming. Recommended value: 5. -![Eye-supported scroll setup in Unity](../../External/ReadMeImages/EyeTracking/mrtk_et_nav_scroll.jpg) +![Eye-supported scroll setup in Unity](../../Documentation/Images/EyeTracking/mrtk_et_nav_scroll.jpg) ### EyeTrackingTarget @@ -54,7 +54,7 @@ Alternatively you can use the [BaseEyeFocusHandler](EyeTracking_TargetSelection.md#use-eye-gaze-specific-baseeyefocushandler) to handle Eye Tracking events directly in your code to trigger the *StartFocusing* and *StopFocusing* methods in _Scroll_RectTransf_. -![Eye-supported scroll setup in Unity: EyeTrackingTarget](../../External/ReadMeImages/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg) +![Eye-supported scroll setup in Unity: EyeTrackingTarget](../../Documentation/Images/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg) ## Gaze-supported Pan and Zoom @@ -86,7 +86,7 @@ Pan_MinDistFromCenter | Normalized minimal distance in x and y from center of th UseSkimProofing | If enabled, it prevents sudden scroll movements when quickly looking around. This may make scrolling feel less responsive though. It can be tuned with the *SkimProofUpdateSpeed* value. SkimProofUpdateSpeed | The lower the value, the slower the scrolling will speed up after skimming. Recommended value: 5. -![Eye-supported pan and zoom setup in Unity](../../External/ReadMeImages/EyeTracking/mrtk_et_nav_panzoom.jpg) +![Eye-supported pan and zoom setup in Unity](../../Documentation/Images/EyeTracking/mrtk_et_nav_panzoom.jpg) ## Attention-based 3D Rotation @@ -115,7 +115,7 @@ MaxRotX | Maximum horizontal rotation angle. This is to limit the rotation in di MinRotY | Minimal vertical rotation angle to limit the rotation around the x axis. MaxRotY | Maximum vertical rotation angle to limit the rotation around the y axis. -![Eye-supported 3D rotation setup in Unity](../../External/ReadMeImages/EyeTracking/mrtk_et_nav_rotate.jpg) +![Eye-supported 3D rotation setup in Unity](../../Documentation/Images/EyeTracking/mrtk_et_nav_rotate.jpg) In summary, the above scripts should enable you to get started to use eye gaze for various input navigation tasks such as scrolling texts, zooming and panning textures as well as rotating investigating 3D holograms. diff --git a/Documentation/EyeTracking/EyeTracking_Positioning.md b/Documentation/EyeTracking/EyeTracking_Positioning.md index 30d0b2b0209..7a91c98eee4 100644 --- a/Documentation/EyeTracking/EyeTracking_Positioning.md +++ b/Documentation/EyeTracking/EyeTracking_Positioning.md @@ -1,4 +1,4 @@ -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_positioning.png ) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_et_positioning.png ) # Eye-Supported Target Positioning in MRTK @@ -7,7 +7,7 @@ _We're currently restructuring and improving the MRTK documentation. This content will be updated soon! If you have any questions regarding this section please post in our MRTK slack channel._ -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_positioning_slider.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_et_positioning_slider.png) --- diff --git a/Documentation/EyeTracking/EyeTracking_TargetSelection.md b/Documentation/EyeTracking/EyeTracking_TargetSelection.md index 8e4107df7be..35e71f269c5 100644 --- a/Documentation/EyeTracking/EyeTracking_TargetSelection.md +++ b/Documentation/EyeTracking/EyeTracking_TargetSelection.md @@ -1,4 +1,4 @@ -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_targetselect.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_et_targetselect.png) # Eye-Supported Target Selection This page discusses different options for accessing eye gaze data and eye gaze specific events to select targets in MRTK. @@ -172,7 +172,7 @@ For the example of the _'smart attentive notifications'_, the following happens: The key to an enjoyable experience here is to carefully tune the speed of any of these behaviors to avoid causing discomfort by reacting to the user’s eye gaze too quickly all the time. Otherwise this can quickly feel extremely overwhelming. -MRTK +MRTK #### Example: Multimodal Gaze-Supported Target Selection One event provided by the [EyeTrackingTarget](xref:Microsoft.MixedReality.Toolkit.Input.EyeTrackingTarget), yet not used by the @@ -183,7 +183,7 @@ For example, the screenshot below is from It shows how the [EyeTrackingTarget](xref:Microsoft.MixedReality.Toolkit.Input.EyeTrackingTarget) is set up for one of the gems that explodes when you select it. -MRTK +MRTK The _OnSelected()_ event triggers the method _'TargetSelected'_ in the [HitBehavior_DestroyOnSelect](xref:Microsoft.MixedReality.Toolkit.Examples.Demos.EyeTracking.HitBehavior_DestroyOnSelect) diff --git a/Documentation/EyeTracking/EyeTracking_Visualization.md b/Documentation/EyeTracking/EyeTracking_Visualization.md index e2a5d80f951..07ac2eb9b5e 100644 --- a/Documentation/EyeTracking/EyeTracking_Visualization.md +++ b/Documentation/EyeTracking/EyeTracking_Visualization.md @@ -1,4 +1,4 @@ -![MRTK](../../External/ReadMeImages/EyeTracking/mrtk_et_heatmaps.png) +![MRTK](../../Documentation/Images/EyeTracking/mrtk_et_heatmaps.png) # Visualizing Eye Tracking Data in MRTK diff --git a/Documentation/GettingStartedWithTheMRTK.md b/Documentation/GettingStartedWithTheMRTK.md index dc77a9fcd64..9fc01290143 100644 --- a/Documentation/GettingStartedWithTheMRTK.md +++ b/Documentation/GettingStartedWithTheMRTK.md @@ -1,6 +1,6 @@ # Getting started with the Mixed Reality Toolkit -![](../External/ReadMeImages/MRTK_Logo_Rev.png) +![](../Documentation/Images/MRTK_Logo_Rev.png) The Mixed Reality Toolkit (MRTK) is a cross-platform toolkit for building Mixed Reality experiences for Virtual Reality (VR) and Augmented Reality (AR). @@ -30,7 +30,7 @@ To get started with the Mixed Reality Toolkit you will need: > After importing the Foundation package, you may see a setup prompt like the following: > -> ![](../External/ReadMeImages/MRTK_UnitySetupPrompt.png) +> ![](../Documentation/Images/MRTK_UnitySetupPrompt.png) > > MRTK is attempting to set up your project for building Mixed Reality solutions by doing the following: > * Enable XR Settings for your current platform (enabling the XR checkbox). @@ -44,7 +44,7 @@ To get started with the Mixed Reality Toolkit you will need: ## Open and run the HandInteractionExamples scene in editor -[![HandInteractionExample scene](../External/ReadMeImages/MRTK_Examples.png)](README_HandInteractionExamples.md) +[![HandInteractionExample scene](../Documentation/Images/MRTK_Examples.png)](README_HandInteractionExamples.md) The [hand interaction examples scene](README_HandInteractionExamples.md) is a great place to get started because it shows a wide variety of UX controls and interactions in MRTK. To get started we will import MRTK, open the example scene, and explore the scene in the editor. @@ -53,7 +53,7 @@ The [hand interaction examples scene](README_HandInteractionExamples.md) is a gr 3. You will get a prompt asking you to import "TMP Essentials". -![TMP Essentials](../External/Documentation/Images/MRTK_GettingStarted_TMPro.png) +![TMP Essentials](../Documentation/Images/getting_started/MRTK_GettingStarted_TMPro.png) 8. Select "Import TMP essentials" button. "TMP Essentials" refers to TextMeshPro plugin, which some of the MRTK examples use for improved text rendering. @@ -79,22 +79,22 @@ Congratulations, you just used your first MRTK scene. Now onto creating your own 3. From the menu bar, select Mixed Reality Toolkit -> Add to Scene and Configure -![](../External/ReadMeImages/MRTK_ConfigureScene.png) +![](../Documentation/Images/MRTK_ConfigureScene.png) 4. You will see a prompt like this: -![](../External/ReadMeImages/MRTK_ConfigureDialog.png) +![](../Documentation/Images/MRTK_ConfigureDialog.png) Click "OK". 5. You will then be prompted to choose an MRTK Configuration profile. Double click "DefaultMixedRealityToolkitConfigurationProfile". -![](../External/ReadMeImages/MRTK_SelectConfigurationDialog.png) +![](../Documentation/Images/MRTK_SelectConfigurationDialog.png) You will then see the following in your Scene hierarchy: -![](../External/ReadMeImages/MRTK_SceneSetup.png) +![](../Documentation/Images/MRTK_SceneSetup.png) Which contains the following: @@ -121,14 +121,14 @@ Here are some suggested next steps: * Learn how to work with the MRTK Configuration profile in the [mixed reality configuration guide](MixedRealityConfigurationGuide.md). ## Building blocks for UI and Interactions -| [![Button](../External/ReadMeImages/Button/MRTK_Button_Main.png)](README_Button.md) [Button](README_Button.md) | [![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png)](README_BoundingBox.md) [Bounding Box](README_BoundingBox.md) | [![Manipulation Handler](../External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png)](README_ManipulationHandler.md) [Manipulation Handler](README_ManipulationHandler.md) | +| [![Button](../Documentation/Images/Button/MRTK_Button_Main.png)](README_Button.md) [Button](README_Button.md) | [![Bounding Box](../Documentation/Images/BoundingBox/MRTK_BoundingBox_Main.png)](README_BoundingBox.md) [Bounding Box](README_BoundingBox.md) | [![Manipulation Handler](../Documentation/Images/ManipulationHandler/MRTK_Manipulation_Main.png)](README_ManipulationHandler.md) [Manipulation Handler](README_ManipulationHandler.md) | |:--- | :--- | :--- | | A button control which supports various input methods including HoloLens2's articulated hand | Standard UI for manipulating objects in 3D space | Script for manipulating objects with one or two hands | -| [![Slate](../External/ReadMeImages/Slate/MRTK_Slate_Main.png)](README_Slate.md) [Slate](README_Slate.md) | [![System Keyboard](../External/ReadMeImages/SystemKeyboard/MRTK_SystemKeyboard_Main.png)](README_SystemKeyboard.md) [System Keyboard](README_SystemKeyboard.md) | [![Interactable](../External/ReadMeImages/Interactable/InteractableExamples.png)](README_Interactable.md) [Interactable](README_Interactable.md) | +| [![Slate](../Documentation/Images/Slate/MRTK_Slate_Main.png)](README_Slate.md) [Slate](README_Slate.md) | [![System Keyboard](../Documentation/Images/SystemKeyboard/MRTK_SystemKeyboard_Main.png)](README_SystemKeyboard.md) [System Keyboard](README_SystemKeyboard.md) | [![Interactable](../Documentation/Images/Interactable/InteractableExamples.png)](README_Interactable.md) [Interactable](README_Interactable.md) | | 2D style plane which supports scrolling with articulated hand input | Example script of using the system keyboard in Unity | A script for making objects interactable with visual states and theme support | -| [![Solver](../External/ReadMeImages/Solver/MRTK_Solver_Main.png)](README_Solver.md) [Solver](README_Solver.md) | [![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Main.png)](README_ObjectCollection.md) [Object Collection](README_ObjectCollection.md) | [![Tooltip](../External/ReadMeImages/Tooltip/MRTK_Tooltip_Main.png)](README_Tooltip.md) [Tooltip](README_Tooltip.md) | +| [![Solver](../Documentation/Images/Solver/MRTK_Solver_Main.png)](README_Solver.md) [Solver](README_Solver.md) | [![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Main.png)](README_ObjectCollection.md) [Object Collection](README_ObjectCollection.md) | [![Tooltip](../Documentation/Images/Tooltip/MRTK_Tooltip_Main.png)](README_Tooltip.md) [Tooltip](README_Tooltip.md) | | Various object positioning behaviors such as tag-along, body-lock, constant view size and surface magnetism | Script for lay out an array of objects in a three-dimensional shape | Annotation UI with flexible anchor/pivot system which can be used for labeling motion controllers and object. | -| [![App Bar](../External/ReadMeImages/AppBar/MRTK_AppBar_Main.png)](README_AppBar.md) [App Bar](README_AppBar.md) | [![Pointers](../External/ReadMeImages/Pointers/MRTK_Pointer_Main.png)](README_Pointers.md) [Pointers](README_Pointers.md) | [![Fingertip Visualization](../External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png)](README_FingertipVisualization.md) [Fingertip Visualization](README_FingertipVisualization.md) | +| [![App Bar](../Documentation/Images/AppBar/MRTK_AppBar_Main.png)](README_AppBar.md) [App Bar](README_AppBar.md) | [![Pointers](../Documentation/Images/Pointers/MRTK_Pointer_Main.png)](README_Pointers.md) [Pointers](README_Pointers.md) | [![Fingertip Visualization](../Documentation/Images/Fingertip/MRTK_FingertipVisualization_Main.png)](README_FingertipVisualization.md) [Fingertip Visualization](README_FingertipVisualization.md) | | UI for Bounding Box's manual activation | Learn about various types of pointers | Visual affordance on the fingertip which improves the confidence for the direct interaction | # Upgrading from the HoloToolkit (HTK/MRTK v1) diff --git a/External/ReadMeImages/AppBar/MRTK_AppBar_Main.png b/Documentation/Images/AppBar/MRTK_AppBar_Main.png similarity index 100% rename from External/ReadMeImages/AppBar/MRTK_AppBar_Main.png rename to Documentation/Images/AppBar/MRTK_AppBar_Main.png diff --git a/External/ReadMeImages/AppBar/MRTK_AppBar_Setup1.png b/Documentation/Images/AppBar/MRTK_AppBar_Setup1.png similarity index 100% rename from External/ReadMeImages/AppBar/MRTK_AppBar_Setup1.png rename to Documentation/Images/AppBar/MRTK_AppBar_Setup1.png diff --git a/External/ReadMeImages/AppBar/MRTK_AppBar_Setup2.png b/Documentation/Images/AppBar/MRTK_AppBar_Setup2.png similarity index 100% rename from External/ReadMeImages/AppBar/MRTK_AppBar_Setup2.png rename to Documentation/Images/AppBar/MRTK_AppBar_Setup2.png diff --git a/External/ReadMeImages/Boundary/BoundarySelectSystemType.png b/Documentation/Images/Boundary/BoundarySelectSystemType.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundarySelectSystemType.png rename to Documentation/Images/Boundary/BoundarySelectSystemType.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationCeilingSettings.png b/Documentation/Images/Boundary/BoundaryVisualizationCeilingSettings.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationCeilingSettings.png rename to Documentation/Images/Boundary/BoundaryVisualizationCeilingSettings.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationFloorSettings.png b/Documentation/Images/Boundary/BoundaryVisualizationFloorSettings.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationFloorSettings.png rename to Documentation/Images/Boundary/BoundaryVisualizationFloorSettings.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationGeneralSettings.png b/Documentation/Images/Boundary/BoundaryVisualizationGeneralSettings.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationGeneralSettings.png rename to Documentation/Images/Boundary/BoundaryVisualizationGeneralSettings.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationPlayAreaSettings.png b/Documentation/Images/Boundary/BoundaryVisualizationPlayAreaSettings.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationPlayAreaSettings.png rename to Documentation/Images/Boundary/BoundaryVisualizationPlayAreaSettings.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationProfile.png b/Documentation/Images/Boundary/BoundaryVisualizationProfile.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationProfile.png rename to Documentation/Images/Boundary/BoundaryVisualizationProfile.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationTrackedAreaSettings.png b/Documentation/Images/Boundary/BoundaryVisualizationTrackedAreaSettings.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationTrackedAreaSettings.png rename to Documentation/Images/Boundary/BoundaryVisualizationTrackedAreaSettings.png diff --git a/External/ReadMeImages/Boundary/BoundaryVisualizationWallSettings.png b/Documentation/Images/Boundary/BoundaryVisualizationWallSettings.png similarity index 100% rename from External/ReadMeImages/Boundary/BoundaryVisualizationWallSettings.png rename to Documentation/Images/Boundary/BoundaryVisualizationWallSettings.png diff --git a/External/ReadMeImages/Boundary/MRTKConfig_Boundary.png b/Documentation/Images/Boundary/MRTKConfig_Boundary.png similarity index 100% rename from External/ReadMeImages/Boundary/MRTKConfig_Boundary.png rename to Documentation/Images/Boundary/MRTKConfig_Boundary.png diff --git a/External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Assign.png b/Documentation/Images/BoundingBox/MRTK_BoundingBox_Assign.png similarity index 100% rename from External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Assign.png rename to Documentation/Images/BoundingBox/MRTK_BoundingBox_Assign.png diff --git a/External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Events.png b/Documentation/Images/BoundingBox/MRTK_BoundingBox_Events.png similarity index 100% rename from External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Events.png rename to Documentation/Images/BoundingBox/MRTK_BoundingBox_Events.png diff --git a/External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Examples.png b/Documentation/Images/BoundingBox/MRTK_BoundingBox_Examples.png similarity index 100% rename from External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Examples.png rename to Documentation/Images/BoundingBox/MRTK_BoundingBox_Examples.png diff --git a/External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png b/Documentation/Images/BoundingBox/MRTK_BoundingBox_Main.png similarity index 100% rename from External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png rename to Documentation/Images/BoundingBox/MRTK_BoundingBox_Main.png diff --git a/External/ReadMeImages/BoundingBox/MRTK_BoundingBox_ManipulationHandler.png b/Documentation/Images/BoundingBox/MRTK_BoundingBox_ManipulationHandler.png similarity index 100% rename from External/ReadMeImages/BoundingBox/MRTK_BoundingBox_ManipulationHandler.png rename to Documentation/Images/BoundingBox/MRTK_BoundingBox_ManipulationHandler.png diff --git a/External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Structure.png b/Documentation/Images/BoundingBox/MRTK_BoundingBox_Structure.png similarity index 100% rename from External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Structure.png rename to Documentation/Images/BoundingBox/MRTK_BoundingBox_Structure.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Custom1.png b/Documentation/Images/Button/MRTK_Button_Custom1.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Custom1.png rename to Documentation/Images/Button/MRTK_Button_Custom1.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Custom2.png b/Documentation/Images/Button/MRTK_Button_Custom2.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Custom2.png rename to Documentation/Images/Button/MRTK_Button_Custom2.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Custom3.png b/Documentation/Images/Button/MRTK_Button_Custom3.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Custom3.png rename to Documentation/Images/Button/MRTK_Button_Custom3.png diff --git a/External/ReadMeImages/Button/MRTK_Button_HowToUse_Interactable.png b/Documentation/Images/Button/MRTK_Button_HowToUse_Interactable.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_HowToUse_Interactable.png rename to Documentation/Images/Button/MRTK_Button_HowToUse_Interactable.png diff --git a/External/ReadMeImages/Button/MRTK_Button_HowTo_Events.png b/Documentation/Images/Button/MRTK_Button_HowTo_Events.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_HowTo_Events.png rename to Documentation/Images/Button/MRTK_Button_HowTo_Events.png diff --git a/External/ReadMeImages/Button/MRTK_Button_HowTo_PressableButton.png b/Documentation/Images/Button/MRTK_Button_HowTo_PressableButton.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_HowTo_PressableButton.png rename to Documentation/Images/Button/MRTK_Button_HowTo_PressableButton.png diff --git a/External/ReadMeImages/Button/MRTK_Button_InteractionStates.png b/Documentation/Images/Button/MRTK_Button_InteractionStates.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_InteractionStates.png rename to Documentation/Images/Button/MRTK_Button_InteractionStates.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Layout.png b/Documentation/Images/Button/MRTK_Button_Layout.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Layout.png rename to Documentation/Images/Button/MRTK_Button_Layout.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Main.png b/Documentation/Images/Button/MRTK_Button_Main.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Main.png rename to Documentation/Images/Button/MRTK_Button_Main.png diff --git a/External/ReadMeImages/Button/MRTK_Button_SeeItSayIt.png b/Documentation/Images/Button/MRTK_Button_SeeItSayIt.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_SeeItSayIt.png rename to Documentation/Images/Button/MRTK_Button_SeeItSayIt.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Speech1.png b/Documentation/Images/Button/MRTK_Button_Speech1.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Speech1.png rename to Documentation/Images/Button/MRTK_Button_Speech1.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Speech2.png b/Documentation/Images/Button/MRTK_Button_Speech2.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Speech2.png rename to Documentation/Images/Button/MRTK_Button_Speech2.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Speech3.png b/Documentation/Images/Button/MRTK_Button_Speech3.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Speech3.png rename to Documentation/Images/Button/MRTK_Button_Speech3.png diff --git a/External/ReadMeImages/Button/MRTK_Button_Structure.png b/Documentation/Images/Button/MRTK_Button_Structure.png similarity index 100% rename from External/ReadMeImages/Button/MRTK_Button_Structure.png rename to Documentation/Images/Button/MRTK_Button_Structure.png diff --git a/External/ReadMeImages/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png b/Documentation/Images/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png similarity index 100% rename from External/ReadMeImages/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png rename to Documentation/Images/ControllerConfigurationProfile/01-MixedRealityControllerConfigurationProfileInspector.png diff --git a/External/ReadMeImages/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png b/Documentation/Images/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png similarity index 100% rename from External/ReadMeImages/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png rename to Documentation/Images/ControllerConfigurationProfile/02-ControllerTemplateDefinition.png diff --git a/External/ReadMeImages/ControllerConfigurationProfile/03-ControllerTemplate.png b/Documentation/Images/ControllerConfigurationProfile/03-ControllerTemplate.png similarity index 100% rename from External/ReadMeImages/ControllerConfigurationProfile/03-ControllerTemplate.png rename to Documentation/Images/ControllerConfigurationProfile/03-ControllerTemplate.png diff --git a/External/ReadMeImages/ControllerConfigurationProfile/04-WMRInteractions.png b/Documentation/Images/ControllerConfigurationProfile/04-WMRInteractions.png similarity index 100% rename from External/ReadMeImages/ControllerConfigurationProfile/04-WMRInteractions.png rename to Documentation/Images/ControllerConfigurationProfile/04-WMRInteractions.png diff --git a/External/ReadMeImages/ControllerConfigurationProfile/05-OculusTouchInteractions.png b/Documentation/Images/ControllerConfigurationProfile/05-OculusTouchInteractions.png similarity index 100% rename from External/ReadMeImages/ControllerConfigurationProfile/05-OculusTouchInteractions.png rename to Documentation/Images/ControllerConfigurationProfile/05-OculusTouchInteractions.png diff --git a/External/ReadMeImages/ControllerConfigurationProfile/06-ViveWandInteractions.png b/Documentation/Images/ControllerConfigurationProfile/06-ViveWandInteractions.png similarity index 100% rename from External/ReadMeImages/ControllerConfigurationProfile/06-ViveWandInteractions.png rename to Documentation/Images/ControllerConfigurationProfile/06-ViveWandInteractions.png diff --git a/External/ReadMeImages/ControllerVisualizer/ControllerVisualizerInspector.png b/Documentation/Images/ControllerVisualizer/ControllerVisualizerInspector.png similarity index 100% rename from External/ReadMeImages/ControllerVisualizer/ControllerVisualizerInspector.png rename to Documentation/Images/ControllerVisualizer/ControllerVisualizerInspector.png diff --git a/External/ReadMeImages/Diagnostics/DiagnosticsGeneralSettings.png b/Documentation/Images/Diagnostics/DiagnosticsGeneralSettings.png similarity index 100% rename from External/ReadMeImages/Diagnostics/DiagnosticsGeneralSettings.png rename to Documentation/Images/Diagnostics/DiagnosticsGeneralSettings.png diff --git a/External/ReadMeImages/Diagnostics/DiagnosticsProfile.png b/Documentation/Images/Diagnostics/DiagnosticsProfile.png similarity index 100% rename from External/ReadMeImages/Diagnostics/DiagnosticsProfile.png rename to Documentation/Images/Diagnostics/DiagnosticsProfile.png diff --git a/External/ReadMeImages/Diagnostics/DiagnosticsProfilerSettings.png b/Documentation/Images/Diagnostics/DiagnosticsProfilerSettings.png similarity index 100% rename from External/ReadMeImages/Diagnostics/DiagnosticsProfilerSettings.png rename to Documentation/Images/Diagnostics/DiagnosticsProfilerSettings.png diff --git a/External/ReadMeImages/Diagnostics/DiagnosticsSelectSystemType.png b/Documentation/Images/Diagnostics/DiagnosticsSelectSystemType.png similarity index 100% rename from External/ReadMeImages/Diagnostics/DiagnosticsSelectSystemType.png rename to Documentation/Images/Diagnostics/DiagnosticsSelectSystemType.png diff --git a/External/ReadMeImages/Diagnostics/MRTKConfig_Diagnostics.png b/Documentation/Images/Diagnostics/MRTKConfig_Diagnostics.png similarity index 100% rename from External/ReadMeImages/Diagnostics/MRTKConfig_Diagnostics.png rename to Documentation/Images/Diagnostics/MRTKConfig_Diagnostics.png diff --git a/External/ReadMeImages/Diagnostics/VisualProfiler.png b/Documentation/Images/Diagnostics/VisualProfiler.png similarity index 100% rename from External/ReadMeImages/Diagnostics/VisualProfiler.png rename to Documentation/Images/Diagnostics/VisualProfiler.png diff --git a/External/ReadMeImages/Diagnostics/VisualProfilerMemory.png b/Documentation/Images/Diagnostics/VisualProfilerMemory.png similarity index 100% rename from External/ReadMeImages/Diagnostics/VisualProfilerMemory.png rename to Documentation/Images/Diagnostics/VisualProfilerMemory.png diff --git a/External/ReadMeImages/Diagnostics/VisualProfilerMissedFrames.png b/Documentation/Images/Diagnostics/VisualProfilerMissedFrames.png similarity index 100% rename from External/ReadMeImages/Diagnostics/VisualProfilerMissedFrames.png rename to Documentation/Images/Diagnostics/VisualProfilerMissedFrames.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_EyeTrackingTarget.jpg b/Documentation/Images/EyeTracking/mrtk_et_EyeTrackingTarget.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_EyeTrackingTarget.jpg rename to Documentation/Images/EyeTracking/mrtk_et_EyeTrackingTarget.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_EyeTrackingTarget_Notification.jpg b/Documentation/Images/EyeTracking/mrtk_et_EyeTrackingTarget_Notification.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_EyeTrackingTarget_Notification.jpg rename to Documentation/Images/EyeTracking/mrtk_et_EyeTrackingTarget_Notification.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_compilation.png b/Documentation/Images/EyeTracking/mrtk_et_compilation.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_compilation.png rename to Documentation/Images/EyeTracking/mrtk_et_compilation.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_gazeinput.jpg b/Documentation/Images/EyeTracking/mrtk_et_gazeinput.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_gazeinput.jpg rename to Documentation/Images/EyeTracking/mrtk_et_gazeinput.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_heatmaps.png b/Documentation/Images/EyeTracking/mrtk_et_heatmaps.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_heatmaps.png rename to Documentation/Images/EyeTracking/mrtk_et_heatmaps.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_nav_panzoom.jpg b/Documentation/Images/EyeTracking/mrtk_et_nav_panzoom.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_nav_panzoom.jpg rename to Documentation/Images/EyeTracking/mrtk_et_nav_panzoom.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_nav_rotate.jpg b/Documentation/Images/EyeTracking/mrtk_et_nav_rotate.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_nav_rotate.jpg rename to Documentation/Images/EyeTracking/mrtk_et_nav_rotate.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_nav_scroll.jpg b/Documentation/Images/EyeTracking/mrtk_et_nav_scroll.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_nav_scroll.jpg rename to Documentation/Images/EyeTracking/mrtk_et_nav_scroll.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg b/Documentation/Images/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg rename to Documentation/Images/EyeTracking/mrtk_et_nav_scroll_ettarget.jpg diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_navigation.png b/Documentation/Images/EyeTracking/mrtk_et_navigation.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_navigation.png rename to Documentation/Images/EyeTracking/mrtk_et_navigation.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_placeholder.png b/Documentation/Images/EyeTracking/mrtk_et_placeholder.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_placeholder.png rename to Documentation/Images/EyeTracking/mrtk_et_placeholder.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_positioning.png b/Documentation/Images/EyeTracking/mrtk_et_positioning.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_positioning.png rename to Documentation/Images/EyeTracking/mrtk_et_positioning.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_positioning_slider.png b/Documentation/Images/EyeTracking/mrtk_et_positioning_slider.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_positioning_slider.png rename to Documentation/Images/EyeTracking/mrtk_et_positioning_slider.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png b/Documentation/Images/EyeTracking/mrtk_et_rootscene_onload.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload.png rename to Documentation/Images/EyeTracking/mrtk_et_rootscene_onload.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png b/Documentation/Images/EyeTracking/mrtk_et_rootscene_onload2.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_rootscene_onload2.png rename to Documentation/Images/EyeTracking/mrtk_et_rootscene_onload2.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_et_targetselect.png b/Documentation/Images/EyeTracking/mrtk_et_targetselect.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_et_targetselect.png rename to Documentation/Images/EyeTracking/mrtk_et_targetselect.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_setup_configprofile.png b/Documentation/Images/EyeTracking/mrtk_setup_configprofile.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_setup_configprofile.png rename to Documentation/Images/EyeTracking/mrtk_setup_configprofile.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_setup_configure.png b/Documentation/Images/EyeTracking/mrtk_setup_configure.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_setup_configure.png rename to Documentation/Images/EyeTracking/mrtk_setup_configure.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_setup_eyes_dataprovider.png b/Documentation/Images/EyeTracking/mrtk_setup_eyes_dataprovider.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_setup_eyes_dataprovider.png rename to Documentation/Images/EyeTracking/mrtk_setup_eyes_dataprovider.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_setup_eyes_gazeprovider.png b/Documentation/Images/EyeTracking/mrtk_setup_eyes_gazeprovider.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_setup_eyes_gazeprovider.png rename to Documentation/Images/EyeTracking/mrtk_setup_eyes_gazeprovider.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_setup_eyes_gazesettings.png b/Documentation/Images/EyeTracking/mrtk_setup_eyes_gazesettings.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_setup_eyes_gazesettings.png rename to Documentation/Images/EyeTracking/mrtk_setup_eyes_gazesettings.png diff --git a/External/ReadMeImages/EyeTracking/mrtk_setup_eyes_simulate.png b/Documentation/Images/EyeTracking/mrtk_setup_eyes_simulate.png similarity index 100% rename from External/ReadMeImages/EyeTracking/mrtk_setup_eyes_simulate.png rename to Documentation/Images/EyeTracking/mrtk_setup_eyes_simulate.png diff --git a/External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Finger_Cursor_Inspector.png b/Documentation/Images/Fingertip/MRTK_FingertipVisualization_Finger_Cursor_Inspector.png similarity index 100% rename from External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Finger_Cursor_Inspector.png rename to Documentation/Images/Fingertip/MRTK_FingertipVisualization_Finger_Cursor_Inspector.png diff --git a/External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png b/Documentation/Images/Fingertip/MRTK_FingertipVisualization_Main.png similarity index 100% rename from External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png rename to Documentation/Images/Fingertip/MRTK_FingertipVisualization_Main.png diff --git a/External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Mixed_Reality_Standard_Shader_Inspector.png b/Documentation/Images/Fingertip/MRTK_FingertipVisualization_Mixed_Reality_Standard_Shader_Inspector.png similarity index 100% rename from External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Mixed_Reality_Standard_Shader_Inspector.png rename to Documentation/Images/Fingertip/MRTK_FingertipVisualization_Mixed_Reality_Standard_Shader_Inspector.png diff --git a/External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png b/Documentation/Images/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png similarity index 100% rename from External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png rename to Documentation/Images/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png diff --git a/External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_States.png b/Documentation/Images/Fingertip/MRTK_FingertipVisualization_States.png similarity index 100% rename from External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_States.png rename to Documentation/Images/Fingertip/MRTK_FingertipVisualization_States.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_BoundingBox.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_BoundingBox.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_BoundingBox.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_BoundingBox.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Keyboard.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_Keyboard.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Keyboard.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_Keyboard.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Manipulation.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_Manipulation.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Manipulation.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_Manipulation.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_PressTouch.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_PressTouch.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_PressTouch.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_PressTouch.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Slate.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_Slate.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Slate.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_Slate.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_TMP1.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_TMP1.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_TMP1.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_TMP1.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_TMP2.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_TMP2.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_TMP2.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_TMP2.png diff --git a/External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Unity.png b/Documentation/Images/HandInteractionExamples/MRTK_Examples_Unity.png similarity index 100% rename from External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Unity.png rename to Documentation/Images/HandInteractionExamples/MRTK_Examples_Unity.png diff --git a/External/ReadMeImages/Input/ControllerInputMapping.png b/Documentation/Images/Input/ControllerInputMapping.png similarity index 100% rename from External/ReadMeImages/Input/ControllerInputMapping.png rename to Documentation/Images/Input/ControllerInputMapping.png diff --git a/External/ReadMeImages/Input/Diagrams.vsdx b/Documentation/Images/Input/Diagrams.vsdx similarity index 100% rename from External/ReadMeImages/Input/Diagrams.vsdx rename to Documentation/Images/Input/Diagrams.vsdx diff --git a/External/ReadMeImages/Input/DictationDataProvider.png b/Documentation/Images/Input/DictationDataProvider.png similarity index 100% rename from External/ReadMeImages/Input/DictationDataProvider.png rename to Documentation/Images/Input/DictationDataProvider.png diff --git a/External/ReadMeImages/Input/DictationDemo.png b/Documentation/Images/Input/DictationDemo.png similarity index 100% rename from External/ReadMeImages/Input/DictationDemo.png rename to Documentation/Images/Input/DictationDemo.png diff --git a/External/ReadMeImages/Input/DictationHandler.png b/Documentation/Images/Input/DictationHandler.png similarity index 100% rename from External/ReadMeImages/Input/DictationHandler.png rename to Documentation/Images/Input/DictationHandler.png diff --git a/External/ReadMeImages/Input/EventFlow.png b/Documentation/Images/Input/EventFlow.png similarity index 100% rename from External/ReadMeImages/Input/EventFlow.png rename to Documentation/Images/Input/EventFlow.png diff --git a/External/ReadMeImages/Input/GestureProfile.png b/Documentation/Images/Input/GestureProfile.png similarity index 100% rename from External/ReadMeImages/Input/GestureProfile.png rename to Documentation/Images/Input/GestureProfile.png diff --git a/External/ReadMeImages/Input/InputActions.png b/Documentation/Images/Input/InputActions.png similarity index 100% rename from External/ReadMeImages/Input/InputActions.png rename to Documentation/Images/Input/InputActions.png diff --git a/External/ReadMeImages/Input/PointerProfile.png b/Documentation/Images/Input/PointerProfile.png similarity index 100% rename from External/ReadMeImages/Input/PointerProfile.png rename to Documentation/Images/Input/PointerProfile.png diff --git a/External/ReadMeImages/Input/RegisteredServiceProviders.PNG b/Documentation/Images/Input/RegisteredServiceProviders.PNG similarity index 100% rename from External/ReadMeImages/Input/RegisteredServiceProviders.PNG rename to Documentation/Images/Input/RegisteredServiceProviders.PNG diff --git a/External/ReadMeImages/Input/SpeechCommands.PNG b/Documentation/Images/Input/SpeechCommands.PNG similarity index 100% rename from External/ReadMeImages/Input/SpeechCommands.PNG rename to Documentation/Images/Input/SpeechCommands.PNG diff --git a/External/Documentation/Images/MRTK_Core_Input_Hands_ArticulatedHandMesh.png b/Documentation/Images/InputSimulation/MRTK_Core_Input_Hands_ArticulatedHandMesh.png similarity index 100% rename from External/Documentation/Images/MRTK_Core_Input_Hands_ArticulatedHandMesh.png rename to Documentation/Images/InputSimulation/MRTK_Core_Input_Hands_ArticulatedHandMesh.png diff --git a/External/Documentation/Images/MRTK_Core_Input_Hands_HandTrackingProfile.png b/Documentation/Images/InputSimulation/MRTK_Core_Input_Hands_HandTrackingProfile.png similarity index 100% rename from External/Documentation/Images/MRTK_Core_Input_Hands_HandTrackingProfile.png rename to Documentation/Images/InputSimulation/MRTK_Core_Input_Hands_HandTrackingProfile.png diff --git a/External/Documentation/Images/MRTK_Core_Input_Hands_JointVisualizerPrefabs.png b/Documentation/Images/InputSimulation/MRTK_Core_Input_Hands_JointVisualizerPrefabs.png similarity index 100% rename from External/Documentation/Images/MRTK_Core_Input_Hands_JointVisualizerPrefabs.png rename to Documentation/Images/InputSimulation/MRTK_Core_Input_Hands_JointVisualizerPrefabs.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_CameraControlSettings.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_CameraControlSettings.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_CameraControlSettings.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_CameraControlSettings.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_HandControlSettings.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_HandControlSettings.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_HandControlSettings.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_HandControlSettings.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_HandGestureSettings.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_HandGestureSettings.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_HandGestureSettings.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_HandGestureSettings.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_HandPlacementSettings.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_HandPlacementSettings.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_HandPlacementSettings.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_HandPlacementSettings.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_HandRotationSettings.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_HandRotationSettings.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_HandRotationSettings.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_HandRotationSettings.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_HandSimulationMode.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_HandSimulationMode.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_HandSimulationMode.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_HandSimulationMode.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_HandSimulationSettings.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_HandSimulationSettings.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_HandSimulationSettings.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_HandSimulationSettings.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_InputSimulationProfile.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_InputSimulationProfile.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_InputSimulationProfile.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_InputSimulationProfile.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_InputSystemDataProviders.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_InputSystemDataProviders.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_InputSystemDataProviders.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_InputSystemDataProviders.png diff --git a/External/Documentation/Images/MRTK_InputSimulation_SwitchToGGV.png b/Documentation/Images/InputSimulation/MRTK_InputSimulation_SwitchToGGV.png similarity index 100% rename from External/Documentation/Images/MRTK_InputSimulation_SwitchToGGV.png rename to Documentation/Images/InputSimulation/MRTK_InputSimulation_SwitchToGGV.png diff --git a/External/ReadMeImages/Interactable/Buttons.png b/Documentation/Images/Interactable/Buttons.png similarity index 100% rename from External/ReadMeImages/Interactable/Buttons.png rename to Documentation/Images/Interactable/Buttons.png diff --git a/External/ReadMeImages/Interactable/DefaultStates.png b/Documentation/Images/Interactable/DefaultStates.png similarity index 100% rename from External/ReadMeImages/Interactable/DefaultStates.png rename to Documentation/Images/Interactable/DefaultStates.png diff --git a/External/ReadMeImages/Interactable/DefaultTheme_button.png b/Documentation/Images/Interactable/DefaultTheme_button.png similarity index 100% rename from External/ReadMeImages/Interactable/DefaultTheme_button.png rename to Documentation/Images/Interactable/DefaultTheme_button.png diff --git a/External/ReadMeImages/Interactable/DefaultTheme_values.png b/Documentation/Images/Interactable/DefaultTheme_values.png similarity index 100% rename from External/ReadMeImages/Interactable/DefaultTheme_values.png rename to Documentation/Images/Interactable/DefaultTheme_values.png diff --git a/External/ReadMeImages/Interactable/Event_audioClip.png b/Documentation/Images/Interactable/Event_audioClip.png similarity index 100% rename from External/ReadMeImages/Interactable/Event_audioClip.png rename to Documentation/Images/Interactable/Event_audioClip.png diff --git a/External/ReadMeImages/Interactable/Event_hold.png b/Documentation/Images/Interactable/Event_hold.png similarity index 100% rename from External/ReadMeImages/Interactable/Event_hold.png rename to Documentation/Images/Interactable/Event_hold.png diff --git a/External/ReadMeImages/Interactable/Event_toggle.png b/Documentation/Images/Interactable/Event_toggle.png similarity index 100% rename from External/ReadMeImages/Interactable/Event_toggle.png rename to Documentation/Images/Interactable/Event_toggle.png diff --git a/External/ReadMeImages/Interactable/Events.png b/Documentation/Images/Interactable/Events.png similarity index 100% rename from External/ReadMeImages/Interactable/Events.png rename to Documentation/Images/Interactable/Events.png diff --git a/External/ReadMeImages/Interactable/InputFeatures.png b/Documentation/Images/Interactable/InputFeatures.png similarity index 100% rename from External/ReadMeImages/Interactable/InputFeatures.png rename to Documentation/Images/Interactable/InputFeatures.png diff --git a/External/ReadMeImages/Interactable/InputFeatures_short.png b/Documentation/Images/Interactable/InputFeatures_short.png similarity index 100% rename from External/ReadMeImages/Interactable/InputFeatures_short.png rename to Documentation/Images/Interactable/InputFeatures_short.png diff --git a/External/ReadMeImages/Interactable/InteractableExamples.png b/Documentation/Images/Interactable/InteractableExamples.png similarity index 100% rename from External/ReadMeImages/Interactable/InteractableExamples.png rename to Documentation/Images/Interactable/InteractableExamples.png diff --git a/External/ReadMeImages/Interactable/InteractableInspector.png b/Documentation/Images/Interactable/InteractableInspector.png similarity index 100% rename from External/ReadMeImages/Interactable/InteractableInspector.png rename to Documentation/Images/Interactable/InteractableInspector.png diff --git a/External/ReadMeImages/Interactable/InteractableInspector_basic.png b/Documentation/Images/Interactable/InteractableInspector_basic.png similarity index 100% rename from External/ReadMeImages/Interactable/InteractableInspector_basic.png rename to Documentation/Images/Interactable/InteractableInspector_basic.png diff --git a/External/ReadMeImages/Interactable/InteractableInspector_basicSteps.png b/Documentation/Images/Interactable/InteractableInspector_basicSteps.png similarity index 100% rename from External/ReadMeImages/Interactable/InteractableInspector_basicSteps.png rename to Documentation/Images/Interactable/InteractableInspector_basicSteps.png diff --git a/External/ReadMeImages/Interactable/InteractableReceiver.png b/Documentation/Images/Interactable/InteractableReceiver.png similarity index 100% rename from External/ReadMeImages/Interactable/InteractableReceiver.png rename to Documentation/Images/Interactable/InteractableReceiver.png diff --git a/External/ReadMeImages/Interactable/Profile_toggle.png b/Documentation/Images/Interactable/Profile_toggle.png similarity index 100% rename from External/ReadMeImages/Interactable/Profile_toggle.png rename to Documentation/Images/Interactable/Profile_toggle.png diff --git a/External/ReadMeImages/Interactable/Profiles_noTarget.png b/Documentation/Images/Interactable/Profiles_noTarget.png similarity index 100% rename from External/ReadMeImages/Interactable/Profiles_noTarget.png rename to Documentation/Images/Interactable/Profiles_noTarget.png diff --git a/External/ReadMeImages/Interactable/StatesScriptableObject.png b/Documentation/Images/Interactable/StatesScriptableObject.png similarity index 100% rename from External/ReadMeImages/Interactable/StatesScriptableObject.png rename to Documentation/Images/Interactable/StatesScriptableObject.png diff --git a/External/ReadMeImages/Interactable/Theme.png b/Documentation/Images/Interactable/Theme.png similarity index 100% rename from External/ReadMeImages/Interactable/Theme.png rename to Documentation/Images/Interactable/Theme.png diff --git a/External/ReadMeImages/MRTK-ControllerDiagram.png b/Documentation/Images/MRTK-ControllerDiagram.png similarity index 100% rename from External/ReadMeImages/MRTK-ControllerDiagram.png rename to Documentation/Images/MRTK-ControllerDiagram.png diff --git a/External/ReadMeImages/MRTK-HeadsetDefinition.png b/Documentation/Images/MRTK-HeadsetDefinition.png similarity index 100% rename from External/ReadMeImages/MRTK-HeadsetDefinition.png rename to Documentation/Images/MRTK-HeadsetDefinition.png diff --git a/External/ReadMeImages/MRTK-InputActions.png b/Documentation/Images/MRTK-InputActions.png similarity index 100% rename from External/ReadMeImages/MRTK-InputActions.png rename to Documentation/Images/MRTK-InputActions.png diff --git a/External/ReadMeImages/MRTK-NameSpaceExample.png b/Documentation/Images/MRTK-NameSpaceExample.png similarity index 100% rename from External/ReadMeImages/MRTK-NameSpaceExample.png rename to Documentation/Images/MRTK-NameSpaceExample.png diff --git a/External/ReadMeImages/MRTK-vNext-HLA.png b/Documentation/Images/MRTK-vNext-HLA.png similarity index 100% rename from External/ReadMeImages/MRTK-vNext-HLA.png rename to Documentation/Images/MRTK-vNext-HLA.png diff --git a/External/ReadMeImages/MRTK170802_Short_17.png b/Documentation/Images/MRTK170802_Short_17.png similarity index 100% rename from External/ReadMeImages/MRTK170802_Short_17.png rename to Documentation/Images/MRTK170802_Short_17.png diff --git a/External/ReadMeImages/MRTK170802_Short_18.png b/Documentation/Images/MRTK170802_Short_18.png similarity index 100% rename from External/ReadMeImages/MRTK170802_Short_18.png rename to Documentation/Images/MRTK170802_Short_18.png diff --git a/External/ReadMeImages/MRTK170802_Short_19.png b/Documentation/Images/MRTK170802_Short_19.png similarity index 100% rename from External/ReadMeImages/MRTK170802_Short_19.png rename to Documentation/Images/MRTK170802_Short_19.png diff --git a/External/ReadMeImages/MRTK170802_Short_20.png b/Documentation/Images/MRTK170802_Short_20.png similarity index 100% rename from External/ReadMeImages/MRTK170802_Short_20.png rename to Documentation/Images/MRTK170802_Short_20.png diff --git a/External/ReadMeImages/MRTK_AssetImportDialog.png b/Documentation/Images/MRTK_AssetImportDialog.png similarity index 100% rename from External/ReadMeImages/MRTK_AssetImportDialog.png rename to Documentation/Images/MRTK_AssetImportDialog.png diff --git a/External/ReadMeImages/MRTK_ConfigureDialog.png b/Documentation/Images/MRTK_ConfigureDialog.png similarity index 100% rename from External/ReadMeImages/MRTK_ConfigureDialog.png rename to Documentation/Images/MRTK_ConfigureDialog.png diff --git a/External/ReadMeImages/MRTK_ConfigureScene.png b/Documentation/Images/MRTK_ConfigureScene.png similarity index 100% rename from External/ReadMeImages/MRTK_ConfigureScene.png rename to Documentation/Images/MRTK_ConfigureScene.png diff --git a/External/ReadMeImages/MRTK_ConfiguredHierarchy.png b/Documentation/Images/MRTK_ConfiguredHierarchy.png similarity index 100% rename from External/ReadMeImages/MRTK_ConfiguredHierarchy.png rename to Documentation/Images/MRTK_ConfiguredHierarchy.png diff --git a/External/ReadMeImages/MRTK_CopyCreateConfigurationOptions.png b/Documentation/Images/MRTK_CopyCreateConfigurationOptions.png similarity index 100% rename from External/ReadMeImages/MRTK_CopyCreateConfigurationOptions.png rename to Documentation/Images/MRTK_CopyCreateConfigurationOptions.png diff --git a/External/ReadMeImages/MRTK_CopyProfileOptions.png b/Documentation/Images/MRTK_CopyProfileOptions.png similarity index 100% rename from External/ReadMeImages/MRTK_CopyProfileOptions.png rename to Documentation/Images/MRTK_CopyProfileOptions.png diff --git a/External/ReadMeImages/MRTK_Examples.png b/Documentation/Images/MRTK_Examples.png similarity index 100% rename from External/ReadMeImages/MRTK_Examples.png rename to Documentation/Images/MRTK_Examples.png diff --git a/External/ReadMeImages/MRTK_Logo_Rev.png b/Documentation/Images/MRTK_Logo_Rev.png similarity index 100% rename from External/ReadMeImages/MRTK_Logo_Rev.png rename to Documentation/Images/MRTK_Logo_Rev.png diff --git a/External/ReadMeImages/MRTK_SceneSetup.png b/Documentation/Images/MRTK_SceneSetup.png similarity index 100% rename from External/ReadMeImages/MRTK_SceneSetup.png rename to Documentation/Images/MRTK_SceneSetup.png diff --git a/External/ReadMeImages/MRTK_SelectConfigurationDialog.png b/Documentation/Images/MRTK_SelectConfigurationDialog.png similarity index 100% rename from External/ReadMeImages/MRTK_SelectConfigurationDialog.png rename to Documentation/Images/MRTK_SelectConfigurationDialog.png diff --git a/External/ReadMeImages/MRTK_UnitySetupPrompt.png b/Documentation/Images/MRTK_UnitySetupPrompt.png similarity index 100% rename from External/ReadMeImages/MRTK_UnitySetupPrompt.png rename to Documentation/Images/MRTK_UnitySetupPrompt.png diff --git a/External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_Howto.png b/Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_Howto.png similarity index 100% rename from External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_Howto.png rename to Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_Howto.png diff --git a/External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_Structure.png b/Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_Structure.png similarity index 100% rename from External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_Structure.png rename to Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_Structure.png diff --git a/External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg b/Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg similarity index 100% rename from External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg rename to Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg diff --git a/External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png b/Documentation/Images/ManipulationHandler/MRTK_Manipulation_Main.png similarity index 100% rename from External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png rename to Documentation/Images/ManipulationHandler/MRTK_Manipulation_Main.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png diff --git a/External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png b/Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png similarity index 100% rename from External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png rename to Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png diff --git a/External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg b/Documentation/Images/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg similarity index 100% rename from External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg rename to Documentation/Images/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg diff --git a/External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg b/Documentation/Images/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg similarity index 100% rename from External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg rename to Documentation/Images/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg diff --git a/External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg b/Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg similarity index 100% rename from External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg rename to Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg diff --git a/External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Main.png b/Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Main.png similarity index 100% rename from External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Main.png rename to Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Main.png diff --git a/External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Types.jpg b/Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Types.jpg similarity index 100% rename from External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Types.jpg rename to Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Types.jpg diff --git a/External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Unity.jpg b/Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Unity.jpg similarity index 100% rename from External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Unity.jpg rename to Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Unity.jpg diff --git a/External/ReadMeImages/OpenXR-HLA.jpg b/Documentation/Images/OpenXR-HLA.jpg similarity index 100% rename from External/ReadMeImages/OpenXR-HLA.jpg rename to Documentation/Images/OpenXR-HLA.jpg diff --git a/External/ReadMeImages/Packaging/AccessingViaInterfaces.png b/Documentation/Images/Packaging/AccessingViaInterfaces.png similarity index 100% rename from External/ReadMeImages/Packaging/AccessingViaInterfaces.png rename to Documentation/Images/Packaging/AccessingViaInterfaces.png diff --git a/External/ReadMeImages/Packaging/MRTKExperimental.png b/Documentation/Images/Packaging/MRTKExperimental.png similarity index 100% rename from External/ReadMeImages/Packaging/MRTKExperimental.png rename to Documentation/Images/Packaging/MRTKExperimental.png diff --git a/External/ReadMeImages/Packaging/MRTKExtensions.png b/Documentation/Images/Packaging/MRTKExtensions.png similarity index 100% rename from External/ReadMeImages/Packaging/MRTKExtensions.png rename to Documentation/Images/Packaging/MRTKExtensions.png diff --git a/External/ReadMeImages/Packaging/MRTKFoundation.png b/Documentation/Images/Packaging/MRTKFoundation.png similarity index 100% rename from External/ReadMeImages/Packaging/MRTKFoundation.png rename to Documentation/Images/Packaging/MRTKFoundation.png diff --git a/External/ReadMeImages/Pointers/MRTK_GGVPointer_HL1.jpg b/Documentation/Images/Pointers/MRTK_GGVPointer_HL1.jpg similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_GGVPointer_HL1.jpg rename to Documentation/Images/Pointers/MRTK_GGVPointer_HL1.jpg diff --git a/External/ReadMeImages/Pointers/MRTK_GGVPointer_HL2.jpg b/Documentation/Images/Pointers/MRTK_GGVPointer_HL2.jpg similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_GGVPointer_HL2.jpg rename to Documentation/Images/Pointers/MRTK_GGVPointer_HL2.jpg diff --git a/External/ReadMeImages/Pointers/MRTK_GrabPointer.jpg b/Documentation/Images/Pointers/MRTK_GrabPointer.jpg similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_GrabPointer.jpg rename to Documentation/Images/Pointers/MRTK_GrabPointer.jpg diff --git a/External/ReadMeImages/Pointers/MRTK_MousePointer.jpg b/Documentation/Images/Pointers/MRTK_MousePointer.jpg similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_MousePointer.jpg rename to Documentation/Images/Pointers/MRTK_MousePointer.jpg diff --git a/External/ReadMeImages/Pointers/MRTK_PointerProfile.jpg b/Documentation/Images/Pointers/MRTK_PointerProfile.jpg similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_PointerProfile.jpg rename to Documentation/Images/Pointers/MRTK_PointerProfile.jpg diff --git a/External/ReadMeImages/Pointers/MRTK_Pointer_Main.png b/Documentation/Images/Pointers/MRTK_Pointer_Main.png similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_Pointer_Main.png rename to Documentation/Images/Pointers/MRTK_Pointer_Main.png diff --git a/External/ReadMeImages/Pointers/MRTK_Pointers_Line.png b/Documentation/Images/Pointers/MRTK_Pointers_Line.png similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_Pointers_Line.png rename to Documentation/Images/Pointers/MRTK_Pointers_Line.png diff --git a/External/ReadMeImages/Pointers/MRTK_Pointers_Parabolic.png b/Documentation/Images/Pointers/MRTK_Pointers_Parabolic.png similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_Pointers_Parabolic.png rename to Documentation/Images/Pointers/MRTK_Pointers_Parabolic.png diff --git a/External/ReadMeImages/Pointers/MRTK_PokePointer.jpg b/Documentation/Images/Pointers/MRTK_PokePointer.jpg similarity index 100% rename from External/ReadMeImages/Pointers/MRTK_PokePointer.jpg rename to Documentation/Images/Pointers/MRTK_PokePointer.jpg diff --git a/External/ReadMeImages/Slate/MRTK_Slate_Box.png b/Documentation/Images/Slate/MRTK_Slate_Box.png similarity index 100% rename from External/ReadMeImages/Slate/MRTK_Slate_Box.png rename to Documentation/Images/Slate/MRTK_Slate_Box.png diff --git a/External/ReadMeImages/Slate/MRTK_Slate_Buttons.png b/Documentation/Images/Slate/MRTK_Slate_Buttons.png similarity index 100% rename from External/ReadMeImages/Slate/MRTK_Slate_Buttons.png rename to Documentation/Images/Slate/MRTK_Slate_Buttons.png diff --git a/External/ReadMeImages/Slate/MRTK_Slate_Main.png b/Documentation/Images/Slate/MRTK_Slate_Main.png similarity index 100% rename from External/ReadMeImages/Slate/MRTK_Slate_Main.png rename to Documentation/Images/Slate/MRTK_Slate_Main.png diff --git a/External/ReadMeImages/Slate/MRTK_Slate_Scale.png b/Documentation/Images/Slate/MRTK_Slate_Scale.png similarity index 100% rename from External/ReadMeImages/Slate/MRTK_Slate_Scale.png rename to Documentation/Images/Slate/MRTK_Slate_Scale.png diff --git a/External/ReadMeImages/Slate/MRTK_Slate_Scripts.png b/Documentation/Images/Slate/MRTK_Slate_Scripts.png similarity index 100% rename from External/ReadMeImages/Slate/MRTK_Slate_Scripts.png rename to Documentation/Images/Slate/MRTK_Slate_Scripts.png diff --git a/External/ReadMeImages/Slate/MRTK_Slate_Structure.png b/Documentation/Images/Slate/MRTK_Slate_Structure.png similarity index 100% rename from External/ReadMeImages/Slate/MRTK_Slate_Structure.png rename to Documentation/Images/Slate/MRTK_Slate_Structure.png diff --git a/External/ReadMeImages/Solver/MRTK_Solver_Main.png b/Documentation/Images/Solver/MRTK_Solver_Main.png similarity index 100% rename from External/ReadMeImages/Solver/MRTK_Solver_Main.png rename to Documentation/Images/Solver/MRTK_Solver_Main.png diff --git a/External/ReadMeImages/Solver/MRTK_Solver_Orbital.png b/Documentation/Images/Solver/MRTK_Solver_Orbital.png similarity index 100% rename from External/ReadMeImages/Solver/MRTK_Solver_Orbital.png rename to Documentation/Images/Solver/MRTK_Solver_Orbital.png diff --git a/External/ReadMeImages/SpatialAwareness/MRTKConfig_SpatialAwareness.png b/Documentation/Images/SpatialAwareness/MRTKConfig_SpatialAwareness.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/MRTKConfig_SpatialAwareness.png rename to Documentation/Images/SpatialAwareness/MRTKConfig_SpatialAwareness.png diff --git a/External/ReadMeImages/SpatialAwareness/MRTK_SpatialAwareness_Main.png b/Documentation/Images/SpatialAwareness/MRTK_SpatialAwareness_Main.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/MRTK_SpatialAwareness_Main.png rename to Documentation/Images/SpatialAwareness/MRTK_SpatialAwareness_Main.png diff --git a/External/ReadMeImages/SpatialAwareness/MeshObserverDisplaySettings.png b/Documentation/Images/SpatialAwareness/MeshObserverDisplaySettings.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/MeshObserverDisplaySettings.png rename to Documentation/Images/SpatialAwareness/MeshObserverDisplaySettings.png diff --git a/External/ReadMeImages/SpatialAwareness/MeshObserverGeneralSettings.png b/Documentation/Images/SpatialAwareness/MeshObserverGeneralSettings.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/MeshObserverGeneralSettings.png rename to Documentation/Images/SpatialAwareness/MeshObserverGeneralSettings.png diff --git a/External/ReadMeImages/SpatialAwareness/MeshObserverLevelOfDetailSettings.png b/Documentation/Images/SpatialAwareness/MeshObserverLevelOfDetailSettings.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/MeshObserverLevelOfDetailSettings.png rename to Documentation/Images/SpatialAwareness/MeshObserverLevelOfDetailSettings.png diff --git a/External/ReadMeImages/SpatialAwareness/MeshObserverPhysicsSettings.png b/Documentation/Images/SpatialAwareness/MeshObserverPhysicsSettings.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/MeshObserverPhysicsSettings.png rename to Documentation/Images/SpatialAwareness/MeshObserverPhysicsSettings.png diff --git a/External/ReadMeImages/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png b/Documentation/Images/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png rename to Documentation/Images/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png diff --git a/External/ReadMeImages/SpatialAwareness/SpatialAwarenessProfile.png b/Documentation/Images/SpatialAwareness/SpatialAwarenessProfile.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/SpatialAwarenessProfile.png rename to Documentation/Images/SpatialAwareness/SpatialAwarenessProfile.png diff --git a/External/ReadMeImages/SpatialAwareness/SpatialAwarenessSelectObserver.png b/Documentation/Images/SpatialAwareness/SpatialAwarenessSelectObserver.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/SpatialAwarenessSelectObserver.png rename to Documentation/Images/SpatialAwareness/SpatialAwarenessSelectObserver.png diff --git a/External/ReadMeImages/SpatialAwareness/SpatialAwarenessSelectSystemType.png b/Documentation/Images/SpatialAwareness/SpatialAwarenessSelectSystemType.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/SpatialAwarenessSelectSystemType.png rename to Documentation/Images/SpatialAwareness/SpatialAwarenessSelectSystemType.png diff --git a/External/ReadMeImages/SpatialAwareness/SpatialAwarenessSystemArchitecture.png b/Documentation/Images/SpatialAwareness/SpatialAwarenessSystemArchitecture.png similarity index 100% rename from External/ReadMeImages/SpatialAwareness/SpatialAwarenessSystemArchitecture.png rename to Documentation/Images/SpatialAwareness/SpatialAwarenessSystemArchitecture.png diff --git a/External/ReadMeImages/SystemKeyboard/MRTK_SystemKeyboard_Main.png b/Documentation/Images/SystemKeyboard/MRTK_SystemKeyboard_Main.png similarity index 100% rename from External/ReadMeImages/SystemKeyboard/MRTK_SystemKeyboard_Main.png rename to Documentation/Images/SystemKeyboard/MRTK_SystemKeyboard_Main.png diff --git a/External/ReadMeImages/Tooltip/MRTK_Tooltip_Main.png b/Documentation/Images/Tooltip/MRTK_Tooltip_Main.png similarity index 100% rename from External/ReadMeImages/Tooltip/MRTK_Tooltip_Main.png rename to Documentation/Images/Tooltip/MRTK_Tooltip_Main.png diff --git a/External/ReadMeImages/Unity_ImportAssetOption.png b/Documentation/Images/Unity_ImportAssetOption.png similarity index 100% rename from External/ReadMeImages/Unity_ImportAssetOption.png rename to Documentation/Images/Unity_ImportAssetOption.png diff --git a/External/ReadMeImages/favicon.ico b/Documentation/Images/favicon.ico similarity index 100% rename from External/ReadMeImages/favicon.ico rename to Documentation/Images/favicon.ico diff --git a/External/Documentation/Images/MRTK_GettingStarted_TMPro.png b/Documentation/Images/getting_started/MRTK_GettingStarted_TMPro.png similarity index 100% rename from External/Documentation/Images/MRTK_GettingStarted_TMPro.png rename to Documentation/Images/getting_started/MRTK_GettingStarted_TMPro.png diff --git a/External/ReadMeImages/gltf/boombox_screenshot.jpg b/Documentation/Images/gltf/boombox_screenshot.jpg similarity index 100% rename from External/ReadMeImages/gltf/boombox_screenshot.jpg rename to Documentation/Images/gltf/boombox_screenshot.jpg diff --git a/External/ReadMeImages/gltf/lantern_screenshot.jpg b/Documentation/Images/gltf/lantern_screenshot.jpg similarity index 100% rename from External/ReadMeImages/gltf/lantern_screenshot.jpg rename to Documentation/Images/gltf/lantern_screenshot.jpg diff --git a/External/ReadMeImages/icon_academy.png b/Documentation/Images/icon_academy.png similarity index 100% rename from External/ReadMeImages/icon_academy.png rename to Documentation/Images/icon_academy.png diff --git a/External/ReadMeImages/icon_community.png b/Documentation/Images/icon_community.png similarity index 100% rename from External/ReadMeImages/icon_community.png rename to Documentation/Images/icon_community.png diff --git a/External/ReadMeImages/icon_design.png b/Documentation/Images/icon_design.png similarity index 100% rename from External/ReadMeImages/icon_design.png rename to Documentation/Images/icon_design.png diff --git a/External/ReadMeImages/icon_development.png b/Documentation/Images/icon_development.png similarity index 100% rename from External/ReadMeImages/icon_development.png rename to Documentation/Images/icon_development.png diff --git a/External/ReadMeImages/issue_selection_prompt.png b/Documentation/Images/issue_selection_prompt.png similarity index 100% rename from External/ReadMeImages/issue_selection_prompt.png rename to Documentation/Images/issue_selection_prompt.png diff --git a/External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png b/Documentation/Images/mrdevcenter/icon-azurespatialanchors.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png rename to Documentation/Images/mrdevcenter/icon-azurespatialanchors.png diff --git a/External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png b/Documentation/Images/mrdevcenter/icon-azurespeechservices.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png rename to Documentation/Images/mrdevcenter/icon-azurespeechservices.png diff --git a/External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png b/Documentation/Images/mrdevcenter/icon-azurevisionservices.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png rename to Documentation/Images/mrdevcenter/icon-azurevisionservices.png diff --git a/External/ReadMeImages/mrdevcenter/icon-design.png b/Documentation/Images/mrdevcenter/icon-design.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-design.png rename to Documentation/Images/mrdevcenter/icon-design.png diff --git a/External/ReadMeImages/mrdevcenter/icon-develop.png b/Documentation/Images/mrdevcenter/icon-develop.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-develop.png rename to Documentation/Images/mrdevcenter/icon-develop.png diff --git a/External/ReadMeImages/mrdevcenter/icon-discover.png b/Documentation/Images/mrdevcenter/icon-discover.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-discover.png rename to Documentation/Images/mrdevcenter/icon-discover.png diff --git a/External/ReadMeImages/mrdevcenter/icon-distribute.png b/Documentation/Images/mrdevcenter/icon-distribute.png similarity index 100% rename from External/ReadMeImages/mrdevcenter/icon-distribute.png rename to Documentation/Images/mrdevcenter/icon-distribute.png diff --git a/External/ReadMeImages/mrt_logo.png b/Documentation/Images/mrt_logo.png similarity index 100% rename from External/ReadMeImages/mrt_logo.png rename to Documentation/Images/mrt_logo.png diff --git a/External/ReadMeImages/mrt_logo_icon.png b/Documentation/Images/mrt_logo_icon.png similarity index 100% rename from External/ReadMeImages/mrt_logo_icon.png rename to Documentation/Images/mrt_logo_icon.png diff --git a/Documentation/Input/Controllers.md b/Documentation/Input/Controllers.md index c6a97e127ce..a656dc59dc1 100644 --- a/Documentation/Input/Controllers.md +++ b/Documentation/Input/Controllers.md @@ -2,4 +2,4 @@ Controllers are created and destroyed automatically by [**input providers**](InputProviders.md). Each controller type has a number of *physical inputs* defined by an *axis type*, telling us the data type of the input value (Digital, Single Axis, Dual Axis, Six Dof, ...), and an *input type* (Button Press, Trigger, Thumb Stick, Spatial Pointer, ...) describing the origin of the input. Physical inputs are mapped to *input actions* via in the **Controller Input Mapping Profile**, under the *Input System Profile* in the Mixed Reality Toolkit component. - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Input/Dictation.md b/Documentation/Input/Dictation.md index ced1d68868c..bbe2848896c 100644 --- a/Documentation/Input/Dictation.md +++ b/Documentation/Input/Dictation.md @@ -2,11 +2,11 @@ Dictation allows users to record audio clips and obtain a transcription. To use it make sure that a dictation system is registered in the *Input System Profile*. **Windows Dictation Input Provider** is the dication system provided out of the box but alternative dictation systems can be created implementing [`IMixedRealityDictationSystem`](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityDictationSystem). - + Once you have a dictation service set up, you can use the [`DictationHandler`](xref:Microsoft.MixedReality.Toolkit.Input.DictationHandler) script to start and stop recording sessions and obtain the transcription results via UnityEvents. - + - **Dictation Hypothesis** is raised as the user speaks with early, rough transcriptions of the audio captured so far. - **Dictation Result** is raised at the end of each sentence (i.e. when the user pauses) with the final transcription of the audio captured so far. @@ -15,4 +15,4 @@ Once you have a dictation service set up, you can use the [`DictationHandler`](x Have a look at `MixedRealityToolkit.Examples\Demos\Input\Scenes\Dictation` to see the `DictationHandler` script in use. If you need more control, you can either extend this script or create your own implementing [`IMixedRealityDictationHandler`](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityDictationHandler) to receive dictation events directly. - + diff --git a/Documentation/Input/Gestures.md b/Documentation/Input/Gestures.md index ae8e3821d59..f8022ddbcdc 100644 --- a/Documentation/Input/Gestures.md +++ b/Documentation/Input/Gestures.md @@ -13,7 +13,7 @@ Gestures are input events based on human hands. There are two types of devices t Both of these input sources use the _Gesture Settings_ profile to translate Unity's Touch and Gesture events respectively into MRTK's [Input Actions](InputActions.md). This profile can be found under the _Input System Settings_ profile. - + ## Gesture Events diff --git a/Documentation/Input/InputActions.md b/Documentation/Input/InputActions.md index 113c9f57c96..a04b13eeb35 100644 --- a/Documentation/Input/InputActions.md +++ b/Documentation/Input/InputActions.md @@ -2,4 +2,4 @@ Input actions can be configured in the **Input Actions Profile**, inside the *Input System Profile* in the Mixed Reality Toolkit component, specifying a name for the action and the *Axis Type* of the physical inputs it can be mapped to. The input action mapped to a physical input, if any, is included in [*input events*](InputEvents.md). - \ No newline at end of file + \ No newline at end of file diff --git a/Documentation/Input/InputProviders.md b/Documentation/Input/InputProviders.md index cc96f1ae150..12cee9df025 100644 --- a/Documentation/Input/InputProviders.md +++ b/Documentation/Input/InputProviders.md @@ -2,7 +2,7 @@ Input providers are registered in the **Registered Service Providers Profile**, found in the Mixed Reality Toolkit component: - + These are the input providers available out of the box, together with their corresponding controllers: diff --git a/Documentation/Input/Overview.md b/Documentation/Input/Overview.md index e1af02992b9..b16d454abb7 100644 --- a/Documentation/Input/Overview.md +++ b/Documentation/Input/Overview.md @@ -13,6 +13,6 @@ Inputs are produced by [**Input Providers**](InputProviders.md). Each provider c Controllers can have [**Pointers**](Pointers.md) attached to them that query the scene to determine the game object with focus and raise [**Pointer Events**](Pointers.md#pointer-events) on it. As an example, our *line pointer* performs a raycast against the scene using the controller pose to compute the origin and direction of the ray. The pointers created for each controller are set up in the **Pointer Profile**, under the *Input System Profile*. - + Event flow. While you can handle input events directly in UI components it is recommended to use pointer events to keep the implementation device-independent. \ No newline at end of file diff --git a/Documentation/Input/Pointers.md b/Documentation/Input/Pointers.md index c97f8f7aa04..9a294a1338a 100644 --- a/Documentation/Input/Pointers.md +++ b/Documentation/Input/Pointers.md @@ -2,7 +2,7 @@ Pointers are instanced automatically at runtime when a new controller is detected. You can have more than one pointer attached to a controller; for example, with the default pointer profile, WMR controllers get both a line and a parabolic pointer for normal selection and teleportation respectively. Pointers communicate with each other to decide which one is active. The pointers created for each controller are set up in the **Pointer Profile**, under the *Input System Profile*. - + MRTK provides a set of pointer prefabs in *Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers*. You can use your own prefabs as long as they contain one of the pointer scripts in *Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers* or any other script implementing [`IMixedRealityPointer`](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealityPointer). diff --git a/Documentation/Input/Speech.md b/Documentation/Input/Speech.md index 5588871889e..ab8bab935c4 100644 --- a/Documentation/Input/Speech.md +++ b/Documentation/Input/Speech.md @@ -6,6 +6,6 @@ Speech input providers, like *Windows Speech Input*, don't create any controller - Specify a **key code** that will produce the same speech event when pressed. - Add a **localization key** that will be used in UWP apps to obtain the localized keyword from the app resources. - + You can use the [**`Speech Input Handler`**](xref:Microsoft.MixedReality.Toolkit.Input.SpeechInputHandler) script to handle speech commands using [**UnityEvents**](https://docs.unity3d.com/Manual/UnityEvents.html). The *Speech* demo, in `MixedRealityToolkit.Examples\Demos\Input\Scenes\Speech`, shows how to do this. You can also listen to speech command events directly in your own script by implementing [`IMixedRealitySpeechHandler`](xref:Microsoft.MixedReality.Toolkit.Input.IMixedRealitySpeechHandler) (see table of [event handlers](InputEvents.md)). \ No newline at end of file diff --git a/Documentation/InputSimulation/InputSimulationService.md b/Documentation/InputSimulation/InputSimulationService.md index ee7015a9b86..b6348f65311 100644 --- a/Documentation/InputSimulation/InputSimulationService.md +++ b/Documentation/InputSimulation/InputSimulationService.md @@ -11,7 +11,7 @@ Users can use a conventional keyboard and mouse combination to control simulated Input simulation is enabled by default in MRTK. -Input simulation is an optional [Mixed Reality service](../../External/Documentation/MixedRealityServices.md). It can be added as a data provider in the [Input System profile](../TODO.md). +Input simulation is an optional [Mixed Reality service](../MixedRealityServices.md). It can be added as a data provider in the [Input System profile](../TODO.md). * __Type__ must be _Microsoft.MixedReality.Toolkit.Input > InputSimulationService_. * __Platform(s)__ should always be _Windows Editor_ since the service depends on keyboard and mouse input. * __Profile__ has all settings for input simulation. @@ -19,22 +19,22 @@ Input simulation is an optional [Mixed Reality service](../../External/Documenta | __Warning__: Any type of profile can be assigned to services at the time of this writing. If you assign a different profile to the service, make sure to use a profile of type _Input Simulation_ or it will not work! | | --- | - - + + Open the linked profile to access settings for input simulation. - - + + # Camera Control Head movement can be emulated by the Input Simulation Service. - - + + ## Rotating the camera @@ -56,8 +56,8 @@ Press and hold the movement keys (W/A/S/D for forward/left/back/right). The input simulation supports emulated hand devices. These virtual hands can interact with any object that supports regular hand devices, such as buttons or grabable objects. - - + + The __Hand Simulation Mode__ switches between two distinct input models. @@ -76,22 +76,22 @@ The __Hand Simulation Mode__ switches between two distinct input models. ## Controlling hand movement - - + + Press and hold the _Left/Right Hand Manipulation Key_ (default: Left Shift/Space for left/right respectively) to gain control of either hand. While the manipulation key is pressed, the hand will appear in the viewport. Mouse movement will move the hand in the view plane. Once the manipulation key is released the hands will disappear after a short _Hand Hide Timeout_. To toggle hands on permanently, press the _Toggle Left/Right Hand Key_ (default: T/Y for left/right respectively). Press the toggle key again to hide the hands again. - - + + Hands can be moved further or closer to the camera using the _mouse wheel_. - - + + Hands can be rotated when precise direction is required. @@ -105,8 +105,8 @@ Hands can be rotated when precise direction is required. Hand gestures such as pinching, grabbing, poking, etc. can also be simulated. - - + + 1. First enable hand control using the manipulation keys (Left Shift/Space) @@ -148,8 +148,8 @@ For manipulating objects with two hands at the same time the persistent hand mod 1. Enable GGV simulation by switching __Hand Simulation Mode__ to _Gestures_ in the [Input Simulation Profile](#enabling-the-input-simulation-service) - - + + 2. Rotate the camera to point the gaze cursor at the interactable object (right mouse button) diff --git a/Documentation/InputSystem/HandTracking.md b/Documentation/InputSystem/HandTracking.md index e63c8c34977..7a8193ef3a2 100644 --- a/Documentation/InputSystem/HandTracking.md +++ b/Documentation/InputSystem/HandTracking.md @@ -2,8 +2,8 @@ The _Hand Tracking profile_ is found under the _Input System profile_. It contains settings for customizing hand representation. - - + + ## Joint Prefabs @@ -15,16 +15,16 @@ By default the hand joint prefabs are simple geometric primitives. These can be | Warning: Avoid using complex scripts or expensive rendering in joint prefabs, since joint objects are transformed on every frame and can have significant performance cost! | | --- | - - + + ## Hand Mesh Prefab The hand mesh is used if fully defined mesh data is provided by the hand tracking device. The mesh renderable in the prefab is replaced by data from the device, so a dummy mesh such as a cube is sufficient. The material of the prefab is used for the hand mesh. - - + + Hand mesh display can have a noticeable performance impact, for this reason it can be disabled entirely using the _Enable Hand Mesh Updates_ option. diff --git a/NOTICE.md b/Documentation/Legal/NOTICE.md similarity index 100% rename from NOTICE.md rename to Documentation/Legal/NOTICE.md diff --git a/MRTK-vNext.md b/Documentation/MRTK-vNext.md similarity index 98% rename from MRTK-vNext.md rename to Documentation/MRTK-vNext.md index 445b6a5ff6d..d2169ba17ec 100644 --- a/MRTK-vNext.md +++ b/Documentation/MRTK-vNext.md @@ -9,7 +9,7 @@ To rearchitect the current Mixed Reality Toolkit to provide: ## Outline Architecture -![](External/ReadMeImages/MRTK-vNext-HLA.png) +![](Images/MRTK-vNext-HLA.png)
Figure 1 : Draft High-Level architecture
The internal side of the MRTK, is internal / private, not something a user would need to use / access. We can debate whether we still allow some of it to be “open” for customization. But I feel that should be through users creating “extensions” rather than modifying base code. @@ -57,7 +57,7 @@ Following the feedback we’ve received both internally and through current cons The new MRTK approach would span across the Application and SDK/Device layers, seeing how OpenXR is a Device to the new architecture. -![](External/ReadMeImages/OpenXR-HLA.jpg) +![](Images/OpenXR-HLA.jpg)
Figure 2 : OpenXR architecture
# Expected Experience reference (starter for 10) diff --git a/Documentation/MixedRealityConfigurationGuide.md b/Documentation/MixedRealityConfigurationGuide.md index 8226bde11e3..4a8926675e7 100644 --- a/Documentation/MixedRealityConfigurationGuide.md +++ b/Documentation/MixedRealityConfigurationGuide.md @@ -1,6 +1,6 @@ # Mixed Reality Toolkit Configuration Guide -![](../External/ReadMeImages/MRTK_Logo_Rev.png) +![](../Documentation/Images/MRTK_Logo_Rev.png) The Mixed Reality Toolkit centralizes as much of the configuration required to manage the toolkit as possible (except for true runtime "things"). @@ -20,7 +20,7 @@ The main configuration profile, which is attached to the *MixedRealityToolkit* G > The Mixed Reality Toolkit "locks" the default configuration screens to ensure you always have a common start point for your project and we encourage you to start defining your own settings as your project evolves. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ActiveConfiguration.png) > All the "default" profiles for the Mixed Reality Toolkit can be found in the SDK project in the following folder @@ -28,7 +28,7 @@ The main configuration profile, which is attached to the *MixedRealityToolkit* G When you open the main Mixed Reality Toolkit Configuration Profile, you will see the following screen in the inspector: -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_MixedRealityToolkitConfigurationScreen.png) > If you select a MixedRealityToolkitConfigurationProfile asset without the MixedRealityToolkit in the scene, it will ask you if you want the MRTK to automatically setup the scene for you. This is optional, however, there must be an active MixedRealityToolkit object in the scene to access all the configuration screens. @@ -65,7 +65,7 @@ From here you can navigate to all the configuration profiles for the MRTK, inclu Located on the main Mixed Reality Toolkit configuration page, this setting defines the default operation for the Mixed Reality environment for your project. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ExperienceSettings.png) --- @@ -75,7 +75,7 @@ Located on the main Mixed Reality Toolkit configuration page, this setting defin The camera settings define how the camera will be setup for your Mixed Reality project, defining the generic clipping, quality and transparency settings. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_CameraProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the main Mixed Reality Toolkit Configuration screen. @@ -88,11 +88,11 @@ The Mixed Reality Project provides a robust and well-trained input system for ro > The MRTK also allows you to write your own Input System and you can use the selection below to switch the system used without rewriting the toolkit. For more information on writing your own systems, [please see this guide to building Registered Services]() (Coming soon) -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemSelection.png) Behind the Input System provided by the MRTK are several other systems, these help to drive and manage the complex inter-weavings required to abstract out the complexities of a multi-platform / mixed reality framework. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputSystemProfile.png) Each of the individual profiles are detailed below: @@ -113,7 +113,7 @@ Each of the individual profiles are detailed below: The boundary system translates the perceived boundary reported by the underlying platforms boundary / guardian system. The Boundary visualizer configuration gives you the ability to automatically show the recorded boundary within your scene relative to the user's position. The boundary will also react / update based on where the user teleports within the scene. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_BoundaryVisualizationProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the main Mixed Reality Toolkit Configuration screen. --- @@ -125,7 +125,7 @@ The Mixed Reality Project provides a full featured Teleportation system for mana > The MRTK also allows you to write your own Teleportation System and you can use the selection below to switch the system used without rewriting the toolkit. For more information on writing your own systems, [please see this guide to building Registered Services]() (Coming soon) -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_TeleportationSystemSelection.png) --- @@ -137,7 +137,7 @@ You can view the architecture behind the [MRTK Spatial Awareness system here](.. > The MRTK also allows you to write your own Spatial Awareness System and you can use the selection below to switch the system used without rewriting the toolkit. For more information on writing your own systems, [please see this guide to building Registered Services]() (Coming soon) -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessSystemSelection.png) The Mixed Reality Toolkit Spatial Awareness configuration lets you tailor how the system starts, whether it is automatically when the application starts or later programmatically as well as setting the extents for the Field of View. @@ -147,7 +147,7 @@ This is only applicable for devices that can provide a scanned environment, such > Note, the Spatial Awareness system is still in active development, please report any issues or requests in the [MRTK Issues section on GitHub](https://github.com/Microsoft/MixedRealityToolkit-Unity/issues) -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpatialAwarenessProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the main Mixed Reality Toolkit Configuration screen. --- @@ -159,11 +159,11 @@ An optional but highly useful feature of the MRTK is the plugin Diagnostics func > The MRTK also allows you to write your own Diagnostic System and you can use the selection below to switch the system used without rewriting the toolkit. For more information on writing your own systems, [please see this guide to building Registered Services]() (Coming soon) -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsSystemSelection.png) The diagnostics profile provides several simple systems to monitor whilst the project is running, including a handy On/Off switch to enable / disable the display pane in the scene. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_DiagnosticsProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the main Mixed Reality Toolkit Configuration screen. --- @@ -179,7 +179,7 @@ Any registered service still gets the full advantage of all of the Unity events, Check out the [Guide to building Registered Services]() (Coming Soon) for more details about creating your own services -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_RegisteredServiceProfidersProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the main Mixed Reality Toolkit Configuration screen. --- @@ -206,7 +206,7 @@ Events utilizing Input Actions are not limited to physical controllers and can s > Input Actions are one of the few components which is not editable at runtime, they are a design time configuration only. This profile should not be swapped out whilst the project is running due to the framework (and your projects) dependency on the ID's generated for each action. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionsProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the Mixed Reality Toolkit Input System Settings screen. --- @@ -222,7 +222,7 @@ For example, converting the single Dual Axis input event from a DPad in to the 4 Input Action Rules can be configured for any of the available input axis. However, Input actions from one Axis type can be translated to another Input Action of the same Axis type. You can map a Dual Axis action to another Dual Axis action, but not to a Digital or None action. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputActionRulesProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the Mixed Reality Toolkit Input System Settings screen. --- @@ -236,7 +236,7 @@ Pointers can also be visualized within the active scene using one of the many Li > See the [Guide to Pointers documentation]() **Coming Soon** for more information on creating your own pointers. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_InputPointerProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the Mixed Reality Toolkit Input System Settings screen. @@ -257,7 +257,7 @@ Gestures are a system specific implementation allowing you to assign Input Actio > Note, the current implementation is for the HoloLens only and will be enhanced for other systems as they are added to the Toolkit in the future (no dates yet). -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_GesturesProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the Mixed Reality Toolkit Input System Settings screen. --- @@ -269,7 +269,7 @@ Like Gestures, some runtime platforms also provide intelligent Speech to Text fu > The system currently only supports speech when running on Windows 10 platforms, e.g. HoloLens and Windows 10 desktop and will be enhanced for other systems as they are added to the Toolkit in the future (no dates yet). -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_SpeechCommandsProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the Mixed Reality Toolkit Input System Settings screen. --- @@ -281,7 +281,7 @@ One of the core configuration screens for the Mixed Reality Toolkit is the abili The configuration screen below allows you to configure any of the controllers currently recognized by the toolkit. -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerMappingProfile.png) The MRTK provides a default configuration for the following controllers / systems: @@ -297,7 +297,7 @@ The MRTK provides a default configuration for the following controllers / system Clicking on the Image for any of the pre-built controller systems allows you to configure a single Input Action for all its corresponding inputs, for example, see the Oculus Touch controller configuration screen below: -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_OculusTouchConfigScreen.png) There is also an advanced screen for configuring other OpenVR or Unity input controllers that are not identified above. @@ -315,6 +315,6 @@ This can be configured at a "Global" (all instances of a controller for a specif If your controller representation in the scene needs to be offset from the physical controller position, then simply set that offset against the controller model's prefab. (e.g. setting the transform position of the controller prefab with an offset position) -![](../External/ReadMeImages/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png) +![](../Documentation/Images/MixedRealityToolkitConfigurationProfileScreens/MRTK_ControllerVisualizationProfile.png) > Clicking on the "Back to Configuration Profile" button will take you back to the Mixed Reality Toolkit Input System Settings screen. \ No newline at end of file diff --git a/External/Documentation/MixedRealityServices.md b/Documentation/MixedRealityServices.md similarity index 100% rename from External/Documentation/MixedRealityServices.md rename to Documentation/MixedRealityServices.md diff --git a/Documentation/Packaging/MRTK_Modularization.md b/Documentation/Packaging/MRTK_Modularization.md index 49616a75362..f5f77269b8e 100644 --- a/Documentation/Packaging/MRTK_Modularization.md +++ b/Documentation/Packaging/MRTK_Modularization.md @@ -46,7 +46,7 @@ To ensure that there are no direct links between components, MRTK v2 utilizes in services, data providers and application code. These interfaces are defined in and all communication is routed through the Mixed Reality Toolkit core component. -![Using the spatial awareness system via interfaces](../../External/ReadMeImages/Packaging/AccessingViaInterfaces.png) +![Using the spatial awareness system via interfaces](../../Documentation/Images/Packaging/AccessingViaInterfaces.png) ### Manual Componentization diff --git a/Documentation/Packaging/MRTK_Packages.md b/Documentation/Packaging/MRTK_Packages.md index e4a8fa6a2c6..b0bcd77f572 100644 --- a/Documentation/Packaging/MRTK_Packages.md +++ b/Documentation/Packaging/MRTK_Packages.md @@ -12,7 +12,7 @@ There are three categories of MRTK packages: The Mixed Reality Toolkit Foundation is the set of packages that enable your application to leverage common functionality across Mixed Reality Platforms. These packages are released and supported by Microsoft from source code in the [mrtk_release](https://github.com/Microsoft/MixedRealityToolkit-Unity/tree/mrtk_release) branch on GitHub. -![MRTK Foundation Packages](../../External/ReadMeImages/Packaging/MRTKFoundation.png) +![MRTK Foundation Packages](../../Documentation/Images/Packaging/MRTKFoundation.png) The MRTK Foundation is comprised of: @@ -133,13 +133,13 @@ MRTK Extension packages are a collection of packages written by Microsoft and th Extension packages may provide new features and new platform support. Over time, extensions may, with the assistance and approval of the authors, be migrated into the MRTK Foundation at which time they will be released and supported by Microsoft. -![MRTK Extension Package](../../External/ReadMeImages/Packaging/MRTKExtensions.png) +![MRTK Extension Package](../../Documentation/Images/Packaging/MRTKExtensions.png) ## Experimental Packages Experimental packages provide the ability to flight prototype features, pre-releases and exciting new ideas. The goal of most experimental packages is to try something new and to gauge customer interest. Many, though not all, experimental packages will be re-released as extensions once the prototyping and testing phase completes. -![MRTK Experimental Packages](../../External/ReadMeImages/Packaging/MRTKExperimental.png) +![MRTK Experimental Packages](../../Documentation/Images/Packaging/MRTKExperimental.png) ## Conclusion diff --git a/Documentation/README_AppBar.md b/Documentation/README_AppBar.md index bfe082c6900..88905644c7e 100644 --- a/Documentation/README_AppBar.md +++ b/Documentation/README_AppBar.md @@ -1,12 +1,12 @@ # App Bar -![App Bar](../External/ReadMeImages/AppBar/MRTK_AppBar_Main.png) +![App Bar](../Documentation/Images/AppBar/MRTK_AppBar_Main.png) App Bar is a UI component used with Bounding Box. Using the 'Adjust' button, you can turn on/off the Bounding Box interface for manipulating object. ## How to use App Bar Drag and drop **AppBar** prefab into the scene hierarchy. In the inspector panel of the AppBar, you will see **Bounding Box** under **Target Bounding Box** section. Assign any objects that has Bounding Box. **Important: Target object's Bounding Box activation option should be 'Activate Manually'** - + - + diff --git a/Documentation/README_BoundingBox.md b/Documentation/README_BoundingBox.md index 53154b6dd22..4af7faead39 100644 --- a/Documentation/README_BoundingBox.md +++ b/Documentation/README_BoundingBox.md @@ -1,5 +1,5 @@ # Bounding Box # -![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png) +![Bounding Box](../Documentation/Images/BoundingBox/MRTK_BoundingBox_Main.png) The `BoundingBox` script provides basic functionality for transforming objects in Windows Mixed Reality. Using handles on the corners and edges, you can scale or rotate the object. On HoloLens 2, the bounding box responds to your finger's proximity. It shows visual feedback to help perceive the distance from the object. MRTK's bounding box provides various options which allow you to easily customize the interactions and visuals.  @@ -8,15 +8,15 @@ For more information please see [App Bar and Bounding Box](https://docs.microso ### How to use Bounding Box ### You can enable Bounding Box by simply assigning the `BoundingBox` script to any GameObject. Assign the object with Box Collider to 'Bounds Override' field in the Inspector. -![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Assign.png) +![Bounding Box](../Documentation/Images/BoundingBox/MRTK_BoundingBox_Assign.png) ### Example Scene ### You can find bounding box examples in the *HandInteractionExamples.unity* scene: - + ### Inspector Properties ### -![Bounding Box](../External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Structure.png) +![Bounding Box](../Documentation/Images/BoundingBox/MRTK_BoundingBox_Structure.png) #### Target Object #### This specifies which object will get transformed by the bounding box manipulation. If no object is set, the bounding box defaults to the owner object. @@ -54,11 +54,11 @@ Bounding Box provides the following events. The example uses these events to pla - **Scale Started** - **Scale Ended** - + ### Make an object movable with Manipulation Handler ### If you want to make the object movable using far interaction, you can combine [`ManipulationHandler.cs`](README_ManipulationHandler.md) with `BoundingBox.cs`. [ManipulationHandler](README_ManipulationHandler.md) supports both one and two-handed interactions. To make [`ManipulationHandler.cs`](README_ManipulationHandler.md) work with near interaction, you should add `NearInteractionGrabbable.cs` too. - + In order for the bounding box edges to be highlighted the same way when moving it using [`ManipulationHandler`](README_ManipulationHandler.md)'s far interaction, it is advised to connect its events for **On Manipulation Started** / **On Manipulation Ended** to `BoundingBox.HighlightWires` / `BoundingBox.UnhighlightWires` respectively, as shown in the screenshot above. diff --git a/Documentation/README_Button.md b/Documentation/README_Button.md index b61e2dc8a42..b3c088f163e 100644 --- a/Documentation/README_Button.md +++ b/Documentation/README_Button.md @@ -1,5 +1,5 @@ # Button # -![Button](../External/ReadMeImages/Button/MRTK_Button_Main.png) +![Button](../Documentation/Images/Button/MRTK_Button_Main.png) The button supports all available input methods including articulated hand input for the near interactions and gaze + air-tap for the far interactions. You can also use voice command to trigger the button. ## How to use the Pressable Button prefab @@ -7,25 +7,25 @@ Simply drag [PressableButton.prefab](https://github.com/Microsoft/MixedRealityTo The Pressable Buttons in the HandInteractionExamples scene use [`Interactable`](README_Interactable.md)'s *OnClick* event to trigger a change in the color of a cube. This event gets triggered for different types of input methods such as gaze, air-tap, hand-ray, as well as physical button presses through the `PressableButton` script. - + You can configure when the `PressableButton` fires the [`Interactable`](README_Interactable.md)'s *OnClick* event via the `PhysicalPressEventRouter` on the button. For example, you can set *OnClick* to fire when the button is first pressed, as opposed to be pressed, and then released, by setting *Interactable On Click* to *Event On Press*. - + To leverage specific articulated hand input state information, you can use `PressableButton`'s events - *Touch Begin*, *Touch End*, *Button Pressed*, *Button Released*. These events will not fire in response to air-tap, hand-ray, or eye inputs, however. - + ## Interaction States In the idle state, the button's front plate is not visible. As a finger approaches or a cursor from gaze input targets the surface, the front plate's glowing border becomes visible. There is additional highlighting of the fingertip position on the front plate surface. When pushed with a finger, the front plate moves with the fingertip. When the fingertip touches the surface of the front plate, it shows a subtle pulse effect to give visual feedback of the touch point. - + The subtle pulse effect is triggered by the `PressableButton.` The `PressableButton` looks for `ProximityLight(s)` that live on the currently interacting pointer. If any `ProximityLight(s)` are found, the ProximityLight.Pulse method is called which automatically animates shader parameters to display a pulse. ## Property Inspector of PressableButton -![Button](../External/ReadMeImages/Button/MRTK_Button_Structure.png) +![Button](../Documentation/Images/Button/MRTK_Button_Structure.png) The Pressable Button prefab is consists of the following elements: @@ -48,7 +48,7 @@ Unity `Audio Source` for the audio feedback clips Required to make any object touchable with articulated hand input. ### Prefab Layout -![Button](../External/ReadMeImages/Button/MRTK_Button_Layout.png) +![Button](../Documentation/Images/Button/MRTK_Button_Layout.png) The *ButtonContent* object contains front plate, text label and icon. The *FrontPlate* responds to the proximity of the index fingertip using the *Button_Box* shader. It shows glowing borders, proximity light, and a pulse effect on touch. The text label is made with TextMesh Pro. *SeeItSayItLabel*'s visibility is controlled by [`Interactable`](README_Interactable.md)'s theme. @@ -57,17 +57,17 @@ The *ButtonContent* object contains front plate, text label and icon. The *Fron #### Speech Input Handler The [`Interactable`](README_Interactable.md) script in Pressable Button already implements IMixedRealitySpeechHandler. A voice command keyword can be set here.  - + #### Speech Input Profile Additionally, you need to register the voice command keyword in the global `Speech Commands Profile`.  - + #### See-it, Say-it label The Pressable Button prefab has a placeholder TextMesh Pro label under the *SeeItSayItLabel* object. You can use this label to communicate the voice command keyword for the button to the user. - + ## Using PressableButton on other types of objects @@ -75,10 +75,10 @@ You can use the `PressableButton`s script to configure an object to react to fin In the HandInteractionExamples scene, you can take a look at the piano and round button examples which are both using `PressableButton`.  - + - + Each piano key has a `PressableButton` and a `NearInteractionTouchable` script assigned. It is important to verify that the *Local Forward* direction of `NearInteractionTouchable` is correct. It is represented by a white arrow in the editor. Make sure the arrow points away from the button's front face: - + diff --git a/Documentation/README_FingertipVisualization.md b/Documentation/README_FingertipVisualization.md index a1a65b8e395..f3ffcc334f9 100644 --- a/Documentation/README_FingertipVisualization.md +++ b/Documentation/README_FingertipVisualization.md @@ -1,5 +1,5 @@ # Fingertip Visualization -![Fingertip Visualization](../External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png) +![Fingertip Visualization](../Documentation/Images/Fingertip/MRTK_FingertipVisualization_Main.png) The fingertip affordance helps the user recognize the distance from the target object. The ring shape visual adjusts its size based on the distance from the fingertip to the object. The fingertip visualization is primarily controlled by the `FingerCursor` prefab (and script) which is spawned as the cursor prefab of the `PokePointer`. Other components of the visualization include the `ProximityLight` script, and `MixedRealityStandard` shader. @@ -18,21 +18,21 @@ At a high level the fingertip visualization works by using a proximity light to You can find fingertip visualization examples in almost any scene that works with articulated hands, but is prominent in the HandInteractionExamples.unity scene. -![Fingertip Visualization](../External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_States.png) +![Fingertip Visualization](../Documentation/Images/Fingertip/MRTK_FingertipVisualization_States.png) ### Inspector Properties ### #### FingerCursor #### - + Many of the FingerCursor properties are inherited from the BaseCursor class. Important properties include the far/near surface margins and widths which drive the finger ring animation in the MixedRealityStandard shader. For other properties please hover over the inspector tool tips. #### ProximityLight #### -![Fingertip Visualization](../External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png) +![Fingertip Visualization](../Documentation/Images/Fingertip/MRTK_FingertipVisualization_Proximity_Light_Inspector.png) The proximity light settings control how the light looks when near and far from a surface. The center, middle, and outer colors control the gradient look of the light and can be custom tailored for the color palette of your application. Note, the colors are HDR (High Dynamic Range) to allow users to brighten the proximity light to values above one. For other properties please hover over the inspector tool tips. #### MixedRealityStandard Shader #### - + The MixedRealityStandard shader is used for many effects in the MRTK. The two settings important for fingertip visualization are "Near Fade" and "Proximity Light." Near Fade allows objects to fade in/out as a camera or light nears them. Make sure to check "Light" to allow proximity lights to drive the fade (rather than the camera). You can reverse the values of "Fade Begin" and "Fade Complete" to reverse a fade. Check "Proximity Light" for any surface you would like the proximity light to brighten. For other properties please hover over the inspector tool tips. diff --git a/Documentation/README_HandInteractionExamples.md b/Documentation/README_HandInteractionExamples.md index 04a2e523b46..68e6aba610e 100644 --- a/Documentation/README_HandInteractionExamples.md +++ b/Documentation/README_HandInteractionExamples.md @@ -1,34 +1,34 @@ # Hand Interaction Examples scene -![Hand Interaction Examples](../External/ReadMeImages/MRTK_Examples.png) +![Hand Interaction Examples](../Documentation/Images/MRTK_Examples.png) In this example scene, you can find various types of interactions and UI controls that supports HoloLens2's articulated hand input. You can find the **HandInteractionExamples.unity** scene under **Assets\MixedRealityToolkit.Examples\Demos\HandTracking\Scenes** *This example scene uses **TextMesh Pro**. Please click **'Import TMP Essentials'** button when you see this prompt. Unity will import TextMesh Pro packages* - + *If you see big text after TextMesh Pro import, please open other Unity scene and open this scene again.* - + ## Pressable Button See [Button](README_Button.md) page for the details. -![Hand Interaction Examples](../External/ReadMeImages/HandInteractionExamples/MRTK_Examples_PressTouch.png) +![Hand Interaction Examples](../Documentation/Images/HandInteractionExamples/MRTK_Examples_PressTouch.png) ## Bounding Box See [Bounding Box](README_BoundingBox.md) page for the details. -![Hand Interaction Examples](../External/ReadMeImages/HandInteractionExamples/MRTK_Examples_BoundingBox.png) +![Hand Interaction Examples](../Documentation/Images/HandInteractionExamples/MRTK_Examples_BoundingBox.png) ## Manipulation Handler See [Manipulation Handler](README_ManipulationHandler.md) page for the details. -![Hand Interaction Examples](../External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Manipulation.png) +![Hand Interaction Examples](../Documentation/Images/HandInteractionExamples/MRTK_Examples_Manipulation.png) ## Slate See [Slate](README_Slate.md) page for the details. -![Hand Interaction Examples](../External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Slate.png) +![Hand Interaction Examples](../Documentation/Images/HandInteractionExamples/MRTK_Examples_Slate.png) ## System Keyboard See [System Keyboard](README_SystemKeyboard.md) page for the details. -![Hand Interaction Examples](../External/ReadMeImages/HandInteractionExamples/MRTK_Examples_Keyboard.png) +![Hand Interaction Examples](../Documentation/Images/HandInteractionExamples/MRTK_Examples_Keyboard.png) diff --git a/Documentation/README_Interactable.md b/Documentation/README_Interactable.md index d70d8d3247b..20d730ef128 100644 --- a/Documentation/README_Interactable.md +++ b/Documentation/README_Interactable.md @@ -1,10 +1,10 @@ # Interactable -![Interactable](../External/ReadMeImages/Interactable/InteractableExamples.png) +![Interactable](../Documentation/Images/Interactable/InteractableExamples.png) ## How to use Interactable Add the Interactable Component to a GameObject -![Interactable](../External/ReadMeImages/Interactable/InteractableInspector_basicSteps.png) +![Interactable](../Documentation/Images/Interactable/InteractableInspector_basicSteps.png) 1. A Collider must exist on the GameObject with the Interactable or the child of the Interactable for it to receive input. 2. Use the OnClick event to make something happen. @@ -14,7 +14,7 @@ Add the Interactable Component to a GameObject ## Input Settings The basic features allow for button style interactions, such as pointer focus and clicks, that maps to interaction states to drive themes which are setup through the Interactable profile. Controller or hand focus, down, up and click (both near and far) are handled. Functionality can be extended using external scripts that can set state manually. - + ### Input Actions Select the action, from the input configuration or controller mapping profile, that the Interactable should react to. @@ -47,24 +47,24 @@ More examples can also be found in the HandInteractionExamples scene. The profile will define how button content will be linked to and manipulated by themes, based on state changes. - + Themes work a lot like Materials, they are ScriptableObjects that contain a list of data that will be assigned to an object based on the current state. Like Materials, they can be edited individually in the Project panel or through the Interactable profile. Editing a Theme through an Interactable will update its settings for all other Interactables using that theme. Themes can be extended to control any aspect of a GameObject with a few basic themes provided that can change color, scale, position or an combination of the three. - + ### Default Themes A default theme will be provided whenever an target object is added to a profile. It is not advised to edit the default theme, like in the case MRTK is updated, the theme could get overridden. A create Theme button is provided whenever the default theme is used to make it easier to create a new themes.  - + Example of the Default Theme. - + Example of a Color Theme @@ -74,7 +74,7 @@ _Note: Themes that effect mesh objects (Color or Shader Themes) are able to dete ### Creating Toggles Toggle or multi-step buttons can be created in the Profile using the Dimensions field. The idea is that each set of states can have multiple dimensions and in this case, when the Dimensions value is increased, slots for additional themes are provided for each item in the Profile. This allows for a Normal Theme and a Toggled Theme to be used depending if the Interactable is toggled or not.  - + With Dimensions being a numeric value, the options for adding themes or steps is endless. An example of a multi-step button with 3 dimensions is one that controls speed. We may only want to have the option for 3 values, Fast (1x), Faster (2x) or Fastest (3x). Using Dimensions we could control the text or texture of the button for each step using 3 different themes. **Developers can assess the DimensionIndex to determine which dimension is currently active.** @@ -83,28 +83,28 @@ With Dimensions being a numeric value, the options for adding themes or steps is ## Events You can use Interactable to detect input events other than just OnClick. The Events feature provides a way to enable functionality to extend a button, but not really visual or needed to provide feedback based on state changes. - + At the bottom of the Interactable component, click the Add Event button to reveal additional event options. A drop down menu contains the current list of supported events like toggle, hold or double tap. The idea of these events is to monitor Interactable state changes and define patterns to detect. When a pattern is detected, we can make something happen through the inspector or directly in code. - + Example of audio clip to play on click. There is an Audio Theme for playing audio clips for each state change, like focus. - + Example of Toggle events - + Example of a hold event Events can be placed on an object to monitor a separate Interactable. Use InteractableReceiver for a single event (from the list) or InteractableReceiverList for a list of events similar to the Interactable event list. - + Example of InteractableReceiver existing on a separate gameObject from the Interactable, referencing the Interactable for event and state updates. Search Scope provides a preferred path to search for an Interactable if one is not explicitly assigned. @@ -112,13 +112,13 @@ Search Scope provides a preferred path to search for an Interactable if one is n ## States States are a list of terms that can be used to define interactions phases, like press or observed. - + Interactable States provides two major roles. - Establish a list of states that we care about. This list will be displayed in the themes and can also be referenced by the events. - Controls how different interaction phases are ranked into states. For instance, a press state is also in a focused state, but the InteractableStates class will define it is a press state based on the ranking preferences setup in the State ScriptableObject. - + The InteractableStates State Model will handle any state list with a layered ranking system, starting with the most isolated state and ending with the state that could contain all other states. diff --git a/Documentation/README_ManipulationHandler.md b/Documentation/README_ManipulationHandler.md index 2f9fbf05442..20866023fa9 100644 --- a/Documentation/README_ManipulationHandler.md +++ b/Documentation/README_ManipulationHandler.md @@ -1,5 +1,5 @@ # Manipulation Handler -![Manipulation Handler](../External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png) +![Manipulation Handler](../Documentation/Images/ManipulationHandler/MRTK_Manipulation_Main.png) The ManipulationHandler script allows for an object to be made movable, scalable, and rotatable using one or two hands. Manipulation can be restricted so that it only allows certain kinds of transformation. The script works with various types of inputs including HoloLens 2 articulated hand input, hand-rays, HoloLens gesture input, and immersive headset motion controller input. @@ -9,11 +9,11 @@ The script works with various types of inputs including HoloLens 2 articulated h In the inspector panel, you will be able to find various options that you can configure. Make sure to add a Collidable to your object -- the collidable should match the grabbable bounds of the object. To make it respond to near articulated hand input, you need to add the NearInteractionGrabbable.cs script as well.  -![Manipulation Handler](../External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_Howto.png) +![Manipulation Handler](../Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_Howto.png) ## Inspector Properties - + ### Host Transform Transform that will be dragged. Defaults to the object of the component. @@ -26,7 +26,7 @@ Specifies whether the object can be manipulated using one hand, two hands, or bo ### Two Handed Manipulation Type -![Manipulation Handler](../External/ReadMeImages/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg) +![Manipulation Handler](../Documentation/Images/ManipulationHandler/MRTK_ManipulationHandler_TwoHanded.jpg) * Scale * Rotate diff --git a/Documentation/README_ObjectCollection.md b/Documentation/README_ObjectCollection.md index 769ce79431a..7a8d226268a 100644 --- a/Documentation/README_ObjectCollection.md +++ b/Documentation/README_ObjectCollection.md @@ -1,24 +1,24 @@ # Object Collection -![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Main.png) +![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Main.png) Object collection is a script which helps you lay out an array of objects in predefined three-dimensional shapes. It supports five different surface styles - plane, cylinder, sphere, scatter, and radial. You can adjust the radius, size and the space between the items. Since it supports any object in Unity, you can use it to layout both 2D and 3D objects. ## Object collection examples ## Periodic Table of the Elements is an example app that demonstrates how Object collection works. It uses Object collection to layout the 3D element boxes in different shapes. -![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Types.jpg) +![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Types.jpg) ### 3D Objects ### You can use Object collection to layout imported 3D objects. The example below shows the plane and cylindrical layouts of 3D chair model objects using Object collection. -![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg) +![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_3DObjects.jpg) ### 2D Objects ### You can also use 2D images with Object collection. For example, you can easily display multiple images in grid style using Object collection. -![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg) +![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Layout_2DImages.jpg) ## Ways to use Object collection ## You can find the examples in the scene **ObjectCollection_Examples.unity**. In this scene, you can find the **ObjectCollection.cs** script under **MixedRealityToolkit.SDK\Features\UX\Scripts\Collections** @@ -28,6 +28,6 @@ You can find the examples in the scene **ObjectCollection_Examples.unity**. In t 3. Once you finished adding a child object, click the **Update Collection** button in the Inspector Panel. 4. You will then see the object(s) laid out in selected Surface Type. -![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Unity.jpg) +![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Unity.jpg) -![Object Collection](../External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg) \ No newline at end of file +![Object Collection](../Documentation/Images/ObjectCollection/MRTK_ObjectCollection_ExampleScene1.jpg) \ No newline at end of file diff --git a/Documentation/README_Pointers.md b/Documentation/README_Pointers.md index fd3a1138d4d..fda07b74da9 100644 --- a/Documentation/README_Pointers.md +++ b/Documentation/README_Pointers.md @@ -1,5 +1,5 @@ # Pointers -![Pointer](../External/ReadMeImages/Pointers/MRTK_Pointer_Main.png) +![Pointer](../Documentation/Images/Pointers/MRTK_Pointer_Main.png) A pointer is something attached to a controller that gives focus and dispatches inputs to the game object it is pointing to. Learn more about the MRTK input system [here](./Input/Overview.md), and a scripting/engineering overview of pointers [here](./Input/Pointers.md). @@ -9,12 +9,12 @@ Pointers are instantiated automatically at runtime when a new controller is dete MRTK provides a set of pointer prefabs in _Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers_. You can use your own prefabs as long as they contain one of the pointer scripts in _Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers_ or any other script implementing `IMixedRealityPointer`. -![Pointer Profile](../External/ReadMeImages/Pointers/MRTK_PointerProfile.jpg) +![Pointer Profile](../Documentation/Images/Pointers/MRTK_PointerProfile.jpg) ## MRTK Pointer Prefabs ### Line Pointer - + A line pointer is a ray attached to a controller. The line starts at the controller's base, and its pointing direction matches the pointing direction of the controller. @@ -31,16 +31,16 @@ GGV stands for "Gaze, Gesture, Voice"[2](https://docs.microsoft.com/en-us/w In the pointer profile you can see that the V1 HoloLens input system is provided for you via the mapping of "GGVHand" (V1 HoloLens hand) to the GGVPointer. - + You can also simulate the V1 HoloLens GGV behavior on HoloLens 2 by mapping the articulated hand to the GGVPointer. - + ### Grab Pointer / Sphere Pointer - + Grab pointer is used for near interactions, specifically for grabbing items near the hand / controller. @@ -52,7 +52,7 @@ Debug Mode - If true, draw the sphere that is used to query for grabbable object ### Poke Pointer - + Poke pointer is for near interactions, specifically for touching objects via the hand / controller. @@ -76,11 +76,11 @@ Other parameters: ### Mouse pointer -![Mouse Pointer](../External/ReadMeImages/Pointers/MRTK_MousePointer.jpg) +![Mouse Pointer](../Documentation/Images/Pointers/MRTK_MousePointer.jpg) Mouse pointer is used for interacting with the mouse. This pointer will only be used if the active input is a mouse. By default, the MRTK Profile does not provide a mouse as an input provider, as mouse input is instead used to simulate hand input. You may add a mouse in your MRTK profily by modifying the _Registered Service Providers_ in your MRTK profile. ### Teleport pointer - + Teleport pointer is used for teleportation. This pointer will only be active when using a controller that supports teleportation (such as a motion controller like in Oculus, Vive, Windows Mixed Reality). diff --git a/Documentation/README_Slate.md b/Documentation/README_Slate.md index 1c22f0555dd..c63fa49ec0f 100644 --- a/Documentation/README_Slate.md +++ b/Documentation/README_Slate.md @@ -1,12 +1,12 @@ # Slate -![Slate](../External/ReadMeImages/Slate/MRTK_Slate_Main.png) +![Slate](../Documentation/Images/Slate/MRTK_Slate_Main.png) Thin window style control for the 2D content with grabbable title bar and 'Follow Me' and 'Close' buttons. You can scroll 2D content with articulated hand. ## Structure Slate control is composed of these elements. - + - TitleBar - Title @@ -18,20 +18,20 @@ Slate control is composed of these elements. Slate control contains Bounding Box script for scaling and rotating. For more information on Bounding Box, please see [Bounding Box](README_BoundingBox.md) page. - + - + ## Buttons - + - Follow Me: Toggles 'Orbital' solver components to make the Slate object follow the user. - Close: Disables the Slate object ## Scripts - + ### HandInteractionPan.cs This script handles articulated hand input for touching and moving the content on the slate's **ContentQuad** diff --git a/Documentation/README_Solver.md b/Documentation/README_Solver.md index fcbea8aee83..bff9f2f88b1 100644 --- a/Documentation/README_Solver.md +++ b/Documentation/README_Solver.md @@ -1,5 +1,5 @@ # Solver -![Solver](../External/ReadMeImages/Solver/MRTK_Solver_Main.png) +![Solver](../Documentation/Images/Solver/MRTK_Solver_Main.png) At this time, there is no easy, reliable way to specify the update order for Unity components. This can make it difficult to implement deterministic compound transformations. The solver system addresses this issue. @@ -27,7 +27,7 @@ When **UpdateLinkedTransform** is *true*, the solver will calculate position & o - **SolverHandler** has two fields for setting the reference object. You can choose a tracked object (such as the user camera or L/R motion controllers), or instead use the **TransformTarget** field which overrides any set tracked object. This enables you to have solvers reference any scene object. Yes, that means objects can have tag alongs and cast surface magnetism as well as tracked objects. Very handy. - Surface magnetism scripts rely on a *LayerMask* for raycasting. As a recommendation, create a custom *LayerMask* (the example uses *Surface*). Note that using *default* or *everything* will result in UI components or cursors contributing to the solver. This can produce weird and unexpected behavior. Objects lurching toward you etc... - + Example of using Orbital solver in the [Slate](README_Slate.md) prefab. diff --git a/Documentation/README_SystemKeyboard.md b/Documentation/README_SystemKeyboard.md index 111576044c3..ebe08a49d48 100644 --- a/Documentation/README_SystemKeyboard.md +++ b/Documentation/README_SystemKeyboard.md @@ -1,5 +1,5 @@ # System Keyboard -![System Keyboard](../External/ReadMeImages/SystemKeyboard/MRTK_SystemKeyboard_Main.png) +![System Keyboard](../Documentation/Images/SystemKeyboard/MRTK_SystemKeyboard_Main.png) Inside Unity app, you can invoke the system keyboard. HoloLens2's system keyboard supports direct hand interactions. diff --git a/Documentation/README_Tooltip.md b/Documentation/README_Tooltip.md index 56e771b8108..f4cfe87d09d 100644 --- a/Documentation/README_Tooltip.md +++ b/Documentation/README_Tooltip.md @@ -1,5 +1,5 @@ # Tooltip -![Tooltip](../External/ReadMeImages/Tooltip/MRTK_Tooltip_Main.png) +![Tooltip](../Documentation/Images/Tooltip/MRTK_Tooltip_Main.png) This example scene demonstrates an implementation of the ToolTip user interface element. Tooltips are usually used to convey a hint or extra information upon closer inspection of an object. ToolTip can be used to explain button inputs on the motion controllers or to label objects in the physical environment. ## Demo Video @@ -14,7 +14,7 @@ The [example scene](https://gfycat.com/WarmOblongBilby) demonstrates two ways to ## Example Scene [/Assets/MixedRealityToolkit.Examples/Demos/UX/Tooltips/Scenes](https://github.com/Microsoft/MixedRealityToolkit-Unity/blob/mrtk_release/Assets/MixedRealityToolkit.Examples/Demos/UX/Tooltips/Scenes) - + In the scene file, you will be able to find various examples of ToolTip. First group on the left demonstrates the static ToolTip examples that are always visible. In the center, you can see the example of using multiple ToolTips on a single object. Each tooltip has different child object as a target object which works as an anchor. The group on the right shows the examples of dynamically spawning ToolTips. diff --git a/Documentation/SpatialAwareness/ConfiguringSpatialAwarenessMeshObserver.md b/Documentation/SpatialAwareness/ConfiguringSpatialAwarenessMeshObserver.md index 3b36edb6788..b5bab44894c 100644 --- a/Documentation/SpatialAwareness/ConfiguringSpatialAwarenessMeshObserver.md +++ b/Documentation/SpatialAwareness/ConfiguringSpatialAwarenessMeshObserver.md @@ -8,7 +8,7 @@ The spatial awareness mesh observer profile provides options for configuring: ## General Settings -![Mesh Observer General Settings](../../External/ReadMeImages/SpatialAwareness/MeshObserverGeneralSettings.png) +![Mesh Observer General Settings](../../Documentation/Images/SpatialAwareness/MeshObserverGeneralSettings.png) ### Startup Behavior @@ -52,7 +52,7 @@ The observation extents define the distance from the observation point that mesh ## Physics Settings -![Mesh Observer Physics Settings](../../External/ReadMeImages/SpatialAwareness/MeshObserverPhysicsSettings.png) +![Mesh Observer Physics Settings](../../Documentation/Images/SpatialAwareness/MeshObserverPhysicsSettings.png) ### Physics Layer @@ -64,7 +64,7 @@ Specifies whether or not the mesh observer will recalculate the normals of the m ## Level of Detail Settings -![Mesh Observer Level of Detail Settings](../../External/ReadMeImages/SpatialAwareness/MeshObserverLevelOfDetailSettings.png) +![Mesh Observer Level of Detail Settings](../../Documentation/Images/SpatialAwareness/MeshObserverLevelOfDetailSettings.png) ### Level of Detail @@ -84,7 +84,7 @@ When using the custom [Level of Detail](#level-of-detail), specifies the request ## Display Settings -![Mesh Observer Display Settings](../../External/ReadMeImages/SpatialAwareness/MeshObserverDisplaySettings.png) +![Mesh Observer Display Settings](../../Documentation/Images/SpatialAwareness/MeshObserverDisplaySettings.png) *Mesh Observer Display Settings* diff --git a/Documentation/SpatialAwareness/SpatialAwarenessGettingStarted.md b/Documentation/SpatialAwareness/SpatialAwarenessGettingStarted.md index 78187c49137..b3b5e9bc747 100644 --- a/Documentation/SpatialAwareness/SpatialAwarenessGettingStarted.md +++ b/Documentation/SpatialAwareness/SpatialAwarenessGettingStarted.md @@ -1,5 +1,5 @@ # Spatial Awareness -![Spatial Awareness](../../External/ReadMeImages/SpatialAwareness/MRTK_SpatialAwareness_Main.png) +![Spatial Awareness](../../Documentation/Images/SpatialAwareness/MRTK_SpatialAwareness_Main.png) The Spatial Awareness system provides real-world environmental awareness in mixed reality applications. When introduced on Microsoft HoloLens, spatial awareness provided a collection @@ -24,15 +24,15 @@ The spatial awareness system is managed by the MixedRealityToolkit object (or an 1. Select the MixedRealityToolkit object in the scene hierarchy. -![MRTK Configured Scene Hierarchy](../../External/ReadMeImages/MRTK_ConfiguredHierarchy.png) +![MRTK Configured Scene Hierarchy](../../Documentation/Images/MRTK_ConfiguredHierarchy.png) 2. Navigate the Inspector panel to the Spatial Awareness System section and check Enable -![Enable Spatial Awareness](../../External/ReadMeImages/SpatialAwareness/MRTKConfig_SpatialAwareness.png) +![Enable Spatial Awareness](../../Documentation/Images/SpatialAwareness/MRTKConfig_SpatialAwareness.png) 3. Select the Spatial Awareness System implementation -![Select the Spatial Awareness System Implementation](../../External/ReadMeImages/SpatialAwareness/SpatialAwarenessSelectSystemType.png) +![Select the Spatial Awareness System Implementation](../../Documentation/Images/SpatialAwareness/SpatialAwarenessSelectSystemType.png) > Users of the default profile (DefaultMixedRealityToolkitConfigurationProfile) will have the spatial awareness system pre-configured to use the MixedRealitySpatialAwarenessSystem from the Mixed Reality Toolkit Spatial Awareness Service package. @@ -45,12 +45,12 @@ that may vary in the type(s) of data (ex: meshes) provided. 1. Open or expand the Spatial Awareness System profile -![Spatial Awareness System Profile](../../External/ReadMeImages/SpatialAwareness/SpatialAwarenessProfile.png) +![Spatial Awareness System Profile](../../Documentation/Images/SpatialAwareness/SpatialAwarenessProfile.png) 2. Click "Add Spatial Observer" 3. Select the Spatial Observer implementation -![Select the Spatial Observer Implementation](../../External/ReadMeImages/SpatialAwareness/SpatialAwarenessSelectObserver.png) +![Select the Spatial Observer Implementation](../../Documentation/Images/SpatialAwareness/SpatialAwarenessSelectObserver.png) > Users of the default profile (DefaultMixedRealitSpatialAwarenessSystemProfile) will have the spatial awareness system pre-configured to use the WindowsMixedRealitySpatialMeshObserver from the Mixed Reality Toolkit Windows Mixed Reality Provider package. @@ -64,7 +64,7 @@ the desired data. 1. Open or expand the Spatial Observer profile -![Spatial Mesh Observer Profile](../../External/ReadMeImages/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png) +![Spatial Mesh Observer Profile](../../Documentation/Images/SpatialAwareness/SpatialAwarenessMeshObserverProfile.png) 2. Configure the desired options diff --git a/External/HowTo/README.md b/Documentation/howto_migrate.md similarity index 100% rename from External/HowTo/README.md rename to Documentation/howto_migrate.md diff --git a/Documentation/toc.yml b/Documentation/toc.yml index 421c9e8fbdc..99102b01589 100644 --- a/Documentation/toc.yml +++ b/Documentation/toc.yml @@ -1,13 +1,13 @@ - name: About MRTK items: - name: MRTK v2 - href: ../MRTK-vNext.md + href: MRTK-vNext.md - name: Authors href: Authors.md - name: Mixed Reality Services - href: ../External/Documentation/MixedRealityServices.md + href: MixedRealityServices.md - name: How-tos - href: ../External/HowTo/README.md + href: howto_migrate.md items: - name: Getting Started href: GettingStartedWithTheMRTK.md @@ -111,19 +111,19 @@ - name: Moving your project from HTK to MRTK href: HTKToMRTKPortingGuide.md - name: Contributing - href: ../CONTRIBUTING.md + href: Contributing/CONTRIBUTING.md items: - name: Feature Contribution Process - href: ../Feature_Contribution_Process.md + href: Contributing/Feature_Contribution_Process.md - name: Coding Guidelines - href: ../CodingGuidelines.md + href: Contributing/CodingGuidelines.md - name: Documentation guide - href: DocumentationGuide.md + href: Contributing/DocumentationGuide.md - name: Developer portal generation with DocFX - href: DevDocGuide.md + href: Contributing/DevDocGuide.md - name: Planning items: - name: Roadmap - href: ../Roadmap.md + href: Contributing/Roadmap.md - name: Notice - href: ../NOTICE.md + href: Legal/NOTICE.md diff --git a/README.md b/README.md index 64b2aed073e..dee6db3ae26 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ - + # What is the Mixed Reality Toolkit @@ -24,7 +24,7 @@ MRTK-Unity provides a set of foundational components and features to accelerate | `mrtk_development` |[![CI Status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_development-CI)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=1)|[![Docs Status](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_apis/build/status/public/mrtk_docs)](https://dev.azure.com/aipmr/MixedRealityToolkit-Unity-CI/_build/latest?definitionId=7) # Required Software - | [![Windows SDK 18362+](External/ReadMeImages/MRTK170802_Short_17.png)](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK)| [![Unity](External/ReadMeImages/MRTK170802_Short_18.png)](https://unity3d.com/get-unity/download/archive) [Unity 2018.3.x](https://unity3d.com/get-unity/download/archive)| [![Visual Studio 2017](External/ReadMeImages/MRTK170802_Short_19.png)](http://dev.windows.com/downloads) [Visual Studio 2017](http://dev.windows.com/downloads)| [![Simulator (optional)](External/ReadMeImages/MRTK170802_Short_20.png)](https://go.microsoft.com/fwlink/?linkid=852626) [Simulator (optional)](https://go.microsoft.com/fwlink/?linkid=852626)| + | [![Windows SDK 18362+](Documentation/Images/MRTK170802_Short_17.png)](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK) [Windows SDK 18362+](https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewSDK)| [![Unity](Documentation/Images/MRTK170802_Short_18.png)](https://unity3d.com/get-unity/download/archive) [Unity 2018.3.x](https://unity3d.com/get-unity/download/archive)| [![Visual Studio 2017](Documentation/Images/MRTK170802_Short_19.png)](http://dev.windows.com/downloads) [Visual Studio 2017](http://dev.windows.com/downloads)| [![Simulator (optional)](Documentation/Images/MRTK170802_Short_20.png)](https://go.microsoft.com/fwlink/?linkid=852626) [Simulator (optional)](https://go.microsoft.com/fwlink/?linkid=852626)| | :--- | :--- | :--- | :--- | | To develop apps for Windows Mixed Reality headsets, you need the Windows 10 Fall Creators Update | The Unity 3D engine provides support for building mixed reality projects in Windows 10 | Visual Studio is used for code editing, deploying and building UWP app packages | The Emulators allow you test your app without the device in a simulated environment | @@ -49,16 +49,16 @@ Please check out the [Getting Started Guide](https://microsoft.github.io/MixedRe Find this readme, other documentation articles and the MRTK api reference on our [MRTK Dev Portal on github.io](https://microsoft.github.io/MixedRealityToolkit-Unity/). # UI and Interaction Building blocks -| [![Button](External/ReadMeImages/Button/MRTK_Button_Main.png)](Documentation/README_Button.md) [Button](Documentation/README_Button.md) | [![Bounding Box](External/ReadMeImages/BoundingBox/MRTK_BoundingBox_Main.png)](Documentation/README_BoundingBox.md) [Bounding Box](Documentation/README_BoundingBox.md) | [![Manipulation Handler](External/ReadMeImages/ManipulationHandler/MRTK_Manipulation_Main.png)](Documentation/README_ManipulationHandler.md) [Manipulation Handler](Documentation/README_ManipulationHandler.md) | +| [![Button](Documentation/Images/Button/MRTK_Button_Main.png)](Documentation/README_Button.md) [Button](Documentation/README_Button.md) | [![Bounding Box](Documentation/Images/BoundingBox/MRTK_BoundingBox_Main.png)](Documentation/README_BoundingBox.md) [Bounding Box](Documentation/README_BoundingBox.md) | [![Manipulation Handler](Documentation/Images/ManipulationHandler/MRTK_Manipulation_Main.png)](Documentation/README_ManipulationHandler.md) [Manipulation Handler](Documentation/README_ManipulationHandler.md) | |:--- | :--- | :--- | | A button control which supports various input methods including HoloLens 2's articulated hand | Standard UI for manipulating objects in 3D space | Script for manipulating objects with one or two hands | -| [![Slate](External/ReadMeImages/Slate/MRTK_Slate_Main.png)](Documentation/README_Slate.md) [Slate](Documentation/README_Slate.md) | [![System Keyboard](External/ReadMeImages/SystemKeyboard/MRTK_SystemKeyboard_Main.png)](Documentation/README_SystemKeyboard.md) [System Keyboard](Documentation/README_SystemKeyboard.md) | [![Interactable](External/ReadMeImages/Interactable/InteractableExamples.png)](Documentation/README_Interactable.md) [Interactable](Documentation/README_Interactable.md) | +| [![Slate](Documentation/Images/Slate/MRTK_Slate_Main.png)](Documentation/README_Slate.md) [Slate](Documentation/README_Slate.md) | [![System Keyboard](Documentation/Images/SystemKeyboard/MRTK_SystemKeyboard_Main.png)](Documentation/README_SystemKeyboard.md) [System Keyboard](Documentation/README_SystemKeyboard.md) | [![Interactable](Documentation/Images/Interactable/InteractableExamples.png)](Documentation/README_Interactable.md) [Interactable](Documentation/README_Interactable.md) | | 2D style plane which supports scrolling with articulated hand input | Example script of using the system keyboard in Unity | A script for making objects interactable with visual states and theme support | -| [![Solver](External/ReadMeImages/Solver/MRTK_Solver_Main.png)](Documentation/README_Solver.md) [Solver](Documentation/README_Solver.md) | [![Object Collection](External/ReadMeImages/ObjectCollection/MRTK_ObjectCollection_Main.png)](Documentation/README_ObjectCollection.md) [Object Collection](Documentation/README_ObjectCollection.md) | [![Tooltip](External/ReadMeImages/Tooltip/MRTK_Tooltip_Main.png)](Documentation/README_Tooltip.md) [Tooltip](Documentation/README_Tooltip.md) | +| [![Solver](Documentation/Images/Solver/MRTK_Solver_Main.png)](Documentation/README_Solver.md) [Solver](Documentation/README_Solver.md) | [![Object Collection](Documentation/Images/ObjectCollection/MRTK_ObjectCollection_Main.png)](Documentation/README_ObjectCollection.md) [Object Collection](Documentation/README_ObjectCollection.md) | [![Tooltip](Documentation/Images/Tooltip/MRTK_Tooltip_Main.png)](Documentation/README_Tooltip.md) [Tooltip](Documentation/README_Tooltip.md) | | Various object positioning behaviors such as tag-along, body-lock, constant view size and surface magnetism | Script for lay out an array of objects in a three-dimensional shape | Annotation UI with flexible anchor/pivot system which can be used for labeling motion controllers and object. | -| [![App Bar](External/ReadMeImages/AppBar/MRTK_AppBar_Main.png)](Documentation/README_AppBar.md) [App Bar](Documentation/README_AppBar.md) | [![Pointers](External/ReadMeImages/Pointers/MRTK_Pointer_Main.png)](Documentation/README_Pointers.md) [Pointers](Documentation/README_Pointers.md) | [![Fingertip Visualization](External/ReadMeImages/Fingertip/MRTK_FingertipVisualization_Main.png)](Documentation/README_FingertipVisualization.md) [Fingertip Visualization](Documentation/README_FingertipVisualization.md) | +| [![App Bar](Documentation/Images/AppBar/MRTK_AppBar_Main.png)](Documentation/README_AppBar.md) [App Bar](Documentation/README_AppBar.md) | [![Pointers](Documentation/Images/Pointers/MRTK_Pointer_Main.png)](Documentation/README_Pointers.md) [Pointers](Documentation/README_Pointers.md) | [![Fingertip Visualization](Documentation/Images/Fingertip/MRTK_FingertipVisualization_Main.png)](Documentation/README_FingertipVisualization.md) [Fingertip Visualization](Documentation/README_FingertipVisualization.md) | | UI for Bounding Box's manual activation | Learn about various types of pointers | Visual affordance on the fingertip which improves the confidence for the direct interaction | -| [![Eye Tracking: Target Selection](External/ReadMeImages/EyeTracking/mrtk_et_targetselect.png)](Documentation/EyeTracking/EyeTracking_TargetSelection.md) [Eye Tracking: Target Selection](Documentation/EyeTracking/EyeTracking_TargetSelection.md) | [![Eye Tracking: Navigation](External/ReadMeImages/EyeTracking/mrtk_et_navigation.png)](Documentation/EyeTracking/EyeTracking_Navigation.md) [Eye Tracking: Navigation](Documentation/EyeTracking/EyeTracking_Navigation.md) | [![Eye Tracking: Heat Map](External/ReadMeImages/EyeTracking/mrtk_et_heatmaps.png)](Documentation/EyeTracking/EyeTracking_Visualization.md) [Eye Tracking: Heat Map](Documentation/EyeTracking/EyeTracking_Visualization.md) | +| [![Eye Tracking: Target Selection](Documentation/Images/EyeTracking/mrtk_et_targetselect.png)](Documentation/EyeTracking/EyeTracking_TargetSelection.md) [Eye Tracking: Target Selection](Documentation/EyeTracking/EyeTracking_TargetSelection.md) | [![Eye Tracking: Navigation](Documentation/Images/EyeTracking/mrtk_et_navigation.png)](Documentation/EyeTracking/EyeTracking_Navigation.md) [Eye Tracking: Navigation](Documentation/EyeTracking/EyeTracking_Navigation.md) | [![Eye Tracking: Heat Map](Documentation/Images/EyeTracking/mrtk_et_heatmaps.png)](Documentation/EyeTracking/EyeTracking_Visualization.md) [Eye Tracking: Heat Map](Documentation/EyeTracking/EyeTracking_Visualization.md) | | Combine eyes, voice and hand input to quickly and effortlessly select holograms across your scene | Learn how to auto scroll text or fluently zoom into focused content based on what you are looking at| Examples for logging, loading and visualizing what users have been looking at in your app | # Example Scenes @@ -66,7 +66,7 @@ Explore MRTK's various types of interactions and UI controls in [this example sc You can find other example scenes under [**Assets/MixedRealityToolkit.Examples/Demos**](/Assets/MixedRealityToolkit.Examples/Demos) folder. -[![Example Scene](External/ReadMeImages/MRTK_Examples.png)](Documentation/README_HandInteractionExamples.md) +[![Example Scene](Documentation/Images/MRTK_Examples.png)](Documentation/README_HandInteractionExamples.md) # Engage with the Community @@ -86,12 +86,12 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. # Useful resources on the Mixed Reality Dev Center -| ![Discover](External/ReadMeImages/mrdevcenter/icon-discover.png) [Discover](https://docs.microsoft.com/en-us/windows/mixed-reality/)| ![Design](External/ReadMeImages/mrdevcenter/icon-design.png) [Design](https://docs.microsoft.com/en-us/windows/mixed-reality/design)| ![Develop](External/ReadMeImages/mrdevcenter/icon-develop.png) [Develop](https://docs.microsoft.com/en-us/windows/mixed-reality/development)| ![Distribute)](External/ReadMeImages/mrdevcenter/icon-distribute.png) [Distribute](https://docs.microsoft.com/en-us/windows/mixed-reality/implementing-3d-app-launchers)| +| ![Discover](Documentation/Images/mrdevcenter/icon-discover.png) [Discover](https://docs.microsoft.com/en-us/windows/mixed-reality/)| ![Design](Documentation/Images/mrdevcenter/icon-design.png) [Design](https://docs.microsoft.com/en-us/windows/mixed-reality/design)| ![Develop](Documentation/Images/mrdevcenter/icon-develop.png) [Develop](https://docs.microsoft.com/en-us/windows/mixed-reality/development)| ![Distribute)](Documentation/Images/mrdevcenter/icon-distribute.png) [Distribute](https://docs.microsoft.com/en-us/windows/mixed-reality/implementing-3d-app-launchers)| | :--------------------- | :----------------- | :------------------ | :------------------------ | | Learn to build mixed reality experiences for HoloLens and immersive headsets (VR). | Get design guides. Build user interface. Learn interactions and input. | Get development guides. Learn the technology. Understand the science. | Get your app ready for others and consider creating a 3D launcher. | # Useful resouces on Azure -| ![Spatial Anchors](External/ReadMeImages/mrdevcenter/icon-azurespatialanchors.png)
[Spatial Anchors](https://docs.microsoft.com/en-us/azure/spatial-anchors/)| ![Speech Services](External/ReadMeImages/mrdevcenter/icon-azurespeechservices.png) [Speech Services](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/)| ![Vision Services](External/ReadMeImages/mrdevcenter/icon-azurevisionservices.png) [Vision Services](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/)| +| ![Spatial Anchors](Documentation/Images/mrdevcenter/icon-azurespatialanchors.png)
[Spatial Anchors](https://docs.microsoft.com/en-us/azure/spatial-anchors/)| ![Speech Services](Documentation/Images/mrdevcenter/icon-azurespeechservices.png) [Speech Services](https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/)| ![Vision Services](Documentation/Images/mrdevcenter/icon-azurevisionservices.png) [Vision Services](https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/)| | :------------------------| :--------------------- | :---------------------- | | Spatial Anchors is a cross-platform service that allows you to create Mixed Reality experiences using objects that persist their location across devices over time.| Discover and integrate Azure powered speech capabilities like speech to text, speaker recognition or speech translation into your application.| Identify and analyze your image or video content using Vision Services like computer vision, face detection, emotion recognition or video indexer. | diff --git a/docfx.json b/docfx.json index 477ebb18136..e2c26153e56 100644 --- a/docfx.json +++ b/docfx.json @@ -36,7 +36,7 @@ }, { // resources documentation is referring to (eg images, videos, audio, etc) - "files": [ "External/ReadMeImages/**", "External/Documentation/Images/**" ], + "files": [ "Documentation/Images/**" ], }, ], "template": [ From 419b76c892a7bc4cc5dedbcabc22589f5c54b126 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Tue, 16 Apr 2019 10:40:53 -0700 Subject: [PATCH 104/183] Updating some TextMeshPro labels in the Root and TargetSelection scenes which were only rendered in one eye. --- .../Scenes/mrtk_eyes_00_RootScene.unity | 38 ++++++++++--------- .../Scenes/mrtk_eyes_02_TargetSelection.unity | 18 +++++++++ 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity index f4d0aaad3c0..a8cc5f5ae66 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity @@ -5974,7 +5974,7 @@ MeshRenderer: m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -6543,8 +6543,9 @@ MonoBehaviour: Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_text: Visualizer m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -6587,7 +6588,7 @@ MonoBehaviour: m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 - m_firstOverflowCharacterIndex: -1 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} m_isLinkedTextComponent: 0 m_isTextTruncated: 0 @@ -6852,7 +6853,7 @@ MeshRenderer: m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -11970,8 +11971,9 @@ MonoBehaviour: Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_text: Navigation m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -12014,7 +12016,7 @@ MonoBehaviour: m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 - m_firstOverflowCharacterIndex: -1 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} m_isLinkedTextComponent: 0 m_isTextTruncated: 0 @@ -13160,8 +13162,9 @@ MonoBehaviour: Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_text: Positioning m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -13204,7 +13207,7 @@ MonoBehaviour: m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 - m_firstOverflowCharacterIndex: -1 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} m_isLinkedTextComponent: 0 m_isTextTruncated: 0 @@ -13740,7 +13743,7 @@ MeshRenderer: m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -26465,7 +26468,7 @@ MeshRenderer: m_RenderingLayerMask: 4294967295 m_RendererPriority: 0 m_Materials: - - {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + - {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -26947,8 +26950,9 @@ MonoBehaviour: Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_text: Selection m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 0} m_fontMaterials: [] @@ -26991,7 +26995,7 @@ MonoBehaviour: m_enableWordWrapping: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 - m_firstOverflowCharacterIndex: -1 + m_firstOverflowCharacterIndex: 0 m_linkedTextComponent: {fileID: 0} m_isLinkedTextComponent: 0 m_isTextTruncated: 0 @@ -27084,7 +27088,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 0.085} + m_AnchoredPosition: {x: 0.002, y: 0.085} m_SizeDelta: {x: 0.15, y: 0.03249936} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &8636164103609303520 diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_02_TargetSelection.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_02_TargetSelection.unity index db7fbf2572c..55b04c84c6a 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_02_TargetSelection.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_02_TargetSelection.unity @@ -1723,6 +1723,18 @@ PrefabInstance: propertyPath: m_firstOverflowCharacterIndex value: -1 objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_sharedMaterial + value: + objectReference: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} - target: {fileID: 2708126568456851919, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} propertyPath: m_LocalScale.x @@ -1743,6 +1755,12 @@ PrefabInstance: propertyPath: timeToTriggerDwellInSec value: 2 objectReference: {fileID: 0} + - target: {fileID: 2590592260629347757, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} --- !u!1001 &1596560075075636758 From 8f5860783aa17d3d91258245c785ec491f521b85 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Tue, 16 Apr 2019 10:47:50 -0700 Subject: [PATCH 105/183] Various fixes --- .../PressableButtons/PressableButton.cs | 2 +- .../Interactable/PressableButtonInspector.cs | 109 ++++++++++-------- 2 files changed, 59 insertions(+), 52 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs index 4b326490deb..3e6157ce812 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs @@ -79,7 +79,7 @@ public bool IsTouching return isTouching; } - set + private set { if (value != isTouching) { diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs index 25a866c8192..bf27dbc5939 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs @@ -10,28 +10,28 @@ namespace Microsoft.MixedReality.Toolkit.Editor [CustomEditor(typeof(PressableButton))] public class PressableButtonInspector : UnityEditor.Editor { - // Struct use to store state of preview + // Struct used to store state of preview // This lets us display accurate info while button is being pressed private struct ButtonInfo { // Convenience fields for box collider info - public Bounds touchCageLocalBounds; + public Bounds TouchCageLocalBounds; // Start pos for touch, also the origin of our cage - public Vector3 touchStartOrigin; + public Vector3 TouchStartOrigin; // Start and end pos for moving content - public float startPos; - public float endPos; + public float StartPos; + public float EndPos; // Press, touch and release positions in z axis - public float pressDistPos; - public float touchStartPos; - public float releaseDistPos; + public float PressDistPos; + public float TouchStartPos; + public float ReleaseDistPos; // Cage values - public float touchCageCenter; - public float touchCageSize; + public float TouchCageCenter; + public float TouchCageSize; // The actual values that the button uses - public float maxPushDistance; - public float pressDistance; - public float releaseDistanceDelta; + public float MaxPushDistance; + public float PressDistance; + public float ReleaseDistanceDelta; } const string EditingEnabledKey = "MRTK_PressableButtonInspector_EditingEnabledKey"; @@ -88,17 +88,23 @@ private void OnEnable() buttonContentTransform = transform; if (movingButtonVisuals.objectReferenceValue != null) + { buttonContentTransform = (movingButtonVisuals.objectReferenceValue as GameObject).transform; + } } private void OnSceneGUI() { // Only display on selection if (Selection.activeObject != button.gameObject) + { return; + } if (!VisiblePlanes) + { return; + } // If the button is being pressed, don't gather new info // Just display the info we already gathered @@ -118,26 +124,26 @@ private ButtonInfo GatherCurrentInfo() { ButtonInfo info = new ButtonInfo(); - info.touchCageLocalBounds = new Bounds(touchCage.center, touchCage.size); + info.TouchCageLocalBounds = new Bounds(touchCage.center, touchCage.size); // Get the start pos for touch - Vector3 touchStartOrigin = info.touchCageLocalBounds.center; - touchStartOrigin.z -= info.touchCageLocalBounds.extents.z; - info.touchStartOrigin = touchStartOrigin; - info.touchCageCenter = info.touchCageLocalBounds.center.z; - info.touchCageSize = info.touchCageLocalBounds.size.z; + Vector3 touchStartOrigin = info.TouchCageLocalBounds.center; + touchStartOrigin.z -= info.TouchCageLocalBounds.extents.z; + info.TouchStartOrigin = touchStartOrigin; + info.TouchCageCenter = info.TouchCageLocalBounds.center.z; + info.TouchCageSize = info.TouchCageLocalBounds.size.z; // Get the start and end pos for moving content - info.startPos = buttonContentTransform.localPosition.z; - info.endPos = buttonContentTransform.localPosition.z; - info.endPos += maxPushDistance.floatValue / transform.lossyScale.z; + info.StartPos = buttonContentTransform.localPosition.z; + info.EndPos = buttonContentTransform.localPosition.z; + info.EndPos += maxPushDistance.floatValue / transform.lossyScale.z; - info.maxPushDistance = maxPushDistance.floatValue; - info.pressDistance = pressDistance.floatValue; - info.releaseDistanceDelta = releaseDistanceDelta.floatValue; + info.MaxPushDistance = maxPushDistance.floatValue; + info.PressDistance = pressDistance.floatValue; + info.ReleaseDistanceDelta = releaseDistanceDelta.floatValue; - info.pressDistPos = info.startPos + (info.pressDistance / transform.lossyScale.z); - info.touchStartPos = info.touchStartOrigin.z; - info.releaseDistPos = info.pressDistPos - (info.releaseDistanceDelta / transform.lossyScale.z); + info.PressDistPos = info.StartPos + (info.PressDistance / transform.lossyScale.z); + info.TouchStartPos = info.TouchStartOrigin.z; + info.ReleaseDistPos = info.PressDistPos - (info.ReleaseDistanceDelta / transform.lossyScale.z); return info; } @@ -154,62 +160,61 @@ private void DrawButtonInfo(ButtonInfo info, bool editingEnabled) // PRESS END Handles.color = Color.cyan; - DrawPlaneAndHandle(targetEndPlane, info.touchCageLocalBounds.size * 0.5f, ref newInfo.endPos, info.touchStartOrigin, "Max move distance", editingEnabled); + newInfo.EndPos = DrawPlaneAndHandle(targetEndPlane, info.TouchCageLocalBounds.size * 0.5f, newInfo.EndPos, info.TouchStartOrigin, "Max move distance", editingEnabled); if (editingEnabled) { // Clamp the z value to start position - newInfo.endPos = Mathf.Max(newInfo.startPos, newInfo.endPos); - newInfo.maxPushDistance = Mathf.Abs(newInfo.startPos - newInfo.endPos) * transform.lossyScale.z; + newInfo.EndPos = Mathf.Max(newInfo.StartPos, newInfo.EndPos); + newInfo.MaxPushDistance = (newInfo.EndPos - newInfo.StartPos) * transform.lossyScale.z; } // PRESS DISTANCE Handles.color = Color.yellow; - DrawPlaneAndHandle(pressDistancePlane, info.touchCageLocalBounds.size * 0.35f, ref newInfo.pressDistPos, info.touchStartOrigin, "Press event", editingEnabled); + newInfo.PressDistPos = DrawPlaneAndHandle(pressDistancePlane, info.TouchCageLocalBounds.size * 0.35f, newInfo.PressDistPos, info.TouchStartOrigin, "Press event", editingEnabled); if (editingEnabled) { // Clamp the z values to target start / end - newInfo.pressDistPos = Mathf.Max(newInfo.startPos, newInfo.pressDistPos); - newInfo.pressDistPos = Mathf.Min(newInfo.endPos, newInfo.pressDistPos); + newInfo.PressDistPos = Mathf.Max(newInfo.StartPos, newInfo.PressDistPos); + newInfo.PressDistPos = Mathf.Min(newInfo.EndPos, newInfo.PressDistPos); // Set based on distance from start // Adjust for scaled objects - newInfo.pressDistance = Mathf.Abs(newInfo.pressDistPos - newInfo.startPos) * transform.lossyScale.z; + newInfo.PressDistance = Mathf.Abs(newInfo.PressDistPos - newInfo.StartPos) * transform.lossyScale.z; } // RELEASE DISTANCE DELTA Handles.color = Color.red; - DrawPlaneAndHandle(releasePlane, info.touchCageLocalBounds.size * 0.3f, ref newInfo.releaseDistPos, info.touchStartOrigin, "Release event", editingEnabled); + newInfo.ReleaseDistPos = DrawPlaneAndHandle(releasePlane, info.TouchCageLocalBounds.size * 0.3f, newInfo.ReleaseDistPos, info.TouchStartOrigin, "Release event", editingEnabled); if (editingEnabled) { // Clamp the z values to press distance - newInfo.releaseDistPos = Mathf.Min(newInfo.pressDistPos, newInfo.releaseDistPos); + newInfo.ReleaseDistPos = Mathf.Min(newInfo.PressDistPos, newInfo.ReleaseDistPos); // Set based on distance from press distance // Adjust for scaled objects - newInfo.releaseDistanceDelta = Mathf.Abs(newInfo.releaseDistPos - newInfo.pressDistPos) * transform.lossyScale.z; + newInfo.ReleaseDistanceDelta = (newInfo.PressDistPos - newInfo.ReleaseDistPos) * transform.lossyScale.z; } // BUTTON CONTENT ORIGIN // Don't allow editing of button position Handles.color = Color.green; - float editStartPos = newInfo.startPos; - DrawPlaneAndHandle(pressStartPlane, info.touchCageLocalBounds.size * 0.4f, ref editStartPos, info.touchStartOrigin, "Moving button visuals", false); + DrawPlaneAndHandle(pressStartPlane, info.TouchCageLocalBounds.size * 0.4f, newInfo.StartPos, info.TouchStartOrigin, "Moving button visuals", false); // START POINT // Start point doesn't need a display offset because it's based on the touch cage center Handles.color = Color.cyan; - DrawPlaneAndHandle(targetStartPlane, info.touchCageLocalBounds.size * 0.5f, ref newInfo.touchStartPos, info.touchStartOrigin, "Touch event", editingEnabled); + newInfo.TouchStartPos = DrawPlaneAndHandle(targetStartPlane, info.TouchCageLocalBounds.size * 0.5f, newInfo.TouchStartPos, info.TouchStartOrigin, "Touch event", editingEnabled); if (editingEnabled) { // The touch event is defined by the collider bounds // If we've moved the start pos, we've moved the bounds - float difference = (info.touchStartPos - newInfo.touchStartPos); + float difference = (info.TouchStartPos - newInfo.TouchStartPos); if (Mathf.Abs(difference) > 0) { - newInfo.touchCageCenter -= difference / 2; - newInfo.touchCageSize += difference; + newInfo.TouchCageCenter -= difference / 2; + newInfo.TouchCageSize += difference; } } @@ -217,12 +222,12 @@ private void DrawButtonInfo(ButtonInfo info, bool editingEnabled) { Undo.RecordObject(target, "Changing push button properties"); - maxPushDistance.floatValue = newInfo.maxPushDistance; - pressDistance.floatValue = newInfo.pressDistance; - releaseDistanceDelta.floatValue = newInfo.releaseDistanceDelta; + maxPushDistance.floatValue = newInfo.MaxPushDistance; + pressDistance.floatValue = newInfo.PressDistance; + releaseDistanceDelta.floatValue = newInfo.ReleaseDistanceDelta; - boxColliderSize.vector3Value = new Vector3(info.touchCageLocalBounds.size.x, info.touchCageLocalBounds.size.y, newInfo.touchCageSize); - boxColliderCenter.vector3Value = new Vector3(info.touchCageLocalBounds.center.x, info.touchCageLocalBounds.center.y, newInfo.touchCageCenter); + boxColliderSize.vector3Value = new Vector3(info.TouchCageLocalBounds.size.x, info.TouchCageLocalBounds.size.y, newInfo.TouchCageSize); + boxColliderCenter.vector3Value = new Vector3(info.TouchCageLocalBounds.center.x, info.TouchCageLocalBounds.center.y, newInfo.TouchCageCenter); boxColliderObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties(); @@ -236,7 +241,7 @@ private void DrawButtonInfo(ButtonInfo info, bool editingEnabled) Handles.DrawDottedLine(targetStartPlane[3], targetEndPlane[3], 2.5f); } - private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, ref float zPosition, Vector3 cagePosition, string label, bool editingEnabled) + private float DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, float zPosition, Vector3 cagePosition, string label, bool editingEnabled) { cagePosition.z = zPosition; MakePlaneFromPoint(plane, cagePosition, planeSize, transform); @@ -258,7 +263,7 @@ private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, ref float zP SceneView.RepaintAll(); } - float handleSize = HandleUtility.GetHandleSize(plane[0]) * 0.15f; + float handleSize = HandleUtility.GetHandleSize(plane[1]) * 0.15f; Handles.ArrowHandleCap(0, plane[1], Quaternion.LookRotation(transform.forward, Vector3.up), handleSize * 2, EventType.Repaint); Handles.ArrowHandleCap(0, plane[1], Quaternion.LookRotation(-transform.forward, Vector3.up), handleSize * 2, EventType.Repaint); @@ -270,6 +275,8 @@ private void DrawPlaneAndHandle(Vector3[] plane, Vector3 planeSize, ref float zP handlePosition = transform.InverseTransformPoint(handlePosition); zPosition = handlePosition.z; } + + return zPosition; } public override void OnInspectorGUI() From ea5e3bf281c595109712b1399d29dd20cb11eb17 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Tue, 16 Apr 2019 10:53:40 -0700 Subject: [PATCH 106/183] Resloving conflicts in PressableButton --- .../PressableButtons/PressableButton.cs | 83 ++++++++++++------- .../Interactable/PressableButtonInspector.cs | 4 +- 2 files changed, 53 insertions(+), 34 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs index 3e6157ce812..af086be4ce2 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs @@ -18,7 +18,7 @@ namespace Microsoft.MixedReality.Toolkit.UI public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler { const string InitialMarkerTransformName = "Initial Marker"; - + [SerializeField] [Tooltip("The object that is being pushed.")] private GameObject movingButtonVisuals = null; @@ -42,6 +42,10 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [Tooltip("Speed of the object movement on release.")] private float returnRate = 25.0f; + [SerializeField] + [Tooltip("Ensures that the button can only be pushed from the front. Touching the button from the back or side is prevented.")] + private bool enforceFrontPush = true; + [Header("Events")] public UnityEvent TouchBegin; public UnityEvent TouchEnd; @@ -55,7 +59,7 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler private float currentPushDistance = 0.0f; - private List touchPoints = new List(); + private Dictionary touchPoints = new Dictionary(); [Header("Button State")] [ReadOnly] @@ -66,20 +70,17 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [SerializeField] private bool isPressing = false; - private Transform initialTransform; - - /// /// Represents the state of whether or not a finger is currently touching this button. /// - public bool IsTouching + private bool IsTouching { get { return isTouching; } - private set + set { if (value != isTouching) { @@ -110,8 +111,7 @@ private Vector3 WorldSpacePressDirection return -1.0f * nearInteractionTouchable.Forward; } - Vector3 localSpacePressDirection = new Vector3(0, 0, 1); - return transform.TransformDirection(localSpacePressDirection); + return transform.forward; } } @@ -121,7 +121,7 @@ private void Start() { if (gameObject.layer == 2) { - Debug.LogWarning("PhysicalButtonMovement will not work if game object layer is set to 'Ignore Raycast'."); + Debug.LogWarning("PressableButton will not work if game object layer is set to 'Ignore Raycast'."); } } @@ -131,12 +131,12 @@ private void Update() if (IsTouching) { - float previousPushDistance = currentPushDistance; currentPushDistance = GetFarthestPushDistanceAlongButtonAxis(); + UpdateMovingVisualsPosition(); // Hand Press is only allowed to happen while touching. - UpdatePressedState(currentPushDistance, previousPushDistance); + UpdatePressedState(currentPushDistance); } else if (currentPushDistance > 0.0f) { @@ -150,25 +150,32 @@ private void Update() UpdateMovingVisualsPosition(); } - - touchPoints.Clear(); } #region OnTouch void IMixedRealityTouchHandler.OnTouchStarted(HandTrackingInputEventData eventData) { - touchPoints.Add(eventData.InputData); + FindOrCreatePathMarkers(); - if (initialTransform == null) + if (enforceFrontPush) { - FindOrCreatePathMarkers(); - // Make sure to initialize currentPushDistance now to correctly handle back-presses in - // HandlePressProgress(). - currentPushDistance = GetFarthestPushDistanceAlongButtonAxis(); + // Back-Press Detection: + // Accept touch only if controller pushed from the front. + // Extrapolate to get previous position. + Vector3 previousPosition = eventData.InputData - eventData.Controller.Velocity * Time.deltaTime; + float previousDistance = GetProjectedDistance(initialTransform.position, WorldSpacePressDirection, previousPosition); + + if (previousDistance > 0.0f) + { + return; + } } - // Pulse each proximity light on pointer cursors's interacting with this button. + Debug.Assert(!touchPoints.ContainsKey(eventData.Controller)); + touchPoints.Add(eventData.Controller, eventData.InputData); + + // Pulse each proximity light on pointer cursors' interacting with this button. foreach (var pointer in eventData.InputSource.Pointers) { ProximityLight[] proximityLights = pointer.BaseCursor?.GameObjectReference?.GetComponentsInChildren(); @@ -187,18 +194,29 @@ void IMixedRealityTouchHandler.OnTouchStarted(HandTrackingInputEventData eventDa void IMixedRealityTouchHandler.OnTouchUpdated(HandTrackingInputEventData eventData) { - touchPoints.Add(eventData.InputData); + if (touchPoints.ContainsKey(eventData.Controller)) + { + touchPoints[eventData.Controller] = eventData.InputData; + + eventData.Use(); + } } - + void IMixedRealityTouchHandler.OnTouchCompleted(HandTrackingInputEventData eventData) { + if (touchPoints.ContainsKey(eventData.Controller)) + { + touchPoints.Remove(eventData.Controller); + + eventData.Use(); + } } - + #endregion OnTouch #region private Methods - public void FindOrCreatePathMarkers() + private void FindOrCreatePathMarkers() { Transform sourcePositionTransform = (movingButtonVisuals != null) ? movingButtonVisuals.transform : transform; @@ -212,7 +230,7 @@ public void FindOrCreatePathMarkers() if (initialTransform == null) { initialTransform = new GameObject(InitialMarkerTransformName).transform; - initialTransform.parent = transform; + initialTransform.parent = sourcePositionTransform.parent; initialTransform.position = sourcePositionTransform.position; } } @@ -233,22 +251,23 @@ private float GetFarthestPushDistanceAlongButtonAxis() Debug.Assert(initialTransform != null); float farthestDistance = 0.0f; - foreach (Vector3 p in touchPoints) + + foreach (var touchEntry in touchPoints) { - float testDistance = GetProjectedDistance(initialTransform.position, WorldSpacePressDirection, p); - farthestDistance = Mathf.Max(farthestDistance, testDistance); + float testDistance = GetProjectedDistance(initialTransform.position, WorldSpacePressDirection, touchEntry.Value); + farthestDistance = Mathf.Max(testDistance, farthestDistance); } return Mathf.Clamp(farthestDistance, 0.0f, maxPushDistance); } - private void UpdatePressedState(float pushDistance, float previousPushDistance) + private void UpdatePressedState(float pushDistance) { // If we aren't in a press and can't start a simple one. if (!isPressing) { // Compare to our previous push depth. Use previous push distance to handle back-presses. - if (pushDistance >= pressDistance && previousPushDistance < pressDistance) + if (pushDistance >= pressDistance) { isPressing = true; ButtonPressed.Invoke(); @@ -258,7 +277,7 @@ private void UpdatePressedState(float pushDistance, float previousPushDistance) else { float releaseDistance = pressDistance - releaseDistanceDelta; - if (pushDistance <= releaseDistance && previousPushDistance > releaseDistance) + if (pushDistance <= releaseDistance) { isPressing = false; ButtonReleased.Invoke(); diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs index bf27dbc5939..03e7d5b0716 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Interactable/PressableButtonInspector.cs @@ -131,7 +131,7 @@ private ButtonInfo GatherCurrentInfo() info.TouchStartOrigin = touchStartOrigin; info.TouchCageCenter = info.TouchCageLocalBounds.center.z; info.TouchCageSize = info.TouchCageLocalBounds.size.z; - + // Get the start and end pos for moving content info.StartPos = buttonContentTransform.localPosition.z; info.EndPos = buttonContentTransform.localPosition.z; @@ -157,7 +157,7 @@ private void DrawButtonInfo(ButtonInfo info, bool editingEnabled) { EditorGUI.BeginChangeCheck(); } - + // PRESS END Handles.color = Color.cyan; newInfo.EndPos = DrawPlaneAndHandle(targetEndPlane, info.TouchCageLocalBounds.size * 0.5f, newInfo.EndPos, info.TouchStartOrigin, "Max move distance", editingEnabled); From 0b6b23dbf6f091fb20fa0c4b11736577d07bf0aa Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Tue, 16 Apr 2019 10:55:37 -0700 Subject: [PATCH 107/183] Addressing issues (#3918) for loading additive scenes. --- .../Scripts/TargetBehaviors/LoadAdditiveScene.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Scripts/TargetBehaviors/LoadAdditiveScene.cs b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Scripts/TargetBehaviors/LoadAdditiveScene.cs index b6622ae150d..0a39db7f1a8 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Scripts/TargetBehaviors/LoadAdditiveScene.cs +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Scripts/TargetBehaviors/LoadAdditiveScene.cs @@ -50,18 +50,17 @@ private IEnumerator LoadNewScene(string sceneName) AudioFeedbackPlayer.Instance.PlaySound(audio_OnSelect); // Let's find out the name of the currently loaded additive scene to unload - if ((lastSceneLoaded == "") && (SceneManager.sceneCount > 1)) + if (SceneManager.sceneCount > 1) { lastSceneLoaded = SceneManager.GetSceneAt(1).name; - } - - Debug.Log($"Last scene name: {lastSceneLoaded}"); - // Let's wait in case we don't want to switch scenes too abruptly - yield return new WaitForSeconds(waitTimeInSecBeforeLoading); + Debug.Log($"Last scene name: {lastSceneLoaded}"); + // Let's wait in case we don't want to switch scenes too abruptly + yield return new WaitForSeconds(waitTimeInSecBeforeLoading); - SceneManager.UnloadSceneAsync(lastSceneLoaded); + SceneManager.UnloadSceneAsync(lastSceneLoaded); + } Debug.Log($"New scene name: {SceneToBeLoaded}"); lastSceneLoaded = SceneToBeLoaded; From 647d436988b5d49201c68e12742c30c36d0c8b26 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Tue, 16 Apr 2019 11:14:55 -0700 Subject: [PATCH 108/183] Update of TextMeshPro labels in additional scenes. --- .../Scenes/mrtk_eyes_00_RootScene.unity | 2 +- .../Scenes/mrtk_eyes_03_Navigation.unity | 257 ++++++-- .../mrtk_eyes_04_TargetPositioning.unity | 601 +++++++++++------- .../Scenes/mrtk_eyes_05_Visualizer.unity | 43 +- ProjectSettings/ProjectVersion.txt | 2 +- 5 files changed, 620 insertions(+), 285 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity index a8cc5f5ae66..4e2346facf0 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_00_RootScene.unity @@ -6179,7 +6179,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 658445383, guid: d9db4fe4b37b2024ea85c888f8d74e12, type: 3} propertyPath: m_Enabled - value: 0 + value: 1 objectReference: {fileID: 0} - target: {fileID: 1597255435, guid: d9db4fe4b37b2024ea85c888f8d74e12, type: 3} propertyPath: keywords.Array.size diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_03_Navigation.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_03_Navigation.unity index 869616bece9..51841216ae4 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_03_Navigation.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_03_Navigation.unity @@ -1066,6 +1066,17 @@ PrefabInstance: propertyPath: m_Positions.Array.data[7].z value: 0.7306503 objectReference: {fileID: 0} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: afaef0108a478c44a9eac26658bc29bf, type: 3} --- !u!1 &79285075 @@ -2902,6 +2913,80 @@ Transform: m_Father: {fileID: 9949653} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &262017580 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 262017581} + - component: {fileID: 262017583} + - component: {fileID: 262017582} + m_Layer: 0 + m_Name: TMP SubMeshUI [segoeui SDF Material + LiberationSans SDF Atlas] + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &262017581 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262017580} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1852894734} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &262017582 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262017580} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 058cba836c1846c3aa1c5fd2e28aea77, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_spriteAsset: {fileID: 0} + m_material: {fileID: 0} + m_sharedMaterial: {fileID: 0} + m_isDefaultMaterial: 0 + m_padding: 10.5 + m_canvasRenderer: {fileID: 262017583} + m_TextComponent: {fileID: 1852894735} + m_materialReferenceIndex: 1 +--- !u!222 &262017583 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262017580} + m_CullTransparentMesh: 0 --- !u!1 &293287175 GameObject: m_ObjectHideFlags: 0 @@ -3191,6 +3276,29 @@ PrefabInstance: propertyPath: m_Mesh value: objectReference: {fileID: 0} + - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_Text + value: 'Zoom in: Air-tap down, hold and pull the content towards you + + Zoom out: Air-tap down, hold and push content away from you' + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} - target: {fileID: 2701345762782396268, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} propertyPath: m_IsActive @@ -3201,13 +3309,6 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, - type: 3} - propertyPath: m_Text - value: 'Zoom in: Air-tap down, hold and pull the content towards you - - Zoom out: Air-tap down, hold and push content away from you' - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} --- !u!4 &412895696 stripped @@ -3674,6 +3775,17 @@ PrefabInstance: propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: afaef0108a478c44a9eac26658bc29bf, type: 3} --- !u!1001 &539827680 @@ -4134,6 +4246,17 @@ PrefabInstance: propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: afaef0108a478c44a9eac26658bc29bf, type: 3} --- !u!1 &565903753 @@ -5577,8 +5700,9 @@ MonoBehaviour: Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_text: 'Eye Pan & Zoom: Map' m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 1553971856} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 1553971856} m_fontMaterials: [] @@ -6896,6 +7020,27 @@ PrefabInstance: propertyPath: m_Mesh value: objectReference: {fileID: 0} + - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_Text + value: You can also simply say "Zoom in" or "Zoom out"! + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} - target: {fileID: 2701345762782396268, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} propertyPath: m_IsActive @@ -6906,11 +7051,6 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, - type: 3} - propertyPath: m_Text - value: You can also simply say "Zoom in" or "Zoom out"! - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} --- !u!4 &1358668054 stripped @@ -7930,6 +8070,17 @@ PrefabInstance: propertyPath: m_LocalScale.z value: 1 objectReference: {fileID: 0} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7446970764068212843, guid: afaef0108a478c44a9eac26658bc29bf, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: afaef0108a478c44a9eac26658bc29bf, type: 3} --- !u!1 &1465011396 @@ -8016,7 +8167,7 @@ MonoBehaviour: power/standby mode. A USB 2.0 micro-B receptacle is located along the bottom edge. A 3.5 mm audio jack is located along the bottom edge of the right arm.\n ***" m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} m_sharedMaterial: {fileID: 1553971856} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 1553971856} @@ -8097,7 +8248,7 @@ MonoBehaviour: m_spriteAnimator: {fileID: 0} m_isInputParsingRequired: 0 m_inputSource: 0 - m_hasFontAssetChanged: 0 + m_hasFontAssetChanged: 1 m_subTextObjects: - {fileID: 0} - {fileID: 0} @@ -8427,6 +8578,28 @@ PrefabInstance: propertyPath: m_Mesh value: objectReference: {fileID: 0} + - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_Text + value: "Auto Scroll: Stay in your reading flow. Simply read on and \non + and on..." + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} - target: {fileID: 2701345762782396268, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} propertyPath: m_IsActive @@ -8437,12 +8610,6 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, - type: 3} - propertyPath: m_Text - value: "Auto Scroll: Stay in your reading flow. Simply read on and \non - and on..." - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} --- !u!4 &1539824537 stripped @@ -8954,7 +9121,7 @@ MonoBehaviour: m_HandleRect: {fileID: 1736124909} m_Direction: 2 m_Value: 1 - m_Size: 0.1918772 + m_Size: 0.1694567 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -9347,6 +9514,29 @@ PrefabInstance: propertyPath: m_Mesh value: objectReference: {fileID: 0} + - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_Text + value: 'Auto pan: Once zoomed in, try to follow the course of + + a street with your eye gaze and see what happens!' + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 7706515727995184478, guid: b81ff345fab8e1e449e4b387889fc53c, + type: 3} + propertyPath: m_hasFontAssetChanged + value: 1 + objectReference: {fileID: 0} - target: {fileID: 2701345762782396268, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} propertyPath: m_IsActive @@ -9357,13 +9547,6 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - - target: {fileID: 4323231195413702660, guid: b81ff345fab8e1e449e4b387889fc53c, - type: 3} - propertyPath: m_Text - value: 'Auto pan: Once zoomed in, try to follow the course of - - a street with your eye gaze and see what happens!' - objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b81ff345fab8e1e449e4b387889fc53c, type: 3} --- !u!4 &1851397785 stripped @@ -9401,7 +9584,8 @@ RectTransform: m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 262017581} m_Father: {fileID: 1295463316} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -9456,8 +9640,9 @@ MonoBehaviour: power/standby mode. A USB 2.0 micro-B receptacle is located along the bottom edge. A 3.5 mm audio jack is located along the bottom edge of the right arm.\n ***" m_isRightToLeft: 0 - m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} - m_sharedMaterial: {fileID: 1553971856} + m_fontAsset: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, type: 2} + m_sharedMaterial: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_fontSharedMaterials: [] m_fontMaterial: {fileID: 1553971856} m_fontMaterials: [] @@ -9528,9 +9713,9 @@ MonoBehaviour: spaceCount: 394 wordCount: 332 linkCount: 0 - lineCount: 52 + lineCount: 51 pageCount: 1 - materialCount: 1 + materialCount: 2 m_havePropertiesChanged: 0 m_isUsingLegacyAnimationComponent: 0 m_isVolumetricText: 0 @@ -9540,7 +9725,7 @@ MonoBehaviour: m_hasFontAssetChanged: 0 m_subTextObjects: - {fileID: 0} - - {fileID: 0} + - {fileID: 262017582} - {fileID: 0} - {fileID: 0} - {fileID: 0} diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_04_TargetPositioning.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_04_TargetPositioning.unity index 69eb3a50d81..895199bdaeb 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_04_TargetPositioning.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_04_TargetPositioning.unity @@ -22651,251 +22651,6 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!1001 &1415677275 -PrefabInstance: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1470231290} - m_Modifications: - - target: {fileID: 8870521974597119028, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_Name - value: 3DSlider (2) - objectReference: {fileID: 0} - - target: {fileID: 9191179479151558189, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalPosition.x - value: 0.262 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalPosition.y - value: -0.106 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalPosition.z - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalRotation.z - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: 90 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalScale.x - value: 0.6 - objectReference: {fileID: 0} - - target: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalScale.y - value: 0.6 - objectReference: {fileID: 0} - - target: {fileID: 8870521973379306995, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: OnManipulationEnded.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 8870521973379306995, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: OnManipulationStarted.m_PersistentCalls.m_Calls.Array.data[0].m_Target - value: - objectReference: {fileID: 0} - - target: {fileID: 8870521973379306995, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: min_max_y.x - value: 0.1 - objectReference: {fileID: 0} - - target: {fileID: 8870521973379306995, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: min_max_y.y - value: 0.28 - objectReference: {fileID: 0} - - target: {fileID: 190769702, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: LocalMinMax_X.x - value: -0.15 - objectReference: {fileID: 0} - - target: {fileID: 190769702, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: LocalMinMax_X.y - value: 0.15 - objectReference: {fileID: 0} - - target: {fileID: 190769702, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: LocalMinMax_Y.x - value: -Infinity - objectReference: {fileID: 0} - - target: {fileID: 190769702, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: LocalMinMax_Y.y - value: Infinity - objectReference: {fileID: 0} - - target: {fileID: 190769702, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: freezeX - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 190769702, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: freezeY - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.x - value: -0.5 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.y - value: -0.5 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.z - value: -0.5 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.w - value: 0.5 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalEulerAnglesHint.x - value: -90.00001 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: -90 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalPosition.x - value: -0.03 - objectReference: {fileID: 0} - - target: {fileID: 1211465854, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalPosition.z - value: 1.21 - objectReference: {fileID: 0} - - target: {fileID: 1211465855, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_Text - value: 1.23 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.z - value: -0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalRotation.w - value: 0.7071068 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalEulerAnglesHint.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_LocalEulerAnglesHint.z - value: -90 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_AnchoredPosition.x - value: -0.192 - objectReference: {fileID: 0} - - target: {fileID: 1626080341, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_AnchoredPosition.y - value: -0.0088 - objectReference: {fileID: 0} - - target: {fileID: 1626080344, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_Mesh - value: - objectReference: {fileID: 0} - - target: {fileID: 1626080342, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_havePropertiesChanged - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1626080342, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_isInputParsingRequired - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1626080342, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_text - value: 'Slider #2' - objectReference: {fileID: 0} - - target: {fileID: 1626080342, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_textInfo.characterCount - value: 9 - objectReference: {fileID: 0} - - target: {fileID: 1626080342, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_textInfo.wordCount - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 1626080342, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} - propertyPath: m_textAlignment - value: 258 - objectReference: {fileID: 0} - - target: {fileID: 8870521973379306993, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_IsActive - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 4789753410373275439, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalPosition.y - value: -1.03 - objectReference: {fileID: 0} - - target: {fileID: 4789753410373275439, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - propertyPath: m_LocalPosition.z - value: -0 - objectReference: {fileID: 0} - m_RemovedComponents: [] - m_SourcePrefab: {fileID: 100100000, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} ---- !u!4 &1415677276 stripped -Transform: - m_CorrespondingSourceObject: {fileID: 8870521974597119031, guid: 71b8b2acb3a8f344abf91c2b102b0d74, - type: 3} - m_PrefabInstance: {fileID: 1415677275} - m_PrefabAsset: {fileID: 0} --- !u!1 &1423274610 GameObject: m_ObjectHideFlags: 0 @@ -23272,7 +23027,7 @@ Transform: - {fileID: 1408538337} - {fileID: 393894559} - {fileID: 1961137126} - - {fileID: 1415677276} + - {fileID: 8870521973726898540} m_Father: {fileID: 9949653} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -28278,6 +28033,214 @@ ParticleSystem: m_PostInfinity: 2 m_RotationOrder: 4 vectorLabel1_3: W +--- !u!1 &1701657403 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1701657404} + - component: {fileID: 1701657408} + - component: {fileID: 1701657407} + - component: {fileID: 1701657406} + - component: {fileID: 1701657405} + m_Layer: 0 + m_Name: OutputLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1701657404 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701657403} + m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -2.7633336} + m_LocalScale: {x: 0.26708332, y: 0.26708338, z: 0.64100015} + m_Children: [] + m_Father: {fileID: 1931571675} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 12.124999, y: 1.049998} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1701657405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701657403} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: 1,23 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 15.908832, w: 2.0785923} + m_textInfo: + textComponent: {fileID: 1701657405} + characterCount: 4 + spriteCount: 0 + spaceCount: 0 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 1701657408} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!222 &1701657406 +CanvasRenderer: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701657403} + m_CullTransparentMesh: 0 +--- !u!33 &1701657407 +MeshFilter: + m_ObjectHideFlags: 2 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701657403} + m_Mesh: {fileID: 0} +--- !u!23 &1701657408 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1701657403} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 --- !u!1 &1737383532 GameObject: m_ObjectHideFlags: 0 @@ -28637,6 +28600,12 @@ Light: m_UseColorTemperature: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 +--- !u!4 &1931571675 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 8870521973379306992, guid: 71b8b2acb3a8f344abf91c2b102b0d74, + type: 3} + m_PrefabInstance: {fileID: 8870521973198618577} + m_PrefabAsset: {fileID: 0} --- !u!1 &1959001618 GameObject: m_ObjectHideFlags: 0 @@ -33828,6 +33797,120 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 +--- !u!1001 &3633831753529647844 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1470231290} + m_Modifications: + - target: {fileID: 5293869240424762251, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_Name + value: 3DSlider (2) + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalPosition.x + value: 0.262 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalPosition.y + value: -0.106 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalRotation.z + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalRotation.w + value: 0.7071068 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 90 + objectReference: {fileID: 0} + - target: {fileID: 5293869239745969194, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_LocalScale.y + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: 3633831754249538969, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: txtOutput_sliderValue + value: + objectReference: {fileID: 0} + - target: {fileID: 1981544228620122561, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 6620893258549880666, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6620893258549880666, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6620893258549880666, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_text + value: 1.23 + objectReference: {fileID: 0} + - target: {fileID: 3633831753856508903, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 3633831753856508905, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 3633831753856508905, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, type: 3} --- !u!1001 &8870521973198618577 PrefabInstance: m_ObjectHideFlags: 0 @@ -33907,5 +33990,31 @@ PrefabInstance: propertyPath: m_isInputParsingRequired value: 1 objectReference: {fileID: 0} + - target: {fileID: 8870521974202702741, guid: 71b8b2acb3a8f344abf91c2b102b0d74, + type: 3} + propertyPath: m_LocalScale.y + value: 0.16 + objectReference: {fileID: 0} + - target: {fileID: 7764835857267048014, guid: 71b8b2acb3a8f344abf91c2b102b0d74, + type: 3} + propertyPath: m_Mesh + value: + objectReference: {fileID: 0} + - target: {fileID: 8770542414431061229, guid: 71b8b2acb3a8f344abf91c2b102b0d74, + type: 3} + propertyPath: m_havePropertiesChanged + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8770542414431061229, guid: 71b8b2acb3a8f344abf91c2b102b0d74, + type: 3} + propertyPath: m_isInputParsingRequired + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 71b8b2acb3a8f344abf91c2b102b0d74, type: 3} +--- !u!4 &8870521973726898540 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 5293869240424762248, guid: 1a4bbe24b109c6e4aa21a517ad27ba95, + type: 3} + m_PrefabInstance: {fileID: 3633831753529647844} + m_PrefabAsset: {fileID: 0} diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_05_Visualizer.unity b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_05_Visualizer.unity index 81d26d7003e..3c010572ea6 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_05_Visualizer.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Scenes/mrtk_eyes_05_Visualizer.unity @@ -4214,7 +4214,7 @@ PrefabInstance: - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, type: 3} propertyPath: m_firstOverflowCharacterIndex - value: -1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, type: 3} @@ -4236,6 +4236,18 @@ PrefabInstance: propertyPath: m_textInfo.wordCount value: 2 objectReference: {fileID: 0} + - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_sharedMaterial + value: + objectReference: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} - target: {fileID: 4533479807832870191, guid: 231a4253eb1a74d4e87393459447cc95, type: 3} propertyPath: m_IsActive @@ -4281,6 +4293,12 @@ PrefabInstance: propertyPath: OnLookAway.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName value: Disengage objectReference: {fileID: 0} + - target: {fileID: 4533479808247404465, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 231a4253eb1a74d4e87393459447cc95, type: 3} --- !u!4 &1562698547 stripped @@ -5358,6 +5376,23 @@ PrefabInstance: propertyPath: m_isInputParsingRequired value: 1 objectReference: {fileID: 0} + - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_fontAsset + value: + objectReference: {fileID: 11400000, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_sharedMaterial + value: + objectReference: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} + - target: {fileID: 4533479808247404460, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_firstOverflowCharacterIndex + value: 0 + objectReference: {fileID: 0} - target: {fileID: 4533479808906774278, guid: 231a4253eb1a74d4e87393459447cc95, type: 3} propertyPath: m_Size.x @@ -5388,5 +5423,11 @@ PrefabInstance: propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} + - target: {fileID: 4533479808247404465, guid: 231a4253eb1a74d4e87393459447cc95, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 21340371490990018, guid: afc8299d5d5bbd440a0616c8ecbc7217, + type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 231a4253eb1a74d4e87393459447cc95, type: 3} diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 1d7351781fd..d848e35e1dd 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.3.9f1 +m_EditorVersion: 2018.3.8f1 From 8c819905de668122ce7f6dd9e0e73574266dfe50 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Tue, 16 Apr 2019 11:15:36 -0700 Subject: [PATCH 109/183] Updated the slider - replacing with TextMeshPro. --- ...er.prefab => 3DSlider - Horizontal.prefab} | 270 ++- ...meta => 3DSlider - Horizontal.prefab.meta} | 0 .../Prefabs/3DSlider - Vertical.prefab | 1803 +++++++++++++++++ .../Prefabs/3DSlider - Vertical.prefab.meta | 7 + 4 files changed, 2005 insertions(+), 75 deletions(-) rename Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/{3DSlider.prefab => 3DSlider - Horizontal.prefab} (91%) rename Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/{3DSlider.prefab.meta => 3DSlider - Horizontal.prefab.meta} (100%) create mode 100644 Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab create mode 100644 Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab.meta diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider.prefab b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Horizontal.prefab similarity index 91% rename from Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider.prefab rename to Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Horizontal.prefab index 946994a0d15..809bacec87f 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Horizontal.prefab @@ -1,6 +1,6 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: ---- !u!1 &1211465853 +--- !u!1 &1626080340 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -8,40 +8,47 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1211465854} - - component: {fileID: 1211465856} - - component: {fileID: 1211465855} + - component: {fileID: 1626080341} + - component: {fileID: 1626080345} + - component: {fileID: 1626080344} + - component: {fileID: 1626080343} + - component: {fileID: 1626080342} m_Layer: 0 - m_Name: OutputLabel + m_Name: PanelLabel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!4 &1211465854 -Transform: +--- !u!224 &1626080341 +RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1211465853} - m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} - m_LocalPosition: {x: -0.029, y: 1.06, z: -1.12} - m_LocalScale: {x: 0.01, y: 0.01, z: 0.01} + m_GameObject: {fileID: 1626080340} + m_LocalRotation: {x: -0, y: 0.000000119209275, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.006} + m_LocalScale: {x: 0.010683333, y: 0.010683333, z: 0.00641} m_Children: [] - m_Father: {fileID: 8870521973379306992} - m_RootOrder: 0 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!23 &1211465856 + m_Father: {fileID: 8870521974597119031} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 135, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.077, y: -0.0659} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &1626080345 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1211465853} + m_GameObject: {fileID: 1626080340} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_DynamicOccludee: 1 m_MotionVectors: 1 m_LightProbeUsage: 1 @@ -49,7 +56,7 @@ MeshRenderer: m_RenderingLayerMask: 1 m_RendererPriority: 0 m_Materials: - - {fileID: 2100000, guid: e869342c56e54acf989b2422b4b80dcc, type: 3} + - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -69,29 +76,139 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!102 &1211465855 -TextMesh: - serializedVersion: 3 - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1211465853} - m_Text: 1.2345 - m_OffsetZ: 0 - m_CharacterSize: 1 - m_LineSpacing: 1 - m_Anchor: 4 - m_Alignment: 1 - m_TabSize: 4 - m_FontSize: 463 - m_FontStyle: 0 - m_RichText: 1 - m_Font: {fileID: 12800000, guid: e869342c56e54acf989b2422b4b80dcc, type: 3} - m_Color: +--- !u!33 &1626080344 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626080340} + m_Mesh: {fileID: 0} +--- !u!222 &1626080343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626080340} + m_CullTransparentMesh: 0 +--- !u!114 &1626080342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1626080340} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: 'Slider #1' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4288453788 + m_fontColor: {r: 0.6132076, g: 0.6132076, b: 0.6132076, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: serializedVersion: 2 rgba: 4294967295 ---- !u!1 &1626080340 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 1.4332783, w: 2.0785923} + m_textInfo: + textComponent: {fileID: 1626080342} + characterCount: 9 + spriteCount: 0 + spaceCount: 1 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 1626080345} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!1 &191807725891000146 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -99,44 +216,44 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 1626080341} - - component: {fileID: 1626080345} - - component: {fileID: 1626080344} - - component: {fileID: 1626080343} - - component: {fileID: 1626080342} + - component: {fileID: 2470530804131060238} + - component: {fileID: 217556923394076651} + - component: {fileID: 7764835857267048014} + - component: {fileID: 2839632784747118088} + - component: {fileID: 8770542414431061229} m_Layer: 0 - m_Name: PanelLabel + m_Name: OutputLabel m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &1626080341 +--- !u!224 &2470530804131060238 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1626080340} - m_LocalRotation: {x: -0, y: 0.000000119209275, z: -0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: -0.006} - m_LocalScale: {x: 0.010683333, y: 0.010683333, z: 0.00641} + m_GameObject: {fileID: 191807725891000146} + m_LocalRotation: {x: -0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.774} + m_LocalScale: {x: 0.26708332, y: 0.26708338, z: 0.64100015} m_Children: [] - m_Father: {fileID: 8870521974597119031} - m_RootOrder: 3 - m_LocalEulerAnglesHint: {x: 0, y: 135, z: 0} + m_Father: {fileID: 8870521973379306992} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -0.077, y: -0.0659} + m_AnchoredPosition: {x: 1.84, y: 0.87} m_SizeDelta: {x: 20, y: 5} m_Pivot: {x: 0.5, y: 0.5} ---- !u!23 &1626080345 +--- !u!23 &217556923394076651 MeshRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1626080340} + m_GameObject: {fileID: 191807725891000146} m_Enabled: 1 m_CastShadows: 0 m_ReceiveShadows: 0 @@ -167,29 +284,29 @@ MeshRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 0 ---- !u!33 &1626080344 +--- !u!33 &7764835857267048014 MeshFilter: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1626080340} + m_GameObject: {fileID: 191807725891000146} m_Mesh: {fileID: 0} ---- !u!222 &1626080343 +--- !u!222 &2839632784747118088 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1626080340} + m_GameObject: {fileID: 191807725891000146} m_CullTransparentMesh: 0 ---- !u!114 &1626080342 +--- !u!114 &8770542414431061229 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1626080340} + m_GameObject: {fileID: 191807725891000146} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} @@ -203,7 +320,7 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - m_text: 'Slider #1' + m_text: 1.2345 m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, @@ -213,8 +330,8 @@ MonoBehaviour: m_fontMaterials: [] m_fontColor32: serializedVersion: 2 - rgba: 4288453788 - m_fontColor: {r: 0.6132076, g: 0.6132076, b: 0.6132076, a: 1} + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} m_enableVertexGradient: 0 m_colorMode: 3 m_fontColorGradient: @@ -239,7 +356,7 @@ MonoBehaviour: m_fontSizeMin: 18 m_fontSizeMax: 72 m_fontStyle: 0 - m_textAlignment: 257 + m_textAlignment: 258 m_isAlignmentEnumConverted: 1 m_characterSpacing: 0 m_wordSpacing: 0 @@ -270,12 +387,12 @@ MonoBehaviour: m_firstVisibleCharacter: 0 m_useMaxVisibleDescender: 1 m_pageToDisplay: 1 - m_margin: {x: 0, y: 0, z: 1.4332783, w: 2.0785923} + m_margin: {x: 0, y: 0, z: 13.765949, w: 2.0785923} m_textInfo: - textComponent: {fileID: 1626080342} - characterCount: 9 + textComponent: {fileID: 8770542414431061229} + characterCount: 6 spriteCount: 0 - spaceCount: 1 + spaceCount: 0 wordCount: 2 linkCount: 0 lineCount: 1 @@ -288,7 +405,7 @@ MonoBehaviour: m_isInputParsingRequired: 0 m_inputSource: 0 m_hasFontAssetChanged: 0 - m_renderer: {fileID: 1626080345} + m_renderer: {fileID: 217556923394076651} m_subTextObjects: - {fileID: 0} - {fileID: 0} @@ -1220,7 +1337,7 @@ Transform: m_LocalPosition: {x: 0, y: 0, z: -0.0165} m_LocalScale: {x: 0.04, y: 0.01, z: 0.04} m_Children: - - {fileID: 1211465854} + - {fileID: 2470530804131060238} - {fileID: 4789753410373275439} m_Father: {fileID: 8870521974597119031} m_RootOrder: 2 @@ -1332,7 +1449,7 @@ MonoBehaviour: m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null useAsSlider: 1 - txtOutput_sliderValue: {fileID: 1211465855} + txtOutput_sliderValue: {fileID: 0} slider_snapToNearestDecimal: 0.1 --- !u!114 &8870521973198618579 MonoBehaviour: @@ -1346,6 +1463,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 92ccc66cc8439d047be737bcfdba2662, type: 3} m_Name: m_EditorClassIdentifier: + focusEnabled: 1 + timeToTriggerDwellInSec: 5 Overlay_UseIt: 1 Overlay_GameObj: {fileID: 9191179479151558189} startTransparency: 0 @@ -1369,6 +1488,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: e1e6657bab90ac149872e5361b42ea62, type: 3} m_Name: m_EditorClassIdentifier: + focusEnabled: 1 + timeToTriggerDwellInSec: 5 selectAction: id: 0 description: @@ -1400,7 +1521,6 @@ MonoBehaviour: m_Calls: [] m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - timeToTriggerDwellInSec: 5 --- !u!1 &8870521974202702738 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider.prefab.meta b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Horizontal.prefab.meta similarity index 100% rename from Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider.prefab.meta rename to Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Horizontal.prefab.meta diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab new file mode 100644 index 00000000000..a14f6baf3ea --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab @@ -0,0 +1,1803 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &82327213740231382 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3443258773997230705} + m_Layer: 0 + m_Name: Markings + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3443258773997230705 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 82327213740231382} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3791387829189264828} + - {fileID: 1872569896561272285} + - {fileID: 4451731578619795871} + - {fileID: 2872309268787512275} + - {fileID: 5159428874990500534} + - {fileID: 6271803262800217262} + - {fileID: 6113509578522178907} + - {fileID: 3184334352359284155} + - {fileID: 1927900424973432808} + - {fileID: 5310936957527816693} + - {fileID: 4960682321218417967} + m_Father: {fileID: 5293869240424762248} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1301327209055190471 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4960682321218417967} + - component: {fileID: 432083895893593686} + - component: {fileID: 5583079292039421868} + m_Layer: 0 + m_Name: m (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4960682321218417967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1301327209055190471} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.12, y: -0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 10 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &432083895893593686 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1301327209055190471} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5583079292039421868 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1301327209055190471} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &2206489545050145627 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3791387829189264828} + - component: {fileID: 6629295921460697939} + - component: {fileID: 2721024180537353946} + m_Layer: 0 + m_Name: m (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &3791387829189264828 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2206489545050145627} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.15, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.002, y: 0.03, z: 0.002} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6629295921460697939 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2206489545050145627} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2721024180537353946 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2206489545050145627} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3063253719820195227 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1927900424973432808} + - component: {fileID: 4983731415762752906} + - component: {fileID: 7292672476703273131} + m_Layer: 0 + m_Name: m (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1927900424973432808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3063253719820195227} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.06, y: -0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &4983731415762752906 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3063253719820195227} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7292672476703273131 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3063253719820195227} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3104200539904800983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4728146162495744220} + - component: {fileID: 4944115961938640961} + - component: {fileID: 1981544228620122561} + - component: {fileID: 84218326836285299} + - component: {fileID: 6620893258549880666} + m_Layer: 0 + m_Name: OutputLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4728146162495744220 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3104200539904800983} + m_LocalRotation: {x: -0.5, y: -0.5, z: -0.5, w: 0.5} + m_LocalPosition: {x: 0, y: 0, z: 3.5} + m_LocalScale: {x: 0.26708344, y: 0.26708338, z: 0.6410001} + m_Children: [] + m_Father: {fileID: 5293869241137164879} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.32, y: 1.05} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &4944115961938640961 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3104200539904800983} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1981544228620122561 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3104200539904800983} + m_Mesh: {fileID: 0} +--- !u!222 &84218326836285299 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3104200539904800983} + m_CullTransparentMesh: 0 +--- !u!114 &6620893258549880666 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3104200539904800983} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: 1,23 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 15.908832, w: 2.0785923} + m_textInfo: + textComponent: {fileID: 6620893258549880666} + characterCount: 4 + spriteCount: 0 + spaceCount: 0 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 4944115961938640961} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!1 &3261942694279469377 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4451731578619795871} + - component: {fileID: 8797687664764122347} + - component: {fileID: 445550673582468649} + m_Layer: 0 + m_Name: m (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4451731578619795871 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3261942694279469377} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.12, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8797687664764122347 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3261942694279469377} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &445550673582468649 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3261942694279469377} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3498171500616821569 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5159428874990500534} + - component: {fileID: 2940384510260572849} + - component: {fileID: 3809753216606106514} + m_Layer: 0 + m_Name: m (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5159428874990500534 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3498171500616821569} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.06, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &2940384510260572849 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3498171500616821569} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &3809753216606106514 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3498171500616821569} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &3633831753856508907 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3633831753856508906} + - component: {fileID: 3633831753856508902} + - component: {fileID: 3633831753856508903} + - component: {fileID: 3633831753856508904} + - component: {fileID: 3633831753856508905} + m_Layer: 0 + m_Name: PanelLabel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3633831753856508906 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3633831753856508907} + m_LocalRotation: {x: 0, y: 0, z: -0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.006} + m_LocalScale: {x: 0.010683333, y: 0.010683333, z: 0.00641} + m_Children: [] + m_Father: {fileID: 5293869240424762248} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.192, y: -0.0088} + m_SizeDelta: {x: 20, y: 5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!23 &3633831753856508902 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3633831753856508907} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &3633831753856508903 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3633831753856508907} + m_Mesh: {fileID: 0} +--- !u!222 &3633831753856508904 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3633831753856508907} + m_CullTransparentMesh: 0 +--- !u!114 &3633831753856508905 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3633831753856508907} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: 'Slider #2' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 6a84f857bec7e7345843ae29404c57ce, type: 2} + m_sharedMaterial: {fileID: 21202819797275496, guid: 6a84f857bec7e7345843ae29404c57ce, + type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4288453788 + m_fontColor: {r: 0.6132076, g: 0.6132076, b: 0.6132076, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 258 + m_isAlignmentEnumConverted: 1 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 0 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 1.4332783, w: 2.0785923} + m_textInfo: + textComponent: {fileID: 3633831753856508905} + characterCount: 9 + spriteCount: 0 + spaceCount: 1 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_havePropertiesChanged: 0 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_isInputParsingRequired: 0 + m_inputSource: 0 + m_hasFontAssetChanged: 0 + m_renderer: {fileID: 3633831753856508902} + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_maskType: 0 +--- !u!1 &5077739454449285738 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6113509578522178907} + - component: {fileID: 9180412105861699183} + - component: {fileID: 6083320843548700096} + m_Layer: 0 + m_Name: m (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6113509578522178907 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077739454449285738} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &9180412105861699183 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077739454449285738} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6083320843548700096 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5077739454449285738} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5293869239745969197 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5293869239745969194} + - component: {fileID: 5293869239745969193} + - component: {fileID: 5293869239745969192} + - component: {fileID: 5293869239745969195} + m_Layer: 0 + m_Name: BackgroundPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5293869239745969194 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869239745969197} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.4, y: 0.15, z: 0.01} + m_Children: [] + m_Father: {fileID: 5293869240424762248} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5293869239745969193 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869239745969197} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5293869239745969192 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869239745969197} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: a8de2758c4b4460cae694f0d50d94fbb, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!65 &5293869239745969195 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869239745969197} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 0.5} + m_Center: {x: 0, y: 0, z: 0} +--- !u!1 &5293869240387712348 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5293869240387712349} + - component: {fileID: 5293869240387712344} + - component: {fileID: 5293869240387712347} + m_Layer: 0 + m_Name: SliderMovemExtent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5293869240387712349 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869240387712348} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.3, y: 0.005, z: 0.005} + m_Children: [] + m_Father: {fileID: 5293869240424762248} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &5293869240387712344 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869240387712348} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5293869240387712347 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869240387712348} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 44b45fde681a5e44083cff10e0b3cd92, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &5293869240424762251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5293869240424762248} + m_Layer: 0 + m_Name: 3DSlider (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5293869240424762248 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869240424762251} + m_LocalRotation: {x: 0, y: 0, z: 0.7071068, w: 0.7071068} + m_LocalPosition: {x: 0.262, y: -0.106, z: 0} + m_LocalScale: {x: 0.6, y: 0.6, z: 1} + m_Children: + - {fileID: 5293869239745969194} + - {fileID: 5293869240387712349} + - {fileID: 5293869241137164879} + - {fileID: 3633831753856508906} + - {fileID: 3443258773997230705} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 90} +--- !u!1 &5293869241137164878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5293869241137164879} + - component: {fileID: 5293869241137164875} + - component: {fileID: 5293869241137164874} + - component: {fileID: 5293869241137164877} + - component: {fileID: 3633831754249538969} + - component: {fileID: 5293869241282730092} + - component: {fileID: 5293869241282730091} + m_Layer: 0 + m_Name: Knob + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5293869241137164879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} + m_LocalPosition: {x: 0, y: 0, z: -0.0165} + m_LocalScale: {x: 0.04, y: 0.01, z: 0.04} + m_Children: + - {fileID: 4728146162495744220} + - {fileID: 8076477931339720848} + m_Father: {fileID: 5293869240424762248} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0} +--- !u!33 &5293869241137164875 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5293869241137164874 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 7159abf2cff69ed45a1611036ff502c6, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!136 &5293869241137164877 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + m_Radius: 1.6 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3633831754249538969 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 42a6dd72d566c7c4e85d7a39b6f494bc, type: 3} + m_Name: + m_EditorClassIdentifier: + useEyeSupportedTargetPlacement: 0 + minLookAwayDistToEnableEyeWarp: 5 + handInputEnabled: 1 + handmapping: 2 + deltaHandMovemThresh: 0.05 + transparency_inTransition: 0.50980395 + transparency_preview: 0.19607843 + previewPlacemDistThresh: 0.05 + freezeX: 1 + freezeY: 0 + freezeZ: 1 + LocalMinMax_X: {x: -0.15, y: 0.15} + LocalMinMax_Y: {x: -Infinity, y: Infinity} + LocalMinMax_Z: {x: -Infinity, y: Infinity} + PlacementSurface: 0 + audio_OnDragStart: {fileID: 8300000, guid: 9a10debaf8483ae49aa91211098634f1, type: 3} + audio_OnDragStop: {fileID: 8300000, guid: 59244bce6dca9494ebc881d9543fa339, type: 3} + voiceAction_PutThis: + id: 0 + description: + axisConstraint: 0 + voiceAction_OverHere: + id: 0 + description: + axisConstraint: 0 + OnDragStart: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + OnDrop: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + useAsSlider: 1 + txtOutput_sliderValue: {fileID: 0} + slider_snapToNearestDecimal: 0.1 +--- !u!114 &5293869241282730092 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 92ccc66cc8439d047be737bcfdba2662, type: 3} + m_Name: + m_EditorClassIdentifier: + focusEnabled: 1 + timeToTriggerDwellInSec: 5 + Overlay_UseIt: 1 + Overlay_GameObj: {fileID: 5611581550731385234} + startTransparency: 0 + endTransparency: 0.8 + Highlight_UseIt: 0 + Highlight_Color: {r: 0.27450982, g: 0.27450982, b: 0.27450982, a: 1} + MinDwellTimeInMs: 30 + MaxDwellTimeInMs: 600 + MinLookAwayTimeInMs: 30 + MaxLookAwayTimeInMs: 300 + BlendType: 1 +--- !u!114 &5293869241282730091 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5293869241137164878} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e1e6657bab90ac149872e5361b42ea62, type: 3} + m_Name: + m_EditorClassIdentifier: + focusEnabled: 1 + timeToTriggerDwellInSec: 5 + selectAction: + id: 0 + description: + axisConstraint: 0 + voice_select: [] + cursor_snapToCenter: 0 + OnLookAtStart: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + WhileLookingAtTarget: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + OnLookAway: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + OnDwell: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null + OnSelected: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.Events.UnityEvent, UnityEngine.CoreModule, Version=0.0.0.0, + Culture=neutral, PublicKeyToken=null +--- !u!1 &5611581550731385234 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8076477931339720848} + - component: {fileID: 6591372158454159698} + - component: {fileID: 5597009385782268164} + m_Layer: 0 + m_Name: HoverFeedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &8076477931339720848 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5611581550731385234} + m_LocalRotation: {x: -0.7071068, y: 0, z: 0, w: 0.7071068} + m_LocalPosition: {x: 0, y: -1.03, z: -0} + m_LocalScale: {x: 0.5, y: 0.5, z: 0.1} + m_Children: [] + m_Father: {fileID: 5293869241137164879} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: -90, y: 0, z: 0} +--- !u!33 &6591372158454159698 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5611581550731385234} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &5597009385782268164 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5611581550731385234} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: ee4317e2001995a4ca8fe458896b806f, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6419275782176239997 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5310936957527816693} + - component: {fileID: 8068795228815986673} + - component: {fileID: 7739203845454770244} + m_Layer: 0 + m_Name: m (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5310936957527816693 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6419275782176239997} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.09, y: -0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 9 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8068795228815986673 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6419275782176239997} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7739203845454770244 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6419275782176239997} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &6897339271230268425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1872569896561272285} + - component: {fileID: 8157404160838426230} + - component: {fileID: 977397488507566940} + m_Layer: 0 + m_Name: m (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &1872569896561272285 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6897339271230268425} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.15, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.002, y: 0.03, z: 0.002} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8157404160838426230 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6897339271230268425} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &977397488507566940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6897339271230268425} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7778706517366750922 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3184334352359284155} + - component: {fileID: 609847440582005318} + - component: {fileID: 1881510802624749070} + m_Layer: 0 + m_Name: m (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3184334352359284155 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7778706517366750922} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.03, y: -0.000000012417633, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &609847440582005318 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7778706517366750922} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1881510802624749070 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7778706517366750922} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &7981152659052980597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6271803262800217262} + - component: {fileID: 6147204423742339631} + - component: {fileID: 2248074914315370029} + m_Layer: 0 + m_Name: m (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6271803262800217262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7981152659052980597} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.03, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &6147204423742339631 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7981152659052980597} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &2248074914315370029 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7981152659052980597} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!1 &8858910943152627297 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2872309268787512275} + - component: {fileID: 135256196963967656} + - component: {fileID: 35996185684470968} + m_Layer: 0 + m_Name: m (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2872309268787512275 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8858910943152627297} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.09, y: 0, z: -0.016499996} + m_LocalScale: {x: 0.005, y: 0.01, z: 0.005} + m_Children: [] + m_Father: {fileID: 3443258773997230705} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &135256196963967656 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8858910943152627297} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &35996185684470968 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8858910943152627297} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RenderingLayerMask: 4294967295 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: da77f2e15faa31a4991b967fe99736af, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab.meta b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab.meta new file mode 100644 index 00000000000..5f8ceb43f2d --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/Demo_TargetPositioning/Prefabs/3DSlider - Vertical.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1a4bbe24b109c6e4aa21a517ad27ba95 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 43151cec11eafbc0084ae8d657fbdd88342adbe9 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Tue, 16 Apr 2019 13:14:24 -0700 Subject: [PATCH 110/183] Update AppBar.cs --- .../Features/UX/Scripts/AppBar/AppBar.cs | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/AppBar/AppBar.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/AppBar/AppBar.cs index 14b20c6a7b9..10daa124db9 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/AppBar/AppBar.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/AppBar/AppBar.cs @@ -256,8 +256,16 @@ private void InitializeButtons() throw new Exception("Found a transform without an AppBarButton component under buttonTransforms!"); appBarButton.InitializeButtonContent(this); - // Set to invisible initially - appBarButton.SetVisible(false); + // Set to invisible initially if not custom + switch (appBarButton.ButtonType) + { + case ButtonTypeEnum.Custom: + break; + + default: + appBarButton.SetVisible(false); + break; + } buttons.Add(appBarButton); } @@ -278,11 +286,20 @@ private void UpdateButtons() { AppBarButton button = buttons[i]; - if (button.ButtonType != ButtonTypeEnum.Custom) - button.SetVisible(GetButtonVisible(button.ButtonType)); + switch (button.ButtonType) + { + case ButtonTypeEnum.Custom: + break; + + default: + button.SetVisible(GetButtonVisible(button.ButtonType)); + break; + } if (!buttons[i].Visible) + { continue; + } activeButtonNum++; } From 4fc1651113a81e1be4eb84281e5151a2ad1164d9 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Tue, 16 Apr 2019 13:20:18 -0700 Subject: [PATCH 111/183] Updated with a new way of loading resources from project folder hiearchy. --- .../Devices/ControllerMappingLibrary.cs | 16 ++- ...ityToolkitConfigurationProfileInspector.cs | 15 +- .../Setup/MixedRealityEditorSettings.cs | 25 +++- .../Editor/Setup/MixedRealityToolkitFiles.cs | 131 ++++++++++++++++++ .../Setup/MixedRealityToolkitFiles.cs.meta | 11 ++ 5 files changed, 180 insertions(+), 18 deletions(-) create mode 100644 Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs.meta diff --git a/Assets/MixedRealityToolkit/Definitions/Devices/ControllerMappingLibrary.cs b/Assets/MixedRealityToolkit/Definitions/Devices/ControllerMappingLibrary.cs index d69888f1e73..b94846d50be 100644 --- a/Assets/MixedRealityToolkit/Definitions/Devices/ControllerMappingLibrary.cs +++ b/Assets/MixedRealityToolkit/Definitions/Devices/ControllerMappingLibrary.cs @@ -2,10 +2,10 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. #if UNITY_EDITOR -using System; -using System.Collections.Generic; using Microsoft.MixedReality.Toolkit.Utilities; using Microsoft.MixedReality.Toolkit.Utilities.Editor; +using System; +using System.Collections.Generic; using UnityEditor; using UnityEngine; #endif @@ -280,12 +280,18 @@ private static Texture2D GetControllerTextureInternal(Type controllerType, Hande private static Texture2D GetControllerTextureInternal(string relativeTexturePath, Handedness handedness, string suffix) { string handednessSuffix = string.Empty; - if (handedness == Handedness.Left) handednessSuffix = "_left"; - else if (handedness == Handedness.Right) handednessSuffix = "_right"; + if (handedness == Handedness.Left) + { + handednessSuffix = "_left"; + } + else if (handedness == Handedness.Right) + { + handednessSuffix = "_right"; + } string themeSuffix = EditorGUIUtility.isProSkin ? "_white" : "_black"; - string fullTexturePath = $"{MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}/{relativeTexturePath}{handednessSuffix}{themeSuffix}{suffix}.png"; + string fullTexturePath = MixedRealityToolkitFiles.MapRelativeFilePath($"{relativeTexturePath}{handednessSuffix}{themeSuffix}{suffix}.png"); return (Texture2D)AssetDatabase.LoadAssetAtPath(fullTexturePath, typeof(Texture2D)); } diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityToolkitConfigurationProfileInspector.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityToolkitConfigurationProfileInspector.cs index f4957e97c43..a08370e782b 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityToolkitConfigurationProfileInspector.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/BaseMixedRealityToolkitConfigurationProfileInspector.cs @@ -2,7 +2,6 @@ // Licensed under the MIT License. See LICENSE in the project root for license information. using Microsoft.MixedReality.Toolkit.Utilities.Editor; -using System; using UnityEditor; using UnityEngine; using Object = UnityEngine.Object; @@ -21,19 +20,19 @@ public abstract class BaseMixedRealityToolkitConfigurationProfileInspector : Bas [SerializeField] private Texture2D logoDarkTheme = null; - + protected virtual void Awake() { - string assetPath = $"{MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}/StandardAssets/Textures"; + string assetPath = "StandardAssets/Textures"; if (logoLightTheme == null) { - logoLightTheme = (Texture2D)AssetDatabase.LoadAssetAtPath($"{assetPath}/MRTK_Logo_Black.png", typeof(Texture2D)); + logoLightTheme = (Texture2D)AssetDatabase.LoadAssetAtPath(MixedRealityToolkitFiles.MapRelativeFilePath($"{assetPath}/MRTK_Logo_Black.png"), typeof(Texture2D)); } if (logoDarkTheme == null) { - logoDarkTheme = (Texture2D)AssetDatabase.LoadAssetAtPath($"{assetPath}/MRTK_Logo_White.png", typeof(Texture2D)); + logoDarkTheme = (Texture2D)AssetDatabase.LoadAssetAtPath(MixedRealityToolkitFiles.MapRelativeFilePath($"{assetPath}/MRTK_Logo_White.png"), typeof(Texture2D)); } } @@ -44,7 +43,9 @@ protected void RenderMixedRealityToolkitLogo() { // If we're being rendered as a sub profile, don't show the logo if (RenderAsSubProfile) + { return; + } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); @@ -53,7 +54,7 @@ protected void RenderMixedRealityToolkitLogo() GUILayout.EndHorizontal(); GUILayout.Space(12f); } - + /// /// Renders a button that will take user back to a specified profile object /// @@ -64,7 +65,9 @@ protected bool DrawBacktrackProfileButton(string message, UnityEngine.Object act { // If we're being rendered as a sub profile, don't show the button if (RenderAsSubProfile) + { return false; + } if (GUILayout.Button(message)) { diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs index 26a8a1f3540..01757a83a72 100644 --- a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs @@ -1,7 +1,9 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. +using System; using System.IO; +using System.Linq; using UnityEditor; using UnityEditor.Build; using UnityEngine; @@ -24,22 +26,31 @@ public MixedRealityEditorSettings() private static string mixedRealityToolkit_RelativeFolderPath = string.Empty; + [Obsolete("Use the 'MixedRealityToolkitFiles' APIs.")] public static string MixedRealityToolkit_AbsoluteFolderPath { get { - if (string.IsNullOrEmpty(mixedRealityToolkit_RelativeFolderPath)) + if (MixedRealityToolkitFiles.AreFoldersAvailable) { - if (!FindDirectory(Application.dataPath, "MixedRealityToolkit", out mixedRealityToolkit_RelativeFolderPath)) +#if UNITY_EDITOR + if (MixedRealityToolkitFiles.MRTKDirectories.Count() > 1) { - Debug.LogError("Unable to find the Mixed Reality Toolkit's directory!"); + Debug.LogError($"A deprecated API '{nameof(MixedRealityEditorSettings)}.{nameof(MixedRealityToolkit_AbsoluteFolderPath)}' " + + "is being used, and there are more than one MRTK directory in the project; most likely due to ingestion as NuGet. " + + $"Update to use the '{nameof(MixedRealityToolkitFiles)}' APIs."); } +#endif + + return MixedRealityToolkitFiles.MRTKDirectories.First(); } - return mixedRealityToolkit_RelativeFolderPath; + Debug.LogError("Unable to find the Mixed Reality Toolkit's directory!"); + return null; } } + [Obsolete("Use the 'MixedRealityToolkitFiles' APIs.")] public static string MixedRealityToolkit_RelativeFolderPath { get { return MakePathRelativeToProject(MixedRealityToolkit_AbsoluteFolderPath); } @@ -202,7 +213,7 @@ internal static bool FindDirectory(string directoryPathToSearch, string director return false; } - private static string MakePathRelativeToProject(string absolutePath) + internal static string MakePathRelativeToProject(string absolutePath) { return absolutePath.Replace( Application.dataPath + Path.DirectorySeparatorChar, @@ -211,13 +222,13 @@ private static string MakePathRelativeToProject(string absolutePath) private static void SetIconTheme() { - if (string.IsNullOrEmpty(MixedRealityToolkit_AbsoluteFolderPath)) + if (!MixedRealityToolkitFiles.AreFoldersAvailable) { Debug.LogError("Unable to find the Mixed Reality Toolkit's directory!"); return; } - var icons = Directory.GetFiles(MixedRealityToolkit_AbsoluteFolderPath + "/StandardAssets/Icons"); + var icons = MixedRealityToolkitFiles.GetFiles("StandardAssets/Icons"); var icon = new Texture2D(2, 2); var iconColor = new Color32(4, 165, 240, 255); diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs new file mode 100644 index 00000000000..7340fdbcc99 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using UnityEditor; +using UnityEngine; + +namespace Microsoft.MixedReality.Toolkit.Utilities.Editor +{ + /// + /// API for working with MixedRealityToolkit folders contained in the project. + /// + [InitializeOnLoad] + public static class MixedRealityToolkitFiles + { + private class AssetPostprocessor : UnityEditor.AssetPostprocessor + { + public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + searchForFoldersTask.Wait(); + + foreach (string asset in importedAssets.Concat(movedAssets)) + { + string folder = asset.Replace("Assets", Application.dataPath); + if (folder.EndsWith(MixedRealityToolkitDirectory)) + { + mrtkFolders.Add(NormalizeSeparators(folder)); + } + } + + foreach (string asset in deletedAssets.Concat(movedFromAssetPaths)) + { + string folder = asset.Replace("Assets", Application.dataPath); + if (folder.EndsWith(MixedRealityToolkitDirectory)) + { + folder = NormalizeSeparators(folder); + if (mrtkFolders.Contains(folder) && !Directory.Exists(folder)) + { + // The contains check in the if statement is faster than Directory.Exists so that's why it's used + // Otherwise, it isn't necessary, as the statement below doesn't throw if item wasn't found + mrtkFolders.Remove(folder); + } + } + } + } + } + + private const string MixedRealityToolkitDirectory = "MixedRealityToolkit"; + + private readonly static HashSet mrtkFolders = new HashSet(); + private readonly static Task searchForFoldersTask; + + /// + /// Returns a collection of MRTK directories found in the project. + /// + public static IEnumerable MRTKDirectories { get; } = mrtkFolders; + + /// + /// Are any of the MRTK directories available? + /// + public static bool AreFoldersAvailable + { + get + { + searchForFoldersTask.Wait(); + return mrtkFolders.Count > 0; + } + } + + static MixedRealityToolkitFiles() + { + string path = Application.dataPath; + searchForFoldersTask = Task.Run(() => SearchForFoldersAsync(path)); + } + + private static void SearchForFoldersAsync(string rootPath) + { + IEnumerable directories = Directory.GetDirectories(rootPath, MixedRealityToolkitDirectory, SearchOption.AllDirectories) + .Select(NormalizeSeparators); + + foreach (string s in directories) + { + mrtkFolders.Add(s); + } + } + + private static string NormalizeSeparators(string path) => path.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar); + + /// + /// Returns files from all folder instances of the MRTK folder relative path. + /// + /// The MRTK folder relative path to the target folder. + /// The array of files. + public static string[] GetFiles(string mrtkRelativeFolder) + { + if (!AreFoldersAvailable) + { + Debug.LogError("Failed to locate MixedRealityToolkit folders in the project."); + return null; + } + + return mrtkFolders + .Select(t => Path.Combine(t, mrtkRelativeFolder)) + .Where(Directory.Exists) + .SelectMany(t => Directory.GetFiles(t)) + .Select(MixedRealityEditorSettings.MakePathRelativeToProject) + .ToArray(); + } + + /// + /// Maps a single relative path file to a concrete path from one of the MRTK folders, if found. Otherwise returns null. + /// + /// The MRTK folder relative path to the file. + /// The project relative path to the file. + public static string MapRelativeFilePath(string mrtkPathToFile) + { + if (!AreFoldersAvailable) + { + Debug.LogError("Failed to locate MixedRealityToolkit folders in the project."); + return null; + } + + return MixedRealityEditorSettings.MakePathRelativeToProject(mrtkFolders + .Select(t => Path.Combine(t, mrtkPathToFile)) + .FirstOrDefault(t => File.Exists(t))); + } + } +} diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs.meta b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs.meta new file mode 100644 index 00000000000..d4bf4fdb0e4 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00d4aafcdc7f71249ba8dc40c6762459 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 3ae94c13e623a7992675e369b5ee8f30176728d6 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Tue, 16 Apr 2019 13:31:54 -0700 Subject: [PATCH 112/183] Update the profile clone window to honor the name given to it. Prior to this change, when given a new name for the profile that will be cloned, the cloning code just throws away the name (see how it is taken but not used). Now we honor the name, horray. --- .../Inspectors/Profiles/MixedRealityProfileCloneWindow.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs index 705fa830148..976f99d5905 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs @@ -212,7 +212,7 @@ private void OnGUI() private void CloneMainProfile() { - var newChildProfile = CloneProfile(parentProfile, childProfile, childProfileTypeName, childProperty, targetFolder); + var newChildProfile = CloneProfile(parentProfile, childProfile, childProfileTypeName, childProperty, targetFolder, childProfileAssetName); SerializedObject newChildSerializedObject = new SerializedObject(newChildProfile); // First paste all values outright PasteProfileValues(parentProfile, childProfile, newChildSerializedObject); @@ -269,7 +269,7 @@ private void CloneMainProfile() cloneWindow.Close(); } - private static BaseMixedRealityProfile CloneProfile(BaseMixedRealityProfile parentProfile, BaseMixedRealityProfile profileToClone, string childProfileTypeName, SerializedProperty childProperty, Object targetFolder, string profileName = null) + private static BaseMixedRealityProfile CloneProfile(BaseMixedRealityProfile parentProfile, BaseMixedRealityProfile profileToClone, string childProfileTypeName, SerializedProperty childProperty, Object targetFolder, string profileName) { ScriptableObject instance = CreateInstance(childProfileTypeName); instance.name = string.IsNullOrEmpty(profileName) ? childProfileTypeName : profileName; From 9010b29bdd08ec8dd1cc1b3786e61dd48b66adc5 Mon Sep 17 00:00:00 2001 From: Will Wei Date: Tue, 16 Apr 2019 14:51:42 -0700 Subject: [PATCH 113/183] Fix a couple of inspector related bugs and exceptions Fixes two things, which kinda are fixed together because one of them blocks the other. 1) Removed line in ScriptableObjectExtensions was causing exceptions in the case where you cloned a profile. This actually was causing the sub-profile cloning code to hit an exception and then never actually copy things over. This also manifests itself when you just hit "copy and customize" for the root profile. AFAICT I can see that this has existed for ~5 months now since the report here: https://github.com/Microsoft/MixedRealityToolkit-Unity/issues/3225 2) For MixedRealityProfileCloneWindow, it was just passing the wrong variable (i.e. it was passing the empty thing instead of the non-empty thing). --- .../EditorClassExtensions/ScriptableObjectExtensions.cs | 1 - .../Inspectors/Profiles/MixedRealityProfileCloneWindow.cs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/MixedRealityToolkit/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs b/Assets/MixedRealityToolkit/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs index 62484eccbe9..c99adc9b70a 100644 --- a/Assets/MixedRealityToolkit/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs +++ b/Assets/MixedRealityToolkit/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs @@ -44,7 +44,6 @@ public static ScriptableObject CreateAsset(this ScriptableObject scriptableObjec AssetDatabase.CreateAsset(scriptableObject, assetPathAndName); AssetDatabase.SaveAssets(); AssetDatabase.Refresh(); - EditorUtility.FocusProjectWindow(); Selection.activeObject = scriptableObject; EditorGUIUtility.PingObject(scriptableObject); return scriptableObject; diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs index 705fa830148..5a93372a564 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityProfileCloneWindow.cs @@ -253,7 +253,7 @@ private void CloneMainProfile() var newSubProfile = CloneProfile(newChildProfile, subProfileToClone, action.ProfileType.Name, actionProperty, targetFolder, action.CloneName); SerializedObject newSubProfileSerializedObject = new SerializedObject(newSubProfile); // Paste values from existing profile - PasteProfileValues(newChildProfile, newSubProfile, newSubProfileSerializedObject); + PasteProfileValues(newChildProfile, subProfileToClone, newSubProfileSerializedObject); newSubProfileSerializedObject.ApplyModifiedProperties(); break; From 916845b52476a88fd3980be0c0f317b012b0a131 Mon Sep 17 00:00:00 2001 From: Sophie Stellmach Date: Tue, 16 Apr 2019 16:18:23 -0700 Subject: [PATCH 114/183] Update ProjectVersion.txt Resetting ProjectSettings to .9f1. --- ProjectSettings/ProjectVersion.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index d848e35e1dd..1d7351781fd 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1 +1 @@ -m_EditorVersion: 2018.3.8f1 +m_EditorVersion: 2018.3.9f1 From 8877db5a288af7c474ea401ba12dff197c6ae9d1 Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Tue, 16 Apr 2019 16:30:29 -0700 Subject: [PATCH 115/183] Removed extra enforceFrontPush field --- .../UX/Scripts/PressableButtons/PressableButton.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs index 39b88e2d3e6..91f170ff3ce 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/PressableButtons/PressableButton.cs @@ -49,10 +49,6 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [Header("Position markers")] [Tooltip("Used to mark where button movement begins. If null, it will be automatically generated.")] - [SerializeField] - [Tooltip("Ensures that the button can only be pushed from the front. Touching the button from the back or side is prevented.")] - private bool enforceFrontPush = true; - [Header("Events")] public UnityEvent TouchBegin; public UnityEvent TouchEnd; @@ -77,17 +73,19 @@ public class PressableButton : MonoBehaviour, IMixedRealityTouchHandler [SerializeField] private bool isPressing = false; + private Transform initialTransform; + /// /// Represents the state of whether or not a finger is currently touching this button. /// - private bool IsTouching + public bool IsTouching { get { return isTouching; } - set + private set { if (value != isTouching) { From 4cd87e28ddb75f9888e484004aad6e60d14d306a Mon Sep 17 00:00:00 2001 From: Will Wei Date: Tue, 16 Apr 2019 16:39:05 -0700 Subject: [PATCH 116/183] Remove references to dead field showCursorWithEyeGaze. This was introduced as part of our large payload but was actually never hooked up to anything - it shows up as an option in the inspector but is misleading (i.e. you think it should show a cursor with eye gaze, but it doesn't) --- .../General/Profiles/EyeTrackingDemoPointerProfile.asset | 1 - .../DefaultMixedRealityInputPointerProfile.asset | 1 - .../InputSystem/MixedRealityPointerProfile.cs | 9 --------- .../Profiles/MixedRealityPointerProfileInspector.cs | 1 - 4 files changed, 12 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoPointerProfile.asset b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoPointerProfile.asset index cddab404527..df680353f1b 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoPointerProfile.asset +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoPointerProfile.asset @@ -24,7 +24,6 @@ MonoBehaviour: type: 3} gazeProviderType: reference: Microsoft.MixedReality.Toolkit.Input.GazeProvider, Microsoft.MixedReality.Toolkit.Services.InputSystem - showCursorWithEyeGaze: 0 pointerOptions: - controllerType: 256 handedness: 7 diff --git a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputPointerProfile.asset b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputPointerProfile.asset index 7f213119294..5ebd60a54de 100644 --- a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputPointerProfile.asset +++ b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputPointerProfile.asset @@ -24,7 +24,6 @@ MonoBehaviour: type: 3} gazeProviderType: reference: Microsoft.MixedReality.Toolkit.Input.GazeProvider, Microsoft.MixedReality.Toolkit.Services.InputSystem - showCursorWithEyeGaze: 0 pointerOptions: - controllerType: 1071 handedness: 7 diff --git a/Assets/MixedRealityToolkit/Definitions/InputSystem/MixedRealityPointerProfile.cs b/Assets/MixedRealityToolkit/Definitions/InputSystem/MixedRealityPointerProfile.cs index 1dbd3e1f6db..c28f63f26b8 100644 --- a/Assets/MixedRealityToolkit/Definitions/InputSystem/MixedRealityPointerProfile.cs +++ b/Assets/MixedRealityToolkit/Definitions/InputSystem/MixedRealityPointerProfile.cs @@ -70,15 +70,6 @@ public SystemType GazeProviderType internal set { gazeProviderType = value; } } - [SerializeField] - [Tooltip("Whether or not to show the cursor when using eye gaze.")] - private bool showCursorWithEyeGaze = false; - - /// - /// Whether or not to show the cursor when using eye gaze. - /// - public bool ShowCursorWithEyeGaze => showCursorWithEyeGaze; - [SerializeField] [Tooltip("The Pointer options for this profile.")] private PointerOption[] pointerOptions = new PointerOption[0]; diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs index 88a84449107..da763369fa0 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs @@ -127,7 +127,6 @@ public override void OnInspectorGUI() EditorGUILayout.Space(); EditorGUILayout.PropertyField(gazeCursorPrefab); EditorGUILayout.PropertyField(gazeProviderType); - EditorGUILayout.PropertyField(showCursorWithEyeGaze); EditorGUILayout.Space(); if (GUILayout.Button("Customize Gaze Provider Settings")) From 47a65ac0b4cd02685b5e98f6616b4aa6e489e32b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20T=C3=B6nne?= Date: Wed, 17 Apr 2019 09:56:31 +0100 Subject: [PATCH 117/183] Move MRTK scene check out of the profile inspector and into a utility class. (#3922) * Move MRTK scene check out of the profile inspector and into a utility class. This check should not be performed when loading profiles. Instead the util class will now check for a MRTK instance when a new scene is created (with default objects) or when a scene is loaded. * A few comments. * Reenable UNITY_EDITOR ifdef. * Add missing brackets. * Add back missing line for initializing the profile variable. --- ...ityToolkitConfigurationProfileInspector.cs | 83 +---------- .../MixedRealityToolkitSceneChecker.cs | 130 ++++++++++++++++++ .../MixedRealityToolkitSceneChecker.cs.meta | 11 ++ 3 files changed, 143 insertions(+), 81 deletions(-) create mode 100644 Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs create mode 100644 Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs.meta diff --git a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs index bb15f000f91..d480b26ba3d 100644 --- a/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs +++ b/Assets/MixedRealityToolkit/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs @@ -10,9 +10,6 @@ namespace Microsoft.MixedReality.Toolkit.Editor [CustomEditor(typeof(MixedRealityToolkitConfigurationProfile))] public class MixedRealityToolkitConfigurationProfileInspector : BaseMixedRealityToolkitConfigurationProfileInspector { - const string HideNoActiveToolkitWarningKey = "MRTK_HideNoActiveToolkitWarningKey"; - private static bool HideNoActiveToolkitWarning = true; - private static readonly GUIContent TargetScaleContent = new GUIContent("Target Scale:"); // Experience properties @@ -51,8 +48,6 @@ public class MixedRealityToolkitConfigurationProfileInspector : BaseMixedReality private static bool showRegisteredServiceProperties = true; private SerializedProperty registeredServiceProvidersProfile; - private MixedRealityToolkitConfigurationProfile configurationProfile; - protected override void OnEnable() { base.OnEnable(); @@ -63,35 +58,6 @@ protected override void OnEnable() return; } - configurationProfile = target as MixedRealityToolkitConfigurationProfile; - - // Create The MR Manager if none exists. - if (!MixedRealityToolkit.IsInitialized) - { - // Search the scene for one, in case we've just hot reloaded the assembly. - var managerSearch = FindObjectsOfType(); - - if (managerSearch.Length == 0) - { - HideNoActiveToolkitWarning = SessionState.GetBool(HideNoActiveToolkitWarningKey, false); - if (!HideNoActiveToolkitWarning) - { - NoActiveToolkitWarning.OpenWindow(configurationProfile); - } - return; - } - } - - if (!MixedRealityToolkit.ConfirmInitialized()) - { - return; - } - - if (!MixedRealityToolkit.Instance.HasActiveProfile) - { - return; - } - // Experience configuration targetExperienceScale = serializedObject.FindProperty("targetExperienceScale"); // Camera configuration @@ -123,6 +89,8 @@ protected override void OnEnable() public override void OnInspectorGUI() { + var configurationProfile = (MixedRealityToolkitConfigurationProfile)target; + serializedObject.Update(); RenderMixedRealityToolkitLogo(); @@ -316,52 +284,5 @@ public override void OnInspectorGUI() EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(configurationProfile); } } - - private class NoActiveToolkitWarning : EditorWindow - { - private static NoActiveToolkitWarning activeWindow; - private MixedRealityToolkitConfigurationProfile configurationProfile; - private bool hideWarning = false; - - public static void OpenWindow(MixedRealityToolkitConfigurationProfile configurationProfile) - { - // If we already have an active window, bail - if (activeWindow != null) - return; - - activeWindow = EditorWindow.GetWindow(); - activeWindow.configurationProfile = configurationProfile; - activeWindow.maxSize = new Vector2(400, 80); - activeWindow.minSize = new Vector2(400, 80); - activeWindow.titleContent = new GUIContent("No Active Toolkit Found"); - - activeWindow.Show(true); - } - - private void OnGUI() - { - EditorGUILayout.HelpBox("There is no active Mixed Reality Toolkit in your scene. Would you like to create one now?", MessageType.Warning); - - hideWarning = EditorGUILayout.Toggle("Don't show this again", hideWarning); - - EditorGUILayout.BeginHorizontal(); - if (GUILayout.Button("Yes")) - { - var playspace = MixedRealityToolkit.Instance.MixedRealityPlayspace; - Debug.Assert(playspace != null); - MixedRealityToolkit.Instance.ActiveProfile = configurationProfile; - - SessionState.SetBool(HideNoActiveToolkitWarningKey, hideWarning); - Close(); - } - - if (GUILayout.Button("No")) - { - SessionState.SetBool(HideNoActiveToolkitWarningKey, hideWarning); - Close(); - } - EditorGUILayout.EndHorizontal(); - } - } } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs b/Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs new file mode 100644 index 00000000000..7f319a710b5 --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs @@ -0,0 +1,130 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_EDITOR + +using Microsoft.MixedReality.Toolkit; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEditor; +using UnityEditor.SceneManagement; + +namespace Microsoft.MixedReality.Toolkit.Utilities +{ + /// + /// Utility class for checking if a scene has been properly set up for use with MixedRealityToolkit + /// + [InitializeOnLoad] + public class MixedRealityToolkitSceneChecker + { + const string HideNoActiveToolkitWarningKey = "MRTK_HideNoActiveToolkitWarningKey"; + private static bool HideNoActiveToolkitWarning = true; + + static MixedRealityToolkitSceneChecker() + { + // Check for a valid MRTK instance when scenes are opened or created. + EditorSceneManager.sceneOpened += SceneOpened; + EditorSceneManager.newSceneCreated += NewSceneCreated; + } + + private static void SceneOpened(Scene scene, OpenSceneMode mode) + { + CheckMixedRealityToolkitScene(); + } + + private static void NewSceneCreated(Scene scene, NewSceneSetup setup, NewSceneMode mode) + { + switch (setup) + { + // Ignore the check when the scene is explicitly empty. + // This includes empty scenes in playmode tests. + case NewSceneSetup.EmptyScene: + break; + + case NewSceneSetup.DefaultGameObjects: + CheckMixedRealityToolkitScene(); + break; + } + } + + private static void CheckMixedRealityToolkitScene() + { + // Create The MR Manager if none exists. + if (!MixedRealityToolkit.IsInitialized) + { + // Search the scene for one, in case we've just hot reloaded the assembly. + var managerSearch = Object.FindObjectsOfType(); + + if (managerSearch.Length == 0) + { + HideNoActiveToolkitWarning = SessionState.GetBool(HideNoActiveToolkitWarningKey, false); + if (!HideNoActiveToolkitWarning) + { + NoActiveToolkitWarning.OpenWindow(null); + } + return; + } + } + } + + internal class NoActiveToolkitWarning : EditorWindow + { + private static NoActiveToolkitWarning activeWindow; + [SerializeField] + public MixedRealityToolkitConfigurationProfile configurationProfile; + private bool hideWarning = false; + + public static void OpenWindow(MixedRealityToolkitConfigurationProfile configurationProfile) + { + // If we already have an active window, bail + if (activeWindow != null) + { + return; + } + + activeWindow = EditorWindow.GetWindow(); + activeWindow.configurationProfile = configurationProfile; + activeWindow.maxSize = new Vector2(400, 140); + activeWindow.minSize = new Vector2(400, 140); + activeWindow.titleContent = new GUIContent("No Active Toolkit Found"); + + activeWindow.ShowPopup(); + } + + private void OnGUI() + { + EditorGUILayout.HelpBox("There is no active Mixed Reality Toolkit in your scene. Would you like to create one now?", MessageType.Warning); + + hideWarning = EditorGUILayout.Toggle("Don't show this again", hideWarning); + + configurationProfile = (MixedRealityToolkitConfigurationProfile)EditorGUILayout.ObjectField(configurationProfile, typeof(MixedRealityToolkitConfigurationProfile), false); + if (configurationProfile == null) + { + EditorGUILayout.HelpBox("Select a configuration profile.", MessageType.Info); + } + + EditorGUILayout.BeginHorizontal(); + GUI.enabled = (configurationProfile != null); + if (GUILayout.Button("Yes")) + { + var playspace = MixedRealityToolkit.Instance.MixedRealityPlayspace; + Debug.Assert(playspace != null); + MixedRealityToolkit.Instance.ActiveProfile = configurationProfile; + + SessionState.SetBool(HideNoActiveToolkitWarningKey, hideWarning); + Close(); + } + GUI.enabled = true; + + if (GUILayout.Button("No")) + { + SessionState.SetBool(HideNoActiveToolkitWarningKey, hideWarning); + Close(); + } + EditorGUILayout.EndHorizontal(); + } + } + } +} + +#endif \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs.meta b/Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs.meta new file mode 100644 index 00000000000..4866162fb6a --- /dev/null +++ b/Assets/MixedRealityToolkit/Utilities/MixedRealityToolkitSceneChecker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebf862aba0d0da944ad46887e6f776b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 0d863c710b48b5cc268f5304143f573cdb875dda Mon Sep 17 00:00:00 2001 From: Bernadette Thalhammer Date: Wed, 17 Apr 2019 11:23:14 +0100 Subject: [PATCH 118/183] replaced transform.rotation * v3.fwd with transform.forward --- .../Features/UX/Scripts/Pointers/MousePointer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs index f64714eb873..38d9d1df897 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs @@ -87,7 +87,7 @@ public override void OnPreSceneQuery() // screenspace to ray conversion transform.position = CameraCache.Main.transform.position; - Ray ray = new Ray(transform.position, transform.rotation * Vector3.forward); + Ray ray = new Ray(transform.position, transform.forward); Rays[0].CopyRay(ray, PointerExtent); if (MixedRealityRaycaster.DebugEnabled) From 32933e67fe7407ca29832dbcd5491743b5c534db Mon Sep 17 00:00:00 2001 From: Bernadette Thalhammer <36998103+thalbern@users.noreply.github.com> Date: Wed, 17 Apr 2019 12:37:02 +0100 Subject: [PATCH 119/183] Revert "Fixed Mouse pointer / controller" --- .../UX/Prefabs/Pointers/MousePointer.prefab | 8 +-- .../UX/Scripts/Pointers/MousePointer.cs | 59 ++++++++----------- .../UX/Pointers/MousePointerInspector.cs | 3 - ...MixedRealityControllerMappingProfile.asset | 55 +++++++---------- .../InputSimulation/ManualCameraControl.cs | 11 +--- .../SimulatedHandDataProvider.cs | 2 +- .../InputSystem/IMixedRealityMousePointer.cs | 6 -- .../Providers/UnityInput/MouseController.cs | 58 +++++++++++++----- .../UnityInput/MouseDeviceManager.cs | 7 --- 9 files changed, 95 insertions(+), 114 deletions(-) diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab b/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab index ee2fc134b3b..493645b055f 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Prefabs/Pointers/MousePointer.prefab @@ -45,15 +45,15 @@ MonoBehaviour: m_EditorClassIdentifier: handedness: 0 destroyOnSourceLost: 0 - useSourcePoseData: 0 + useSourcePoseData: 1 poseAction: id: 12 description: Mouse Delta axisConstraint: 4 cursorPrefab: {fileID: 1151083198953756, guid: 667821d88830305449757690d22f71e0, type: 3} - disableCursorOnStart: 0 - setCursorVisibilityOnSourceDetected: 1 + disableCursorOnStart: 1 + setCursorVisibilityOnSourceDetected: 0 raycastOrigin: {fileID: 0} activeHoldAction: id: 0 @@ -69,7 +69,7 @@ MonoBehaviour: pointerExtent: 10 defaultPointerExtent: 10 sphereCastRadius: 0.1 + pointerOrientation: 0 hideCursorWhenInactive: 1 movementThresholdToUnHide: 0.5 hideTimeout: 3 - speed: 0.2 diff --git a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs index 38d9d1df897..18432539618 100644 --- a/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs +++ b/Assets/MixedRealityToolkit.SDK/Features/UX/Scripts/Pointers/MousePointer.cs @@ -45,13 +45,6 @@ public class MousePointer : BaseControllerPointer, IMixedRealityMousePointer /// float IMixedRealityMousePointer.HideTimeout => hideTimeout; - [SerializeField] - [Range(0.1f, 1f)] - [Tooltip("Mouse cursor speed that gets applied to the mouse delta.")] - private float speed = 0.25f; - - float IMixedRealityMousePointer.Speed => speed; - #endregion IMixedRealityMousePointer Implementation #region IMixedRealityPointer Implementation @@ -61,8 +54,6 @@ public class MousePointer : BaseControllerPointer, IMixedRealityMousePointer private IMixedRealityController controller; - private Vector3 cachedWorldSpacePosition; - /// public override IMixedRealityController Controller { @@ -84,33 +75,15 @@ public override IMixedRealityController Controller /// public override void OnPreSceneQuery() { - // screenspace to ray conversion transform.position = CameraCache.Main.transform.position; - Ray ray = new Ray(transform.position, transform.forward); + Ray ray = new Ray(Position, Rotation * Vector3.forward); Rays[0].CopyRay(ray, PointerExtent); if (MixedRealityRaycaster.DebugEnabled) { Debug.DrawRay(ray.origin, ray.direction * PointerExtent, Color.green); } - - // ray to worldspace conversion - Camera RaycastCamera = MixedRealityToolkit.InputSystem.FocusProvider.UIRaycastCamera; - RaycastCamera.transform.position = Rays[0].Origin; - RaycastCamera.transform.rotation = Quaternion.LookRotation(Rays[0].Direction); - - // The RayCastCamera is placed so that the current cursor position is in the center of the camera's view space. - Vector3 viewportPos = new Vector3(0.5f, 0.5f, 1.0f); - cachedWorldSpacePosition = RaycastCamera.ViewportToWorldPoint(viewportPos); - } - - public override Vector3 Position - { - get - { - return cachedWorldSpacePosition; - } } #endregion IMixedRealityPointer Implementation @@ -132,7 +105,6 @@ public override void OnSourceDetected(SourceStateEventData eventData) isInteractionEnabled = true; } } - /// public override void OnSourceLost(SourceStateEventData eventData) @@ -145,6 +117,22 @@ public override void OnSourceLost(SourceStateEventData eventData) } } + /// + public override void OnSourcePoseChanged(SourcePoseEventData eventData) + { + if (Controller == null || + eventData.Controller == null || + eventData.Controller.InputSource.SourceId != Controller.InputSource.SourceId) + { + return; + } + + if (UseSourcePoseData) + { + UpdateMousePosition(eventData.SourceData.x, eventData.SourceData.y); + } + } + #endregion IMixedRealitySourcePoseHandler Implementation #region IMixedRealityInputHandler Implementation @@ -179,7 +167,8 @@ public override void OnInputChanged(InputEventData eventData) { if (eventData.SourceId == Controller?.InputSource.SourceId) { - if (PoseAction == eventData.MixedRealityInputAction) + if (!UseSourcePoseData && + PoseAction == eventData.MixedRealityInputAction) { UpdateMousePosition(eventData.InputData.x, eventData.InputData.y); } @@ -229,10 +218,8 @@ private void Update() private void UpdateMousePosition(float mouseX, float mouseY) { - float scaledMouseX = mouseX * speed; - float scaledMouseY = mouseY * speed; - if (Mathf.Abs(scaledMouseX) >= movementThresholdToUnHide || - Mathf.Abs(scaledMouseY) >= movementThresholdToUnHide) + if (Mathf.Abs(mouseX) >= movementThresholdToUnHide || + Mathf.Abs(mouseY) >= movementThresholdToUnHide) { if (isDisabled) { @@ -249,8 +236,8 @@ private void UpdateMousePosition(float mouseX, float mouseY) } var newRotation = Vector3.zero; - newRotation.x += scaledMouseX; - newRotation.y += scaledMouseY; + newRotation.x += mouseX; + newRotation.y += mouseY; transform.Rotate(newRotation, Space.World); } } diff --git a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs index f2781b24475..689492a1c84 100644 --- a/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs +++ b/Assets/MixedRealityToolkit.SDK/Inspectors/UX/Pointers/MousePointerInspector.cs @@ -14,7 +14,6 @@ public class MousePointerInspector : BaseControllerPointerInspector private SerializedProperty hideTimeout; private SerializedProperty movementThresholdToUnHide; private bool mousePointerFoldout = true; - private SerializedProperty speed; protected override void OnEnable() { @@ -24,7 +23,6 @@ protected override void OnEnable() hideCursorWhenInactive = serializedObject.FindProperty("hideCursorWhenInactive"); movementThresholdToUnHide = serializedObject.FindProperty("movementThresholdToUnHide"); hideTimeout = serializedObject.FindProperty("hideTimeout"); - speed = serializedObject.FindProperty("speed"); } public override void OnInspectorGUI() @@ -46,7 +44,6 @@ public override void OnInspectorGUI() } EditorGUI.indentLevel--; - EditorGUILayout.PropertyField(speed); } serializedObject.ApplyModifiedProperties(); diff --git a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset index ca716b298aa..87f0691cde8 100644 --- a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset +++ b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityControllerMappingProfile.asset @@ -705,6 +705,19 @@ MonoBehaviour: handedness: 7 interactions: - id: 0 + description: Spatial Mouse Position + axisType: 7 + inputType: 3 + inputAction: + id: 4 + description: Pointer Pose + axisConstraint: 7 + keyCode: 0 + axisCodeX: + axisCodeY: + invertXAxis: 0 + invertYAxis: 0 + - id: 1 description: Mouse Delta Position axisType: 4 inputType: 4 @@ -717,7 +730,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 1 + - id: 2 description: Mouse Scroll Position axisType: 4 inputType: 50 @@ -730,7 +743,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 2 + - id: 3 description: Left Mouse Button axisType: 2 inputType: 7 @@ -743,7 +756,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 3 + - id: 4 description: Right Mouse Button axisType: 2 inputType: 7 @@ -756,7 +769,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 4 + - id: 5 description: Mouse Button 2 axisType: 2 inputType: 7 @@ -769,7 +782,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 5 + - id: 6 description: Mouse Button 3 axisType: 2 inputType: 7 @@ -782,7 +795,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 6 + - id: 7 description: Mouse Button 4 axisType: 2 inputType: 7 @@ -795,7 +808,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 7 + - id: 8 description: Mouse Button 5 axisType: 2 inputType: 7 @@ -808,7 +821,7 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 8 + - id: 9 description: Mouse Button 6 axisType: 2 inputType: 7 @@ -821,32 +834,6 @@ MonoBehaviour: axisCodeY: invertXAxis: 0 invertYAxis: 0 - - id: 9 - description: Spatial Pointer - axisType: 7 - inputType: 3 - inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 0 - axisCodeX: - axisCodeY: - invertXAxis: 0 - invertYAxis: 0 - - id: 10 - description: Spatial Grip - axisType: 7 - inputType: 14 - inputAction: - id: 0 - description: None - axisConstraint: 0 - keyCode: 0 - axisCodeX: - axisCodeY: - invertXAxis: 0 - invertYAxis: 0 - controllerType: reference: Microsoft.MixedReality.Toolkit.Input.UnityInput.UnityTouchController, Microsoft.MixedReality.Toolkit diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs index 0ce6f22cee7..bc4499a142a 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs @@ -19,7 +19,6 @@ public class ManualCameraControl private Vector3 lastTrackerToUnityTranslation = Vector3.zero; private Quaternion lastTrackerToUnityRotation = Quaternion.identity; private bool wasLooking = false; - private bool wasCursorVisible = true; public ManualCameraControl(MixedRealityInputSimulationProfile _profile) { @@ -150,8 +149,6 @@ private void OnStartMouseLook() { // if mousebutton is either control, shift or focused UnityEngine.Cursor.lockState = CursorLockMode.Locked; - // save current cursor visibility before hiding it - wasCursorVisible = UnityEngine.Cursor.visible; UnityEngine.Cursor.visible = false; } @@ -169,7 +166,7 @@ private void OnEndMouseLook() { // if mousebutton is either control, shift or focused UnityEngine.Cursor.lockState = CursorLockMode.None; - UnityEngine.Cursor.visible = wasCursorVisible; + UnityEngine.Cursor.visible = true; } // do nothing if (this.MouseLookButton == MouseButton.None) @@ -258,8 +255,6 @@ private void SetWantsMouseJumping(bool wantsJumping) // unlock the cursor if it was locked UnityEngine.Cursor.lockState = CursorLockMode.None; - // save original state of cursor before hiding - wasCursorVisible = UnityEngine.Cursor.visible; // hide the cursor UnityEngine.Cursor.visible = false; @@ -271,8 +266,8 @@ private void SetWantsMouseJumping(bool wantsJumping) UnityEngine.Cursor.lockState = CursorLockMode.Locked; UnityEngine.Cursor.lockState = CursorLockMode.None; - // restore the cursor - UnityEngine.Cursor.visible = wasCursorVisible; + // show the cursor + UnityEngine.Cursor.visible = true; } #if UNITY_EDITOR diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs index 52e0e32ca74..f230734d4b8 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs @@ -222,7 +222,7 @@ private void SimulateUserInput() { isSimulatingRight = false; } - + Vector3 mouseDelta = (lastMousePosition.HasValue ? UnityEngine.Input.mousePosition - lastMousePosition.Value : Vector3.zero); mouseDelta.z += UnityEngine.Input.GetAxis("Mouse ScrollWheel") * profile.HandDepthMultiplier; float rotationDelta = profile.HandRotationSpeed * Time.deltaTime; diff --git a/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs b/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs index 04a21b2c3f4..b6e10a4f56c 100644 --- a/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs +++ b/Assets/MixedRealityToolkit/Interfaces/InputSystem/IMixedRealityMousePointer.cs @@ -22,11 +22,5 @@ public interface IMixedRealityMousePointer : IMixedRealityPointer /// How long should it take before the mouse cursor is hidden? ///
float HideTimeout { get; } - - /// - /// Defines the mouse cursor speed. - /// Multiplier that gets applied to the mouse delta before converting to world space. - /// - float Speed { get; } } } \ No newline at end of file diff --git a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs index 82d1ef19beb..6451df515da 100644 --- a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs +++ b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseController.cs @@ -28,17 +28,16 @@ public MouseController(TrackingState trackingState, Handedness controllerHandedn /// public override MixedRealityInteractionMapping[] DefaultInteractions { get; } = { - new MixedRealityInteractionMapping(0, "Mouse Delta Position", AxisType.DualAxis, DeviceInputType.PointerPosition, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(1, "Mouse Scroll Position", AxisType.DualAxis, DeviceInputType.Scroll, ControllerMappingLibrary.AXIS_3), - new MixedRealityInteractionMapping(2, "Left Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse0), - new MixedRealityInteractionMapping(3, "Right Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse1), - new MixedRealityInteractionMapping(4, "Mouse Button 2", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse2), - new MixedRealityInteractionMapping(5, "Mouse Button 3", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse3), - new MixedRealityInteractionMapping(6, "Mouse Button 4", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse4), - new MixedRealityInteractionMapping(7, "Mouse Button 5", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse5), - new MixedRealityInteractionMapping(8, "Mouse Button 6", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse6), - new MixedRealityInteractionMapping(9, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), - new MixedRealityInteractionMapping(10, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(0, "Spatial Mouse Position", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Mouse Delta Position", AxisType.DualAxis, DeviceInputType.PointerPosition, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(2, "Mouse Scroll Position", AxisType.DualAxis, DeviceInputType.Scroll, ControllerMappingLibrary.AXIS_3), + new MixedRealityInteractionMapping(3, "Left Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse0), + new MixedRealityInteractionMapping(4, "Right Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse1), + new MixedRealityInteractionMapping(5, "Mouse Button 2", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse2), + new MixedRealityInteractionMapping(6, "Mouse Button 3", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse3), + new MixedRealityInteractionMapping(7, "Mouse Button 4", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse4), + new MixedRealityInteractionMapping(8, "Mouse Button 5", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse5), + new MixedRealityInteractionMapping(9, "Mouse Button 6", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse6), }; /// @@ -48,6 +47,7 @@ public override void SetupDefaultInteractions(Handedness controllerHandedness) } private MixedRealityPose controllerPose = MixedRealityPose.ZeroIdentity; + private Vector2 mouseDelta; /// /// Update controller. @@ -65,14 +65,32 @@ public void Update() return; } + if (InputSource.Pointers[0].BaseCursor != null) + { + controllerPose.Position = InputSource.Pointers[0].BaseCursor.Position; + controllerPose.Rotation = InputSource.Pointers[0].BaseCursor.Rotation; + } + + mouseDelta.x = -UInput.GetAxis("Mouse Y"); + mouseDelta.y = UInput.GetAxis("Mouse X"); + MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, mouseDelta); + MixedRealityToolkit.InputSystem?.RaiseSourcePoseChanged(InputSource, this, controllerPose); + MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, UInput.mouseScrollDelta); + for (int i = 0; i < Interactions.Length; i++) { - + if (Interactions[i].InputType == DeviceInputType.SpatialPointer) + { + Interactions[i].PoseData = controllerPose; + + if (Interactions[i].Changed) + { + MixedRealityToolkit.InputSystem?.RaisePoseInputChanged(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction, Interactions[i].PoseData); + } + } + if (Interactions[i].InputType == DeviceInputType.PointerPosition) { - Vector2 mouseDelta; - mouseDelta.x = -UInput.GetAxis("Mouse Y"); - mouseDelta.y = UInput.GetAxis("Mouse X"); Interactions[i].Vector2Data = mouseDelta; if (Interactions[i].Changed) @@ -81,6 +99,16 @@ public void Update() } } + if (Interactions[i].InputType == DeviceInputType.Scroll) + { + Interactions[i].Vector2Data = UInput.mouseScrollDelta; + + if (Interactions[i].Changed) + { + MixedRealityToolkit.InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction, Interactions[i].Vector2Data); + } + } + if (Interactions[i].AxisType == AxisType.Digital) { var keyButton = UInput.GetKey(Interactions[i].KeyCode); diff --git a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs index f3e605879c2..8dd9091dd2c 100644 --- a/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs +++ b/Assets/MixedRealityToolkit/Providers/UnityInput/MouseDeviceManager.cs @@ -47,12 +47,6 @@ public override void Enable() return; } - if (Controller != null) - { - // device manager has already been set up - return; - } - #if UNITY_EDITOR if (UnityEditor.EditorWindow.focusedWindow != null) { @@ -117,7 +111,6 @@ public override void Disable() if (Controller != null) { inputSystem?.RaiseSourceLost(Controller.InputSource, Controller); - Controller = null; } } } From 5642d9c6720be5a509165bb541b4fa249fb386b3 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Wed, 17 Apr 2019 04:54:16 -0700 Subject: [PATCH 120/183] eliminate serialization warning on startup --- .../InputSimulation/Core.meta | 8 ++++++ .../Core/IInputSimulationService.cs | 10 +++++++ .../Core/IInputSimulationService.cs.meta | 11 ++++++++ .../{ => Core}/InputSimulationEnum.cs | 0 .../{ => Core}/InputSimulationEnum.cs.meta | 0 .../{ => Core}/ManualCameraControl.cs | 0 .../{ => Core}/ManualCameraControl.cs.meta | 0 .../MixedRealityInputSimulationProfile.cs | 2 +- ...MixedRealityInputSimulationProfile.cs.meta | 0 ...olkit.Services.InputSimulation.Core.asmdef | 14 ++++++++++ ....Services.InputSimulation.Core.asmdef.meta | 7 +++++ .../{ => Core}/SimulatedArticulatedHand.cs | 0 .../SimulatedArticulatedHand.cs.meta | 0 .../{ => Core}/SimulatedGestureHand.cs | 8 ++++-- .../{ => Core}/SimulatedGestureHand.cs.meta | 0 .../{ => Core}/SimulatedHand.cs | 0 .../{ => Core}/SimulatedHand.cs.meta | 0 .../{ => Core}/SimulatedHandDataProvider.cs | 0 .../SimulatedHandDataProvider.cs.meta | 0 .../{ => Core}/SimulatedHandPose.cs | 0 .../{ => Core}/SimulatedHandPose.cs.meta | 0 .../{ => Core}/SimulatedHandUtils.cs | 0 .../{ => Core}/SimulatedHandUtils.cs.meta | 0 .../InputSimulation/InputSimulationService.cs | 27 ++++++++++--------- ...Services.InputSimulation.Inspectors.asmdef | 2 +- ...ityToolkit.Services.InputSimulation.asmdef | 3 ++- 26 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/InputSimulationEnum.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/InputSimulationEnum.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/ManualCameraControl.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/ManualCameraControl.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/MixedRealityInputSimulationProfile.cs (99%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/MixedRealityInputSimulationProfile.cs.meta (100%) create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedArticulatedHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedArticulatedHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedGestureHand.cs (97%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedGestureHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandDataProvider.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandDataProvider.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandPose.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandPose.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandUtils.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandUtils.cs.meta (100%) diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta new file mode 100644 index 00000000000..239a46054e1 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ec8537058f84de4db1d36521da2bbcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs new file mode 100644 index 00000000000..3cd9ce42fcb --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace Microsoft.MixedReality.Toolkit.Input +{ + public interface IInputSimulationService : IMixedRealityInputDeviceManager + { + MixedRealityInputSimulationProfile InputSimulationProfile { get; } + } +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta new file mode 100644 index 00000000000..04dc286ad67 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b592fda7bd51d57429daf89ae76ae821 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs similarity index 99% rename from Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs index 2530d413cd7..04f4d745724 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs @@ -7,7 +7,7 @@ namespace Microsoft.MixedReality.Toolkit.Input { [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Mixed Reality Simulated Input Profile", fileName = "MixedRealityInputSimulationProfile", order = (int)CreateProfileMenuItemIndices.InputSimulation)] - [MixedRealityServiceProfile(typeof(InputSimulationService))] + [MixedRealityServiceProfile(typeof(IInputSimulationService))] public class MixedRealityInputSimulationProfile : BaseMixedRealityProfile { [Header("Camera Control")] diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef new file mode 100644 index 00000000000..13a7768fa02 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef @@ -0,0 +1,14 @@ +{ + "name": "MixedRealityToolkit.Services.InputSimulation.Core", + "references": [ + "Microsoft.MixedReality.Toolkit" + ], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta new file mode 100644 index 00000000000..19f96a90a49 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d1cf89781a6bd6d44bf7fe969b797228 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs similarity index 97% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs index bffab512cc8..93e49603077 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs @@ -41,7 +41,11 @@ public class SimulatedGestureHand : SimulatedHand /// /// /// - public SimulatedGestureHand(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + public SimulatedGestureHand( + TrackingState trackingState, + Handedness controllerHandedness, + IMixedRealityInputSource inputSource = null, + MixedRealityInteractionMapping[] interactions = null) : base(trackingState, controllerHandedness, inputSource, interactions) { } @@ -71,7 +75,7 @@ void Awake() useRailsNavigation = gestureProfile.UseRailsNavigation; } - var inputSimProfile = MixedRealityToolkit.Instance?.GetService()?.GetInputSimulationProfile(); + var inputSimProfile = MixedRealityToolkit.Instance?.GetService()?.InputSimulationProfile; if (inputSimProfile != null) { holdStartDuration = inputSimProfile.HoldStartDuration; diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs index 15a327290c3..1939efef116 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs @@ -14,7 +14,7 @@ namespace Microsoft.MixedReality.Toolkit.Input "Input Simulation Service", "Profiles/DefaultMixedRealityInputSimulationProfile.asset", "MixedRealityToolkit.SDK")] - public class InputSimulationService : BaseInputDeviceManager + public class InputSimulationService : BaseInputDeviceManager, IInputSimulationService { private ManualCameraControl cameraControl = null; private SimulatedHandDataProvider handDataProvider = null; @@ -70,7 +70,7 @@ public override void Disable() /// public override void Update() { - var profile = GetInputSimulationProfile(); + var profile = InputSimulationProfile; if (profile.IsCameraControlEnabled) { @@ -111,7 +111,7 @@ public override void Update() /// public override void LateUpdate() { - var profile = GetInputSimulationProfile(); + var profile = InputSimulationProfile; // Apply hand data in LateUpdate to ensure external changes are applied. // HandDataLeft/Right can be modified after the services Update() call. @@ -141,21 +141,24 @@ public override void LateUpdate() /// /// Return the service profile and ensure that the type is correct /// - public MixedRealityInputSimulationProfile GetInputSimulationProfile() + public MixedRealityInputSimulationProfile InputSimulationProfile { - var profile = ConfigurationProfile as MixedRealityInputSimulationProfile; - if (!profile) - { - Debug.LogError("Profile for Input Simulation Service must be a MixedRealityInputSimulationProfile"); + get + { + var profile = ConfigurationProfile as MixedRealityInputSimulationProfile; + if (!profile) + { + Debug.LogError("Profile for Input Simulation Service must be a MixedRealityInputSimulationProfile"); + } + return profile; } - return profile; } private void EnableCameraControl() { if (cameraControl == null) { - cameraControl = new ManualCameraControl(GetInputSimulationProfile()); + cameraControl = new ManualCameraControl(InputSimulationProfile); } } @@ -171,7 +174,7 @@ private void EnableHandSimulation() { if (handDataProvider == null) { - handDataProvider = new SimulatedHandDataProvider(GetInputSimulationProfile()); + handDataProvider = new SimulatedHandDataProvider(InputSimulationProfile); } } @@ -188,7 +191,7 @@ private void DisableHandSimulation() // Register input sources for hands based on changes of the data provider private void UpdateHandInputSource(Handedness handedness, SimulatedHandData handData) { - var profile = GetInputSimulationProfile(); + var profile = InputSimulationProfile; if (profile.HandSimulationMode == HandSimulationMode.Disabled) { diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef index 343b6f63136..9f3de73f7ec 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef @@ -4,7 +4,7 @@ "Microsoft.MixedReality.Toolkit", "Microsoft.MixedReality.Toolkit.Core.Inspectors", "Microsoft.MixedReality.Toolkit.Core.Utilities.Editor", - "Microsoft.MixedReality.Toolkit.Services.InputSimulation" + "MixedRealityToolkit.Services.InputSimulation.Core" ], "optionalUnityReferences": [], "includePlatforms": [ diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef index b5c1602dd38..a88bc3502a4 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef @@ -2,7 +2,8 @@ "name": "Microsoft.MixedReality.Toolkit.Services.InputSimulation", "references": [ "Microsoft.MixedReality.Toolkit", - "Microsoft.MixedReality.Toolkit.SDK" + "Microsoft.MixedReality.Toolkit.SDK", + "MixedRealityToolkit.Services.InputSimulation.Core" ], "optionalUnityReferences": [], "includePlatforms": [ From cb85b62fa980f5755d57406c456a1d32e19d8751 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Wed, 17 Apr 2019 04:54:16 -0700 Subject: [PATCH 121/183] eliminate serialization warning on startup --- .../InputSimulation/Core.meta | 8 ++++++ .../Core/IInputSimulationService.cs | 10 +++++++ .../Core/IInputSimulationService.cs.meta | 11 ++++++++ .../{ => Core}/InputSimulationEnum.cs | 0 .../{ => Core}/InputSimulationEnum.cs.meta | 0 .../{ => Core}/ManualCameraControl.cs | 0 .../{ => Core}/ManualCameraControl.cs.meta | 0 .../MixedRealityInputSimulationProfile.cs | 2 +- ...MixedRealityInputSimulationProfile.cs.meta | 0 ...olkit.Services.InputSimulation.Core.asmdef | 14 ++++++++++ ....Services.InputSimulation.Core.asmdef.meta | 7 +++++ .../{ => Core}/SimulatedArticulatedHand.cs | 0 .../SimulatedArticulatedHand.cs.meta | 0 .../{ => Core}/SimulatedGestureHand.cs | 8 ++++-- .../{ => Core}/SimulatedGestureHand.cs.meta | 0 .../{ => Core}/SimulatedHand.cs | 0 .../{ => Core}/SimulatedHand.cs.meta | 0 .../{ => Core}/SimulatedHandDataProvider.cs | 0 .../SimulatedHandDataProvider.cs.meta | 0 .../{ => Core}/SimulatedHandPose.cs | 0 .../{ => Core}/SimulatedHandPose.cs.meta | 0 .../{ => Core}/SimulatedHandUtils.cs | 0 .../{ => Core}/SimulatedHandUtils.cs.meta | 0 .../InputSimulation/InputSimulationService.cs | 27 ++++++++++--------- ...Services.InputSimulation.Inspectors.asmdef | 2 +- ...ityToolkit.Services.InputSimulation.asmdef | 3 ++- 26 files changed, 75 insertions(+), 17 deletions(-) create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/InputSimulationEnum.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/InputSimulationEnum.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/ManualCameraControl.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/ManualCameraControl.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/MixedRealityInputSimulationProfile.cs (99%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/MixedRealityInputSimulationProfile.cs.meta (100%) create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef create mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedArticulatedHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedArticulatedHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedGestureHand.cs (97%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedGestureHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandDataProvider.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandDataProvider.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandPose.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandPose.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandUtils.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Core}/SimulatedHandUtils.cs.meta (100%) diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta new file mode 100644 index 00000000000..239a46054e1 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ec8537058f84de4db1d36521da2bbcb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs new file mode 100644 index 00000000000..3cd9ce42fcb --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs @@ -0,0 +1,10 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace Microsoft.MixedReality.Toolkit.Input +{ + public interface IInputSimulationService : IMixedRealityInputDeviceManager + { + MixedRealityInputSimulationProfile InputSimulationProfile { get; } + } +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta new file mode 100644 index 00000000000..04dc286ad67 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b592fda7bd51d57429daf89ae76ae821 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs similarity index 99% rename from Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs index 2530d413cd7..04f4d745724 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs @@ -7,7 +7,7 @@ namespace Microsoft.MixedReality.Toolkit.Input { [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Mixed Reality Simulated Input Profile", fileName = "MixedRealityInputSimulationProfile", order = (int)CreateProfileMenuItemIndices.InputSimulation)] - [MixedRealityServiceProfile(typeof(InputSimulationService))] + [MixedRealityServiceProfile(typeof(IInputSimulationService))] public class MixedRealityInputSimulationProfile : BaseMixedRealityProfile { [Header("Camera Control")] diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef new file mode 100644 index 00000000000..13a7768fa02 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef @@ -0,0 +1,14 @@ +{ + "name": "MixedRealityToolkit.Services.InputSimulation.Core", + "references": [ + "Microsoft.MixedReality.Toolkit" + ], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta new file mode 100644 index 00000000000..19f96a90a49 --- /dev/null +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d1cf89781a6bd6d44bf7fe969b797228 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs similarity index 97% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs index bffab512cc8..93e49603077 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs @@ -41,7 +41,11 @@ public class SimulatedGestureHand : SimulatedHand /// /// /// - public SimulatedGestureHand(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + public SimulatedGestureHand( + TrackingState trackingState, + Handedness controllerHandedness, + IMixedRealityInputSource inputSource = null, + MixedRealityInteractionMapping[] interactions = null) : base(trackingState, controllerHandedness, inputSource, interactions) { } @@ -71,7 +75,7 @@ void Awake() useRailsNavigation = gestureProfile.UseRailsNavigation; } - var inputSimProfile = MixedRealityToolkit.Instance?.GetService()?.GetInputSimulationProfile(); + var inputSimProfile = MixedRealityToolkit.Instance?.GetService()?.InputSimulationProfile; if (inputSimProfile != null) { holdStartDuration = inputSimProfile.HoldStartDuration; diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs index 15a327290c3..1939efef116 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs @@ -14,7 +14,7 @@ namespace Microsoft.MixedReality.Toolkit.Input "Input Simulation Service", "Profiles/DefaultMixedRealityInputSimulationProfile.asset", "MixedRealityToolkit.SDK")] - public class InputSimulationService : BaseInputDeviceManager + public class InputSimulationService : BaseInputDeviceManager, IInputSimulationService { private ManualCameraControl cameraControl = null; private SimulatedHandDataProvider handDataProvider = null; @@ -70,7 +70,7 @@ public override void Disable() /// public override void Update() { - var profile = GetInputSimulationProfile(); + var profile = InputSimulationProfile; if (profile.IsCameraControlEnabled) { @@ -111,7 +111,7 @@ public override void Update() /// public override void LateUpdate() { - var profile = GetInputSimulationProfile(); + var profile = InputSimulationProfile; // Apply hand data in LateUpdate to ensure external changes are applied. // HandDataLeft/Right can be modified after the services Update() call. @@ -141,21 +141,24 @@ public override void LateUpdate() /// /// Return the service profile and ensure that the type is correct /// - public MixedRealityInputSimulationProfile GetInputSimulationProfile() + public MixedRealityInputSimulationProfile InputSimulationProfile { - var profile = ConfigurationProfile as MixedRealityInputSimulationProfile; - if (!profile) - { - Debug.LogError("Profile for Input Simulation Service must be a MixedRealityInputSimulationProfile"); + get + { + var profile = ConfigurationProfile as MixedRealityInputSimulationProfile; + if (!profile) + { + Debug.LogError("Profile for Input Simulation Service must be a MixedRealityInputSimulationProfile"); + } + return profile; } - return profile; } private void EnableCameraControl() { if (cameraControl == null) { - cameraControl = new ManualCameraControl(GetInputSimulationProfile()); + cameraControl = new ManualCameraControl(InputSimulationProfile); } } @@ -171,7 +174,7 @@ private void EnableHandSimulation() { if (handDataProvider == null) { - handDataProvider = new SimulatedHandDataProvider(GetInputSimulationProfile()); + handDataProvider = new SimulatedHandDataProvider(InputSimulationProfile); } } @@ -188,7 +191,7 @@ private void DisableHandSimulation() // Register input sources for hands based on changes of the data provider private void UpdateHandInputSource(Handedness handedness, SimulatedHandData handData) { - var profile = GetInputSimulationProfile(); + var profile = InputSimulationProfile; if (profile.HandSimulationMode == HandSimulationMode.Disabled) { diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef index 343b6f63136..9f3de73f7ec 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef @@ -4,7 +4,7 @@ "Microsoft.MixedReality.Toolkit", "Microsoft.MixedReality.Toolkit.Core.Inspectors", "Microsoft.MixedReality.Toolkit.Core.Utilities.Editor", - "Microsoft.MixedReality.Toolkit.Services.InputSimulation" + "MixedRealityToolkit.Services.InputSimulation.Core" ], "optionalUnityReferences": [], "includePlatforms": [ diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef index b5c1602dd38..a88bc3502a4 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef @@ -2,7 +2,8 @@ "name": "Microsoft.MixedReality.Toolkit.Services.InputSimulation", "references": [ "Microsoft.MixedReality.Toolkit", - "Microsoft.MixedReality.Toolkit.SDK" + "Microsoft.MixedReality.Toolkit.SDK", + "MixedRealityToolkit.Services.InputSimulation.Core" ], "optionalUnityReferences": [], "includePlatforms": [ From 4894e1ad15da0cb5c67b98e34f6c43d0bf4b6511 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Wed, 17 Apr 2019 06:22:41 -0700 Subject: [PATCH 122/183] update preferences ui to use full name of MRTK --- .../Inspectors/MixedRealityPreferences.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs b/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs index 05cefb3d41a..c881e976227 100644 --- a/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs +++ b/Assets/MixedRealityToolkit/Inspectors/MixedRealityPreferences.cs @@ -39,7 +39,7 @@ public static bool LockProfiles #region Ignore startup settings prompt - private static readonly GUIContent IgnoreContent = new GUIContent("Ignore settings prompt on startup", "Prevents settings dialog popup from showing on startup.\n\nThis setting applies to all projects using MRTK."); + private static readonly GUIContent IgnoreContent = new GUIContent("Ignore settings prompt on startup", "Prevents settings dialog popup from showing on startup.\n\nThis setting applies to all projects using the Mixed Reality Toolkit."); private const string IGNORE_KEY = "MixedRealityToolkit_Editor_IgnoreSettingsPrompts"; private static bool ignorePrefLoaded; private static bool ignoreSettingsPrompt; @@ -67,9 +67,9 @@ public static bool IgnoreSettingsPrompt [SettingsProvider] private static SettingsProvider Preferences() { - var provider = new SettingsProvider("Project/MRTK", SettingsScope.Project) + var provider = new SettingsProvider("Project/Mixed Reality Toolkit", SettingsScope.Project) { - label = "MRTK", + label = "Microsoft Mixed Reality Toolkit", guiHandler = GUIHandler, @@ -92,7 +92,7 @@ void GUIHandler(string searchContext) if (!LockProfiles) { - EditorGUILayout.HelpBox("This is only to be used to update the default SDK profiles. If any edits are made, and not checked into the MRTK's Github, the changes may be lost next time you update your local copy.", MessageType.Warning); + EditorGUILayout.HelpBox("This is only to be used to update the default SDK profiles. If any edits are made, and not checked into the Mixed Reality Toolkit - Unity repository, the changes may be lost next time you update your local copy.", MessageType.Warning); } EditorGUI.BeginChangeCheck(); From f76a9d40c4654026f129ec723b92580dee9a2bc8 Mon Sep 17 00:00:00 2001 From: "David Kline (ANALOG)" Date: Wed, 17 Apr 2019 08:06:32 -0700 Subject: [PATCH 123/183] remove .core, replace .inspector with .editor, update profiles --- .../Demos/Audio/Scripts/obj.meta | 8 -------- .../EyeTrackingDemoInputSystemProfile.asset | 4 ++-- .../Dictation.MixedRealityInputSystemProfile.asset | 2 +- .../Speech.MixedRealityInputSystemProfile.asset | 2 +- .../DefaultMixedRealityInputSystemProfile.asset | 2 +- .../InputSimulation/Core.meta | 8 -------- ...ityToolkit.Services.InputSimulation.Core.asmdef | 14 -------------- ...olkit.Services.InputSimulation.Core.asmdef.meta | 7 ------- .../{Inspectors.meta => Editor.meta} | 0 .../{ => Editor}/InputSimulationService.cs | 0 .../{ => Editor}/InputSimulationService.cs.meta | 0 .../MixedRealityInputSimulationProfileInspector.cs | 0 ...dRealityInputSimulationProfileInspector.cs.meta | 0 ...Toolkit.Services.InputSimulation.Editor.asmdef} | 4 ++-- ...it.Services.InputSimulation.Editor.asmdef.meta} | 0 .../{Core => }/IInputSimulationService.cs | 0 .../{Core => }/IInputSimulationService.cs.meta | 0 .../{Core => }/InputSimulationEnum.cs | 0 .../{Core => }/InputSimulationEnum.cs.meta | 0 .../{Core => }/ManualCameraControl.cs | 0 .../{Core => }/ManualCameraControl.cs.meta | 0 .../MixedRealityInputSimulationProfile.cs | 0 .../MixedRealityInputSimulationProfile.cs.meta | 0 ...dRealityToolkit.Services.InputSimulation.asmdef | 3 +-- .../{Core => }/SimulatedArticulatedHand.cs | 0 .../{Core => }/SimulatedArticulatedHand.cs.meta | 0 .../{Core => }/SimulatedGestureHand.cs | 0 .../{Core => }/SimulatedGestureHand.cs.meta | 0 .../InputSimulation/{Core => }/SimulatedHand.cs | 0 .../{Core => }/SimulatedHand.cs.meta | 0 .../{Core => }/SimulatedHandDataProvider.cs | 0 .../{Core => }/SimulatedHandDataProvider.cs.meta | 0 .../{Core => }/SimulatedHandPose.cs | 0 .../{Core => }/SimulatedHandPose.cs.meta | 0 .../{Core => }/SimulatedHandUtils.cs | 0 .../{Core => }/SimulatedHandUtils.cs.meta | 0 36 files changed, 8 insertions(+), 46 deletions(-) delete mode 100644 Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta delete mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta delete mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef delete mode 100644 Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta rename Assets/MixedRealityToolkit.Services/InputSimulation/{Inspectors.meta => Editor.meta} (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Editor}/InputSimulationService.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{ => Editor}/InputSimulationService.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Inspectors => Editor}/MixedRealityInputSimulationProfileInspector.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Inspectors => Editor}/MixedRealityInputSimulationProfileInspector.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef => Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef} (86%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef.meta => Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef.meta} (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/IInputSimulationService.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/IInputSimulationService.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/InputSimulationEnum.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/InputSimulationEnum.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/ManualCameraControl.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/ManualCameraControl.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/MixedRealityInputSimulationProfile.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/MixedRealityInputSimulationProfile.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedArticulatedHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedArticulatedHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedGestureHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedGestureHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHand.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHand.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHandDataProvider.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHandDataProvider.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHandPose.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHandPose.cs.meta (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHandUtils.cs (100%) rename Assets/MixedRealityToolkit.Services/InputSimulation/{Core => }/SimulatedHandUtils.cs.meta (100%) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta b/Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta deleted file mode 100644 index 34710595a9e..00000000000 --- a/Assets/MixedRealityToolkit.Examples/Demos/Audio/Scripts/obj.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 4fa88bc39f3050b43b8578ff8f19e9b7 -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoInputSystemProfile.asset b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoInputSystemProfile.asset index 047f5d4af55..a6da36a9590 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoInputSystemProfile.asset +++ b/Assets/MixedRealityToolkit.Examples/Demos/EyeTracking/General/Profiles/EyeTrackingDemoInputSystemProfile.asset @@ -49,11 +49,11 @@ MonoBehaviour: runtimePlatform: -1 deviceManagerProfile: {fileID: 0} - componentType: - reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation + reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor componentName: Input Simulation Service priority: 0 runtimePlatform: 16 - deviceManagerProfile: {fileID: 11400000, guid: 0e54184c8f9cca44aad8fdda3f62fd82, + deviceManagerProfile: {fileID: 11400000, guid: 41478039094d47641bf4e09c20e61a5a, type: 2} - componentType: reference: Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input.WindowsMixedRealityEyeGazeDataProvider, diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Dictation/Dictation.MixedRealityInputSystemProfile.asset b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Dictation/Dictation.MixedRealityInputSystemProfile.asset index 343e3d74e1b..ed229caf9fb 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Dictation/Dictation.MixedRealityInputSystemProfile.asset +++ b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Dictation/Dictation.MixedRealityInputSystemProfile.asset @@ -56,7 +56,7 @@ MonoBehaviour: runtimePlatform: -1 deviceManagerProfile: {fileID: 0} - componentType: - reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation + reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor componentName: Input Simulation Service priority: 0 runtimePlatform: 16 diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset index acdef013509..e4e4e240e51 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset +++ b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.MixedRealityInputSystemProfile.asset @@ -63,7 +63,7 @@ MonoBehaviour: runtimePlatform: -1 deviceManagerProfile: {fileID: 0} - componentType: - reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation + reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor componentName: Input Simulation Service priority: 0 runtimePlatform: 16 diff --git a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputSystemProfile.asset b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputSystemProfile.asset index 7af6843b9c5..edf32e9de64 100644 --- a/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputSystemProfile.asset +++ b/Assets/MixedRealityToolkit.SDK/Profiles/DefaultMixedRealityInputSystemProfile.asset @@ -63,7 +63,7 @@ MonoBehaviour: runtimePlatform: -1 deviceManagerProfile: {fileID: 0} - componentType: - reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation + reference: Microsoft.MixedReality.Toolkit.Input.InputSimulationService, Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor componentName: Input Simulation Service priority: 0 runtimePlatform: 16 diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta deleted file mode 100644 index 239a46054e1..00000000000 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/Core.meta +++ /dev/null @@ -1,8 +0,0 @@ -fileFormatVersion: 2 -guid: 0ec8537058f84de4db1d36521da2bbcb -folderAsset: yes -DefaultImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef deleted file mode 100644 index 13a7768fa02..00000000000 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "MixedRealityToolkit.Services.InputSimulation.Core", - "references": [ - "Microsoft.MixedReality.Toolkit" - ], - "optionalUnityReferences": [], - "includePlatforms": [], - "excludePlatforms": [], - "allowUnsafeCode": false, - "overrideReferences": false, - "precompiledReferences": [], - "autoReferenced": true, - "defineConstraints": [] -} \ No newline at end of file diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta deleted file mode 100644 index 19f96a90a49..00000000000 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityToolkit.Services.InputSimulation.Core.asmdef.meta +++ /dev/null @@ -1,7 +0,0 @@ -fileFormatVersion: 2 -guid: d1cf89781a6bd6d44bf7fe969b797228 -AssemblyDefinitionImporter: - externalObjects: {} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/InputSimulationService.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor/InputSimulationService.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/InputSimulationService.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationService.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor/InputSimulationService.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityInputSimulationProfileInspector.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityInputSimulationProfileInspector.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityInputSimulationProfileInspector.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityInputSimulationProfileInspector.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityInputSimulationProfileInspector.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityInputSimulationProfileInspector.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityInputSimulationProfileInspector.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityInputSimulationProfileInspector.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef similarity index 86% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef index 9f3de73f7ec..bf982c95c18 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef @@ -1,10 +1,10 @@ { - "name": "Microsoft.MixedReality.Toolkit.Services.InputSimulation.Inspectors", + "name": "Microsoft.MixedReality.Toolkit.Services.InputSimulation.Editor", "references": [ "Microsoft.MixedReality.Toolkit", "Microsoft.MixedReality.Toolkit.Core.Inspectors", "Microsoft.MixedReality.Toolkit.Core.Utilities.Editor", - "MixedRealityToolkit.Services.InputSimulation.Core" + "Microsoft.MixedReality.Toolkit.Services.InputSimulation" ], "optionalUnityReferences": [], "includePlatforms": [ diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Inspectors/MixedRealityToolkit.Services.InputSimulation.Inspectors.asmdef.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/Editor/MixedRealityToolkit.Services.InputSimulation.Editor.asmdef.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/IInputSimulationService.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/IInputSimulationService.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/IInputSimulationService.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/IInputSimulationService.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/IInputSimulationService.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/InputSimulationEnum.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/InputSimulationEnum.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/ManualCameraControl.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/ManualCameraControl.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/MixedRealityInputSimulationProfile.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityInputSimulationProfile.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef index a88bc3502a4..b5c1602dd38 100644 --- a/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef +++ b/Assets/MixedRealityToolkit.Services/InputSimulation/MixedRealityToolkit.Services.InputSimulation.asmdef @@ -2,8 +2,7 @@ "name": "Microsoft.MixedReality.Toolkit.Services.InputSimulation", "references": [ "Microsoft.MixedReality.Toolkit", - "Microsoft.MixedReality.Toolkit.SDK", - "MixedRealityToolkit.Services.InputSimulation.Core" + "Microsoft.MixedReality.Toolkit.SDK" ], "optionalUnityReferences": [], "includePlatforms": [ diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedArticulatedHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedArticulatedHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedGestureHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedGestureHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHand.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHand.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandDataProvider.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandDataProvider.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandPose.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandPose.cs.meta diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs diff --git a/Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs.meta b/Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs.meta similarity index 100% rename from Assets/MixedRealityToolkit.Services/InputSimulation/Core/SimulatedHandUtils.cs.meta rename to Assets/MixedRealityToolkit.Services/InputSimulation/SimulatedHandUtils.cs.meta From dd0b717a6e335be855de28ac8f512f6c12c00ed4 Mon Sep 17 00:00:00 2001 From: Luis Valverde Date: Wed, 17 Apr 2019 10:30:53 +0100 Subject: [PATCH 124/183] Removed reference to missing script in speech sample. --- .../Demos/Input/Scenes/Speech/Speech.unity | 26 ++++++------------- 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.unity b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.unity index ef0210ff81e..c3d11db2f4e 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.unity +++ b/Assets/MixedRealityToolkit.Examples/Demos/Input/Scenes/Speech/Speech.unity @@ -773,24 +773,6 @@ PrefabInstance: objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: a900c08743a94c328074df8bbe3eb63c, type: 3} ---- !u!1 &1561988259 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1592014444585556, guid: a900c08743a94c328074df8bbe3eb63c, - type: 3} - m_PrefabInstance: {fileID: 1561988258} - m_PrefabAsset: {fileID: 0} ---- !u!114 &1561988260 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1561988259} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3c83db9776760624bb97ef3efcc6078a, type: 3} - m_Name: - m_EditorClassIdentifier: --- !u!1 &1619951297 GameObject: m_ObjectHideFlags: 0 @@ -898,6 +880,7 @@ MonoBehaviour: gazeTransform: {fileID: 0} minHeadVelocityThreshold: 0.5 maxHeadVelocityThreshold: 2 + preferEyeTracking: 0 --- !u!114 &1619951302 MonoBehaviour: m_ObjectHideFlags: 0 @@ -910,6 +893,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 7a21b486d0bb44444b1418aaa38b44de, type: 3} m_Name: m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 --- !u!114 &1619951303 MonoBehaviour: m_ObjectHideFlags: 0 From 4b3248bad545a9146293b30b12c4cd80651f30e3 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 17 Apr 2019 12:09:11 -0700 Subject: [PATCH 125/183] Responding to Will's comment --- .../Utilities/Editor/Setup/MixedRealityToolkitFiles.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs index 7340fdbcc99..0f8464c0c78 100644 --- a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs @@ -16,6 +16,10 @@ namespace Microsoft.MixedReality.Toolkit.Utilities.Editor [InitializeOnLoad] public static class MixedRealityToolkitFiles { + /// + /// In order to subscribe for a callback, + /// the class declaring the method must derive from AssetPostprocessor. So this class is nested privately as to prevent instnatiation of it. + /// private class AssetPostprocessor : UnityEditor.AssetPostprocessor { public static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) From d121a16317306871bb3e8b9e65fff9aa228cb2e9 Mon Sep 17 00:00:00 2001 From: Andrei Borodin Date: Wed, 17 Apr 2019 16:31:06 -0700 Subject: [PATCH 126/183] Fixed an issue, and moved another api --- .../Editor/Setup/MixedRealityEditorSettings.cs | 14 ++++---------- .../Editor/Setup/MixedRealityToolkitFiles.cs | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs index 01757a83a72..c7d4cc3d681 100644 --- a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityEditorSettings.cs @@ -24,8 +24,6 @@ public MixedRealityEditorSettings() private const string IgnoreKey = "_MixedRealityToolkit_Editor_IgnoreSettingsPrompts"; private const string SessionKey = "_MixedRealityToolkit_Editor_ShownSettingsPrompts"; - private static string mixedRealityToolkit_RelativeFolderPath = string.Empty; - [Obsolete("Use the 'MixedRealityToolkitFiles' APIs.")] public static string MixedRealityToolkit_AbsoluteFolderPath { @@ -53,7 +51,7 @@ public static string MixedRealityToolkit_AbsoluteFolderPath [Obsolete("Use the 'MixedRealityToolkitFiles' APIs.")] public static string MixedRealityToolkit_RelativeFolderPath { - get { return MakePathRelativeToProject(MixedRealityToolkit_AbsoluteFolderPath); } + get { return MixedRealityToolkitFiles.GetAssetDatabasePath(MixedRealityToolkit_AbsoluteFolderPath); } } static MixedRealityEditorSettings() @@ -170,7 +168,7 @@ internal static bool FindRelativeDirectory(string directoryPathToSearch, string string absolutePath; if (FindDirectory(directoryPathToSearch, directoryName, out absolutePath)) { - path = MakePathRelativeToProject(absolutePath); + path = MixedRealityToolkitFiles.GetAssetDatabasePath(absolutePath); return true; } @@ -213,12 +211,8 @@ internal static bool FindDirectory(string directoryPathToSearch, string director return false; } - internal static string MakePathRelativeToProject(string absolutePath) - { - return absolutePath.Replace( - Application.dataPath + Path.DirectorySeparatorChar, - "Assets" + Path.DirectorySeparatorChar); - } + [Obsolete("Use MixedRealityToolkitFiles.GetAssetDatabasePath instead.")] + internal static string MakePathRelativeToProject(string absolutePath) => MixedRealityToolkitFiles.GetAssetDatabasePath(absolutePath); private static void SetIconTheme() { diff --git a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs index 0f8464c0c78..da08ae82451 100644 --- a/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs +++ b/Assets/MixedRealityToolkit/Utilities/Editor/Setup/MixedRealityToolkitFiles.cs @@ -93,6 +93,16 @@ private static void SearchForFoldersAsync(string rootPath) private static string NormalizeSeparators(string path) => path.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar); + private static string FormatSeparatorsForUnity(string path) => path.Replace('\\', '/'); + + /// + /// Maps an absolute path to be relative to the Project Root path (the Unity folder that contains Assets) + /// + /// The absolute path to the project/ + /// The project relative path. + /// This doesn't produce paths that contain step out '..' relative paths. + public static string GetAssetDatabasePath(string absolutePath) => FormatSeparatorsForUnity(absolutePath).Replace(Application.dataPath, "Assets"); + /// /// Returns files from all folder instances of the MRTK folder relative path. /// @@ -110,7 +120,7 @@ public static string[] GetFiles(string mrtkRelativeFolder) .Select(t => Path.Combine(t, mrtkRelativeFolder)) .Where(Directory.Exists) .SelectMany(t => Directory.GetFiles(t)) - .Select(MixedRealityEditorSettings.MakePathRelativeToProject) + .Select(GetAssetDatabasePath) .ToArray(); } @@ -127,9 +137,11 @@ public static string MapRelativeFilePath(string mrtkPathToFile) return null; } - return MixedRealityEditorSettings.MakePathRelativeToProject(mrtkFolders + string path = mrtkFolders .Select(t => Path.Combine(t, mrtkPathToFile)) - .FirstOrDefault(t => File.Exists(t))); + .FirstOrDefault(t => File.Exists(t)); + + return path != null ? GetAssetDatabasePath(path) : null; } } } From 66e90334bf10699e1052d66ad1a6ed388f47a25a Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Wed, 17 Apr 2019 17:01:12 -0700 Subject: [PATCH 127/183] Added Beau's artwork and updated prefab --- .../Demos/HandTracking/Prefabs/Piano.prefab | 874 +++++++++++------- .../StandardAssets/Materials/PianoKeys.mat | 160 ++++ .../Materials/PianoKeys.mat.meta | 8 + .../StandardAssets/Models/PianoKeys.fbx | Bin 0 -> 156256 bytes .../StandardAssets/Models/PianoKeys.fbx.meta | 152 +++ .../StandardAssets/Textures/PianoKeys_DIF.png | Bin 0 -> 13112 bytes .../Textures/PianoKeys_DIF.png.meta | 88 ++ .../StandardAssets/Textures/PianoKeys_NM.png | Bin 0 -> 267353 bytes .../Textures/PianoKeys_NM.png.meta | 88 ++ 9 files changed, 1013 insertions(+), 357 deletions(-) create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat.meta create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx.meta create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png.meta create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_NM.png create mode 100644 Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_NM.png.meta diff --git a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Piano.prefab b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Piano.prefab index 128cbd36ce8..b1974d7d1d5 100644 --- a/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Piano.prefab +++ b/Assets/MixedRealityToolkit.Examples/Demos/HandTracking/Prefabs/Piano.prefab @@ -26,8 +26,8 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1467737929464728} m_LocalRotation: {x: -6.123234e-17, y: 1, z: -6.123234e-17, w: 6.123234e-17} - m_LocalPosition: {x: 0.215, y: 0.0106, z: 0.0199} - m_LocalScale: {x: 15.5, y: 15.5, z: 15.5} + m_LocalPosition: {x: 0.2178, y: 0.0106, z: 0.025} + m_LocalScale: {x: 15.6767, y: 15.5, z: 15.5} m_Children: [] m_Father: {fileID: 4326490268959450} m_RootOrder: 1 @@ -101,8 +101,8 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1593403575765298} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: -0.025, z: 0} - m_LocalScale: {x: 0.43643844, y: 0.4364368, z: 0.43643796} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - {fileID: 4673604112312492} - {fileID: 4217569105187210} @@ -219,15 +219,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: F - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.227 + value: 0.272 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -282,22 +277,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500068 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500057 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500053 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: 1e3cd518fc252894f8dcede422f1792f, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: F objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.0016 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -312,63 +317,58 @@ PrefabInstance: - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.00074568746 + value: 0.03449019 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486796 + value: 0.39334506 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.00048053265 + value: -0.0044507086 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0044443007 + value: 0.044586487 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.024825733 + value: 0.25168225 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0044443007 + value: 0.044586487 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.024825733 + value: 0.25168225 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.00074568746 + value: 0.03449019 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486796 + value: 0.39334506 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.019312343 + value: 0.19226861 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.009175639 + value: 0.0916836 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: 1e3cd518fc252894f8dcede422f1792f, type: 3} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -378,12 +378,22 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300010, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300008, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!4 &6614021508818845902 stripped @@ -399,20 +409,15 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: BFlat - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.297 + value: 0.4113 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: -0.0046999995 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -462,93 +467,98 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.5001135 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500103 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500098 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: cb811ff0fcdbb2a40a8398f721cc28a1, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: BFlat objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: -0.00705 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: -0 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.z - value: -0.0036 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: -0.0071909316 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.03458416 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.0036412277 + value: -0.035025828 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0029292512 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.015020569 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: -0.0071909316 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.03458416 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.007595292 + value: 0.07305286 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0029292512 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.015020569 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.02247304 + value: 0.21615738 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: cb811ff0fcdbb2a40a8398f721cc28a1, type: 3} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -558,7 +568,12 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300020, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300000, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} + - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: debugMessage + value: + objectReference: {fileID: 102400326646059596} - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Materials.Array.size @@ -568,12 +583,7 @@ PrefabInstance: type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: cba91b531692f3a408f3193b95e44dc2, type: 2} - - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: debugMessage - value: - objectReference: {fileID: 102400326646059596} + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} - target: {fileID: 6749174556681977289, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: Profiles.Array.data[0].Themes.Array.data[0] @@ -595,20 +605,15 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: CSharp - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.045 + value: 0.0293 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: -0.0046999995 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -658,93 +663,98 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500022 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500012 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500007 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: e4154763f07adb7418e874d20d0bfc37, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: CSharp objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.00079 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.z - value: -0.0036 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.00093090656 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.034584165 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.0036412254 + value: -0.035025865 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0028493358 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.015020569 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0028493358 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.015020569 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.00093090656 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.034584165 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.0075952923 + value: 0.07178426 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.022473035 + value: 0.21362025 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: e4154763f07adb7418e874d20d0bfc37, type: 3} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -754,7 +764,12 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300002, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300000, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} + - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: debugMessage + value: + objectReference: {fileID: 102400326646059596} - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Materials.Array.size @@ -764,12 +779,7 @@ PrefabInstance: type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: cba91b531692f3a408f3193b95e44dc2, type: 2} - - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: debugMessage - value: - objectReference: {fileID: 102400326646059596} + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} - target: {fileID: 6749174556681977289, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: Profiles.Array.data[0].Themes.Array.data[0] @@ -791,20 +801,15 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: EFlat - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.13 + value: 0.1191 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: -0.0047 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -854,22 +859,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500045 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500034 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.50003 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: 5ad4c6b5880452d4a813c8714b5d4338, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: EFlat objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.00079 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -879,68 +894,63 @@ PrefabInstance: - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.z - value: -0.0036 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.0009309066 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.03458416 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.0036412277 + value: -0.035025872 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.002849336 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.01502057 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.0009309066 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.03458416 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.007595292 + value: 0.073010914 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.002849336 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.01502057 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.02247304 + value: 0.21607357 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: 5ad4c6b5880452d4a813c8714b5d4338, type: 3} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -950,7 +960,12 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300006, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300000, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} + - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: debugMessage + value: + objectReference: {fileID: 102400326646059596} - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Materials.Array.size @@ -960,12 +975,7 @@ PrefabInstance: type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: cba91b531692f3a408f3193b95e44dc2, type: 2} - - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: debugMessage - value: - objectReference: {fileID: 102400326646059596} + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} - target: {fileID: 6749174556681977289, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: Profiles.Array.data[0].Themes.Array.data[0] @@ -987,15 +997,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: B - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.378 + value: 0.4338 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1050,22 +1055,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500136 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500126 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500121 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: c376d65467e4f844ba94a19350918427, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: B objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: -0.0035 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1080,53 +1095,58 @@ PrefabInstance: - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: -0.0031589482 + value: -0.000055682278 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486796 + value: 0.3933399 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.00048052985 + value: -0.0044507235 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.004518803 + value: 0.04459503 + objectReference: {fileID: 0} + - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: bounds.y + value: 0.2516915 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.004518803 + value: 0.04459503 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.024825739 + value: 0.2516915 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: -0.0031589482 + value: -0.000055682278 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486796 + value: 0.3933399 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.019312339 + value: 0.1920095 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: c376d65467e4f844ba94a19350918427, type: 3} + propertyPath: m_Center.z + value: 0.09155402 + objectReference: {fileID: 0} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -1136,12 +1156,22 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300022, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300014, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!4 &7988011870210196624 stripped @@ -1157,15 +1187,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: D - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.08 + value: 0.081 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1220,63 +1245,83 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500022 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500012 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500007 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: dbaf577a8176a8a49aeee479ce6fba46, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: D objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.00042773233 + value: 0.004017817 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486796 + value: 0.39332527 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0045372443 + value: 0.044617217 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.024825737 + value: 0.25168774 + objectReference: {fileID: 0} + - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: localCenter.z + value: -0.004450299 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0045372443 + value: 0.044617217 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.024825737 + value: 0.25168774 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.00042773233 + value: 0.004017817 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486796 + value: 0.39332527 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: dbaf577a8176a8a49aeee479ce6fba46, type: 3} + propertyPath: m_Size.z + value: 0.19280231 + objectReference: {fileID: 0} + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Center.z + value: 0.091950856 + objectReference: {fileID: 0} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -1286,12 +1331,27 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300004, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300004, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[1] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!4 &2205571169709780179 stripped @@ -1307,15 +1367,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: E - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.154 + value: 0.168 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1370,78 +1425,88 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500045 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500034 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.50003 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: 6bb977d2eec33d34e9d4683d95a325da, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: E objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: -0.0008 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.00063719176 + value: 0.013720932 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486784 + value: 0.39333296 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.00048052985 + value: -0.0044507086 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0045428346 + value: 0.044603474 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.024825737 + value: 0.25170434 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0045428346 + value: 0.044603474 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.024825737 + value: 0.25170434 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.00063719176 + value: 0.013720932 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486784 + value: 0.39333296 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.0091756405 + value: 0.09203159 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: 6bb977d2eec33d34e9d4683d95a325da, type: 3} + propertyPath: m_Size.z + value: 0.1929646 + objectReference: {fileID: 0} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -1451,12 +1516,22 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300008, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300006, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!4 &1797924033834189114 stripped @@ -1472,15 +1547,10 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: A - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.381 + value: 0.3574 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1535,22 +1605,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.5001135 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500103 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500098 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: 36e555a3b848ed844a6774ec59b878d2, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: A objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.0016 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1565,48 +1645,58 @@ PrefabInstance: - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.0015831597 + value: -0.0030689326 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486796 + value: 0.39333177 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.004449112 + value: 0.044613473 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.02482574 + value: 0.25167826 + objectReference: {fileID: 0} + - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: localCenter.z + value: -0.004450515 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.004449112 + value: 0.044613473 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.02482574 + value: 0.25167826 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.0015831597 + value: -0.0030689326 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486796 + value: 0.39333177 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: 36e555a3b848ed844a6774ec59b878d2, type: 3} + propertyPath: m_Size.z + value: 0.1921254 + objectReference: {fileID: 0} + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Center.z + value: 0.09161218 + objectReference: {fileID: 0} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -1616,12 +1706,22 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300018, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300012, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!4 &440268559761748393 stripped @@ -1637,11 +1737,6 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: C - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x @@ -1700,83 +1795,108 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.5 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.5 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.5 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: c9292cc9ccb6e104e8448c8aec5603ff, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: C objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: -0.00007231342 + value: -0.0017110115 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486807 + value: 0.3933401 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0045665214 + value: 0.044600327 + objectReference: {fileID: 0} + - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: localCenter.z + value: -0.004453033 + objectReference: {fileID: 0} + - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: bounds.y + value: 0.25169295 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0045665214 + value: 0.044600327 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: -0.00007231342 + value: -0.0017110115 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486807 + value: 0.3933401 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: c9292cc9ccb6e104e8448c8aec5603ff, type: 3} - - target: {fileID: 319790547772577881, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: TouchBegin.m_PersistentCalls.m_Calls.Array.size - value: 1 + propertyPath: m_Size.y + value: 0.25169295 objectReference: {fileID: 0} - - target: {fileID: 319790547772577881, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: TouchBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Mode - value: 1 + propertyPath: m_Size.z + value: 0.19268845 objectReference: {fileID: 0} - - target: {fileID: 319790547772577881, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: TouchBegin.m_PersistentCalls.m_Calls.Array.data[0].m_CallState - value: 2 + propertyPath: m_Center.z + value: 0.09189119 objectReference: {fileID: 0} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh value: objectReference: {fileID: 102400326646059596} - - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 517167097541962485, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: m_Mesh value: - objectReference: {fileID: 2100000, guid: 25e7373942e0a7649ad2db10ff52313d, type: 2} + objectReference: {fileID: 4300002, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} - target: {fileID: 6749174556681977289, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.size @@ -1807,6 +1927,21 @@ PrefabInstance: propertyPath: OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName value: UnityEngine.Object, UnityEngine objectReference: {fileID: 0} + - target: {fileID: 319790547772577881, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: TouchBegin.m_PersistentCalls.m_Calls.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 319790547772577881, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: TouchBegin.m_PersistentCalls.m_Calls.Array.data[0].m_Mode + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 319790547772577881, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: TouchBegin.m_PersistentCalls.m_Calls.Array.data[0].m_CallState + value: 2 + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!82 &82230964513154690 stripped @@ -1828,20 +1963,15 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: FSharp - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.13 + value: 0.2417 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: -0.0046999995 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1891,22 +2021,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500068 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.500057 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500053 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: 0008aa109f6a9f34b9658d73a0c38e74, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: FSharp objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: -0.00705 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -1916,68 +2056,63 @@ PrefabInstance: - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.z - value: -0.0036 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: -0.006970583 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.034584165 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.0036412277 + value: -0.03502585 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0027752228 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.0150205735 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: -0.006970583 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.034584165 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.007595292 + value: 0.07444071 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0027752228 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.0150205735 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.02247304 + value: 0.21893312 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: 0008aa109f6a9f34b9658d73a0c38e74, type: 3} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -1987,7 +2122,12 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300012, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300000, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} + - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: debugMessage + value: + objectReference: {fileID: 102400326646059596} - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Materials.Array.size @@ -1997,12 +2137,7 @@ PrefabInstance: type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: cba91b531692f3a408f3193b95e44dc2, type: 2} - - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: debugMessage - value: - objectReference: {fileID: 102400326646059596} + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} - target: {fileID: 6749174556681977289, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: Profiles.Array.data[0].Themes.Array.data[0] @@ -2024,20 +2159,15 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: G - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.296 + value: 0.2722 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: 0 + value: -0 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -2087,22 +2217,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500091 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.50008 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500074 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: 577b302235decc047a09254a91858236, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: G objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.0016 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -2117,48 +2257,58 @@ PrefabInstance: - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: 0.0006520291 + value: -0.011567171 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.039486796 + value: 0.39333177 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.004443948 + value: 0.044613462 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.024825737 + value: 0.25167826 + objectReference: {fileID: 0} + - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: localCenter.z + value: -0.0044504628 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.004443948 + value: 0.044613462 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.024825737 + value: 0.25167826 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: 0.0006520291 + value: -0.011567171 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.039486796 + value: 0.39333177 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: 577b302235decc047a09254a91858236, type: 3} + propertyPath: m_Size.z + value: 0.19204523 + objectReference: {fileID: 0} + - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Center.z + value: 0.09157215 + objectReference: {fileID: 0} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -2168,12 +2318,22 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300014, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300010, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: debugMessage value: objectReference: {fileID: 102400326646059596} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.size + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Materials.Array.data[0] + value: + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: f47f1e79863e27c46904308902d30551, type: 3} --- !u!4 &3680713878109558137 stripped @@ -2189,20 +2349,15 @@ PrefabInstance: m_Modification: m_TransformParent: {fileID: 4326490268959450} m_Modifications: - - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_Name - value: GSharp - objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: 0.216 + value: 0.3261 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.y - value: -0.0046999995 + value: 0 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -2252,22 +2407,32 @@ PrefabInstance: - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.x - value: 15.500091 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.y - value: 15.50008 + value: 1.55 objectReference: {fileID: 0} - target: {fileID: 6066724869436565231, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalScale.z - value: 15.500074 + value: 1.55 + objectReference: {fileID: 0} + - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_audioClip + value: + objectReference: {fileID: 8300000, guid: b8c73329dfc0a344a8461642b241c30d, type: 3} + - target: {fileID: 6069707849138787997, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: m_Name + value: GSharp objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.x - value: -0.00705 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} @@ -2277,68 +2442,63 @@ PrefabInstance: - target: {fileID: 1623408358297322333, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_LocalPosition.z - value: -0.0036 + value: 0 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.x - value: -0.007093731 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.y - value: 0.03458416 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: localCenter.z - value: -0.0036412296 + value: -0.035025947 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.x - value: 0.0027708523 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 1598528672386795578, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: bounds.y - value: 0.01502057 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.x - value: -0.007093731 + value: 0.00011025418 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.y - value: 0.03458416 + value: 0.3442606 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Center.z - value: 0.007595291 + value: 0.073291294 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.x - value: 0.0027708523 + value: 0.031146815 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.y - value: 0.01502057 + value: 0.15360159 objectReference: {fileID: 0} - target: {fileID: 6113324524881885153, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Size.z - value: 0.022473041 + value: 0.21663448 objectReference: {fileID: 0} - - target: {fileID: 6132438213147574949, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: m_audioClip - value: - objectReference: {fileID: 8300000, guid: b8c73329dfc0a344a8461642b241c30d, type: 3} - target: {fileID: 8581070781098212652, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: textMesh @@ -2348,7 +2508,12 @@ PrefabInstance: type: 3} propertyPath: m_Mesh value: - objectReference: {fileID: 4300016, guid: a37785fa4a4129246a58f79132a1b6c6, type: 3} + objectReference: {fileID: 4300000, guid: bb0ccc5c35ed851498eb51db45d1a738, type: 3} + - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, + type: 3} + propertyPath: debugMessage + value: + objectReference: {fileID: 102400326646059596} - target: {fileID: 8433102568266852989, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: m_Materials.Array.size @@ -2358,12 +2523,7 @@ PrefabInstance: type: 3} propertyPath: m_Materials.Array.data[0] value: - objectReference: {fileID: 2100000, guid: cba91b531692f3a408f3193b95e44dc2, type: 2} - - target: {fileID: 6173040188683977821, guid: f47f1e79863e27c46904308902d30551, - type: 3} - propertyPath: debugMessage - value: - objectReference: {fileID: 102400326646059596} + objectReference: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} - target: {fileID: 6749174556681977289, guid: f47f1e79863e27c46904308902d30551, type: 3} propertyPath: Profiles.Array.data[0].Themes.Array.data[0] diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat b/Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat new file mode 100644 index 00000000000..2f9e8e27c69 --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat @@ -0,0 +1,160 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: PianoKeys + m_Shader: {fileID: 4800000, guid: 5bdea20278144b11916d77503ba1467a, type: 3} + m_ShaderKeywords: _DIRECTIONAL_LIGHT _HOVER_LIGHT _NORMAL_MAP _REFLECTIONS _SPECULAR_HIGHLIGHTS + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: 2000 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ChannelMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _IridescentSpectrumMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: bb3fa60902dd45d47af0ab86831f8c2c, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 2800000, guid: 6e452eb16719c234cb5b06d5f0a00834, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + - _AlbedoAlphaMode: 0 + - _AlbedoAssignedAtRuntime: 0 + - _BlendOp: 0 + - _BorderLight: 0 + - _BorderLightOpaque: 0 + - _BorderLightOpaqueAlpha: 1 + - _BorderLightReplacesAlbedo: 0 + - _BorderLightUsesHoverColor: 0 + - _BorderMinValue: 0.1 + - _BorderWidth: 0.1 + - _BumpScale: 1 + - _ClippingBorder: 0 + - _ClippingBorderWidth: 0.025 + - _ClippingBox: 0 + - _ClippingPlane: 0 + - _ClippingSphere: 0 + - _ColorWriteMask: 15 + - _CullMode: 2 + - _CustomMode: 0 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DirectionalLight: 1 + - _DstBlend: 0 + - _EdgeSmoothingValue: 0.002 + - _EnableChannelMap: 0 + - _EnableEmission: 0 + - _EnableHoverColorOverride: 0 + - _EnableLocalSpaceTriplanarMapping: 0 + - _EnableNormalMap: 1 + - _EnableTriplanarMapping: 0 + - _EnvironmentColorIntensity: 0.5 + - _EnvironmentColorThreshold: 1.5 + - _EnvironmentColoring: 0 + - _FadeBeginDistance: 0.85 + - _FadeCompleteDistance: 0.5 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _HoverLight: 1 + - _InnerGlow: 0 + - _InnerGlowPower: 4 + - _InstancedColor: 0 + - _Iridescence: 0 + - _IridescenceAngle: -0.78 + - _IridescenceIntensity: 0.5 + - _IridescenceThreshold: 0.05 + - _Metallic: 0 + - _Mode: 0 + - _NearLightFade: 0 + - _NearPlaneFade: 0 + - _NormalMapScale: 1 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _ProximityLight: 0 + - _ProximityLightTwoSided: 0 + - _Reflections: 1 + - _Refraction: 0 + - _RefractiveIndex: 0 + - _RenderQueueOverride: -1 + - _RimLight: 0 + - _RimPower: 0.25 + - _RoundCornerMargin: 0.01 + - _RoundCornerRadius: 0.25 + - _RoundCorners: 0 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SphericalHarmonics: 0 + - _SrcBlend: 1 + - _Stencil: 0 + - _StencilComparison: 0 + - _StencilOperation: 0 + - _StencilReference: 0 + - _TriplanarMappingBlendSharpness: 4 + - _UVSec: 0 + - _VertexColors: 0 + - _ZTest: 4 + - _ZWrite: 1 + m_Colors: + - _ClippingBorderColor: {r: 1, g: 0.2, b: 0, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _EmissiveColor: {r: 0, g: 0, b: 0, a: 1} + - _EnvironmentColorX: {r: 1, g: 0, b: 0, a: 1} + - _EnvironmentColorY: {r: 0, g: 1, b: 0, a: 1} + - _EnvironmentColorZ: {r: 0, g: 0, b: 1, a: 1} + - _HoverColorOverride: {r: 1, g: 1, b: 1, a: 1} + - _InnerGlowColor: {r: 1, g: 1, b: 1, a: 0.75} + - _RimColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat.meta b/Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat.meta new file mode 100644 index 00000000000..c10c44b7982 --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/StandardAssets/Materials/PianoKeys.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 814f847a105eb454d8c8bc27047dcb9c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx b/Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx new file mode 100644 index 0000000000000000000000000000000000000000..f643a5d0f2e92bbbe4f5f15377d6ffdf129e3977 GIT binary patch literal 156256 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 N=m7rS>p=~q{%Q@r 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 literal 0 HcmV?d00001 diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx.meta b/Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx.meta new file mode 100644 index 00000000000..2bd45ca431c --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/StandardAssets/Models/PianoKeys.fbx.meta @@ -0,0 +1,152 @@ +fileFormatVersion: 2 +guid: bb0ccc5c35ed851498eb51db45d1a738 +ModelImporter: + serializedVersion: 23 + fileIDToRecycleName: + 100000: PianoKey-A + 100002: PianoKey-B + 100004: PianoKey-C + 100006: PianoKey-D + 100008: PianoKey-E + 100010: PianoKey-F + 100012: PianoKey-G + 100014: PianoKeyBlack + 100016: //RootNode + 100018: Velvet + 400000: PianoKey-A + 400002: PianoKey-B + 400004: PianoKey-C + 400006: PianoKey-D + 400008: PianoKey-E + 400010: PianoKey-F + 400012: PianoKey-G + 400014: PianoKeyBlack + 400016: //RootNode + 400018: Velvet + 2100000: PianoOctave + 2100002: No Name + 2300000: PianoKey-A + 2300002: PianoKey-B + 2300004: PianoKey-C + 2300006: PianoKey-D + 2300008: PianoKey-E + 2300010: PianoKey-F + 2300012: PianoKey-G + 2300014: PianoKeyBlack + 2300016: Velvet + 3300000: PianoKey-A + 3300002: PianoKey-B + 3300004: PianoKey-C + 3300006: PianoKey-D + 3300008: PianoKey-E + 3300010: PianoKey-F + 3300012: PianoKey-G + 3300014: PianoKeyBlack + 3300016: Velvet + 4300000: PianoKeyBlack + 4300002: PianoKey-C + 4300004: PianoKey-D + 4300006: PianoKey-E + 4300008: PianoKey-F + 4300010: PianoKey-G + 4300012: PianoKey-A + 4300014: PianoKey-B + 4300016: Velvet + 7400000: Take 001 + 9500000: //RootNode + externalObjects: + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: No Name + second: {fileID: 2100000, guid: c4a1b7475a654dd0acaa0cfdfba2e20c, type: 2} + - first: + type: UnityEngine:Material + assembly: UnityEngine.CoreModule + name: PianoOctave + second: {fileID: 2100000, guid: 814f847a105eb454d8c8bc27047dcb9c, type: 2} + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + rigImportErrors: + rigImportWarnings: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 0.1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + importVisibility: 0 + importBlendShapes: 0 + importCameras: 0 + importLights: 0 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + preserveHierarchy: 0 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 0 + previousCalculatedGlobalScale: 0.01 + hasPreviousCalculatedGlobalScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + importAnimation: 0 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 1 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png b/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png new file mode 100644 index 0000000000000000000000000000000000000000..ff14c511146e1b42f9f3d5bf366d82b1dfde2de3 GIT binary patch literal 13112 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 HC;Wc^UZ%yK literal 0 HcmV?d00001 diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png.meta b/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png.meta new file mode 100644 index 00000000000..e341ba48c3d --- /dev/null +++ b/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_DIF.png.meta @@ -0,0 +1,88 @@ +fileFormatVersion: 2 +guid: bb3fa60902dd45d47af0ab86831f8c2c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: -1 + wrapV: -1 + wrapW: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_NM.png b/Assets/MixedRealityToolkit.Examples/StandardAssets/Textures/PianoKeys_NM.png new file mode 100644 index 0000000000000000000000000000000000000000..3379fc50994d6b70d86d96294e9338afbea42963 GIT binary patch literal 267353 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 F`VU>Llw<$^ literal 0 HcmV?d00001 diff --git a/External/ReadMeImages/Input/DictationHandler.png b/External/ReadMeImages/Input/DictationHandler.png new file mode 100644 index 0000000000000000000000000000000000000000..ee6b9fa55183e4c75148504e858309db90cb19aa GIT binary patch literal 60658 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 Date: Fri, 12 Apr 2019 14:54:30 +0100 Subject: [PATCH 084/183] Remove all pointer data on input module deactivation --- .../InputSystem/MixedRealityInputModule.cs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputModule.cs b/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputModule.cs index 7a53b08ea9e..c5088aad063 100644 --- a/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputModule.cs +++ b/Assets/MixedRealityToolkit.Services/InputSystem/MixedRealityInputModule.cs @@ -77,10 +77,11 @@ public override void DeactivateModule() { MixedRealityToolkit.InputSystem.Unregister(gameObject); - foreach (IMixedRealityInputSource inputSource in MixedRealityToolkit.InputSystem.DetectedInputSources) + foreach (var p in pointerDataToUpdate) { - OnSourceLost(inputSource); + pointerDataToRemove.Add(p.Value); } + pointerDataToUpdate.Clear(); // Process once more to handle pointer removals. Process(); @@ -281,11 +282,8 @@ void OnSourceDetected(IMixedRealityInputSource inputSource) void IMixedRealitySourceStateHandler.OnSourceLost(SourceStateEventData eventData) { - OnSourceLost(eventData.InputSource); - } + var inputSource = eventData.InputSource; - void OnSourceLost(IMixedRealityInputSource inputSource) - { for (int i = 0; i < inputSource.Pointers.Length; i++) { var pointer = inputSource.Pointers[i]; From e07a432be9627b66f6987b5b669a877dc4279e2d Mon Sep 17 00:00:00 2001 From: Lars Simkins Date: Fri, 12 Apr 2019 09:05:06 -0700 Subject: [PATCH 085/183] Update WindowsMixedRealityDeviceManager.cs --- .../WindowsMixedRealityDeviceManager.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityDeviceManager.cs b/Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityDeviceManager.cs index 7de4593857e..a28831299d0 100644 --- a/Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityDeviceManager.cs +++ b/Assets/MixedRealityToolkit.Providers/WindowsMixedReality/WindowsMixedRealityDeviceManager.cs @@ -42,7 +42,11 @@ public WindowsMixedRealityDeviceManager( #if UNITY_WSA - public const int MaxInteractionSourceState = 1000; + ///