From d3bcdd1edec2caede13b01fbcbfcc88ade79e455 Mon Sep 17 00:00:00 2001 From: Jared Finder Date: Tue, 15 Sep 2015 11:18:33 -0700 Subject: [PATCH 1/2] release-weyl --- .../Plugins/Android/AndroidManifest.xml.meta | 2 +- .../Assets/Plugins/Android/UnityUxHelper.meta | 2 +- .../UnityUxHelper/AndroidManifest.xml.meta | 2 +- .../Plugins/Android/UnityUxHelper/bin.meta | 2 +- .../bin/AndroidManifest.xml.meta | 2 +- .../Android/UnityUxHelper/bin/R.txt.meta | 2 +- .../UnityUxHelper/bin/unityuxhelper.jar.meta | 2 +- .../Plugins/Android/UnityUxHelper/libs.meta | 2 +- .../libs/android-support-v4.jar.meta | 2 +- .../UnityUxHelper/project.properties.meta | 2 +- .../Plugins/Android/UnityUxHelper/res.meta | 2 +- .../UnityUxHelper/res/drawable-hdpi.meta | 2 +- .../res/drawable-hdpi/ic_launcher.png.meta | 2 +- .../UnityUxHelper/res/drawable-mdpi.meta | 2 +- .../res/drawable-mdpi/ic_launcher.png.meta | 2 +- .../UnityUxHelper/res/drawable-xhdpi.meta | 2 +- .../res/drawable-xhdpi/ic_launcher.png.meta | 2 +- .../Android/UnityUxHelper/res/layout.meta | 2 +- .../res/layout/tango_ux_exceptions.xml.meta | 2 +- .../Android/UnityUxHelper/res/values-v11.meta | 2 +- .../res/values-v11/styles.xml.meta | 2 +- .../Android/UnityUxHelper/res/values-v14.meta | 2 +- .../res/values-v14/styles.xml.meta | 2 +- .../Android/UnityUxHelper/res/values.meta | 2 +- .../UnityUxHelper/res/values/strings.xml.meta | 2 +- .../UnityUxHelper/res/values/styles.xml.meta | 2 +- .../Plugins/Android/google-unity-wrapper.meta | 2 +- .../AndroidManifest.xml.meta | 2 +- .../Android/google-unity-wrapper/bin.meta | 2 +- .../bin/AndroidManifest.xml.meta | 2 +- .../google-unity-wrapper/bin/classes.meta | 2 +- .../google-unity-wrapper/bin/classes/com.meta | 2 +- .../bin/classes/com/google.meta | 2 +- .../bin/classes/com/google/unity.meta | 2 +- .../com/google/unity/BuildConfig.class.meta | 2 +- .../unity/GoogleUnityActivity$1.class.meta | 2 +- ...tivity$AndroidLifecycleListener.class.meta | 2 +- .../google/unity/GoogleUnityActivity.class | Bin 5806 -> 5941 bytes .../unity/GoogleUnityActivity.class.meta | 2 +- .../bin/google-unity-wrapper.jar | Bin 4528 -> 5766 bytes .../bin/google-unity-wrapper.jar.meta | 2 +- .../project.properties.meta | 2 +- .../Plugins/Android/tango-java-lib.meta | 2 +- .../tango-java-lib/AndroidManifest.xml.meta | 2 +- .../Plugins/Android/tango-java-lib/bin.meta | 2 +- .../bin/AndroidManifest.xml.meta | 2 +- .../Android/tango-java-lib/bin/classes.meta | 2 +- .../tango-java-lib/bin/classes/com.meta | 2 +- .../bin/classes/com/google.meta | 2 +- .../bin/classes/com/google/atap.meta | 2 +- .../bin/classes/com/google/atap/tango.meta | 2 +- .../atap/tango/TangoJNINative.class.meta | 2 +- .../com/google/atap/tango/package.html.meta | 2 +- .../com/google/atap/tangohelperlib.meta | 2 +- .../tangohelperlib/BuildConfig.class.meta | 2 +- .../classes/com/google/atap/tangoservice.meta | 2 +- .../Tango$OnTangoUpdateListener.class.meta | 2 +- .../google/atap/tangoservice/Tango.class.meta | 2 +- .../TangoAreaDescriptionMetaData$1.class.meta | 2 +- .../TangoAreaDescriptionMetaData.class.meta | 2 +- .../TangoCameraIntrinsics$1.class.meta | 2 +- .../TangoCameraIntrinsics.class.meta | 2 +- ...TangoCameraPreview$MainRenderer.class.meta | 2 +- .../TangoCameraPreview.class.meta | 2 +- .../tangoservice/TangoConfig$1.class.meta | 2 +- .../atap/tangoservice/TangoConfig.class.meta | 2 +- .../TangoCoordinateFramePair$1.class.meta | 2 +- .../TangoCoordinateFramePair.class.meta | 2 +- .../TangoErrorException.class.meta | 2 +- .../atap/tangoservice/TangoEvent$1.class.meta | 2 +- .../atap/tangoservice/TangoEvent.class.meta | 2 +- .../tangoservice/TangoException.class.meta | 2 +- .../TangoInvalidException.class.meta | 2 +- .../TangoOutOfDateException.class.meta | 2 +- .../tangoservice/TangoPoseData$1.class.meta | 2 +- .../tangoservice/TangoPoseData.class.meta | 2 +- .../TangoTextureCameraPreview.class.meta | 2 +- .../tangoservice/TangoXyzIjData$1.class.meta | 2 +- .../tangoservice/TangoXyzIjData.class.meta | 2 +- .../tangoservice/TextureRenderer.class.meta | 2 +- .../atap/tangoservice/experimental.meta | 2 +- .../experimental/TangoMesh.class.meta | 2 +- .../experimental/TangoMeshVector$1.class.meta | 2 +- .../experimental/TangoMeshVector.class.meta | 2 +- ...angoMeshVectorAvailableListener.class.meta | 2 +- .../experimental/TangoMesher.class.meta | 2 +- .../experimental/package-info.class.meta | 2 +- .../atap/tangoservice/package-info.class.meta | 2 +- .../bin/tango-java-lib.jar.meta | 2 +- .../tango-java-lib/project.properties.meta | 2 +- .../Plugins/Android/tango-unity-helper.meta | 2 +- .../AndroidManifest.xml.meta | 2 +- .../Android/tango-unity-helper/bin.meta | 2 +- .../bin/AndroidManifest.xml.meta | 2 +- .../tango-unity-helper/bin/classes.meta | 2 +- .../tango-unity-helper/bin/classes/com.meta | 2 +- .../bin/classes/com/projecttango.meta | 2 +- .../bin/classes/com/projecttango/unity.meta | 2 +- .../projecttango/unity/BuildConfig.class.meta | 2 +- .../unity/TangoUnityHelper.class.meta | 2 +- .../bin/tango-unity-helper.jar.meta | 2 +- .../project.properties.meta | 2 +- .../Android/tango-ux-support-library.meta | 2 +- .../AndroidManifest.xml.meta | 2 +- .../Android/tango-ux-support-library/bin.meta | 2 +- .../bin/AndroidManifest.xml | 2 +- .../bin/AndroidManifest.xml.meta | 2 +- .../tango-ux-support-library/bin/R.txt | 81 ++- .../tango-ux-support-library/bin/R.txt.meta | 2 +- .../bin/tango-ux-support-library.jar | Bin 72717 -> 71962 bytes .../bin/tango-ux-support-library.jar.meta | 2 +- .../project.properties.meta | 2 +- .../Android/tango-ux-support-library/res.meta | 2 +- .../res/drawable-xhdpi.meta | 2 +- .../exception_container_shadow.png.meta | 2 +- .../hold_steady_bubble_level_err.png.meta | 2 +- .../hold_steady_bubble_level_ok.png.meta | 2 +- .../hold_steady_frame_err.png.meta | 2 +- .../hold_steady_frame_ok.png.meta | 2 +- .../hold_steady_trace_left_1.png.meta | 2 +- .../hold_steady_trace_left_2.png.meta | 2 +- .../hold_steady_trace_right_1.png.meta | 2 +- .../hold_steady_trace_right_2.png.meta | 2 +- .../ic_exception_i_am_dizzy.png.meta | 2 +- .../ic_exception_i_am_lost.png.meta | 2 +- .../ic_exception_i_cant_see.png.meta | 2 +- .../ic_exception_system.png.meta | 2 +- .../res/drawable-xhdpi/splash_logo.png.meta | 2 +- .../tango-ux-support-library/res/layout.meta | 2 +- .../res/layout/component_hold_steady.xml.meta | 2 +- .../res/layout/exception_component.xml.meta | 2 +- .../res/layout/layout_connection.xml | 7 - .../res/layout/layout_connection.xml.meta | 2 +- .../res/layout/layout_splash.xml.meta | 2 +- .../res/layout/layout_tango_ux.xml.meta | 2 +- .../tango-ux-support-library/res/values.meta | 2 +- .../res/values/colors.xml.meta | 2 +- .../res/values/dimens.xml.meta | 2 +- .../res/values/strings.xml | 3 +- .../res/values/strings.xml.meta | 2 +- .../res/values/styles.xml.meta | 2 +- UnityExamples/Assets/Scenes/Materials.meta | 9 - .../Assets/Scenes/Materials/pCylinder1Mat.mat | 138 ---- .../Common/Textures/ProjectTango_Logo.png | Bin 262185 -> 33904 bytes .../Materials/pin_shadow.mat | 30 + .../Materials/pin_shadow.mat.meta} | 6 +- .../Prefabs/Location Marker.prefab | 80 ++- .../Scripts/ARScreen.cs | 64 +- .../Scripts/AugmentedRealityGUIController.cs | 17 +- .../Textures/pin_shadow.png | Bin 0 -> 158070 bytes .../Textures/pin_shadow.png.meta | 55 ++ UnityExamples/Assets/TangoSDK/Core.meta | 2 +- .../Assets/TangoSDK/Core/Scripts.meta | 2 +- .../Assets/TangoSDK/Core/Scripts/Common.meta | 2 +- .../TangoSDK/Core/Scripts/Common/Common.cs | 182 +++-- .../Core/Scripts/Common/OrientationManager.cs | 94 +-- .../Core/Scripts/Common/TangoAndroidHelper.cs | 99 +-- .../Core/Scripts/Common/TangoEnums.cs | 277 ++++++-- .../Core/Scripts/Common/TangoTypes.cs | 428 ++++++++---- .../TangoSDK/Core/Scripts/Interfaces.meta | 2 +- .../IExperimentalTangoVideoOverlay.cs | 42 +- .../Core/Scripts/Interfaces/ITangoDepth.cs | 44 +- .../Core/Scripts/Interfaces/ITangoEvent.cs | 42 +- .../Core/Scripts/Interfaces/ITangoPose.cs | 45 +- .../Scripts/Interfaces/ITangoVideoOverlay.cs | 43 +- .../TangoSDK/Core/Scripts/Listeners.meta | 2 +- .../Core/Scripts/Listeners/DepthListener.cs | 82 +-- .../Core/Scripts/Listeners/PoseListener.cs | 284 ++++---- .../Scripts/Listeners/TangoEventListener.cs | 104 +-- .../Scripts/Listeners/VideoOverlayListener.cs | 201 +++--- .../TangoSDK/Core/Scripts/TangoWrappers.meta | 2 +- .../Scripts/TangoWrappers/DepthProvider.cs | 58 +- .../Scripts/TangoWrappers/PoseProvider.cs | 490 +++++++++----- .../Scripts/TangoWrappers/TangoApplication.cs | 632 +++++++++++------- .../Core/Scripts/TangoWrappers/TangoConfig.cs | 403 ++++++----- .../Core/Scripts/TangoWrappers/TangoEvents.cs | 59 +- .../TangoWrappers/VideoOverlayProvider.cs | 275 +++++--- UnityExamples/Assets/TangoSDK/Core/Tango.dat | 2 +- .../Assets/TangoSDK/Core/Tango.dat.meta | 2 +- UnityExamples/Assets/TangoSDK/Editor.meta | 2 +- .../Assets/TangoSDK/Editor/TangoInspector.cs | 57 +- .../Assets/TangoSDK/Editor/TangoMenu.cs | 54 +- .../Assets/TangoSDK/Editor/TangoSDKAbout.cs | 120 ++-- UnityExamples/Assets/TangoSDK/TangoUX.meta | 2 +- .../Assets/TangoSDK/TangoUX/Scripts.meta | 2 +- .../TangoSDK/TangoUX/Scripts/Common.meta | 2 +- .../TangoSDK/TangoUX/Scripts/Interfaces.meta | 2 +- .../TangoSDK/TangoUX/Scripts/Listeners.meta | 2 +- .../ProjectSettings/ProjectSettings.asset | 4 +- 189 files changed, 2983 insertions(+), 1924 deletions(-) delete mode 100644 UnityExamples/Assets/Scenes/Materials.meta delete mode 100644 UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat mode change 100644 => 100755 UnityExamples/Assets/TangoExamples/Common/Textures/ProjectTango_Logo.png create mode 100644 UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat rename UnityExamples/Assets/{Scenes/Materials/pCylinder1Mat.mat.meta => TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat.meta} (55%) create mode 100644 UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png create mode 100644 UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png.meta diff --git a/UnityExamples/Assets/Plugins/Android/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/AndroidManifest.xml.meta index f40aea24..3119de23 100644 --- a/UnityExamples/Assets/Plugins/Android/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2393f1c60f6984a86840c4b35f7ed04a +guid: aee9217c7e3ab47afa63d020b46d12fd TextScriptImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper.meta index 9c8d8723..cb8ffc22 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: bbfa75534417f43268e9ae179792ed9f folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro PluginImporter: serializedVersion: 1 diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/AndroidManifest.xml.meta index cc423ec0..230bd227 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 96be092a8f1e949deb5fbf3756cfc9c9 +guid: 6c6d3010e866543088a365055cc88f6a DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin.meta index 3afc8e31..95b77b5b 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 25c2388b544974aecb4c6922931094ed folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/AndroidManifest.xml.meta index e29969d6..00359688 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e95dee7639f3f475b87cb131a2810147 +guid: 6d555dad2c4be4e1292a76b9364cd87d DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/R.txt.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/R.txt.meta index c804c35a..56820b89 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/R.txt.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/R.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 881563345bd264b11881bc40daaf9ae8 +guid: 2eb6cda69656641d0b825ad3dff6febe DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/unityuxhelper.jar.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/unityuxhelper.jar.meta index e700d13b..71325c48 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/unityuxhelper.jar.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/bin/unityuxhelper.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d197180e73e9c44578a8b57b31f30114 +guid: 4e6e2efeeb0d9478aa95ee05b198dba3 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs.meta index 2494b8a2..118e6721 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: c6d1ab5e100fd4c1cbaa8c3979bb0490 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs/android-support-v4.jar.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs/android-support-v4.jar.meta index 69e40407..5193ddd6 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs/android-support-v4.jar.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/libs/android-support-v4.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e478d62c80bdc4eb7a4537395e43d2d4 +guid: 55f0632b08862498c85f394869a118fb DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/project.properties.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/project.properties.meta index c177d76e..6eb8d24b 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/project.properties.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/project.properties.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6ee62fba82b8f46888ed4e238b009f69 +guid: 9cc1c0f2dcce240729e26be670e4e973 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res.meta index 61e263d4..b8e5a18f 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: bcf361d8b6fc14039888fd80ff8e611d folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi.meta index 648f4039..f061f0b2 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 1e24a1c4d95054282911e1d54cacea4f folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi/ic_launcher.png.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi/ic_launcher.png.meta index f33217f5..c862efa3 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi/ic_launcher.png.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-hdpi/ic_launcher.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b4f3404446af948898ae812b258fb9f4 +guid: d20c596774a4c4dbf9a080ed10804b04 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi.meta index 3be90909..10a4dda5 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 653b9f99ddb5a48cbb9c2ab03338c35e folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi/ic_launcher.png.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi/ic_launcher.png.meta index f43e727a..4289b11b 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi/ic_launcher.png.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-mdpi/ic_launcher.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1637279f49f194c5f8e590cf47b17b73 +guid: 3e694bf42b6bd47798685767bac0b978 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi.meta index 4482490a..1df6b493 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: c67d2ba4c8c344c3bbdf42616dae2628 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi/ic_launcher.png.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi/ic_launcher.png.meta index 5b973ea4..dfc31de0 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi/ic_launcher.png.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/drawable-xhdpi/ic_launcher.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b8f60f4d776744ac9a2260fd600cbd9e +guid: 4a26853b5cf62487a8f1f4e1b07663ad DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout.meta index 2f00bed5..3aa149ed 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: f4c21d0246fba44a48a91408f1603e1a folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout/tango_ux_exceptions.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout/tango_ux_exceptions.xml.meta index 77f21000..f397902e 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout/tango_ux_exceptions.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/layout/tango_ux_exceptions.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: da4df9c91f687403ba832060664e4b26 +guid: 6f33d20cd90f7446d9cbd768d5e923ab DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11.meta index 66c432dd..fee0b0e2 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 6b0817b96a4f84df296fec4387514b1a folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11/styles.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11/styles.xml.meta index 88b82f4e..2f77c63b 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11/styles.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v11/styles.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8e3a426843d0645578118da081fd63bf +guid: cfc805e2962624383a66d588b45cfc2d DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14.meta index d3158658..18e07c04 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 32380f61c7e734ba2aabb538325cd629 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14/styles.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14/styles.xml.meta index ac9e546a..fcdd2a2d 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14/styles.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values-v14/styles.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c9114e3c1745f49f488faa8d96d70ce2 +guid: 619297ad98cd84bf19a2842b567a5802 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values.meta index 8595ae5f..763d6f62 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 252ca1f4642954898849d1ee0108d7fc folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/strings.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/strings.xml.meta index c91135b7..261c17ce 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/strings.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/strings.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 65851139a950a4c2fa6e7c217d5bb815 +guid: d2806486e46164c02bf6785d73ccf778 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/styles.xml.meta b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/styles.xml.meta index 147b8eba..4a7b050e 100644 --- a/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/styles.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/UnityUxHelper/res/values/styles.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4e88b9e176b794d97bf91c9f8f60591e +guid: e5c0984fef11742debe9d5c919b78dbf DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper.meta index 4c45c0a9..db983567 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 9cc69a99be59f444c828de9c33f550d0 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro PluginImporter: serializedVersion: 1 diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/AndroidManifest.xml.meta index 2a48edc3..d2283f18 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1b2d5532425fe4f8789f276b0b6e40c1 +guid: 010949d0386834cdf8c1dbdcda1308f1 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin.meta index f2074317..c6d9ab07 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 82e9828a3b16447768339ef7f7b16f84 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/AndroidManifest.xml.meta index b3f1f5e9..ee58aec6 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 65d80c45f7ce943a6a648244a09e5037 +guid: e6c8d012020104b34bf842c47cbe2374 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes.meta index d8c7c78c..847633e8 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 454c743945f934a0ab9888c983bb13a5 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com.meta index 3f74b3e8..33e4a019 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: ea2c7df88ccd945f4bbacfc4f12a5d11 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google.meta index 73f647a5..11378df7 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 428eb9ee5870d45608287202591e1a5c folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity.meta index 7c4f3ec2..1e6c35eb 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 90a02237508e0480fa303a251d339c5a folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/BuildConfig.class.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/BuildConfig.class.meta index 9a319017..bf922a7b 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/BuildConfig.class.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/BuildConfig.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bf953503dfbe74063b4fb432a26fc179 +guid: 785445ff5344747cb83bd4d094ddf6d9 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$1.class.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$1.class.meta index 2600c45e..a77cff26 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 40c864be56b7949f9a73a5d2ff611ace +guid: fe9fd0a42ef3140b792d5d5f8f0b9d3a DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$AndroidLifecycleListener.class.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$AndroidLifecycleListener.class.meta index 487e3722..4f46780d 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$AndroidLifecycleListener.class.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity$AndroidLifecycleListener.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9528953aa35b2437b8754b41514827a6 +guid: e431a293812bc429abbc5928dd3731a3 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity.class b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/classes/com/google/unity/GoogleUnityActivity.class index 301b606031f77c29089df7b470ef0e13c0058301..1842287e42b13d1470ce213182f2ca6836888b80 100644 GIT binary patch delta 1503 zcma)+Yitx%6vzL!-JR{s-fp+sZYS-oKmrKtQn5x8{a^!rF+~z+Of)7CY}ySpkX?{% z0*VxbM5WkTuYgp6@YIBc+!BtOAQ(Ul3VvFtH#{PFCcBs4b@!C#_UFcNRdSpln-5zua_^aYI&m?MV z#?>WjXOEkdm?4oyM(xlS`QMZ1K`#ULN$f|jddQgNKPqtuhuL{t;sg$>F5?O99L{_2 zzVdrZhW6nD0ewa+IiWgPn}`c!j~-LO@((3G!pEw@Tc%xgm&P(;qM*(XpjLR~j#N(o+@!?4uP(K*t;ukafSU zL?MFo#P1j4dE&6Oh%8ncsK;Vz9$QN=4K8~BGL}2p%1Og2tv(X%M#JD#^C&^mN>yab zZl%)j3UUY{_&^=le1f|O7K((zr5U^$=|aOXIAU)5>y5X&y*pO(cW22Dag|cK!lo zSqd+fsbPWOWSSu-cDfTArl9q9wTx-#!3F`Fw{f82BCFfWDSHF4R!}P%skA259|%{v zcmn@}y7gbw?Ki1!52mgp>MEkHCh8iZwh(nlSsU6N<|EEI8Id$PqIrEQ?Zt& zVx1aaU{2U$&4A!(cA_Ub(Y{DDgLipj(KPlB5bQ2(ru}U}F1D)cL^*(iR(ELpZ=-}V zIKq@r8pj4x+KAFlln$m$Jc&~lg)V?Ynd;PHQVD0>t@gQ*eW8tu`=re}V;*+9sBW6F zH1g?=Ru-Ctm+&cJDlLu3C-XCWuKEhi@(UbiUlNVnz+P)=hgrw3-m_>RQmop*OTebo5kUg=bQ!BF-!{HTT(m3e={&o>F`a$ZxN delta 1444 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 delta 2705 zcmV;C3U2j=EwCdEP)h>@6aWYS2mlUd1Cb3x1^@^E4rT+fS4sp100;mMW&^XQ1XTeB z00;mMW&@J~20njy6lWcNC)w;~muW}>B!q+(gr>=cbRiV1grg)JT^dp(kVt67$?haO zu$ftQXA|PlL#tw|wTDz`tpZkih+10Ml%iOzV#WKa*4ujD*Yo&?J|6G)&184kYX-|MTow0B!iY4H0-g^W_hzyT(6JV#t2s* zJPPJ%W;AIT(U6u%gt|4p(I?(3P=}?$wzxK?ClxH{60j0)c{G%ePeXYU?F#CK*E@J! z#-JVq!WFH8MP?X zkQEv=qC+16YJB zeOSyu7J03r5mzagVQc&Jo^*0hi_l_o(}hUxi|eg;R8KDM)Z+00EwZnT^h=de_ynV% ziWV%P$0^<35z~iV-o3*5)ha^bouBVES;=9|_Frd~=(cT`LrmP9ycp%OP>$8CfS3{0 z_oQqFJ+)^*qxrSC&WCjhswQcuSdR_`0b+MpR$SLincuzIh!%=#=1{1|PSRj|zsTDn zY*4Wgo1EBeife*MSyMRdB>#F9VQf)Q!IyuXj&Dxc*EAKWd!e%wT`IPsn?2wb%qA<6 zPRZKtXW^!_5j`3<>53WAdu&;Kvx>N_;4;3A?Axj(-145Cidmz1z1Jo3;KL49{Iq&{ zSpYrg6*=oua9z{%x}+^4toAP1er&*D{9 z1&{z!y5XSZ)VJxF2wr zFx*_uor(ZMWl(OPKGv(zuUgG!2gQo)f*sSV{;9V?XP~`9g%9NnU_6UlX_loic8Lq$J|pc%quEF$I>nfdWZuOiZlz zs(7E+XFdDVhAjv^sN#@#;IqtaS~?{+2Z6Nh`TkPo-EhqOXgTubefn zvpEWil=qW(%7+t7$VBARwh<3?S!|f6agvpy7jKp#_Bo||!xIc^cxbT9L1QSLU&~Bw7VT<8@}4vDS|q|+Tf9`khH386x!t44=~~RGpR1SwHHXdP-NsAZ z|BFD2aX$gsreO7@LgpWwa!AYNW_^i{=YM+ydaQIZqHi+9p=p0^5xuKLi!+&Fli`

`Edga4f%;K-=2w*nmNLYTCxXR~wSHg97(38R3zF^BZ z8iE;Iu4M3vV0C{}2F>EmmqBar43_SqiMCT%5j=?%8N9N(ol0vCqf*FJdBA@ebOxQb zo1Nu`K0&EeQd&vYz%o*6qbJvp+6vV1=|WtKR(=4i!76M(J2rFO!n^G})c0eZbfLzf z>AE1UZp1b^@oMRq@-HeVR9NEr)kh;Dm{q~8B;K zt!Iz^_oaVeUD+Ha<3KLhL0K{yOJ{&?L})*XdRlMfL9Z1<40DvQ3J8ZJ9 zcjJwClVsnGTXuWrR{GDO|DogR9Kz7cQ6Tj=3jqTa!0URs!gw^Gh0lT!iDzfteQ zpmIgYKV@v*hPS&hSW8ra>kYP?!ogf>0`jRv)I@(?^1WGZUffBxBKSNexmX8e;{f%+ z`i9nVyo)(Gcn&kg!Uw1EZVz(7sg|NPDW*wqgdg+=q@kb#ku_A0`(*yb)&0CGkyr1b z!==)>QYiDNawyx3Yu%Dio$7yp4Rg4#SbJQo277|j)`NMu4`fpkz$samia0X4 zcw1b&3NgQ)5o}vBc(yR^M@af8N6@i6+=_oJZUsJtvl5r*p-H%$9-k4o^%*>0i2E3E zA1Ce;Q{bM%7bGrEBrfhvE^aMpo@ZODF6FNu7Y=;;cs9x%Y$VgPxr>=nsGK zBNudy8xwyv76qWs=XswG`XYWT!~2uzL%nb@sLFEu6hCvJuFMuP~&f2|Nj6`O9u#kEX#G|2>=uTt`-0QP)h*<6aW+e2mlBG4rT+BuoFNA00;mM zW&@M<6I2EO2mlUd1Cvk`YY_kl01jpYM}92Jb>s;E0In93%oIQr1qJ{B000C41ORCP L001!%00000@xBs7 diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/google-unity-wrapper.jar.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/google-unity-wrapper.jar.meta index be20c97b..496c7b92 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/google-unity-wrapper.jar.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/bin/google-unity-wrapper.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f1483cc18315e4e8d8b6b090fc49aa85 +guid: d3fe9f572eca84f76a60dc5b4998feb8 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/project.properties.meta b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/project.properties.meta index f00a5a80..bcf45f17 100644 --- a/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/project.properties.meta +++ b/UnityExamples/Assets/Plugins/Android/google-unity-wrapper/project.properties.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: aec16ffd81f5d427cbc3310bff0f741c +guid: c782a962409ae409db729f0cb83a0a71 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib.meta index dfe0eadd..eb38f64d 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 00eaa1aad644d429c9958627e61314a8 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro PluginImporter: serializedVersion: 1 diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/AndroidManifest.xml.meta index fdf70ef6..3ca59245 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d5b7894f472184d69a7ee0ec0268374c +guid: c76e5ec84619b49c6b8ec794dc217a47 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin.meta index fabe20bb..2027276c 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 5abcd22b5d1924911a6fae133ad45259 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/AndroidManifest.xml.meta index 55fcaf18..f15ab991 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b1c7735ba96a54f998a4007a1f75ca54 +guid: 8124236e17d3c4b6fad5063b4934f375 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes.meta index 1e3450e0..a83647f9 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 9f48ceeaedcdd4ed6a129398670afb0a folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com.meta index fce9ee7c..d8d0153b 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 182695de821454fd6921c64666cf1af3 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google.meta index 7f456090..303ff4f7 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 15246131f5b974cf2b9d14d2ec46a8da folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap.meta index dd722910..777b53d0 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: d197c0d282e174063b125216c6a22404 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango.meta index 65c2755f..02c05918 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 5bef54d15b8424c17b3bb533d11b41b1 folderAsset: yes -timeCreated: 1440434027 +timeCreated: 1441729897 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/TangoJNINative.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/TangoJNINative.class.meta index 2aefedf3..2da5d03e 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/TangoJNINative.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/TangoJNINative.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2490437add03d40a7a0c984bc54056f6 +guid: 97cd2e33ae0d443c18d49f57106cd23c DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/package.html.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/package.html.meta index 42b40f38..18ceee92 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/package.html.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tango/package.html.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1eec34b98b7cf4387a20757c77e3c831 +guid: 1dc6954c7cdf342b48bce1baa97aa58d DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib.meta index 92894c0c..1b4ee7ca 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: afcff3dda4cde4f24868b9249d0e0afe folderAsset: yes -timeCreated: 1440434027 +timeCreated: 1441729897 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib/BuildConfig.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib/BuildConfig.class.meta index 619da901..c75d7199 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib/BuildConfig.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangohelperlib/BuildConfig.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bae8ed9f3926b4d6a907aae2969596e6 +guid: e8090888be7514efe892f2b6f1adc538 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice.meta index c7dd1ce3..013dd7bd 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 42dc9c9efcbc3474887eb565bc4d4ba7 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729897 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango$OnTangoUpdateListener.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango$OnTangoUpdateListener.class.meta index e465876f..51dda841 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango$OnTangoUpdateListener.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango$OnTangoUpdateListener.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c1ca5aac36e654a64b64ac0f5743507b +guid: 2fe866aa5c0914e4bb0ca908d2866651 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango.class.meta index 6a8624ad..11bdb125 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/Tango.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4b3952f55fde14ab58a5fdb46d10999b +guid: 710b1e326fb6b4559a270ce6c16a9c8a DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData$1.class.meta index a5350a3c..2034a314 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: c3b398ec08679419daf50d8ed8f80f90 +guid: e4e0b14dadcb84abd8d1fc97e53510e5 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData.class.meta index d642899d..0f511dcb 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoAreaDescriptionMetaData.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8cd0a2c31d5304b9d985b2b11b70ad09 +guid: d9efe2d29da43420994602c56bd0f980 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics$1.class.meta index b4376a2d..3fbf9b77 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f3f7aeda4b1b14463a45bf6f120e6d1f +guid: b55d99d03cb3e4de7a05a448ec668eb4 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics.class.meta index aad32399..4c4f45af 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraIntrinsics.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 849fe963df06c458392f592c188999c5 +guid: f16898839a1fd4a4d90141f7f2cd64fc DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview$MainRenderer.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview$MainRenderer.class.meta index 626adc24..d6edf2bd 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview$MainRenderer.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview$MainRenderer.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 14eb58945af0241daad2258d8ae12f30 +guid: 9cb0685aa07be40ba8f59b4a54ac2acc DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview.class.meta index 9d0f830e..d7677666 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCameraPreview.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 62df46368d74d4bafbf99f5032e32189 +guid: e05139d87a337464899fc67de62a8c5b DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig$1.class.meta index 3a25ce93..78e97748 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a8489cc3995514794b55a8df596ad66c +guid: d479066d728004e56bb614cae23e0372 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig.class.meta index 1dc7ef33..8c1459d3 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoConfig.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 10278985a171c4843850ad3c6ea0c679 +guid: cdfd513f0da294dfeb6e277a2e247d8e DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair$1.class.meta index dd003118..91d3dc6f 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4727a1939eb224110955aa533f477faa +guid: 4fed07366463d440c917e3198b59c519 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair.class.meta index 4ce6f176..bbae1475 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoCoordinateFramePair.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a0d28fe1d922642b3804624aad124a1d +guid: e664a63c7a2764c828e1bd6cd28b9c6c DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoErrorException.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoErrorException.class.meta index 80f05148..d1f1f1b1 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoErrorException.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoErrorException.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1980257d5d54b42529d57296e5b97ae2 +guid: a4d96fa5d5e2a43ea985ce88a84308de DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent$1.class.meta index 98e2b462..572a1ad4 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ba912b0506033495cbc5377f2d18b625 +guid: 8ab405c03e3054536ae2aed4428d9777 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent.class.meta index 2a99867e..3b911a7f 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoEvent.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d488e7d41356f4cbca37c0247ec27d54 +guid: 3be78d234a1204e11be5fe3a06578124 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoException.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoException.class.meta index 0114a7d9..150d33c5 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoException.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoException.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d8b62cc2d1019455185190c9b42099d2 +guid: a0a8134aea21e470b923f9c33db14975 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoInvalidException.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoInvalidException.class.meta index 1af23d61..6a0041bb 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoInvalidException.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoInvalidException.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cd0a282196f7749c8ae8891e1af2b835 +guid: b2b91dfc3eebe4c839eee22c856ff72a DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoOutOfDateException.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoOutOfDateException.class.meta index 7cc60bbb..ef5fe1d0 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoOutOfDateException.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoOutOfDateException.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: f76f46da606ee4771bfb55496dd95a47 +guid: a327fef468d914eeaa0779155b83644f DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData$1.class.meta index 4eeaa3b0..1aea3956 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1327ae508ab0c446993c66e5d26e42f0 +guid: 74a20ace050674c57b65823dab0a1ee7 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData.class.meta index 6c7a9427..9023b70a 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoPoseData.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d15aec76a2b48497894e55a44a340aab +guid: 10538c1229f9548ada766e74dda97eb5 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoTextureCameraPreview.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoTextureCameraPreview.class.meta index ed0e690f..2a2f6978 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoTextureCameraPreview.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoTextureCameraPreview.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ebb225fee42114515bf60608ed53c743 +guid: 9c34a9a831cc44713b1d277d3359ae78 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData$1.class.meta index 49d9ced2..15aefe14 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7f5acc348bfe2419991081ace83ac40a +guid: c6cff3eba9c164a9e9362498aac19a55 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData.class.meta index bb0a0417..14ec5b89 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TangoXyzIjData.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d4ba66c146f434d6c8b4fd34192afe51 +guid: ddf58140c7c544c178ef57fd9ebeeecc DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TextureRenderer.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TextureRenderer.class.meta index 4c1702b4..577dbfc7 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TextureRenderer.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/TextureRenderer.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1930517bc24214c108e3f893f4cfcedc +guid: 4b99a24cf90774bf38890a1f6b0b4923 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental.meta index 88dbdec7..d425a09c 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 80cb9c621c08c41d1bf457684e061a41 folderAsset: yes -timeCreated: 1440434027 +timeCreated: 1441729897 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesh.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesh.class.meta index 009c4d5b..c98a7c98 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesh.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesh.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e646aaf04da9e446aa66f5f2477b1f13 +guid: 2ce7caed0a60d43e98959a438b0755dd DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector$1.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector$1.class.meta index f486daf6..9b18b96a 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector$1.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector$1.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4693f475583944c799fa66889c3bbeb7 +guid: bc3c12013bcfa40d685cc0b0c31ce2a4 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector.class.meta index a040d795..bc6f821f 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMeshVector.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4fdf93d38e5064b5ba1f0ac343d8a245 +guid: 3a94a008411f94cf88680b80645511fd DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher$OnTangoMeshVectorAvailableListener.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher$OnTangoMeshVectorAvailableListener.class.meta index 6a4e7690..48ca68c1 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher$OnTangoMeshVectorAvailableListener.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher$OnTangoMeshVectorAvailableListener.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1058263ca4174482faefc29c12330ed3 +guid: 33b9dce346d454bd8a6778c4357360df DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher.class.meta index c124dcb1..b8422040 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/TangoMesher.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7f04c6d1efefe4f79a4f9e06ae51c99a +guid: f8224aa5cd8df4455b2dd8fd0b538b71 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/package-info.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/package-info.class.meta index ceac2dfb..af10151a 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/package-info.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/experimental/package-info.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7a1830f47966940e79d04674cbdaa927 +guid: 62f54bc87ea3448f09e9b0ef45bae13f DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/package-info.class.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/package-info.class.meta index 189faa11..23586182 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/package-info.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/classes/com/google/atap/tangoservice/package-info.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a363f371df05f48ce8b00b19ad7c3e49 +guid: 39f2b943c70f24c4a9b7d7b363ff8a79 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/tango-java-lib.jar.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/tango-java-lib.jar.meta index aa863a10..836171b5 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/tango-java-lib.jar.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/bin/tango-java-lib.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 822f7e76a5ade4ecb8965c14547e4c8c +guid: db01d5ef27bd342b8a5d040ba6c0b5d5 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-java-lib/project.properties.meta b/UnityExamples/Assets/Plugins/Android/tango-java-lib/project.properties.meta index 17045ce3..ff331003 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-java-lib/project.properties.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-java-lib/project.properties.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a8986f554db7b41fd8ccb9b8c90ae15e +guid: 99d7490486c3f48a88c73a4f03b0b9cd DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper.meta index 7d8a7880..fb0ea6b8 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: c0a826487b8304d3288512aff8443656 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro PluginImporter: serializedVersion: 1 diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/AndroidManifest.xml.meta index cfba6ac7..f0f6c175 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 94b83cfccb1d54475b95a1c29c7fc624 +guid: 57e284a9afc434e04809cb2a5b9e47a4 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin.meta index 94f218e4..aa7b6ac9 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 721c052a60a1a430685b336ac7c0e42c folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/AndroidManifest.xml.meta index ee61d85c..3415a917 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b8bc4a5f8e2ec4775bcdf586c5c4fd28 +guid: bffdb30cce99943269b62b8acb1a846a DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes.meta index 63152f47..77dfe5b2 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: fff2a47d7b2134cb8a0b88b47449a730 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com.meta index 12557f0e..50afff46 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: eace03ad54b694e10b9708ddb0eb4179 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango.meta index c6ece1e4..50946c1d 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 199d8b96150bb4600a7b0ec8e3064346 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity.meta index cb5db0b3..a03abb25 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: d33fb341feda1484ea48e92c5118223e folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/BuildConfig.class.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/BuildConfig.class.meta index 28fcf369..36c80fa4 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/BuildConfig.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/BuildConfig.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 993db61fd9d11443dbe7ec40cb212824 +guid: 089c24cf83c864db197125dda2d8f7e5 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/TangoUnityHelper.class.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/TangoUnityHelper.class.meta index b3ce26bd..b2182856 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/TangoUnityHelper.class.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/classes/com/projecttango/unity/TangoUnityHelper.class.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cfa6b960a4d6243648ce3af817515894 +guid: 887f5f9a7ff0e4b34b33e19f6115b63e DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/tango-unity-helper.jar.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/tango-unity-helper.jar.meta index 6ae17355..166af09c 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/tango-unity-helper.jar.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/bin/tango-unity-helper.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 8c51d50c6162345e2b84997969a724b1 +guid: b5ee2602b4eff496797392ec27c066b4 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/project.properties.meta b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/project.properties.meta index ca5bc21f..7f37da7d 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-unity-helper/project.properties.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-unity-helper/project.properties.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 28a523326d2d945eebd32e22e4529508 +guid: 7d18dd27032b9411099f8eafdaed41f0 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library.meta index 20b92f2b..439e994e 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 9cbaeed14f5ba4a128a3178cee73342c folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro PluginImporter: serializedVersion: 1 diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/AndroidManifest.xml.meta index 8b7e9ff6..f2d8f8f8 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fb1855a48cf5249b0bb15ed6a59e1135 +guid: c0c55822782244b60a794ed5e30fec90 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin.meta index ca9aa555..5a65f8c7 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 04399f879535b4594ba031c4e7956d1b folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml index bfa61674..3f07b937 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml @@ -20,7 +20,7 @@ android:versionName="0" > \ No newline at end of file diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml.meta index 1d524006..bdba7185 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/AndroidManifest.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5ed42dd55e45d4761b211f28e9fc3d2d +guid: 12af0d8898350430bb2486dedc5c5e3d DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt index 61702d1c..a7663cd1 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt @@ -1,14 +1,14 @@ int color gray_dark 0x7f040000 -int color tango_blue 0x7f040004 -int color tango_green 0x7f040003 -int color tango_yellow 0x7f040005 -int color text_exception_action_required 0x7f040002 -int color text_exception_description 0x7f040001 +int color tango_blue 0x7f040001 +int color tango_green 0x7f040002 +int color tango_yellow 0x7f040003 +int color text_exception_action_required 0x7f040004 +int color text_exception_description 0x7f040005 int dimen connection_progress_bar_sub_margin 0x7f050000 int dimen exception_component_height 0x7f050001 int dimen exception_status_component_size 0x7f050002 -int dimen hold_steady_bubble_level_max_y 0x7f050004 -int dimen hold_steady_frame_transform_pivot_y 0x7f050003 +int dimen hold_steady_bubble_level_max_y 0x7f050003 +int dimen hold_steady_frame_transform_pivot_y 0x7f050004 int dimen hold_steady_trace_size 0x7f050005 int drawable exception_container_shadow 0x7f020000 int drawable hold_steady_bubble_level_err 0x7f020001 @@ -45,38 +45,37 @@ int layout exception_component 0x7f030001 int layout layout_connection 0x7f030002 int layout layout_splash 0x7f030003 int layout layout_tango_ux 0x7f030004 -int string action_required 0x7f060015 -int string connection_layout_description 0x7f060017 -int string connection_layout_message 0x7f060016 -int string device_not_responding_description 0x7f06000c -int string device_not_responding_title 0x7f06000b -int string lying_on_surface_description 0x7f060010 -int string lying_on_surface_title 0x7f06000f -int string motion_track_description 0x7f060012 -int string motion_track_title 0x7f060011 -int string moving_too_fast_description 0x7f060002 -int string moving_too_fast_title 0x7f060001 -int string not_enough_light_description 0x7f060008 -int string not_enough_light_title 0x7f060007 -int string project_tango 0x7f060000 -int string run_time_mismatch_description 0x7f060014 -int string run_time_mismatch_title 0x7f060013 -int string service_updated_description 0x7f06000e -int string service_updated_title 0x7f06000d -int string space_not_recognized_description 0x7f060006 -int string space_not_recognized_title 0x7f060005 -int string too_much_light_description 0x7f06000a -int string too_much_light_title 0x7f060009 -int string unable_to_detect_surface_description 0x7f060004 -int string unable_to_detect_surface_title 0x7f060003 -int style ConnectionLayoutSubtext 0x7f070003 -int style ConnectionLayoutText 0x7f070002 -int style DownloadProgressText 0x7f070004 -int style ExceptionActionRequired 0x7f070007 -int style ExceptionDescription 0x7f070006 +int string action_required 0x7f060000 +int string connection_layout_message 0x7f060001 +int string device_not_responding_description 0x7f060002 +int string device_not_responding_title 0x7f060003 +int string lying_on_surface_description 0x7f060004 +int string lying_on_surface_title 0x7f060005 +int string motion_track_description 0x7f060006 +int string motion_track_title 0x7f060007 +int string moving_too_fast_description 0x7f060008 +int string moving_too_fast_title 0x7f060009 +int string not_enough_light_description 0x7f06000a +int string not_enough_light_title 0x7f06000b +int string project_tango 0x7f06000c +int string run_time_mismatch_description 0x7f06000d +int string run_time_mismatch_title 0x7f06000e +int string service_updated_description 0x7f06000f +int string service_updated_title 0x7f060010 +int string space_not_recognized_description 0x7f060011 +int string space_not_recognized_title 0x7f060012 +int string too_much_light_description 0x7f060013 +int string too_much_light_title 0x7f060014 +int string unable_to_detect_surface_description 0x7f060015 +int string unable_to_detect_surface_title 0x7f060016 +int style ConnectionLayoutSubtext 0x7f070000 +int style ConnectionLayoutText 0x7f070001 +int style DownloadProgressText 0x7f070002 +int style ExceptionActionRequired 0x7f070003 +int style ExceptionDescription 0x7f070004 int style ExceptionTitle 0x7f070005 -int style Text20GrayDarkLight 0x7f070001 -int style Text40GrayDarkThin 0x7f070000 -int style TextListContentItem 0x7f07000a -int style TextListTitle 0x7f070008 -int style TextListTitleItem 0x7f070009 +int style Text20GrayDarkLight 0x7f070006 +int style Text40GrayDarkThin 0x7f070007 +int style TextListContentItem 0x7f070008 +int style TextListTitle 0x7f070009 +int style TextListTitleItem 0x7f07000a diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt.meta index 7eb5b730..b57615a8 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/R.txt.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 53c4a77bb9ff94dc8a9a29df3839fcf0 +guid: 3a814b608f0ca4f3794b3e6172056007 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/tango-ux-support-library.jar b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/tango-ux-support-library.jar index 45a57ec283e2a1d3800d8b994f2a49ff29ae1e13..b3e8347d7ede7310cbc8e78c64bad63f95320ba5 100644 GIT binary patch literal 71962 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

B1`ZYjKfVQx?o2s^rueRq+9EiPDT@*kykjjo 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 Oxx@ob@P7XC?f(J&%;t#z literal 72717 zcmcG$V{m5ew(p&!V|HxYwr$(FW83W5wrzGgR>$txwr%I+S!?Ze&e>J_sdt~+?_D)N z-8JWj>-xdH5H`4fuaCGLP7!+sG*7j{U1LRAW$G#Q58X2NjWikSwT5TF;Qg| zI$5!gQ6Qk*eGni8X$Z)w-~trTuX{kgE`@(TDgQq`iTUeaBRd;NAKcJF9dKh5p_2*v3Itxvy}kY8e5w<(ivF;oSc#q)@^4QP=-GBewkLz_)LTB z8$~frjW%fRpap@FqKdAEh^geS%h*~*l#=8mpq%FmfIvZo!{8an*Ov<5gwkdRc?y!O z4m~_)JALqRzP{h0{~&iaHVOf(E)wEf@xqg!mvd~FhYe=P%RNiSOFYh{l9$g+TOme+ zV6N6-q{Ix6_k6qAeeE+kE@i8LJuml<5X8W`c#U~oI6c3__2|@nEc3cDTr@GT!#Kgk zB@HV1hA6W~Q(x;iVGs%-MCvGF8wv{p&?m9LOLx92J$Q_YZ+|F2c%c-&PmfS}$;z)^ z#$(XHjiNBdF z-%~#gS0=q8${rLWa1CsC11`6bEe*sq*_Hb|7D zNjn#`!p$4*v#cs+SSiyJ^9)hNDy5vyD19rtlt%28^THa4MME57J*Fa9X+hda<53ki zU}17_ca5O)nnEa>QMnAjU9@oh;MxKY24ALKdx7|fSOIgj+Tu?Vt86?}PU zVrSxoHISfQ`-28z@p=nnjnK}?j8)-P$zZXzPHn>0SP$XzAK1*6GSx2t0|C{3`#WqH z{|*~rJ6l^5qraGu0eINCIFm5`3mPR|>0JR7UZV;NBiHErS1Z+{KsA<=K*$IJQNc3k z_MKN2+}$K+v4rrWNhFj32*2(Rifg&1tsP}JSf|5r&cmG6z022A>>oBX?HC3ck>(6oLB?@aabJaH5{d2n_7iXaGf& z$sA+twDEdxV;VLmVdSYi$q#Gaq}e$7JU`E^v{BY1o%R9H%ycD~YOiRoX~9DZ2Z|*1 zh6Wq>*`@IuDQtiG)jvXT*?12mM8hYFBIJWx7i{n&ABvU9k{xJfj5g2?TRBzg$Es6$ z_z80x;;(3sF;mRt;Hw4e2Lw~tuIv&@ zrpmR9i~)3XlYhU{aW!vt+kYW`LznTrkDF`1%@uDw+%~8&m@x8xK>Bl!ZXy;xadY(g zkDU$)`XGq>+UfDH2=QMB2>SodPXBYCv(>cKk<~HQg+Y*e^B}`e`=v!>K#+>j8_lgi zr>B6VfRZaXNQ5zDO=m_xWwcjUUVZN8Km5DyMAhM}8m(NO*EVMlYc80XgD4Ds)}^I8 z9dLVHUcNqX_UV7VeUSeUe4{9o6C$xWFw&eIKWIp^tPD=8#?oX~YeUCogA`V#Zwt9GW;bK`hUK8pAz+4EnEu0yUZ4M>WYYT>J zzD?~<05DTxZwOcN75r5)ADl&&&uURJzgA^=Y}Kbe|JwckK3+Pguk zD#g+20zHpTsy#Wd(`0iDL#i!pLBt)u035H@9ORjNSyp=rMop6SqAvrLS|P3wOajWZ zVmL|{Ss($mFv%j~)`vT?%9NR6Xl9ORMp@(ZS6O;;5BxpJ63^aKUb$rWJrqLCcHuc6saJ;n<3z2Cs&|;!8 zi55CU6JW%|ccT@^gIPV904nQ@y+yROmLexieKJ zyt2ui+k3b!n$i0jeHsyMQD+K8rk0M|@X~A~yU^!9L%OQ0s2LYaq2z^$mD1uFX$hND zy&{T*dK%8Mx(v$IIN9cROY#lSI+0vGB#SGt3B$%(O18L`;FiadueL>QFmZo%=roKg z0nF*@um30z+is;qWv=oRD8#4y6qv?-LNOLd9xbpn z?tk*;?0ImR!pt;BexIP?fWZ^>Z?u&j3#iCTub7UQ<^D z%^wp{O|i`jhAx;vye-S3+cX|vx@@wTSR%@TJ;o%31pjVU7l68kJQO~*Bt2-u)KRJ7hF1@`Zvg?|()KG@ z6XgR1YDw4GL07KlwE1$Sh-7P^))lK8B$-`cB~?xJ0)4Ku>$9aa>xqm!yR_}@>1$s_J*A`IWRk(A73F}Z^3FCdpmYg1Tra!G$a&%A%@>4rR zjX~f9l(pwcP3e%DKS1`+BHlSx=kE04%@-wNO(DI*#piDO^?T`q4S{A(0<2u(;>UQI2Wzd-&))R&{Q#+pi3!FG;r8dc5-RT1aOc@2rr%{! z(fgP_rKS{(6P0>-Q`ldw6bTNOm<{EzaHUOyo%i|h_hKY!>8vx({-D%}Xu zU>wwUQrNhb<>;3f#9~~CGmYXgtXU-&nqM-c`LLp(GT=BF05(GWMIlgCFr!l7HSUNh z_4XjX#dly**FIBiUBk;0oy!X->xTk8twruXWA;Gigl!5;-cm@^fEe_E)?0vQjD-A{akVbsLR@gQ$oAGC`WP5_qKr2K-)mu%TU#UvnbZu~`C6;fMLPFm&he!FX4f}!!*wBl zKx-jawAnk4w$F6)NOq(F;+!S=z^z+zeT3xYL86VY*D^kNAA zw9V`DB^ijk5Y#5IbLU2bE$lkEa!)0XPk+oNRn`ni_V!>cCn1)y&1(9!$PV6okvnV2 z6%%dM0@&v2o8vTqP);LL3>JFSAsSx596b5;v8kl}%RX_2%c;2tEnmWVyxYYd+YJMp zxcn7GrA7_Rg@tBZiSXuOs0ZgD{7IoW9+k1>~W{RuD?nRSSYCVBut4w`; zG?$5SJWJag{I&6f4ELIb2`=|zG6bf?lqB0`Is6!d$(!yj2O6g;jc1exlI;(iqgH>M z^#G47n1$J!eshzAxlE#1IFH_-+`c)5-K`)Pe6RojHjR^aYuo)%iP@DP7`NY*Ri=@K)3kQ zLV$&6=i@yKSBL(*@)$*UORCI&7_xioQj-cQpQGBcyXWw+y_*UnSw0v%<)C0{Xo-kQ ziJwfyalk%)WRlJlAS+ksy(99CgYHw1dNkg#K?KBw{v6wqaX*9O0IZLIZOa0r+=>&9 zeL{-TYZKn~s&zvQ^~DQdLw4z6@{OxAU?6T$#{tu#m~bJjC2-YXO5vru(*kL!-rr$D z#PWpkE**)_eGh0>CYaVH)YU_^l;$fQwR><;8LQX=Kc%G?%eH9LaI%bA(nIG4Jai1w z4gnJIwS89%rD)X#x$-Uiawcc1@uzeKaH%*tMbhs+J3CA~N}FNvISPv@8MAX~=5J3dM*;^iRMr?|z}5xNutwbOOZxcplLf3LU~2uNQVkS2ivp zY&WsPE86&py&Ivq2XrOV_}4_aaY&{}vjrPLjirC0$W7+qDHlcCH1PMl2QW9N{5EX- zq5fIWIYh)~Y(6#{g_+SWR&}OBvITj3 zHqXR8&oG&fq{I4;_%!d&Kd!L~CrAD|;IX};n5Cl>1t+}&Souqqk7pxoFc6Uo+^2?6 zV?px*12@OUbEyZxN8$+zaLyD3ISiwN9`(kd0xj(7pMShz^TUKOlN}J@AXbCUk!|-4 zhuHL49g7h5^-#d5Bu!{!4LRxBm+FV8U&|pkc@TFy=5M-k(iHgA*v#KbtFa#jzOT^{ z%a9{U5+Os_^qzarjR+s$!sXb+sDR)W)!O9tY&01 za}QKJLYZ|`Q;IK^mi?ZbI&`l!O`9CQ4X%u-3#sLpOcyKB>;q?GF4ij19OkLiGDgK) z;MeMRoqhfBLO)mi90tSeG*YNjpC-BRjMdGE?7O>jsWF6*@|-@>#+;$kls-QN{!4#^ zt1H6FdJLARVJrXYAF44*yR#Q zU0>4$FnVqKV?~*&xBFhv+j5aogek9uc(PKXFt=`;9=_3X7ugoR|E5>DsFXI>GPY&| z?v?1uvSd!4;F4wgliSEN!3q^iK22{vEpij}tx{WdeqbF=ZZ1635YY<3AsD6OLPCh} zlE@XNEwfx0AhxTJ#Iewh$&Rgi#Nk+xWeZ5FI)RPuvjXhPmp2)T_fJ!%!VQ?ha( zVNP-ai$v~zFMotnDBB4MDj1bh6S}p8Eu#D$TC9I%IpHi;t3E6W*D+i6^Wpnv>sThN zb#E)uD=qj$;u1QEaiFwH8wTI<(zBu!IRuYnY3Qs&`>)8(UU>3!=Qh+5uAge$0JkMY z?&VDe5@w^NP#Hn2fF;vB)Ybk2QE<8iwshD?smNKj^&3_f6jbQ0bxf-&lPa-o>CEvQ z7F6i$rInUtw>8_*vt4lJrd63DWh6#}0^y_P*>0I}Bo1A0>oddhlZFIr+C_QWGzG+h zFb_d9X|Za2a5{nTvJ*xIsKiJ_@fnx{kKSvO2?2UnWs}k;tsMkaljI;;-1Z_Qj~?hI zqD4!MAU+-2E$AeMKfH3iDaipJQs4eiAR4G+yJtS7<<`+RgWj@&OM&^IEMhK2AVKxR zf!ijD?uI#M;!3)X^fqIsMROYNkbPs13=gP7(ZshMu+i%f2D}^<&vtV=a3?bkv{B8r z=qqpQwv0t`OQtX?nQX1MWCkFX%+YR1i%VA4Y#FKAP-X`Ms%gEva)+UOS*;!3_`Y2Z zyta59x&KPG_uK_U29!QkidjpB@TO@hsRzAY1JmOvXt1c=Aa(Nc%JE<}a_^XS@Gt2g z{%o&K^GA@PkcTs4THQ#Lv-AqZw3EMcZE!oCj6uL34AjF>q2Q)O`-ZShTmxe@AQZs0 z9#@Nwj?Z=l$v5aTM|muP-o;tS!J*>h?T+&3ajl`2Bd4JhG{m?yu+6^PQ4-^y#GzlM z-Z*O^?e!ewPwYNZtdC|SWOzvVE%!TSF7<2=aTKiIOn0gAl6~lFwfWpJ@`CS5xAXW_ z{6?eD+zOF5p8nkq3=LwTa*2?->^J@1Uo7o>b4z6mZm^!MR;MD@sc<~8wJkJ@g}oVx zk*bZJJ;d{K+eC`^v6=5ml-}-wc~su(-R?4R9X_+&%|&Wx8S#+KZQgUgjkemK@OFo) zb9Agk|M*gNGQSsQv#_b!pvU85JQ4a9F>u?uaJN^3Gh>|_fXU7c5y=*1EmJzvU&qqO zs8%cS`WkMPK4Eq?B&w~+NST(rR@Tco<=?sMGV1lxcRqprUM4n!dxQRM>THzZJ^NOO zB7}cBZU^@!*FFx1(^OD!^9cU&ga77q&V-E3$^z}^9OQfw{G;GE>2{e3QfjGi4z&}% z=F1iI$MFC^$^l&Qbky>Ci3I5Va;u)(K(^oZX2aPT>o?J7bwEn6$go^ zpzN?#*XDI%1f#t~+72+4G3hymHa@~?BR35Eq2Un&pF?0KuXP!ueX<)FSWfdCFFpoQC+`a#U{?AA4*J-)A-hy2zCv>|VSl%xV#y zvw$nU%?Fl2x`WpV;C*x}g06roGXEgRlwJV|)L{Fu?_KRKLtVM+R0FOpE`EUgCR71G z^JGZVO_c*Rv4ad+I{&L#>vKgp`j-QI61ZY6xC5M^gn}i=JZqpvB65TiM#nSks!#~! zFc6JtWzNEaIm&*`2W&(J3$#V`0GA~a&*`kYEn$v#msNPF^>=JXkcODa=kZ%1Q`%u2 znvh&@%R0et&@JFhKP;JlSkC?^LNx^E)fs7b##%{s{uOtb(493?pYWCtAjmTFav;D* z2rrygFrPc-&cZ}3TQq8F#@{c+C^)q z3+1APP96@srq75ARYkYL*vs zPb)eE2l>Dbd{bzEa@5=6mU8Wmw?1j8nxP_>>g4HY?>b%{@+D``W9e0XCV1WAzVo(n z7aIaOUqX+KxtB!5SPSY-P)4`d!{mUiQb8=@a-g&WrDqn7VA-gtcU6;b*l+(Y1-HXq!s($hoJHjYf_+m$z}ksIrtdZgsi*o?bP zO7=}dHm;V~pTeFuz2>B$@)>{C|#GP??ceC5R9z{kiIoRgwgYqZy}wj zs27|M_3a1p&_vHW3^iaBJGbCFZSforjC`+}zikb#mts+?B=0-mYldtzRb7O!%vg=C z)Ze0kz^-xJV}7Q2bY$Su1MkKAXPy8^-*Xz3~S$FNk! z?Vwo2!$nFJ_Le~4A#g3*pIb4!T?6NG5OeQt+4!D}$rBrIOU^y6eJh{lW7WdXEKgIl z0?fHEVL*vza@SAKVU#sfA4KjX&-!l3F(#(gojrKCy!Z{Eek+~^eB6~* z7ONDE%1_Ix_`?zyEa3?Nb}^Ar8+_X!fhvbjC?v$^8ZdmWNd&CQ8#JHi(OdNi@>dC)ZX6$e0s{nOgY|dKl)v@2|2+~RY-eL{XKP~X z{Lez7QEk}`*#za&=a@+r13HP-q_S8l1E`NIFW>sukbs6QA63Ub!&??2A)O)pH~{A2 z#q8;z($Tz<&)s{c2mO;^^4k4!+?bJ3mB-U_#jgF)?efxgR^RvYnjDDyIyoRtfXFVn zvA_gXT4@%yvw*Wrvw_7;GgD(?EW${`bd*Y+MmZxUz}8=Ion|RTaVjNBNRex$s5;d| zO#i2jcwTANgfB^sk;93~+}5-CY{%nubSHl_@(e%aSn@ zkj|x50a1A{->6=GiW*1{GVH@O^N^os@eNr+FsbR$|2b;vIozsW)nur^p0SkwHaq&- zlxehdlG43A!MBL7GelvLiaW%1pd)TdIt#$_N*7N8sh!34XmR@n=kN46s zd55~^y`Z^W7uL{SQsKNNRbAg^NJDd#5YZO~B~qrR)JSj^9qrnHFNPzILIT<#$5_*r z9AUyuYBaHMj%wpsw1=tcfYJxDYC`+%@um?)ByT$?U>9W7(iOejmX%H~+4B^oc$nc( zx=q-)gbRW^+d?_Fp0+sw$HtFDB~=24d^MY0 z8d#IP390V)B~W(U#$q8s zeBmNh9h0zZxG*6jf;ww4(WTVR{2j6}Tbp6EPC2!!w(ju53oo(B3WcBPZq2G9b(B$> zYl>HcV#vRIKp3;z*Ipj)MRlpC+f$0c86rm@2d`5iny=xLp;bNUDE7!k<^pWZ_J!3m zJS25T@H)n_E^lmO0(o(IFev(vZu@f-I=p4ZD)v`Aa_Ewzu;ens^*?%CI+Zd-QY3xK z4$+MX&HgCeRFl?(zEZ&hg1GC841tM3C7+*>@hyog8xL`M_7*utpm1V&Q>obBFsxBk zOPUi6YQ9Gk-G^$L@0h#$UN>xw%@h=2<*aurl~%<%dk$l$T54H%!LRq$L!(D#UO`?` zyUQEA{BADV`3C<O0ElzfXQd@cZuj=}C1H#x zRJgjCJ*d}$eq`|l#wBRiup}{_Izs&__!3Zqj@8h2l0S72AWJxH$DugnOYf%~OA%ga z4TgBOYpIpH5AzPMAUYeJKLGXkJ7fqnZ&GF{T2Zyz1LPRdez8WsuAh*z^!ljzjjU18 zpPiSvqiYQl%KDC;4^n1N$ORdg)^Zx*P7@34Db9JHdwNqcI7 z^j^DQ+`Z-@{`RFukVN8_cfhpjg@s51F-ZfCLj$_6JKbCm^z0mymL27FF@Z@Ics|XW zAlnI7-Q(bxtgGe~`!JC%dm9t$$73U6J4=4zNY5hKRYqxK*?**Z&d49uEltgo-RD-U zje_EsLm>*&T-=JmbwQ9DA&jEUGz5$Y4KD7nrEnSAfk4Y0&qnTC@PFA z8D>BwNsS@;y)}&|5PUF(IH8IJ%~h}8+uNZP3x4h;Hqapl)D&VEvhwhF8Vz}QmX=iM z==kuwmR>co7MIPam1+s6DzGb9Z?LB_lUZzsm!857sMwuN2gy*7lK(IB2eXScbekvH zXG6LjasO-isHWhig~KzE4=W8yn{u1->%{IY)zZ}l?RZkWveNTTyR8ofVs_;Pn^t3# zPb)TmsL%%M8kh{ViagH%TVB82+vS_rF)y#M<8E-&Sq0 z+PV|6D#~Xz*)iF%kaYeM%A6r}5v`5+bc9Xy+>DUrQ`{ht{s~)ak#Vf?#k#tg&+W6wE?Dh(EK0Pz9H3<13NKGq5 zP^FYlfDwW)PbE}F_*9^j$CaOHsBdejvozuz)CfggjA@inJ?7$noC-j0N;&InP3(JE z=47r@c%lsZzTn9^(%OcIU1xJHBjmQmaH5DiD8`e&(V`%(DEvLjLa%*7dt^npUoz4eDmcf}CYx$MA< zi?D{X(H{}13@vlXHB9mWW*!m)46eWI!Y26n)lp2+)!(S}dISS@wD1a^I7DO7C|wY90!Z?A%{8N|dolEs z?ZfJBKgp_h7-GJw(F+sDW=)uT5H?1Q;NdAd;MCIJ#{thPiXn*and_X&XmAqKA{ruS zl~iVOia|NV`8O~a+gONzXYnh^&8+n0Gj||~n&Kb`7ZVK2(vrq?Fq~E+Mrt%R&PlG1 zf5%e8V~#QszQQc#;OElEZL)U+M~Jx}JA6q$dtdIV)adpxLG8?4ztCeW`K-H_=$e_S zP)tQ$uQcfdLS1^ighQwqfm-Ftj^*L8+&@dgSlBmQ7nVJXqw?;7OQ-B}Y_awV<_27! zDejW(+DuL1h%ZZ?^(?b$pfh<6Whsu2$gM-2QfHRrmgf?jX*Uwt^Zi@M6Rs$ zVzMHcTm{&0MQW9(l#sg7E_l3g&FxjIMD-a#i6!f!~MP732?XzM#%&FWI+{ zUkT@|%@v9ydGM^`-noR<2#O@NP4TQ;5G*KTmUqB)RUS+cl$$}hDI#B^A9?WjNhHuq z_&0U@%to&(kAMF&k*{@ePQ)^yC!*?)clFqbThOMUdv((rEU`6YrSSCm+HsN7ZXWq` z82!`BO(G2rlmQF?@&Rm_=HDDRN-c&PC~ z-PiUrl3*aYVyB)IU)s*dC!WU5-hvWa;2V6q{^y*h;G^eV-S1 z8_Zf*0yth@u(S6`sV*G@6K1I`s+K@)X}MquWR<3-i0FzS7bWWjyK91~1eabAowIfr z``IreSL;BMV0071NnRcN^B)dcNq^VE&6j)j4*fqCPyaQLP^@GljiQL+Tf=;QCR505 zo043TLR_WI^^*Wf6trHkj>`Ng-_C7l%+sX9Ej?AC3?G$33jYQ8qwH$UhCmaN469|F zbJAnNX`=N|@AKsvSpb3>o(yB{74Qr1taqh!AIy~cYZ|J#y1JmZRv{XO07Lslg@al13SzGt@&9s z1dKCU9||1?nHPJ7M}z$BKGAN2M%eu6M5!|ra-VqLmvz9eQllK4D;2EYpfc=pObrzWFYZyCAzZOW@h02geJ}h`@5@p9=ch!`16~#xxtN7jnFCWt zx~Sw_iI#P=H^e^X7bfBP+MQ|~2am=nFsgc;pNjFV$zPMU>47F8Zl9H746mt>Ddt0H z+1v(#25PdC9sw~hu~Y5FHVJm$Yv12Md|#22H^s9o0;7q@USVbHz3bsT5txbJ_yUyn zQ5j{&ZF2jXYp)D+_NbFTT&4SIMQO%k)8y*}{4(_hh;kCqs=IX1-vZ?nUmkvvyBQJe;9_Vq(nXzw5YEF+w z#WF2C&5AFAHB}fj_4WG2mq?6D^(K8-j0izpmjkwk&TnitDq&~CK%HboG&$cl%r@z3 z?uiVe!jqh~w_T->+a^A=-!o}ch2OLVS61HY0W*uWk<`+FW4~{pDir#_d+s}f3Q;1% zqHM9d;su;Y7pJSnWkrygPfqCpFEFlA=Jvwee4lE)?uhj94vz4v#7YU&haKQ`8`C_Ve#mhg9VVbB-Y*CU<(( zbn+bwORkQq*hp?uFLS2IFc{Z@^?d+l(y?#wcs1`Qr!0l$T_iE<4CCyaV_ z%n)T%^b}DOxj(-}FAAOm9ky4~U#)K1A1l-d3UzyNJpG_r$Ky*lBd1=+m?fXV!|Vt- zU3h~VL-;AvEX-XOFl@?T71G837d1a+QC63}sA>A2qlV>QtqWBfWn^^}UpgqdaCIok zh-&(1wuKIY$`mTBpCCe#a8p=VmFKBr2W(YzZp`hO6#B1LFY}l|4O*pKToZTfE?GJ4 zMbThP$R)Gc%j;efIjM)7ha12AI$rO=en>y{2;d7(I4+K7oG##4Ls8 zZ=S6Eh{8NEkbGMlVSo?`u}t_BYf^MM_u=>tQ(%6dSTl%6PQm)guf9Ka4?NAUlvmqPv=O~qKIQ} z!No9RT%-pW!4tKV6M_5UWf-+rJS2oF&^fc)Cb?9|F+!LxS5v-Csx=1qPhyI>R+M5l zDJO3LmAMgr3dm8iOH?B;ItE)Q8Vfc!F@}FJ@h=I971oA%qvE- z9dqf-bOT!mFXc3~kDMqdTP&_%%G!kKp;OIN$1sf99jg=aZ+~ZuA+p7Oia40~9ii`N zg+ofC5QvAE%!_m$-&U4c*MH60bEaaiAY`;d@7l&;`{Abc5h?H z83sKE@TPZjgGSb{4-TD~w$g76bL%F2>kSi$B|-w~AjaJ7B=v!foI+TpQ4S7c*Rch>p$PrWMy6Xf5dk*w9%QAfHG7?zNVHl_J0edzEA9!=Zb6$Uv{pR=5roYHZY{gY zaZa^eq-#?G{K6mhkG|ScdXHejel5pf3#dC~_fqx41{e05Cp zh7{;t;uRBB%tcg|!mt5^R=wRnn#5#aiL%9z3duqk2IFW>rmX)Y?$~;@(`i}hzCUL; zw*H>b&Ux7VlSCH*Xfh*Q06|T*ZY=g^hAk$ZU1+!_Z>GYpWP#?WWR+vOL#-TRKDEdi zO7e$+9nd?LmFY9Y*s7rp=x!UlI>JbGci#JSL~nngOK*8&-*stYj*Y=QhzTBK=)iJ( z9D%kQRL|8@Jx`%d;XRLfCvL1Fk85io(bWgbv91cUSGGyB7eMBy*b8(ovc0sQjP=rt z3hA$sqSQjoh46@~dn zI{Z5ZM1G1Lmo(1ayO%?gE56qOskGpI79%oWj{tRGqDy!?A8<+Z=#7ueY7@29CoQxo zT5<>eW#CY-(Oc#i_cIrZ?)+fjLtX@CdJ=-wFHf?Yd%vXE7VqcZ*bjSVP7^_7F6t(; z`yQT~#-_jk*?^MF5Xq^f45~ahUxtH*DllpH7ot#K~(j|I)8b*VU?vZIW}S{2GFYMJllU5KSU?t6%!H^h>`^ z*dA{pB}D{(0DVSn?N+**A^(ShooxL}!M?nX0snY4Z%Z>YC-vmUGv}2M9e3i3`f`oA z=v;S`*F|8R{tI{<(N#lU2wzGRA|91{6#lRmLtQFHUlfVr#h?6CVe;#>C(qDXIAi1( z^VFT|wjT|Rv_L=|e<~w1C=*Fxm`#@IplNy~(#Gbja&zgO#hWbhi4`1LF>T>>xVI0t zR<9Ro8tI%4o}-lRFKdk#eDbvkK%_|TyN@s z7#@y)C&z!l)7(D7c4|4JvD>`RcJfvHc*p(Nk*>xFgKh#nTQz1T({5%4@E7?>D^Njy z0Qr5DKK}qG6>yo=dYIF<*8bbq?-Oc^aRputGFt*a2)UX(99ERh6hJp85;_2A@xd6; z#Iw4WB4bW};e}w!|4Gjm&aho{b#AUN)*48a?-A8SorF{iO$GVvx}#i*gSNBJvf zfNCNa84q-9c11X#vv{Z;yjK$eUQJh{%&RP4unr_q0l#0WixOUpX+4|U8s3@YtG+h+ zrT?Spr)R`wOS^U#4|8LCc^loHrb7M;=wFPhc!)sv%W|j+y*Zp8A}<#e#=0 z9T)66yfq7k=me2|D4En+Wr|={Dzwzi2WO)DSihU=G(CUo-uSF-*Zx7aM;AQym!f}r z`v){m4HSK;0fCA<(gM50^EA2T ziJonrVXThfY^lhB}fQ6b>h4;tvj zmyUauG*IOrUx?q%atRCh%$|*sK_2pOn75PxMud_1^3j%qiv4G9R6Q6HmM7)_Rt894 zsj%eC7kr`Grnj?oz7MWRcTDQsAb5&9zR4)?_gdG7xelntFFg96)^nGzx;j0q5b99V z9Vd7-M%h!}C5di%yk(y3BL=gxzRG2bR8(=EEM-Kf3vFf7aPNHU(9}+TJ_oXHe9 zr9^7pjg*0$<$L=@_{nBb4I3ipfp1v0$Q@k^Osg`YIb%4dJhxc2%mkawg@>n|-IY+O z)4yw4GY%i%hE)XaDY8>e_s<;4bjng~ByGsQ&H0n>HPrs-xH3klv{0Q7H*<gb2XA|3he-=SuOs@CqP!M|1LcmdP5Wc-4 zJA9pqun-9wA;2HdXIZtlVwz^b6}Y{s@dWIf`O49H$TzY0c#Yf*x(KWl zq-p6w44Q;A(U%^H#7;lyN^iRJL5_U{FLXseL_i$h#5Ku)$STUhA|L{c6 zTaW^z&~$7jhFFeRfvQ-wX-gk|YI7g;3TbTxD5bU&%f+sSb(iMziwA(VRdajeif((8 zs`jJbMQ3_?P&fm>+X($*)@9Bu@8lyFyZ2$Oz88Eqw1<*#PTmSW+@ejaSaWC;mwqq1 zLh6-hllW;u`>9U*`=9_3Mzl49&^IxeKw*WpKK7$Z7zb(H)h65!e!}5PYaM!u+Y)sy zq@M=HUcCAt$}Al{?!93cj6GVHBaT&A-(sgQWLudJZZAprdt_?qk-|g+{o9O*Fe*+l zt_F6*jA#z9iNqYl?Y;U_B?e)8UL4qK_%OG_a0*c1inP8zh`n=*SK48U{Va+L;ZF}! zIz?RoPt4`Vx+XVbBu*$hy?Vst#b$JyLGs#$GS_$w zYkn$XtEsW53&sf>lm*{GLkV6Fu_+k=$ggpW%r=Q~CH&;e)welT9DM9&7uyvR55V4C z?^0kONSjEdogV+@AnLt3EK|N64vH*z(Jte!we*V@NflN~o2R-{cB84rr4xIVr#c(A z=n_%JIznux!7HFBQH(G9UYkd!rhSFI$pf34*QUDjVz6YQ>0zU0!KKDkJn%7D9gMmD z!u<3gWWMxcm@+NdC2)0qX?gy_G0O}oz2f1qjm^&b)V})kd~NFDWNGR^_s~288nPt) zt)7PcLyuOyMK@FI$b`;UnpTeS=bV(dnUR;7om*k^*uHsy7B#-$sE$^9Pf@F{w3oJB zY3acHsjb~!BAJz9h$Y>RXZla}07=^DOfUK)N0(L_9WN-Aw%*y3<2x2lUS7J$h;TbQ zir;z)NE_c_F(@xf@-VyBa-z~oCB!MU&Jn;oV&Gt(PX^XO#FbeLIHtqM;H)Txu_`I| zB8Ob60wY6P*Cm`m`@Rtt&Z8fs%a`kUdsk4D6r8%C^9bNni1pu6V3;keC`UFlJjOUbrNAFAFWmT^?h|!P*bzvU}4?U_p{BDt>51ZfLF;1nzRyYwLL}kg#v{H3Rar*4d)nXM#Ue zU=)^v%$GCpUF+*h0uE`})92nEJO}&Gx3fIA4vgA`C5A(VdM3*USh!dbb7xw(%8L1> zx$}%*s93hc`vU454!i*aEl|zoEt(A6mDm+Ca|7S!9H?!L66~(sJ9FUGm9~_3^CI$@_S{c;JZ{0)&kJ%ulVtAmoI8bZ;RyLm z$#>s<&ky$*V~=~zxHal8s8RJ^wdR`hwZv{jaAS@5Y4M|4-vS*}lE>=BXnFGwBrZ&B z$i!;tbHwwx9e(J|-Ixg2z>S|hQ^6_T`RZ-5s9O)}W`FQySiX!DMbe~bZWfBi%c51T z9M5*tL!Pykq@QG7k=zS`QA)<088}~JVqui?Bd>ityR|%nNvjX6s1GfO4J_hpnb>4W z(*M177Bk9$0L8f>4fNjHQVjmxY<1kwchew1jK*&B&hsfd09}Y>L%nk9jz|wlcB9TV zT;M!4h``-{eqd#ha;F*myOa&)kKO)8hGmK5i0#}huD9B*@dm2YAUi1X$M{AA!nFfa zWmm<4m;M>8%1A;v%EnlqeQPmvIp{%jeK7evD*I&jaX`Tt^AXQtn%< zKq{Me`H|QgdLF@nD$gQbTB~Jw-UwSK7g#1jh?J-UTZhW?<>IFd+JIehF5ie;#@(RX zzw2p-x!4*D{`@Pq(C-PQm@M1|T3li-Gy8b3zsHAY%s6hre5)g_e?xaTQS@+P2*#Pg zRA>#26)>O_#7_yOvWg_e3m@dsV>Af%^}P>`zjkV)@GOM4-oz;0JO!F?Qk*ITqF=TY z=W&Y>pGiqcQo#C+iex0qc17j^_>TjfQ;@F-%|*~XDqGU?@uQvpzPV!ki2_M%L!7-a zpktYF-3Jy)G+=#IflI^=vXUW2p$#k-R%bNGDH&?8Z zh}WN!V458&zk(A1{G4V7L44J=bQAeWITmRQM|v40x;0Gq2Eb#7PC=A^+EEklt&1tVbF!RY`Zk zqMXB3>;6H3O+RbG2bJ9*j%KAerN}z(M;^6hUHg1$D22LGENYo<7v!Mk{wq0qTsnyL z;mzHuoy9`f-6ns{xO~x~!Fn-dmL-{P;)n&xu;roUwqY5gm8_JxJXS|N69!-&OT?L& zs;WkV7Cog@)W$SJNqtCTGSWCgxK_Q$E0*dx8!=QusZ6WpesVrfa59JM4Gb(AoIP7L zr?X6P{2($vS{*bVRZ4L|7ScW4^^_${ikDx&u+>qehJIKeyr}6MAvV2IlrF$~j&~Ss zyD~&gQ`3K{n;kMY(j(DK^bpCL(ZpD{V71Je*)6e}I$CCiEc3xtcnP)@bwjz0oVQr1 ze>PjJ#F~s8=x|@KFAH#gqGj8_PxjF0G)bh({PsJU{z}hOhG&+2>tRD--C%Um`v7T2 zc(QPe*Z&N6GjnwzhGcs(O*ccYEYSi(Roc8CS_a_F0CUM z|9vs5{M2@w=$k%kQfgf+Q5etS!UXpRDW1Y7+f>>Q;>cwbmzlqzF5OO5%(0w~(Ew1% z^46iiZIsiaIsie@$x)H1(nrBIk5|V+F2%T1GKCuz8stDmLwaJX12&gO(k`7UmtJB> zT-@eHQUKH13(_uFGk+*4ur#K<=ls&-J$#qrB04&v%<}tH*loac=m1OSu?$c-du^0a zpoIoP<1LmINHNo;n~Htt#NyJ$pAI4HCZbu`S++uPqFmY!W1lEFI1cqVl99w1afr5^ za@l(S>OF?=VY^+UPr(wqrilx*U>HAh&AxwIaTEy9=1Vbt>*o=Sv{=eUu8w_?=M!`i ziNSaBoG+W)j?Wr=;eU?og}7#R{DUMjgWt!?%)Xf;y_p=CBe&@rn;EVQ@v<;EjimkY zHUH=2c}wunKnF)LF6H9luXD2I7ZJ1nxc+pEIny!wrhp548k1dW>^l*1oJi@7ZBUPJEEX#~hd@^u3%jeGoDq)PIT3-bXaYUc=^RR zOTYJ-Fo!cr_xOx$ck({tdJ&a-AkYVldO&e5^k-V-@1figyvY--VtTclU|zI1@IYX3fwn^H+eP6DOUb?%=oDkC&mF=&t(9VbIJ~wXw0|+UI^vP}{$&8O%<22}$v6l> z28dVAGh$Kaz@ou`O+mvSK-iO8t8;}(Medphi;UT$3e3e^)8X)JSH_Ok(M$qb!5dy; zHJN}nl9O3$7-);ZX2TzNkPM%Z>8mKUKVY!kNn+cZ;33XSHPsTe)0Xw)i9T`Un$bt) zEy}^Or&C+Ljm9>cXwK3JWP6?sw`q$zPX6|HgFkR`Nru%B`xr(F!}dL3y|I|6KUn#&1teu=;Rh1letvEuqFGNY^$#t>F{7FecPllXv zn6!s6+8GagPY!vjHv|+G*kizV`HN|$;td%IUW~7&DhTXK1!~@NM*Uuk3@qN}4N+83 zSGc(mt6la*UQb9p%xmsBEDn;=^~}M{$H=t6&I?6TD$HHJ&5WtI*qIy!uTBcZZo3!F z>62MJFy(rnjT+YSAZp!%(Y(gl3}D5{7l>zo z&E15FQepLX#T^iHiN99Au6Q%Xk%Ru^2s*hynOS?LZ+u_nNxpt}i#Ul4UVOAQ5jI_AS*d4kHY%)?7TVU zjAKul{Wj$DO7ysJn>4j+)a?m^z7g|$&Ycy>m8M?ERxH8xlciLG5F2}cIe*`l;~X;G zpfokE5Ul5uH~b)t{P-07{Y4!S&a4x`lw|~%ns3o$WdBMwVC^TJNwQMRkRp{@!dPbt zpsP%Dg_JZ_1aKuPo=YowFPJG!9$oun1x3okkMVE!6~llk#!xDz5B1$Eub7ap^T(IX zzXh$E71fzYv`b^8gnQKo@X;o2jo;T$r$*qKs6e|~H=ZxLm@K*R`>Szun$!O^;;1V= z4U^^-cb8jB@VXjNI#>A&Bxd>`7*okOTsDiN)@m!X_62Lk+Slf!Yxeg%Vkl21Y(qz0 z%2brOB>Gq*`v9$^N?5Gz;c4uO7iL+JOgV)=Z?0!D`DNlWQFoitVcoJ3XHSzd*89FkhxS=1ZFU^a}*~#-r#a(zD1s@9aL%rT>qbX8a>OGgc+>dSDER%eY321-k6;?==? zyh55bLDR~TVc2jQa=B0X6)Z+2S+Pr-`AJpvZ6!(8b;-`VIBVjpcj5*;?nghh@+n8( z!t%}0$mZ@A8(sL^K7RggVqF_n7*a-!<*I{s!oa(HV~Cz@>87aOgf2}kgSvy~fGdL2 zRlySX5|vghHm*phQI=-noF?{pD5pv;st)E<8ak+R##i|ov2ZzRR;s(J0hiz9h|4`T zGzqYkPLgRFG&N1jfr(+Zi9vpG@)K1wD$cBN*QL?2$*E1qY0z>KwHib|!#xYJj2&;` zq2Z+hT0)xIyIb;Z&UOP{AVaolLqWoc4 zuyi@f0F0W8SS1+r8%(8kOwrRcB*#-3S(Tm*kES#Xk0&r6OqNfv zI1>&0bSgZn^Jy%VBq}^%C(PKRX|+PrymAfwd9npsNR~*yl5m4WrtH)Dsg^q$%(l#Gk-^td{6h8!aD^)FYr?eP~{74o+RNc*33K#u<_9Z=rD*2MZ78R~3c z@vWo&7syNH)(KezStE9ggBwA)}-bx{_ z;Met)lYxEq7g61{cG6Dei-LSk=_`rRo{;B@Vafy-l(A7hZmsqis|EZ27Bt#TI$Umq*<;z|h6==w7X%jkes@)j8^3Ux+w&BpUjXqJ<% zHIxQf+!GY1+RL>g=`&vm;7lD=8;uz-Ca+4`_5NNO>@;i`rS9j)5axIhY`s0JbL{Fz z-T88k+R(UbDoHfk1g_78I~&~Kno=ybW&21ZqDOSki=7~aIcMuNQP4jyp~>Fmz$NhJ z>v*vGC>LQU+^?izr15|dd#dIpFm!s$t0Uj9F3)-pDs>)HMXQ34$8r4wU z<>zd8``C(7h3h40Z?C&bd2#EkKZM!IY|%*xX#rhJNJZ5~-AjQ>|`CmFdA%YrVkvlgMY~5uL|B{gfBXC z{C;)@)q8^<40{8f{094TSYL3QbSi_o)ZAmVO<&a}wE99N?**UKs@O;0+IsJdV1A zpPXrt+KK8ih~1NO!YQPUc>zD2<>Zlh`P+?+&#p62ez_5kad^GH!~Qc=sg*|rO8uU~ zQA7Mc|M>rHWv*7)Qo{a@hUg%z#@P~zN-h;tA#KFX(h1jTY9bKG05(^13w1LJNcZu`~|r1I+gbY+`EwF;*R$IK=ns*>Gsd&)H4Dy$7B$9dDEBB=sDq&@JP(PJUoW1Kgz+!i+$SD*7E^M&_3XG?jCQ-n&m(yL{pKG$8d z=Q)tfUTJ5#PhnyfN%iFK0?$y&Sm4?ohEa(`;g$yU{4Jy+d4s#dqEl#W>~5gXYS2iH zvC=FkIMC@5144XNdVAghSI}KL%Zl;PE?Io*qGEGrypa5`uv+P|R4Q37j-q~{=BhDt zsI77Oa-&`^tpG$a(kN)2geai$u|LzXGc5ND<$1mc$uK&peL_!^-Q95hHYp4}%4SsEKPXUc9XQ z2T6h@*(}I)o(l+^G7;ei`|FA z5U_3Q-F-IG)MSQgVc-;^#_z!-Zs##dsN zus!qS1o(4YkAh=Mph`hPQ)xp%j%-qIXUEsSru)|$xocP7X9_*!|MN5Df8*^Gb?m;0 z^}M?M^I(l3cg_9&uux4RL<>+5kio$fgfdjvft2uF?d3}zl9!aS!_Tzh-tQnJ7-8VP zKlq^>aH*ov@gzw`Rz^P4%2ckOsV$ z_*!g|>W~q@>vC;@8!~8zomc~WfHLMsGXfqO=Xn@LR|_!>Tv(@yEP!d}MajWPUooDP zNX?cP)Mo{3U@N`S{Gkk%p57%4+8j*XP(4#6=%9ewoiG*Ii6GZlqu|i$4@fE}-2s$~ znMpiFC4fq42%D<4drbnzAjAlD1;dg^rntEp@7vy6cbD8q5tH8{K}53kLNmM8A-O^M8dSF1yMqb%Wm>Nbp7vjGPqh!YS1aVEglA@utIFbLQXNC;Wx zT4Y^AjqTmYucpD~Jyoh(mRr8BU+}TZVZ~IaYy=UDn&;Iv&7s}b1KV!AZ{6wLjz3={ zd@m-uo<5(RzP2+x&Zk0Uf0iL(qZmWd{LLiP3$<_samh8c(BYGUc1!D7)z#b5{k?61 zY3iPdwj9)Kx;h_Kho`WMM6uK#5M}}5?G^Pa)b<67qfi8^36I&7auikF&$K!7K|d8Q zoprapFHDnb3c{Fu#TtpidbQfcs)u06M@DrJ!mSDkL&&aR(Y)EbFYQXS=hrR66_mT+ z!(5516TAqhaON-BGQO?}l(Zd&s>G=~vSJ0gQkCQgR}2?}YThz%kYT`u3il(I0d!KX zfSx0%%25qlKcHDv-_k>fDcQH9DwHY$pJ5-P1_O`gM6Z%70q&mcxqlFU1XsaRI4eBFc&$9u5uv^N*VV0k%80X zN5sx;!Y2&2e{aKHp_I%Z4e@DZz54oNS~2?>lRf6GHs-Chs?-6_77ea|p#Do4%@TLX zv4oN?klU}FCF6(D%`ng94H))JMn5wh_9ezK3*;?8&q(V~QhGhPno84HpmI4zq=QG< zup+1w2-OUb9#x6~PypgO3Zsz@UR5s@C^e`gpt0PLbs6HY{=@R!F$q^mSAl-7PIkz1 zu}&O_7>lVu!3$tMK9?SwBOfVh)m)Z5-uRO&-<=@WIt;VVAMbWI+gxduND81&UQ>Kx)VdkW8fEcB|y0y7${s8&F~wm_7Z`{ekv=V zL4nph9wo0P56>82qBt#IkDZFBsHv8UM`kdEFWHxuFU)1m1)>CGz-s$TR>gVDnWE}R zm9|Jq%Lb1nfDGh=r`Dhd3&B9d^!ewOz~XQirlgT&Y(!d6IUedaiwk17%(fXrp>PWV zOBJ57a?@5LfLcX6q!N_Oc@*?D=Qyl}y+!OnytU{ZQ>c&L3DWD&$Hj^hX^%!EPaD|E zSfDn2oiRv1ehg>v6Z>uulr2eq)M-Hk{2tkSB^m?^fE{$omG+c?uUn{w0-tkSLkN1E zJ5sWnlH3D^W8rwokJ&lmMgbLnfOc_+$ak%83og;Kp9Qy%qrv|gW?*#3Uf zr6%*D3BW~c;6%k6sP+CYfeZOl$2=jClr1wJ&ae8z&rW4;1w{|pvi8!*t$&p5*@<5Z zHVSg_a2kfN;GkrPi?BgtHX(Yd4iI_<@Qv^p%`reEafi`p?SFky;df12NK?mYI&M|g zs~|yE7fi}AY)m#(3zcH6BQZ>aX=XReqkq=f*m?&oNt5?S z+d*aNq0N1C%vFQCFQ6{IGij)n>K@069Lg$-@`$hGD&HmzF06*(F?Bv<=*xFtB`eL8 zJu}$49&o;DR)!3es0=@kGr@NEQkJt8q+-r7(PGRs|B6+%$z45EV3Ct+-G>;N?~^CZ zM&sZsK3)xo9H++<;r5dodb$O^`=DcLh_Wj+a9J`Q^K~SEJv`vvAFWeZWJYQEx7}SG7m>dRr|vQ#KRmL=CSs zMWAe)W0LJ#y8rYHEFiSfin&#?M8!TFEsOY7wlDYGXx&hUI8P&J{TOFfA2yasTUk1+ zYa*)JzRb#VUj^o5tjpHi{iTXA8n}qpxNYE~sJR{o7mF1DC*Tqr&!(DZisKg*TxR&vN z+X@P4)%vmNd}Xzwh;Sz8z);*)Tkck&<(@8?lvV|4)gcsx@$9gT1er($>aj@7&h}VR zesq5czmoEOo_4>(dliCeiMhnuPNV+KBSq#Sb4Df9lZjdAx69qfw@9s4*@QPNK2YlX^#vDTDb!NmTlM(qn;pr;lXf`87lBm!hoWS3 zq&(E7{_H(lSg4ogGi83znJPyH)#)@Ws}WTn%=G8u){8c!HFG1f=}%{Nt(phb=|2Nm z%&XTsGgSVwLLiy+f|0u42BRKq8mF|_+@(3l*T zFiY{p&^F0<;-XR}4t?K{iFdYq#U`xYNsdug;Z-T_vHEj}G~1yL-wR>fw%~@aM>JOm zr%g7Np>3d-q|cGI>5Gq!FePXuH0b)k78Tz>TZ+$w(5CbtF<4)0{P`KKk*xZnY}J@o0dQO8X84|4=|4Lf+?6UE|{XrfPOO|rX; zOx&m8>cfhyIC%4RmkXfsuJ`^CeNB3FSL#1NIwpal-m4F+%7)57lNX>lda&#?+}uBN zX;qtDa#k2#Z{D7KcmR0}X#rZ&$YzKm{cS|X((Is<5?%At4aW=f2$kGkhWbGldjuRT z#S?n2IoT5{{iZr;g=rH%s)okH)a@cHq>1>0OI-pPKm6dJ%iEIw+~Sm(-2PX|lao)I z(L~ocaoasc56VdQz53G|6fe_DNNBnpC-O+p7~~>{Q=1}V>JtD9BVE=>03R?J6~@KIegcl zA6{t~o9_;B?RazH%*cR&YVvxh!(%HMFx8OZSL#shOptX0P}`j=}7IR4VMpYKthToYsD29Zba@v{nsKhxmmb z)P{V;9Ps0KJb-M+je1c}(;?TeJeMH2_VQV7$O(aSwB*WeNknu}18+Mi-fZVKxJwl% zs3H)MzU^|+SX2pX#z2SYLd2#n4`I||p@VK)mjdf5oI#(Ek!0E59g|)KbZX@3n%?Nz z!i27hJTX4Laen%| z7yo@MSfEHqZKGIYx@Or7?nujcGzDse`O8Q;q8@ti_n5H%uR+NPV#2M2>R-efucU1E z2nCMJrODW$N-0U-D5E_|Y zr61Ffhuo*>Q}WmPCM80584i$@KS_c-A|QP;KK|0Q-*Ix?34%2*7HiiSl}1T15NF@T z4-1P_$SjjR#%O1tZ?pLFJf22MFH2!+Iw@&7;hLkj4e>DY=UcUO!vb?M?Fvz}hT5^ZntH+uxvTZnn?9 zFF~q=w)he%F|^ANu-RCw;bRx`yH%LfxriP6t`6()NKwSIA9{fk)&a1{-7_hZ+B8)j z;?@tvN`gV>RC^&+YVA0qv47seIkQ!P5!o^?S4)SdHqL`WN)8c1?hO!bI|Vtr2Ptc^ z5iSfiP4Be0+BjfQOZEW-%$w2}^>o*j2(BQl;LbqWG4YHw-Cm@?!%Q;|-Z#)B=$|s> z8I)?eV2cZ`APUt6$X*zPnIu`Njol6ooX-c|oID3oV|Yr=?_cpe;Wpbr98f94q_)Iz zWE1Ch7PGfRv`+sN;#%lWg&mBi=Yl&Z0}#WEw8*pB!+Z!w(DrwTClxvYc+>mlcfy$~ z_Bc3qP|&rB0c!+PWWa8MYr*_>lo zX3}6&4iDhDLUL6=M;IVZ?>{D4qp^sWfb#9@<&};Th|py=8Et%{uyFrXrzN)DOM*Aw z{43bwtO5>+{EH}|6qZNPq=FkS!1*rS9&xf_G^+SRS&QVC%{R5AKW{;&sYBomV@hW&pMEu)_a3zT zLhY}21j^HVnHYK)!KMg)^`eO42;W8QA-H{=!FiBp%(3?)vn%|P{V6z@B}aYWf@ED_ zBTKP(PNg0FH}rl+2FtST0hpLIYDHdIj8&R7mp=?78u?T-zN1hn!AqjF7J2MnX?>Z53KErXN#gxK zW`O@^-|oMK@@D1Bf7USa>Pkt?&!+qY9v+5*o<$SR3)Ax!FQ!6L{4pnU(7K|YtzfAZ zu62p&j!i-a!teeA56U6iCGi*4EEEwbUk~5Y>+>tcPLJOUR9>_yA~g&=m?sKMGu|-K zE+7_oU`ZZ4F(}WC0l|p4d7W)jdcFoPx*2Kw`I6`kMy94fc!FYAGN$baG#loOB&i%x zk|aAUHd-75%2co9lXsm~+r3i^W;0)N!0uue;_&v1QAU>wQ;iH)*hFjU zg`dG4Kgc^)Ha{n8UiNEesPcGa>u7c@39Q}ojj-<7n(*TW>}4NpnI z)g^$|iFc=TWrScA;H;#d1{?EFxqaxOqn-GET;~5V-@^Vsd7%Fex~RRlVSn!$$Z3|Q zkqf*WjN^r?SJH4S7=(iqCUl4^)VIgkZzc+6!izqVFplQN;xw>WlgzWGm0Eq82bEk4 zEKd4i!U;Zo2KgoCcOoX6>a`PPLf*1(lw07$Vz+&_<@NjRs`Gl9|Lgt?{m1%EbRbp0 zWd|$Tgt{u3)gX%)b}XkRozW0fsUf)R*>IbYW;>sl6VyvEE1T_6R90axy?p7>e2Ynm z5pszG6Pq}E!0sw-M!FM-s;k_TskM#w;^I9cCo(!j)B_e5ZM)?oQcfP~xcWDabOH@Q zA|<`9p57YQeYeq_qNqU{q;C+4`iM z)MFriLpR!0yHFpTGFMAK@vzMB+g#%Q_u&bz=f%JG73%h+CZ@6CkMf1+rV6PTC>wwt z-YCI9yVj8Y5t1hH*9MmXOuB_x(hEuYj4uhwCP7_CU{x?%O#!m8N#4`VFFA6B%A%AM zNiFz_Hbj(9OAXQ~2yncGki%IV zY(JnkIcB%G-W7BfWMv{@nPhjlsqy6P>u!#$?Xpv$&?wkz<{3<9_%p8%Q~5@Ug)0u* zcX>-aIikz)*6c&(RFsrs!!k2V`iI_d$4u-f%|p1&)tb!i%s~X-z)VxPr;Nu!Etk8) z%_s#*BS!{X{E@cw;YgQOtuRlUVs=*;lClosua&{zxrvBSyTw|oG@Ej0-B(bTZa7l) z8#zGldAfef@7~&}&%%3~ZfRvcv_bV7%!TOhXkXuj$?dAL^b`9Na*g>G6XC|$g0eBX zFnuF?nlLk|xIZ7g`(w_9IM;5S3_3U@cZWoeNlCB;8b>oKE@gaZKk1Y$AUhICCe^fT zhHAAVp2dTDMMbmYp^Z)8OzU!dZcf6u*?W7GngUW7J&pn8-DkL)ADcj)8~YB^K}-9* zgsO5rSPl&WNTZeFIihCs%P$boJj)Ie>&*L=BH&eFh!w9}<<=mTHu*yJU;@}%4E&TA78tQyDMLquTqj)4NzJxRt9&$BnB9G``YeC$M`V3JbIwY$)RkCZ( zssYc02|H|an`G||aZMk^lck*L!bLN!KjLPPnN*c9$nm0qt$8U)_2Z)G>Z%%Qsv0Nd z#v)TW1zKe@qKl#hq}DZ6X3*_b@tcjw@{HvtlIUv7N`KDE_uHs`n6>Za5grA?^ z&>*%!R_A;I#p(zd!`^4)w}oZW7q?|n42KVY>-!JP6l_V9Y0PBm!iva2NQ?K?5cie^K!GB131cNw^eP-Y})M#NWhY zVs3l31@&kOn?ZW<7kUfcu!FzrwFG_(qL${;^QT6yiXu*C&D7gGB{t%{!%k?ZJ{cB0mu(zYQIv*|G>{_95j5Ttb93n=pg!~yYA>-gW^ltGyB6Ki>mxl2jN?aj70Z-lP zs}~_!3=QFi23$RXOuyL0(^=%w;KfrTEmCelK+=XnQ-3W_`FjV)p7_)FT_cGfpag%K z9o-{KkDsc_lYr%dRXXHQ_09yndteNs<5p6L_dkO-k8DCE^6Y>1kc8`jSAK#2Q@KC% zg6vejf3%Ac|5KyP@}DZVxSh4JlCz0{vB&?fM^0AWvBMTY_*~{2srOopk;+6{PY8r| zRdjTH4Vp~~Ual{XOq}H?VxepLb3fj*yQz8NWR4g23?Aox6fRcOqe8WKF7)M3#dABU zrwB5cLmv~LAin%!YxX<+#gwP9vG&vB7O59zlHn)JLdho6x#DtW|1O;!CSB{F`BNS? z+X>U^3n<-LnS24udELl6D=ZA{Az=&2pa+T!W;L ztrS_`OdcuK4b&EU4AD)%lB_9(qea@R)1k*e1Fc&QVJ6lzYxi{Ck+F<$?+qY^L9`Hp zsDwC>Lx`am#*lOZZ6dq6!hYGknGyqu)Z*@#%Z;Y_NkFD}CJvJ-$T(#_R-#iaPCH0i zBzjM+rmu^bw45I+l%h! zl*!H=$c0#jqHKtXyVl2`0jj&~V1kgPu*-^z4;z?T_>AFXpl!zCC(fDDHuWd4!Vx%^ zAxc3-wRl2DYF%p6rD_CbL@`oVi_HmBB+k24^C!C88h{hrkn!A z(A%d5wmB*+;^teH7NadhQmJZ;VD)Uqy4XCEp)MkX1apNej~2qSVcwZm_F<|AkTqO5 z-fxg@--%gEud~ZE9@smT@>89_;U>2iKvf|<@q{&uBG6967)1mYKg;6BT{Ts}P8n~r zWj5HXJ&^9Pk$}!evgs(bli9V3U?V#lfSkbw3>}TTm{^0%P?0C+8 znmFU|PI>tgLn*CPVcUa5d|pEJ6te4VkKCbRq+i!S__m>a(B1bOQ}!$7UTze`&(rnB zU3RXM_XWlieN5lbTW;K%jBLy#BKTYffAQ7QMy?vROvuN@Tn<<9T<^9l6x+x5fWWtK z#tvuD?(a+V*Zos(`nKbeTwm*j;iK8)8``?KT-x>iF|XbQ?F*f)SJ>|*CVp3i*Ye1v zQe7+MH9JDt9iq!Cd0;8^yzpnRiDx|OXQ0YwP?N5r`%m9a_)U| z-Rx@oUNQYKw*L+c%;wfZc}_PtdXz(Jp}1(JaZ2fR6y-MEtzl|KTpT%6$~Q?{tZPof z;|tjf&_MIb34b_y3Yc2+V_|}Yq|<7Ms-l-DAhZ~ydrBUr8gFW7lG+GyXiY+CkwrJq z%4isxH=RT`ppoh&Ja90N&oFb(%!7iB~hVR{^>sWW?L zhxbP4NSmEl2oe0zJ2^Av`gUQdEw$zuj>?M#HB+X;oOPLk6I4YHl?sf@TtNSppJEia za25_xbhu7L*%i%CVFsbeUd0{HiBtK@UOXKD0f4#VIN|alp)wL%pvS5jXJ!#&NUmw_ z%kbe9H&r;|TZ3_bv9rX4I>Zq&l*UCsNh%TfGkCs-G5lRZ<`<)X#c&Om7EPI0M;Q2( zz2q$O^gZ=aMTKR~s#TlYnnfm6h@%wJ#etoj;yN5Laznp4=8PG@FgB-?@>*{Q*_iIJ z7er-_GKfLs(S1&TDO>t%Jd51{(V8$s6L`SDqJawxKxyQ(Uik!2=-ZJtf;MMN&8(?b2k)xuq zsf?<03NwP4wH2s%7PDfZpSjsVmV4mdL*@~R!ZmSgC?g$;`ieC2g7pN3>KP!kXpW(1 z4j|SlG*HiX!fD5XC5B?5p|D;;z?Lr?QrN5@L{qvOzR*A2c6eoAkuO=? zHBvrF!PGKFD;2J1f&pe;R-`0G254SvktKgrFq#ibr=@qPuuX0zHJwz`j8wWu52x!e zIdW<^)=Y&bG%IJNqen97y3`T!a8?4Cb6L(dm~zmM8j5n(8$VjXby#+~|FZNV!&C&o zg9uq}Dm{6eT7Z>qp(PBPUlxBWG1st7kIvh_>Q0b@Yq$r!vP@OLDTKX4cuC5Ggh#qp z|Lnfm=T=7eoK_fKc2~B2IXTzv=jX)EbpXWB$h7wqY*2w~IE44jO}L%^ZawXG%2wu` zV8K+sWLJ*1d5x$d%n2SiS#jWbMyO{)J=W}5Jh)Ppt}uK6)pSHILe-e(7iPY*Cw2~BydK< zy?$YJ-oic}XbIoog5B~0Zh)ua@Ezdz=Rn&+kbH+Xovb_fp&ZO}zi@lqa4x&4RZ}W8! zr`~c&5cXr8a=(chB`TS}e*DXcpWfHAsqjs3)BKOdx&QW&^>{GWlo_E3m4bnxx0_UvpAayK6PEas5 zk`^;XiMPP~4b5oV)f|Q-FfKGygyvY*DsJU_g<(>75$y*BfuQ_V$Nc7a<$ZTXZp33& zehE+^qaxxQ*|vDw?oFEZD~v}~DzZ}rHDt{{KV`XggJt?ZtmJ}EMQKy!Ap)aHjjdrL7hPgEHKU*wqlqX*VVg zl%5s^6VE=AxH5{nwkUB8F=;n2p4_1Aam64n+jcZ?jR?JDa~zQY#koOJht2$arr0E$ z317HzQ7)4;>#>v#9s|mwGJ&Li+eL4`2)0KOZj!vgD7*Bpc65nbPbRFeLt6a7!2D$; zzF2s7Buqarv?y=Dqc+s0O@f|^<5Qd3LJ31#^fsr@cf=LVVWA%uaO4z-yV-A(p-%A^ z1xdhlrf$~!QFg{*q#w894diM#!U|hT-Jvd`6Xww?X!3i@E`~;+E_HLJLF*)k zst9-|aI%rC1?l4-(!7IKs~_y_HFq42q|lUD)m??wCIzBtLal>zhXet7LO#QHj>C#p zJ|T_1!GC_&I|m=(t8)(xkC!z_4y)#xPOe5R2~#h0<{Vk?5`I9lyvsB-zTqs@hgBO= zE(q-WYj(01o1#kj4X3pDk8sNW_N(}BhHAF*mMpRW1}{FXP6wSlHHt7was@4c)+|x@ za1mi1+0fvkecx6cw}n~@bLLk09QqBe_s?3HcZ;qYAa4p6Q_2WP^Yd?d>TzcJbr$FS zl<(W;5w*XIwK@i2m1o1BmSXGBO_K7OOOeUGRUl<1|79(d=SEUcu31s1GLpw zhz(lvCmsmXoERe0qF@JbG|~u6sLTcpm=K>$E4;h6POb=!g7uWVXjkM>iF|@AH;Va z;HeHr!WFRnjRxKPCb3>L7q@!Y%?_w5wAu@RccY3R5hq>FSjgB=(LGpjc85RzA8YRz zq)WGSi>|h9ueNR5w!2r`wr$(CZQHhOW3_R6?|sg9B2L`zy@(U>M9qq-KTlNT%*>fN za*V)!k8gRLcM`>=zInW6D@@PI0J`s%27<^IT#>RAO;8_kCck&N1RP&RH|||(-yZ*qy`!v#KO?ZY33mM zbdflT(pf196%Glu-;Aahl0fpHq%?c5=Vitc zO&2Gm|EfXoBxwpN{uu4+|5>B`pRB4%nzD<0$X}qSODRDO1VXW- zQQi2S`@jrj!e?XF!3U1zQ_*D)PLg>)k>3aKm5&P++jb-`1*XlVD)w4 zs+%3DMLbQ$Gs79`KM8K}8c;6$oHqFmiXPx5bbT?>Y+2WUFxo5+0u(&+^*QvGivGI( z@&k_y;t!@!)yp?Jbs*N<6s!6Gjp5X%+&TZ32W=Fz7Sb*jA&aAfPA`_)Qr=g%37RAk z=1G!BH-Wa$vB^6E71YxV$p;UvfTe<7I~}PFAdrCm)H$ZpN|ES1Z+sHIPrn)Q*K4c> z!ew|u;_J9<;^veK|M z<0-MFUfx_y9mx;yxJAEw#+aApKd4+Q{j=6Tf2858;2-d=mX};KNNLT=9<@ToD}ZUhS_|q9DxK&*XHvi%<@oKoTcU6rZ_z9a6P0 z0JXgl8S|hpXS5#emJX?KF!-7R!&vz2tpW6>NP)!T4dro;qMzguQXQ*t2EL>I5l7|- ztlDeJON4>yTVT!-w!o0x(B#x9^5}()q+Q*)U458xXZK_9a325qqwfPB6;_@nA(r}2 zB=s=_X|#Vk1mnbrxr`fijQR+WJDS)R++Av=d_Sm|Ay&XpCM5TNrY^Xu|K`j780_x< zS%dvACf5z?A7BYLR>-kJi`^E~k-4l^2G8aKr!SaFN2!Qs?4p?ZQwU` zu|_ej9|w!9zbr(7c!Zzq?BaYpna0TZ^?LCR_e=J+H4tz>rc{)_(kV047mEiLTD1u;=tlRuaS>tnBgK3A!=_GMY zw`3RlnUJy_P>V#XIKvmhv9BujLfZvwuuy7D6LXn=zK9DGpL`$EWRO z#}HT*D1)PheU5i=$%*H!`x~STSM%xF8mn`6-JEHBPd3VCWwmmfz*F)i4ZHF?1Wl@% zyn>HZ-l26aus&$nZL^-tv-xCuIaYs9kRW2K)}_7I=vj$0$%=x3?%LJJkTJZJYca%=xeO*J#%z?e9^>QFA8YHFc!YHe@t(0O*eVR zRFD^1RC6bJ+r;dYybG{M=%rV`Y60|Y9Bm#sJDuU1Nb^0MJFVmT*o2O4H#X~gIcaJ; zNi!m?Fc_)4dGTLjn9p%_x!)^)&_&U!FfUiDZ)8H#O)^z???15^wCfL~x0{Qt6e@jS z&X~5-Z!K=t)>XM#88|Jh2e+3uuftgVl~!w_Nm_)XH5?DOl+)Cm)7q%bt1@>e=qp`1 zmUyF9VPREK(s3cSF-fnO#+e%~<26X1tNlu!_=9U>Ra>UHarWc{@TO7>p~Jpd@ff>} zFt0sjT|+}k=>Y_=s>xk(+s7((&@}~6C0Mh-DJUE@PZ>}gK2??xStjD5>f)H@L{o3g z;9GfZW%JC}F8i$X&Qwd&R%Fzyv#~Xvc&v8jZSAGXzG>+<$y7&!$mZpG ziQQhDDz3H%hl?sHOtrfV{L#fNWl-e+!-*ia9CpsfM?-&g`ecsJOHyAT#>9N`^qxt< zMJPF56kG2h1&)-RZB5M*cdd;y`?iU%#%QJ)1>7O>?9oJ%gKO{dXL^H-*Su%}%c*90 zp`Zivs65ygt6I5)!m^$A6mHRir%H09+97|ny~)=i1$8znK;_pukz#Q>-1}l%0R9#! z@rkaa{Vd05$=2~xn;>PX@v(?7#|IA=EITFf77oRXg`Py&V}~Orv0_nfQX>UWnHsez z3&dCzLZV;;kt$_rV6vEXS8frgDsAcFE+%ji#wH2>1a!6dY*pi+NCtvp0XZ+bu(NqF zHR9BjlyDni*hndzQoM-`N@J$VYTp+ADPtp~xrD`U>+?+>FTt7?Z8)Y0Lq5#qS579` z2vpmNI`%Zgb7wHoRH(X!G)tUdqqJh}g;S}bl_#-Bew)!NJC#5I02dD%F`M}!<9W%f zc^a`jC779CcEfatQbw$f3RQNCGH!`jeV6l`83G=$Bx-@s&+i(W{4O0E0hOhf!Tg5e zZS1W4`x#h&!SCZ`-3fn_iPg%O^TD0xjHa>Sz`xNfEBQoQ&Z7&*jXWByRxq}-P1#Wx%92yYnT zUy6+%YH_Wb5n^E=6{4qYCW)NdUAknq#}d>So%L5E2BS8O{{nSHIpoDgQfyF)COhRZH&ynQ{z}lv0WXEsSH5is4$1!FZNoZ<; zSyoKj!uE{A?JEV?XpU_R2Z1TUSp1on^wjN*!5^e=8HBgoqEOF77#IPO)}_J`dLhDJ zC%@)bvr}0+43&{iSmE)qHFN%{5r2>pQJX3-HA^d!|1l=YB{P2u`sRgyJzXSAj zh5zvaAZJ!yi>0HpA&%lBDzanr+aB$pV*xL+a*;^6eK06+R!Ypmo!S=7eWwfXkwSJB z&3p&T8>V#^{u<%wg`>E;3S5&KSB`(J(z>@`Y`{Iyvo!xJ=(AsL5a=^Ce?;WxPW(U& zFbetr!0Vkh|4u^eu%3ffcXzI+pLLStw^FPk%_o4DegR&7KeT{xqi<8UjM%8q2jd$8 zofGKCwqAv_&K6xqqRFi6X$i}l1IbC#B<|(a*&Ubwu8RjB)TJHEvFjqLzqg2)sUru0 zaBCITwHXw}w-}B${weKgO6jEa0Uh$+&Goz@31Jm33FQHXQ^hw*tWRRauh6(Z%!?XoH{o)wZ^Bcb!vu({@|=Ea)6(_!LiWRh9mqG{ zSJ%zlk*}=#wQs1mE>9NkSw?R7+6fh1I>v1-U`UGs+{b574o5B3wKg|FeP9-RiOJKfd9I+!f14kKvMmq9;d?}Qz_a^Vv09?#6*C_B zayo$K*m+y5LzYX}xo4Nw0{2fY1k{F$G1pyk2M^3;;a)!R4~$#OT1J9qn;i$qD`pTl zIuHpsXZF`vrUj5NHwty2oS?D?*2q>gJZ4LkO|2C@HuIvb3G4Hj`Q06|cVF+FQ!`pI zS%W^f=fWc?LmWU(>VVWwZYu9yn8l_iwp0>awxYGhX^=ZZp(4#Smayn5%w(?HFCsQt zZ5yYI>$0-6B4t9*7*S&C*OWe|0CWgk$y3HLukEc=szaRskJ?rQvyk*aBl7v{?&{~t z8&;={w5a&ENL<+qKJkF$=-Gn8cA@zhO2s*PD}Yr?t6^$h0A`_6IDLNymcqdB98i1D z6YcdS6_j9f%@jJAiH@e|bEAFZ`Zt(AE< zI#bj+;8@k&4bMT+)HwiI^)*dP`)6R#vYu%lH&wgmU}D)|TxCmMZ3<`}a!SZ`Z^*DD zNOhrTVrG$tX;_}+MSNiNZM4C>8n23{ye9AJtfAjNpZd*at9926UCf1_t7jL zMTF#Cd~Bx2WzP~bwrhr0Vugi9xkN7e7dbmOh#J$c$Ck?*+v!&Tw&>cz?SyGMq;M{3 zUpXi{qDQM4SItFr@%(L)$UoK#HK)sI_d{UT0JBc}BeQo}A(Q=qOF*EDY!G2^xsR@i zXpl0vT2#QR;?ywd0V1ooRoSL^2Gd!fd7DCSg;(`r+LITa*(BAK8g*YOq-$a%6shY9 zG;Y&0iWapEqj{9VG6xe*{h@!BEec|DWR<*z2-P##Pup}`gxWpXPaAPJ6olG6+OG+Z zOn8YJ^8|@gC|d_&_4A{jwQkp2(SCpLIsHO~LQWZ@ZB<57J4n7+Rz$kg`3?08vq%H4 zdQ2h)75bbX>%fcI2YIC;O1If_jz{Si%)VUQfs~|8WkD}Y{EJ_duE98tSxXdV@tajK z5$pD!`A9VSPSJxe!hGy>nX<&-IG6$=i4nE|hGqkXq}JN48QN0#XX$7uE(t9eZ+j+H`o5@Ft&Q%{Xtvh76_r&Ok$ zLMZ9>(LxXsr}W0yaAazhGyR0*Sw!KK^v1jAoDFlFJmM}v+15*6%0f~6*UMR}6$Wk)$R0U83#bpaG5 zpRM`z=5z=kQ6s=R(u*S8GbcpbMq`><_-LEqt`&?+o|}<7QVFnrC#qQZLthY@NiIJ} z2UC0UON0iQ95|MNtR6AEvV;?WF&Ehmy*EGHGMu7*Oi9Qd7o7})vg?ph`EAf~%2@Pk z65xJ@OMnqauYJKT+C2LA^t3#!x8^|O1#l92LIgoVd~u+ejeY9%j((O@l$1nMe3AyG zQux!}i#Ab@5{{%t?6nJjRR@3v-wzf zA!NCWdZB>)A-?pI*vOHzS@tXLZ4z=51L0)A9{&JyY>&(*Zj$G+zX7Zf$IT`YJcSaR zoTk!qkcf^!b`8XJHswSgJS%@>U#eIf-x14m#B zWA{i&J4RmTs*05ygiaxWC#?LLOL%1Jf(=tty8~@qK-J8yU$w_9ik_PMfU#*;( zNqy=Jm3Fd~7!SREayTl-eNL>c>%sl(&6?Okff#6EuX#=RKL89f-_+C#j$Rvoi1 z7;D4{N;`$Vv_);%|0x+y=g~Y8y7emw0*yXA)E;e&zC(?^L>z+swBOG7-#EAhQsCom z<{BPhR{tV)-tts_N^jDpoJrr>Ruiwi6^t$0EF0sn6eI#jX)P*Ge$#Mn}5^ILs`k2!$+{p1vDxXBmuhAVrj19`e9yFBuYfJ`Z4iaGI@?C(iAr8MTM zR62skr(ir2O!sH_bsftSHq83~xP}dsX|NcW$jDHj5Nw>tOs+^<+(a_Nq(E#XqVU`; zT}96LWW_N9^>$XO#S}&o%&zPHd+%wY^|E1xPEX_tn%gL!Po?;QxP3fwYT+GD`FbMvjHV>q6ByzhH2y_?CG5^MT=ocEq8@2aXPy|)xn4;L zCa-6l)=gEsc-DMbLFZ6UB_u`uo27ctXR)+!)Y9A%b&R-&mZ{4dyeeR`VT}&BvD6=6 z82#-g1vOh}LF)5acei{Qpc>*q!$2wIB9;|>xVM%cmKCFU)n>gPJeX?j+YVIPm~(26 zUa1#QCY#SGw1*_yx(sfrxLf=_MxJCi#*bc{nIOQz82Ijtj#Z+jFAOkf2iQl7CW8HD z6~sF3#hP^&7weD`Xosra4mIkCy*EXA0zS}!Jq43(W}ZPk9TvG*osXm6tQDII!&ju*0aLk8|L11CjB>aSiZ6 zK;lR^u@5A1OeTFah|a1E#M~L#oCWMKi<2iS0Nd_^Yv~H1s2|;8C(_zVXw|+6hQ&|J zMj+1Vj)0Pizzah7d|y~aL&%vJc@3Vnew?75GjDX*H4ZXjG&_(W>W-j-n!x4mL@MsJ z99A#N;QH5&7m3XA25Oqe%QoMc2K`>u}%6+n>hAZxr~DW zvj;VOt7y2AsRM|nHm*z-St224b2dX+5|Mu`x>BK+S9`JCN$_i9KT8(+zn28~HID&& z&e0I5I1pn}eTT_Zv*sI>yc^BH?nE-qJ8O7a1L>xLu)plsw2FV?*!yQlW=~8zd5%!y zP7pQTY&(mpO1N^sF?0;}6aE+rfufD2ES*4o5SVg8c!$N@*EK?W2f^NkH9~8Zo`bOl z@=r)s}xBR@LL=J;mkoB8}3(4r@+EJ*Q#i0h>ICsf@3%Sw!h zy`GhkikXqie=0FqD)0Z2jQm0c#Mc8E0+Sm;)4*3##8ZYc7iK~P=I0}$*pH{GjlV3; zI9f_sZhq9;firm%d9(Sy`Qm-PP7=1!dzA`I4)8b*d#!Q2tjEgGILWRk5tU18QK3c_W zObwno^IoZKFo@2$t}Di|5gRCO?7z&mlr|!P#*KgquGhBTf=W(dVZbzB(LZbfSE#$x zd$m2om}u^Fz;tFtt|rFbV6>uLCpoBGnPHnDrgx zaf~c=c%YT_%BwhQYku$niKUpG6yEHfZ4o8oW}HJ_COHj8bn=NQ0ewwBnDuQhIB@nI zgghh247rF8<35jl@o=nAj6E-x&D@3J28^k1pRRQl3b~~>kDTPxOB9PHv({>(N}Rtcf%BekG08;|;P1W;?LPCS)meH#BqP40>6n5&BZJ3JbGe9$N* zy5iIrmBL}0(kgUFEH1OXSa776?rj!V=-a*bRRum304D$ti9o8uEK1hZURKyka722O zU_pGoag&R51%JY(NzJlAW+uc*Q#2^h3Bbh>U11>C!kBv`=@cnE+=+9o24u&dXGToQ z83SX98}TzW+D=N2gUY>xe#AIqB2{7TWjIgl?{)a0^Eg!zAq?kD-mSg(nf0Npv12E} zd(vi%I{A#FYOBE!m((3i+XZvObYcdbn~SdCLAv#y{JH+PWO!pbv_Yz+PWc0q5(bQs zzY5Ex7Of6*+d$%!R_h!(!fnBC5Z#c3>VK&sBgZ=E_NjR@2{GK*MUVSkacn^Ef`i+A zU_?f^H%mlP2Za4b>m%GN)ftz#S%xzoD567df87AzH3t{S;?Wxs2F>4919y2@%@$t- z-{JCr?|Z>?u+Az^ipdc=aPSNYb{~r~_L;b`do~}gmz>zuA4FkMsMNoyjgTU4H#hCE zCm{Re*bmGjRTyWjyo_oaq}zn!wpcA#Nn)&3rorq>!obK%BJYqXYdyU&7_ExBp*$RD zg%h~hu~Ej;#$XD5jo!pyu3eZ{${AqT+*=IoP-|`Fc7+~9i!C6Q6C6dXqOSS(pqi-( zOu?OR)2xv~+WPi5J$8h+!0B^lA4xnVf?XElm^Z5qk+QveVJFNes{LK1RZdUWBrQovGSYF6EMe{|kb8aY%tU0Fp^} zH-Q``3dO_eDl4NbbY2m?4ZC1&1{4R3Uo^qcnRXEQ=jAuojK@l*4+Q zU`eX`AXCp+vKeewX4IU0*B>`^^;3!v{4fiE6GLLfyGc9Op@AP{;y{eYA0k2lrMmI* zfO^25a$+h)Vj2Uib@B|hu-2;lm{bm)PmdyR^8xX#i&7FC6k)Y&LCCWYeBjP=@mPf1>LD6x{2b=J9DwG=g zPFU>VYUPc9^L1a9)2AHM^CngmtZFzrNdP2RIVRn|B|sfazJ?I~7Z%GRupiUt42f;( z4%@)ez-5@tS>IAQtK-8m{I=}v6FSGCa^Er-+f%p(j?Fu2{XZhs{CdJCUq7Q~q(1}7 z|GgT}Kk_a~+c=upSPL0B8X5fSM$E|4_J47JR;gatApg(+Zl$f!Sb=GvqPS_)3TVb! zb;$JsF3e9$=uK1{sp~W>=($Wd7f)MHXdW&Rz~Li=?h?}bqj$&Uq6T;ZGkf>a4iBcL zl8x)`g3%8d$=xzbXMKpMWLoc;2;Y6ydP?-TY zH7+AbSr|`3K3zjJYn%ldv0#}Ao&*?))Q{9oSbW5yOLR2yP^S_t?3SCNVZ6xq%2lUj zH7A`y4>NZ-v>0Rcu?$G5H?Nzdo{148u}BRVlZlNWmED`Kb28LVU6@_v2d0V9>VYdq zI@%q%gO-h*GeP#zX$0dHg#XSL62X_i7=*NzLljRP9^bw$)oZbsE9`?0RclYys#$~J znej#B1r)pjXHQ(2MUbFcfRR+pjEs^AHbaRk5spqp+Y^?0GyojPjJqN;KqO&|oOj$3 zW9Q#tz3+{BOq9)Cn_NNDrx^cm4b!_{n5HzqELJR6gdL>QYdu{=%fn{;a1GM?pd(>0 z&iC)bW1PS8@PH@sU6u>tdE0RokJu5d_%uQ~6HXG9k zunwI?IPREAqNnv~(SV&!sr!uwEiMu6NgeI!lT(2}amjMfGT=n4+_c*A_^^P%(OW9U6GjvUgA-vw&?2Yo zjV%$8p}jW3IuF%}1y(hbStG7H2$_R}APSW)7cQvYeEB4{qI)nEiwTMDM=db8rdrTfgdvKZ19pb} z<-xV@@BV^(?`QZ)g|z_g;EPAB^<;Y(x$f@K#pYH_G`B9)J&2Yg{Zlq&&c{COifj?O zD>G;LHRL3I3O}aMiXq>aqNI9LV#$-6xvt99!MTM%LPQAHcV6Dd|GJWXH0)?~%0N?1 zMvv|{k$$X*XKRd?KYXmbay8LbJQ*!zZ)Ez+C{LR#YUVf~;|P5+FP{R2kH}$!=k3!g z1?!i(LMQE^Q>X|3JR4(BvWHHh5*#vWUCb)e@n6hCEOduZ2$6_ACl>SK;%9d^PtHD{ zQ*3x##O7v}lyy3zb}*sTs$+1NU`Ww}x1iB;@4NC}j$FFrw_NQVX(&2p3^-+D1*d+H zyB2T}%?bzwi$~+-OXIwOeVjGa8kTAgVg=R`G&82*aB!*Tti9nDpv6fI#e!wiKMbA z0C5rDE*O4iRM`a>L|(2PQ=2f3%@l`e#=Vjv#u(;kPSY?W6$ipn z2h3OnFi$ZN&lUuG4?INauhE0*h`zdnWgfH<^M;E0^e1~yI21g+#B+oMnFZl>h8zlo zP((m87h5L4FC`lIAwEs11r^t$Y!AvJGGK}sKz9EF0X9qc^XFtA03dhOSNq?^AXLS4 zie5`jQK}1MUobm@-idsAara!};lO=Df%Fkz!wqhW*$_eoC9n|$*(g}{Qd_Y{hL%pz zTJ-rg{gCuoWy0TWCAcCN_J2)>-t1>8@=k1Grj_M*Is%LKjh+x;7x?%Bhx5?k4h==% z>UBK4-w`&yAYh&!LJTSKz0=2%Z%7o!HfS}`*iu}+ZptvtTnZ7sK`qZQX7+A03Ji*y z9Fb>|kjoQ-OwY3Np$EJhAic@-mHr3euZG~LA`ANKS02nig)FImYEA#&hphkY>Hjt* z9n%*Lzz-k%J&XxDA-#XuD@>~6H!7imO=4$jk-!kVOwGuRrDFw$+bd|*ye`jHDyVu= z!TWc`=l#745WN5=mxwOnN}gnyB)!o7oG6PSENMucrc$yhExusYr&}zC?1FdphRMZ{ z3`!2+^l~XCJ{@iJ$an@&gsQEOL_NK9w3&j$Z~PCp7Q|vznDcorqu+gR0$sf@>H^hL zxkdVzBhg~h@x-5fUW_|vva+D1esbxDi1Yp z)vG@L-ROUtJv&+a`BuvRI4=E3Djp6Jb{I#2>Fm0IW|NZ zQd*ZQA~BW3iijyTP@gY!;}H=xeyhHN9C?R!(Pp>jJn|ryfUJy=Ei^iMoYZ#M=YuHv zG_)+9QT zLfs_Sz+11cFLSW~OvM`cbDas@v#z-A&MBMHT$vRM%EjCKMuszxybF+NE%r37O`0~Njn zjPhhPOe1q~3bM)A2f*bd#D;nWv9e&pT3eo(aH#~>Pw}qA{g_tYs^oZw4Pba_U7Cay za*iMcma;J^ddtUh1p$@RLh9zW^21{@gR;D{sfcFA^up7jAn6 z^{f`5CQYjqP7XmgW$w#L)xW~-fzP<{C~Is|5YE(m_vHc`B4qt%$_8X~_`OK-C8>B5 z@bGm&`~VZ}fJi)-h_fAoT5lhxB5*B;h;*|}g9>tVRg1=61kHLLP^bB>PK@-tPk(aY zJkB5&#{>txv2!al{)o6IL-Hjp7$0&Km^%@dKeJkyE{X~I30)=O-upo=ueD~m+0I0$ z1uX%p+&*E_rjVp1$B{%FmJ;S27wrcYj%hWcaSwy2mvGQDAp&~3Q8EHtT;Sru5TtWq zo?&a7S6wt~|LK=Ciw;LW_))5&&%)rkLld?fYVgJu5*Vb9)EvUqJ1MfCs~sQ2qQ)&< z$r8l&&>Do8?Xq4`^Yd6Nx57DdZ|ttN;KgN=ekgAJGh2Xl&g8;@zmKewk3>QF?Skbh z)S_aOje5tlYy6BGMnGj^G-bs}R5uv`19+7Pq}&@Ul9Wb#-fwH>3}YO|36)qd04z7zK`-H}6De z{7CWs6C>EnD9Q*#6dqLS8boLmjLyIG>cVD2HCk)Xe+y+Wz{NK7t1Hv}*w%3kJH8|{ zV#+##r)9|b`@@`h)sBMtmc8xMANC3q=`>hs1H+a*>Qq$G?tgk3bhEl9{gOwr9P9|QPGh_G-#RRt78G~R(t9j0pPvKp_n z*d8^`|EenU*lOG#M;`>_fgFr; zouXAKDnG;>tyQ+`1xfhPm*dvtyj-_b(YpvPb*Gf9=it{@?&(*dqUUKSgR$`1wm%{= z=Qxhg>knNIR!`IJpal(V`Ys7lzWzE$d{xk;Js(YnK%ofy6pDQ@>imiCDV^o0jK&_= z6^wO7u4f16!cDK1os&azTt>yUHDuK0WPAG zOBNIFWAn$qM|5-MVml{)j*C@r{}g-w@wg~sBkyG7Wb|L$Bw~8jhL-;&z8g1VjVO;i z+%p0Fn@%o*`V)-ci&AQ-Z0kp2o4L7<1hqdODq&+!Vgy!;fid+B*IFu4ws%-4-);}+ zg@`BUZWG{4Z6H5kaE-?sGqC5d4%`w=(fYQMMuA+fJrN7!v+2Gw}sxQ%f%*K@oVt{3bbVm{$1}GdmkZa zm4*fVDQ7+P{A?_J>>zP)Tl)gid%$(vZTiP(QMIS``lglLjQokX0$emsj$VcLoK-W% z@zBmD5&}3Uyp??shh|xsf7!J4P19y|lfs`?{XYN^&}}{`#4R*L$-{^$@oL6ovys`3 z>&cH*!<@YETR5ugq@XHwBFo?@KavkT@S89Kf@1^R%wl7F*bu>qY#I0`cBJ->X7EQs{Zj zwu#TsKO2sR!QCFPAPJFYgzWL%;xwQfbs&cz4}!x|!>bj7((|yV%MEc(@$2=y`Hz71 z*JBgOX~ID^-MctblMud7zZ=Kd zWQZMj3o$Zw0W(%^zx+GJVI?llk^h0n>ir``mieC&#($fv;eTVZN<05jI{2c=fRCqX z48&8;B}OqzDAJ3Nu)u;W!jBtFY$W1~;JuCCB-ya8w`(|S?0$iJIgOAR0rR>ILNfv8 z;5c}>)ZLHx_IJOwh9;j6F*bI%VP}8#-0?o?cs;oJQ9QYY<$=i!;ipw+?$THP87AD^ zgW1~q8(!3seg3SGPdr{$LOf>+UC}*$VWhYU@PfWy!{wO4I&?<}9hao!?nbD(DZV9J ze2vQZ+LX2LUS69%Q*}x7fMp>Jnyhy!tMQkl$)2Tc4H2^L(%{yI#*HrW8264;%Z5F; zjCO;?r*{kZ5XlQ4P$n*rgK=q zms7L?l6jUId6Q(LQ*FBQ;D*s$A%hI)?m}f$d^+d~wg3bPAw~ut4wJEO0a3z^>t{{D6l?C8Dh0=#EQf~mc(v8}>NzzFdjElQ6C zD{#*RALNQ?%Fw$^1HKMY{(aHFl>G?AqKO#QLb_9pWUM&(X>Wp*2pfsuj1)A4GT=?v zHXK=y^|KbtQ2ZlWzf?y-iTtfFjJC|rgG{7F7vqbS-7Dksc8Je{#;~O2bniH1AnZ#(7IDfB2uWs{JtYbELX@< zbD6rVHOMI4YJfo+Q<~}NTS7fWsm>pHi8+dvE8g%smo2`eXZLpgfU|RsWx{tVsygEc zcP$yvr<5Rs^AWbmNuB>Pb%Lm7zuFM76kJq-mRU_zK9&MR+MV_}dTbm9C8NGRhGHRj ztMKkwHOihfHD?naTfMVtpAcH1*bq{Nl~bu!!&$r#M%@0xa9~;j0v^BqUgDh&l-Hdc zQf@JT$9*&pImh1MC%Y=^Aa$6huo%01#3?q-zK>k?buPYv7vyaVDtN@nM_KGdJ7AOK zT%sJna!pWK(=XiGXCxr7AZ-+kH0#md@57(IF;KwT83D0ESA0+9Ip>6QGnq!XL&$f) z9Y`e#42_^a|7&J2x<#Bq^NEDNEb?9-g}P$=lxN0ka1UavyW0h{x%!4sVz~b+LUY?a zBN>YK;~^zbRqKUbHG-VrjwP5*x-CLTKfPMHF+!kI5I>rU8yc@w<2e%4v?p9DV^TFS zp`HkW^qm^CL#`)8ckN-nX@}m&*F#6{5s-iGab*T!-t&F*?J2R#0NF$=XF`ZP8Y^`O zack9R(n*?Nt(YwAH7}Bmd{!kyy=jVyB+V;;9Px~p0r$%#um*bsZb9BG61+N|Zp9RI zrNh=hyA^VkSYrF8)vW2NxHjZ3pMkvy;@;>lo%amGB4P8NzQ2uA6Pye5Q=P|tg3rHo z5s+-lUa)^$kKR8{q*MNr`%$#D)N?SE(sQ$Ma{M2iJ4J0-Bz|OWMM$U#K>yHWxTA$; zC}&_irZReZX^C_uB8>oA661APqsjUWOB25@DzDmMFdtvuaaR+UG7>q#O=;tkYwn-I z>CEL1=i?`sFA!Hltlp{_h)E|BFpjK!o^XoAo(mwZ_PxjoQrANJDOg-{tdSb3Hz%}G zhHj~|sJRZzP@2>|G!ku6%_C*-lE5eA3Zy5s*A(TkTiL{q{DCF0sU(&`sy$sa1QzrH zEcT?_I2m0e3bb`~wWk|$7PHZd3={WQtsI<2KPPG)gWVfLg{*Q6zHZMFx)Eqa64O8| z)*9)+!<^s`&5R1JPnAjdma%;XbgIeDj|dCq z@=C(N*1gUyV5yE^wY-XneNfqhUR=M6<7SHP@k|4$xN+ijvHrZ0d~yr$;5(Bq zyC8kY?O>d9mUXXH=|{CnCPT{r``dif#^$Mppk#%#@S1S>Qv?Y{~-8Ac7$$ zmKMz07svnvtrq6KC5{CIQ#hL4SXQ48TE$w!Qu2oU#z!NfAcDnazb$~bVI6Lwa4#+T z+ntq_)?(xR{d$MgYhbywOBWayJ`kpmPzK(1+#vU0nBV^@&i0XMhS0+nHYg>T)VV+A zN->Yg75t7Co_#NsnL?+OGb(iM1?u8qGPujFXn@cgq$>)d9Gv7QHMrsCNi+}S&4dDd z9hG-HH^SprZ(lH2Q4e z%17`7isIToe3=&5>joLeW{>7{zUc|e@Ry@lGi=Vj1wwr=E`CN4n9GARw+1eD5C7>@ z{#KW#^~hUtNVnp>ZFnAQ#Gvz4+VX4Tb#h=O{C0ii#(z8=f^p&I{7)Sz=^uxW>Ho>o zDd}08*!-8xh+7-m{KwxVsc70F3nO!9S=Ni2{s!(Rr1!f89|KjB^F+i;MT6SI?*K*` z(yQlOgT9=sWNg3>qXoYE6cR4GhpH$XS12!xRC(3AD^h;TEBgL=&r|-=On!cnVaSla ztyAvude2^HvDxX~a_N4*sHg$h44;r!0(UIJq0Dy5w44sT=+2ILZ_jet4;pg~59%Ik zjC+p6 ziYw{XXpMgY@-q^anb{U3r(Rnb(ZH8eU4+GzDOMBI)KOS`BoPq_R#z7Pa>{5v+aZNN z6LW->UpX+0r~H&l~glNi4`sr)WU0nLvC!Rg#VbTd|0B(5u)!&7P)c$?{;!P3c{CD_yowk01+dzaC6jdJfc^4HA6xkox;HWH8_~Z*dIMo4yMe^GpoQ7{_CSbZ!Q!g}U38 zL`uT=CP9p@V~$ZvnD&sd-NrB+mf^s6Fn3*yy)Rw2BdD<0y7?rHr6b*W_;wa5( z8@XLLc?(r;;@Y^l+PI2!xZu?))TaZ{{rEDVL>jefzkz9RC*a&wB;rb9 z@#C&NV>XBBL7O-q!*WFutIc~)hmJFhon$of*ljB&vFF(tqX3(uvGZg)JI`l#k9!gKQS?PNBeAvA7BDN&}fa0TuGQ) zGOWeGGV{o&jhbB&E?AAmF^94Wr6hGd%j%mq2^+{WrKRb*D3%;yK|-$Xkq^?FAh>8* zc+-S9ljE@@)5v+q^O_EEe$y#e!QBo{?#-Anom>^Wba3>pB$+jc-2LP0#qZ&}9v4qP z;WE{%b_DILJG8FWbbeugu(UE*UV4I~RF2a~8KHej67!_MO{PGP|IZl>rTC<~6dyoH!)L~Df81M_R z3xIY(+Pms-$}F?vCdxIUaK9cwNlCJwwp{hl3KFM7fnWJt8*-1Myzge;tMVP|UpZ5@ zJbQcYPh(2v9~)C-|BvBM+4X<&x+f)C{bc#@Bj1XUV1LO_;DwanA)9@%fAaw3bCrwx zk%2=Dha9Pm_t{BSs{-i`rFa7&3LiinQ0l(qMK-KRN=Vf5_|1t6sUPN_X)UiSNFiam(WeV%j?q(cUuyPvB~f-eD^`^Z&>PWp6033jF$ zY2U$Ilf`$|w4culklB=B&KEh4qyQ-0KAJQo0!(vW7fG|4i0LGededo-(;b`r05c)B zy4Bo0ksd3trJeE#hc<_glLK0d#8Gve$qpnd&|Pn%9$uneK{~F@)+gNWK%@EoGXF-B zcK46d?&`ACOSMIgeGlEav>}Wkc$&F`6!fW;6@?kCWEV*b^G$4+COXYS^pEh}3d^OJ?zI}0!evh^ zXZ%n-F=6zd$zLnmuQ7C0J5~Y~$Crjh0ZeAQuz5X*A~M(&`mw!i^;-P&m<@C&P-MdP zye!qA{oA^TA@ZyxFTl7CF4e9T!aky_?R|_HYfe>ff=EcanQvEOe1KMnh!y3h8}@T^ zuf~nNwKQSGy0@09D6aj)7?%{&bUALG?I&9DWTXCmApN)B+US8#4%N`h30QGC8gdjx zaLl^q%pXj@`?jGhw?req`SkzXGEVx@ie=xD1xKu-dGA@eM;kXwH8-_@RONjmD$G&g zy;d2Vfb#Txgf}Z{efqwLn=L*dMa4OVf5kJuAmPM0L0*6jJ6zJQc6%TaoFBboAT>sd ztnBLfU2Otw5?#|;^u{=@Rv6w0YCMg zAlouO7QOU9KiZBrJzd8S#%VRaEW3|Euy6nGp}WmSjgT~EVn*?4?q_zJ8SZD#m&aoq zUj!=hP@PIcTIPGNGQ#;xXD_7bo@4BOHB8$rniA3W<7UE z4e+vH=jj$JgEk^?>TQFGDd>i0&(?Q(f%jth@la|-OV?xrBv64#d)-{dr}BX(>Vsq} zw-)fAZDT;(agQAWe3qliP!@O&Wir#Gd3hA8&=G_odK3spg#0eV^|ThtyIxw_2#Guq z5sI5s5wp2cHG6H~$0r{VX6M-w zp?qxa9zp7rk?VY+)z|)Ima$e`)!DY^){B5tbxWFEY1GCpU|SBxLRamzD#6KTL1FDv zy%lS#?drpkVYIrm(0WT(vcppJl%9wX8B6h4u>ZeG`|7B!m-TB}O1dSaJEdEY?(Xhx z1SF(8q>*mvE-C3Q>2B%n^!AirFBW`o>4Q7apqxoXbDU z+7ijA&nmehpY|14!$AoTle}zaT4{5tZHp`G;+-XxqxBZo^~nr35|&vM2gdD3w({_i z8jL$V^vUCvFO&eC>I|BD*$y0PMS)_^NzGMFFopr+h%e74!LE__PSIU9p`wf8O4_PQ*cHStEmOKo=8G8y5ZZ!PoQ!BwmYy^{bP;v zqg!&gmoh#v*ejBTA1nrhjfPUJE_U6GhPDqpQaHh-KN(Tz`h=`2hL-QdQnu2$*>xRC z}$RI&4o1zfga6y8OijVF8$P=RArH z!nOT}O}K1i_LX5qVb;9NCwE}v&-iXcs|nG(w*5X(vs?U64SD>SB(cUAw{{5C;BJ*wFsky-d566qtw^aWJ@Bb z8&^Q8;BtU1KhF{!6u&T-rE*F0*~E-X^+wHpM^zboZ>z0ZpPIxub%MgGj)AXyisxbH zchHs?&l9%rzS z+3@!LOZ-ix;|di>K5wU`xe8V@hsBF%u5$34xZ>NMqE05vghh?Zv~p^(PqKwAbsmGb zhi7KKS;WCk;YmLmVT=%0zWtDZIQV+17imSg{|b(e!KqICfx>I;0x5z6CZyaOM9edXx$$DsjIj86uWP3 z;RBCmL6eo_`;V&dee-^#xUMN~^tc-MN4l6Jb$j_W&l%fo`q4u-VV|2RSZ*d2_l;z8V z>wC`Svh@UZBz*4HoiA+vxZ^ru=MfG9-S%O(2%Av*@ZMmGiw@P%S zgR(&mpvIhI828}c`ZvtGIhp`K|33U>|NgBQ_P@Pb{y!_#qiEGsVtF6lE;)$}OCs&3N?WGBf0LYz{(<{j4F!Ys-UV zyDxL~7n27EJiu$EY0q1S&4M%sg&Z3=z290`nb9Wm z)oDx-j^#D}JN`z@7`k>D-D;nPb6&nw7eLv=QjO3L$T8r3(_(uW)w_@OdNPDM@r6B#kIB?C zKeHaUam*-2Oj!pRIkt>xiliA|Ou=oNq7E81TJRCYkKa5x>dQ-sVZ?d5@kc*(z@j}1$CituV=6c!y;Ig8F45yHax@5 zatmbH>3B7gwPEz)J}aiI0!qpP8cx>))6B0=pg+rpTvrK)=40?GD!NAK6met6lq~B$ zeW^qz9(qD6^OO)Hd!HO8JbF_UT~aeM7q#nMW6Y2_L*-$VBc^Epki&VtReVWosBM)3 z@~q;!Nv{tkLZh@;4N+c!fCt0mLsmVb;{po(BWq-6U@3SU5|%rUG12(TdVLbOxAQ;L zl4zA?^{bBaP>G4!=`YY*EUQSGB;3qq2m_13Nz}5<9&+xJJM~AvanR%`3}VD@rmLW3 z=R#2>L=%SkIfta6eOR*~HUmMt1~GL!q^#UUM0!#gyp(hb{#Ba!O(;oARm$S%fS*}+t3mnJH2)N>d}1wdBuhA@qA6n=(*I&GWnW*62zuF zYF(;go={Z#wK{T<3VVT!ZR9~;dL zY5{p0fJJln|NqYOr+8;5V4DXZ7{*nhvGtj{-a+6M@Jp)NT?zrkR7DBM5g&b-HUe&V z17&Cf(HZgPU=U5Qa01U4X5q1W1R)aH3k{oOS>m}`@U-@n&t;ES_v4sA2gg;WXZ1_ z$uRuJG$U%o+UGG}Ef{{lJ{gukQ8FpV+LLBgBMcJqgdIcnySmm6tMaAx%Yeg$;2-x3 zjI5@a#qcv|`Goq+AcO(K;c1a02zg4b|1816E@iO;L8`wRC)_F9YqT>aj5$w`IW z067yK5IGVOOhbr{soFpjKcow{cSQRPZM`0I_UU#q2g{O6CKS~ zmx)B#_nDXwTIJzcL1Ff&7w{8TG7Inp&$7#CQ^2paH#P-|Qe=5z+%bqfcZ*=E(D$Z{ zO#~!eD%)a)^FL1e$Sl2&CeVE992o%if{_HGNQ{g%Ealm!ysf-+o-E!1fUsp)#990x z#NN2z2}(@o8hKKu(ipeVr-IY!a-hh-8Vo|QCrH?nbSYOQdW^Y2Pid^jA60M0B zcoCE7|i@si5=yprUwkHJOL)(THx!T-2k> zGeH9A>JOmB8@84J1j_})E^4e!y37JiR`54L&R|MEOxn#wH`zmvSc-ZTx3b3i}4DEBxKUqw8e=+ z8eg(c(kByGruAgfesi&fSQU`g@jRl4A_s1$bn6S@S#kwtChrZ2LIiI5J)ueX0 zuk52VW3a!hMDKfl?%ZPFkuGwBq;r2@9LLr8)dJO4lO^h)L%>rkk#ecrlhQ|Xi{>V! z!hAaA83juv$(dbf;ueLDlhJHEMhBC|`xxLR4 zC7|azYb=B1@Ga=gk4@keG9PO;578I0s^ej z|9>CxrxGeal=qLL0Q{6NeFUhK9|E4EP*FQl%7O(W6k$jNk-WX+oQE^enKn6Z8(Una zrI-23KkU-v(W=hrmm5hA&9QCl?+s}!Hi0U)5+HuyUtSP7SK|ap)Cq z5$PcxtHrW{gSf6}n}y%!ugQ#bMOd-tpwo(FhOqqvlS~cmhiiO(^`J|EpeIF3T^uXC zPOVj7b%{cnZ5n=o9^J51X}nJ@1K;8&eyz~wG*NgO413bpKX&y76M{X643kdb<8Jyq ziW-hsrGj-cWv$ilZ7PiEXNT2^b`Vp(DK`JcHwcs_e15M%Epe<)92vB(i($FMIBUi` zg~y0d!vyX7s<5|aEzQ)x{L4kW;?`OV*yb*LrSSZ*_;!$#NiuVi?#tXNA<~gKUKz)n z2aUjV4ADVrSzqa8)n(LfqO%WBU=ZsgDDEog6W(Jnh{V93D$Z23l45AlJNhkyC9f!k z>?i3kyv&Wi@ziZ}@=ISK-yfkU5R)6pe$h*$<~ukMVW9B7$Kl#MT*mO3vSFgKffV5j zy(8bi1ObK%pg#RfzIw*%@(Ot?;-KRQJ_<{0xhx?R4e<00mTzs=!Tiue6W~EQe(6DI zerExW&%wl8|G%d_lcT?#0zmLv>=ByJvP`UW%{C#Y2F8A3N`@3i5D}mX)kE>*^K;2= zo7g3aGRm&v)@BMM=|B(`R%=hnLoI}gyqlLTL;$Us>FMc>@npKR4q5YI#2Gcvnmzeyjpgw}c)6fs*_O`SPF+3DSxQwrK@oV#7; zxml({M_se^Msl(NkRP@X>Vk zy$yEXW#l0x3Ov6&IYz^D@t51>sK5&yHBYxnHb7ljWJ4kNG9Qp9yb#i42iY&m;>P=) z8`qoMpANhtDc@&c`8HMiq`8Ir#jY5vxu+hHIU+jY6k%~-2*rN-sj^2P=T{?R^tb_N zwUZK=;@u?Hd!@ClXV9m2@xt^-Jr$o6)b*S|#O~Z6iZA4%%8BQAzx<)&OB|!&p#*5M zod;?0?Q5R4LskJ)1l(-1I zb)|M4oBnl);g=i3{kiFp)cd%M{#?Jt5`$&b093dpyUNLKyxRlGrkh__K zE;rG!U3mHUMs=0wfCc3i~AHJCWOoEt`O(>E!$m?rU zc|lp;=JaY^{w&?odZD!DZ2kLQuCh<@yaH42$Llm_t@0&usirsR&Dua0mHAPWcWdQE`N%<)lcSZ(; zJ2<{4?=PIo~4aee@}}dQPUjlT`#bF(Yv|yFLr# zonv?D4(7R{C1Ey|@B^_5G+PWqlL{Dg&dfs}Q+tPHqk>)VK^ z&q_zabwbEkX-ab&j-_q*1ox!2s_Tc`QR&6+oY?8pNrkEcYiVc`P)AqvR6j=y?Hl^K zwFuLn&u)nE2CjeXIFAG$C@;6Nu&UvKuIV&!nVHai(Kb`aFWDjlUL6CpB1Xi;kvDw} zMVUR?FPW?V^eK3!zKolA$Lg>Xzw*i;7iQdaXx@icF?j4bsN(Nb>f+Qpz&SgSEBirI z50VVqD;Q~G_7KB-RA!PsX5p1X(>k#nCJm zfegU+44nq!a=Gd$jbXOHyhsWn)hAM;dQp=c?oHd`{5ss~NuRwF>w$=8HIl2Gi|t^* zR=SsEoPN*0qsL=UW6C!b^nmw?j$(-DTLq{r}o(hM(ZZh4t_v^M4n{V-ytd(OgloVVg&c*Sf z(wClb4)IBZXbP)J)xPF1P^&2SYbsjdC@- ztg4U}$(-btroNKUfLp;-mJFaL#GIZln1a447CX-lz05kztfh3+JGZzGIM+)~60B7v z)#40W1KSfuOC)52k*%Llv0BL;JZVV48|)c;FIP^;*25l|NxqI&>?B}p1E0#x>+Agt zhDOKe5W-PFtE*8Ak}4xqYENbn>6|9R+e|AOD|mD5SUP$Jo+=}82e*# z#A0V){R%>XR-5F6x07w$tsPmu2N7aissr@`Gu{ZM;Wg`%6UOjWn2;sR46eS$jp3jT zoG`VDrW5ShZXN;so8`*KNdwQWPA5SOJrUweljMb$d!Yu1~(x6PwBJe-K~ z>x3Ux>J&LRo8vbciSFdiqYR7~k5k0HQsk>z(Uf+ck-c__JIodk*B9FeYCs(7>3#PR z71K5Q>`Soh-5z*n?jZ z5|WMJZ7x2~3b=0Vq!zwbcc7E$WlVa3VA`Q+j(k%pw<}b^`ZjHIO@1njn|^5-kLJsw z_`OUV&sy!qad>Tq+y?m=thrdiNCvIW3RH2DAc+jzsMJ+-%6Lw7^W)mCwKyjm@Th9tC_CJ!xGBWg zL{0^Bh7^`}EN7F&J#PKN;Mqv#1_k#6eDB_EwK#(}YXEPk(hoX^_p}BAVSLx#Y8j`Ozx)2I z_Otams*6iI|227&V>JWSG!2Q4rHnk!2L)F)kp>|#kV7=b)`(*ErNIygTB$bhqG!7p)g=%& zv`v>!R#vD!k$$M_#voT$SJ%aL*O1jBFx9eOD7{~KNljz*#2&8`=NAsmeg(BR^BPw3 zU<30I9>w)Gd4_GeWadXkb1<9jZ^mYj+|3F5tnG+|Z8GM{A@8TSq7?_k)PxD?k;l{7SRyH7`As{)$;zgv<1zR%_SPVy%#sZK*?PA0 z-g2;P`!@ul;&0wBydCj%(+RIbY6()LC&gz;nDGtH5?{Op2%t@T3_`l zu*}J{1pY!l8l#1-2vrBw0eRhnazCM+uHx%1{4gu)#tK6(sFEq{z}My8!xuea(8W_9 z82WP|>S|40OWAFsu)0)6=ZDb?7)*+qqp9NaGT;g+d4>@~yFn3OGd4E9NyTW3c`NiT zz+7D~UV`5ARkO#`W}bAPWw9;AK*;D$Y^f7DU>BD+;5;0%;i(GwfP`iqTSh@O7A}O@?mThi0(S?rn;g*~w zVyxiS6828yqqvHISrdsC_JPZ}OBqE!5hKy@P%YsoH1Y8ALcoY*`wM(j8_VMjRV?cY zY`-N|ANu0{$H9wMtxgazKoA}A%OINSH-hMgR~L$uZtT9jpIuy}98MLu=Y!DU`F`mw z(GyCja13ld98$OpFNn2nqL%oo%Gg-p`eMg*p}xf7i<_5;d}1@Q#xNFgIn@b{IismF z3HLI|?iZ$2kp_K^3}+$dHURN4SAgz&%A32?ulIX+Kw+zb2sj`YUv_QFwP$@J-;HUw z(QIuiwn!?XMjYjsWR zrYRL`oY-HBI!X}&Imc|M24^#0sF{z2@55FJq48XO5Tm$nE9}#`YELVj*POJ8?SxPz$oo~J4)GQRvd0TS!j!f;|{ zH;b-FVwf4(aoa4En|32HaJ}UF*sT;KRt&MplW4sFzje{3;U$w*z?VvnSst{Tq}jWTD%bSJ8@R@}oV|Ka;dy*P2Q`8PW#Fg4bC)Z;{9+Z+u#Z%m z3HfHyZkB{T8>GfyMB!pU zeznUhvM$iJ$~u@exsWryyS1$gmWctg!Z@irztLbqMO4vX%<5eso@+7?Yai#CYDTM1 z(KvXk-cdXl+CJ%l0p&%#lVZ`0+QKT!04xO^VlL~MNGn?h_t}X(Ah*_~nmRFI@=$<$ z8aH#HImhm7fjH_S#Lws*;;^9vCG9GEV{|XfZg4hp*p=6(k;J`sA0q#fH!DebAqH_HPsW;5#lQg%{CBWqUZCXiDHr3J{;L< z4*GFlwg;snD5bXS@}CIOdB!m{5afZKqdLSMSHvjxu08g%CdGvi7c@4 zYU^N7fvCpb={<#JHoKk=MfG`0M!F7*&xiBBr*g2r~lIb9{?_XI?qnyt^?6Q*f=1e)~l!H?#wdcD$1bQN&qu)D$JsF<7I7n!Xgk|SnX~(I4lQ>CeKzQNAuydlg*RBU^?1=Y1A=DI%XUNfrj>9)=-5RW`f zZGE-pjR@u3jZggo#D4B&g4e3!MoV_%+NrR_efDvxT1!1kduS}kw;--lC{9vx zOX4?{>u#Bqaw9uMoIE5;q&uSvIISgHg?=`*d2#w`Z+bv`Yxxsg-!58eGmM)aYtQ>M z!;ha4-iBT9_p6~)H7}kBU)U%G^tyWS*qjm_cnF?)d|R4bX8UX|@@*>t=~t2DFYh+X zTNwckO#XG}=J9>}NDVnaKH=}V`1DZ`WF0-UUAU6W;| zVi74B$$pD^`}C|86Vs^S5O8<{d&p833nh7(U|@RmgnMJY=I-bOa00m&hQ%%oq11e+ z3?hXEgCW?@Uf*{N$7$lSecJ`poSUO;nrtoQ#_Qu9{)t^0V(ppKh#uB0F@D7Bl=6sa z{2k=y{$S;A=GK=9LAI|2!{45_?^J+%pex{qGd$)^`@j!T4)%q8&cLd35b>n`)VLc` zo;^jvpKIIBCM;3asUH;NHG5pc0F5WZ&3vLuL*qSO1R2tx*hNuI{Rnbw0sB~*=B?AbR-Vm;i&|3xgMP9wRily!)85)4W7(XEM^-uP8{|O?5_Ab% z*4twQ!QotZUMh8{LD#&Jnc{hmDFuyjX(F5rj1_G?@s^EqYlP9UH&WG;l75RVAH{X( zeWDSal_`4Kmk~bH4yM3-fmM1@d8PC)I*`!z1xa(-8~-Y=G3IwQ5#=!w=1gUHh{oc^ z@mktPC=A}8rczj|9q_36dGP83i?g6DUcq0$k=PfxWJd0M)?wi-U~q(v2rn~ zt!#M?s^$%n)>FwD#|F@X~s zy7^Vkj&@-qSDflqt7E?1DScoXt;QycMdb2y6&;Zk!mOw~Dn<=KlCJSi^<1;i zzZ7vI|2=d5dBHep9-zblxO(uU+SNfVB7DXxXhu;-O{Hiie(chhi9X%MQJ&`M zS3@6N4zGjsurrZ_S&-Hh2(OoQ!yYD-m(QgoW%|X7uU7-RhZ_eai$KiQEFnN`wxe6| z)LkZ3btcY=lc!Ym>+yG>CsiM8hmalnp7QGn@2aIzRY+)_80e+4aQSsePM29Q`06PY z4oNP~Ru>5-9?+Mv^Osk+4X!boH{3gj8;&2~j6>g!>E)|S4ee*gZio=6C@OS0)w>z+yceMaGO>B{HCDrgsG~r# zVp7g{u?iRd;+@#Q8(MY0ag)mrnZj@A;)s_ev8jMR8&}X=koXzjNcrxZ_*_9vtB+T_$8#(!=E;b*?kW_1|NdEB?D&Mk zT*SC+7}tc=b}jkc*62OHP~rCJ8;N`I?$1X$UBq?Mu-A5`X-bxAfT=}2v5=6LS|#|) z>k}};yfpsoCQO@2=~}QAD7jHpVi&;dqn+^mm@|k-$L|;?!XmikRbWolrB!x@ z5lBP9zU1|xh_aTrQs4zEgG9&p&I$No(_AWupGj7Q9tgWW>-HO4&xsrf2X)2t3$9%w z^*BX55ez%D)j}YRIh9(&Y~tgoR>FW&n3QEMxONlP4G&nOk96{a?Io&p3u5JYKDhdk zk36CXKO!(f1G_KfHr36Ds-8ZDi%nmPqeBzRpyb`uGu=hv^O|-|(w5h9nu;d*Urq;W73*W5F*PaJ6g|Fk2;5=)*&csMRzG2@(<~2ZNCIW021pV@TGLXv;=5u zk0<}`?H8W#0qd4Zt3@&@iKK`4>iZI4c=omNb(Z=#|T z)nv{f#pK{JiGER9gC znu($v$@5x-%`&4sG5`ECi-lB`xbvY2h}mb)f^)bNjhR#N&}-(^3?Bb!b`sRE^`jOE zHNE<<-hmCYvqp{d0R-g%A``Zcz4TAAuQwejoYti>Sw&M3$qHFGK?JCskq7yJE#-Bd z7O!Nh%3#lUFSt)_w78=iRhSd+rR{*<2_FWQ#W#go%O*~E9JC=PS(AzjwRNo+f*U#H zLKBZ%!%~nIyp6=qdZR!V>_8f2Ym7>+*7r zM?82BfqcE5pboC$lEhjR7AL>k4l_kav-?PQ(1X0KuRHfegO_^WA?8{Irlvr#(Ixih zD_AYwrub#C?zk7O;6ayoxqd@t#xjQzuS%XRE?uK<*~*#6G7h#;yDAF7mBKx}Dl-4{ zg{MVp`8-$s@FuWDje!i$^}>$kvaNk-FEHj{gVG}j<5t>*>-y<8_ePkR#PO{uC;igB zvHY8+{DWr;D}!$3MR;YDNn%QTemJB@tp~*v5 z(bN`-5LC(9-9*MVU(HaGg3$YUIUHAnE2CyJk_Y&m$4vZyi=4k* zjE78r9)16j>3ThVBE=?KuYxWAhY@Rb6XDE?1n z0$A{$YbrtiUEnqh5Re5H5D@z#E_l@cjq9Iz0(%%>Z2@&u0%&fJTeA-SFL?fn2>7im ztgS5niVA)-+1`47DKMb3^ZgSS7e zkH7N%SXBK-^emt#m^?tXzdhFa7=4NQU!eb_)s{)1%uWH&tN(_+0kG3==lv%w)jhtY zRUCjE09eF$oOc|+n+^ z2(V23-z;Ow`Y+J`d>s5obV4D`;eSTY1$49D&ikJ)Isb^h>%YS>3CMfp-}1f&7zBSC zo%NslD#-Lz(l_+Kw;4>He}T^S&*<$`g}8HoUX%=A5PZ~|Bwzju^dEZH;|S|Vds%+@ zidKjWaN>X-^=)JJdrIN^ea?R_Pl+@la2%i>C;?l-fQIuR zKnFGu&^NWw?}<_8-?RL4tw==X6Da^naSIrk*uE10zTho?heOU@$KJt?|G!@6XW>UQ zKzQp0U@&ZeYkN%72M9m^?~eE*%}?s(tbvBQ50H0b0G0Bi(ooy~FEoF3o*(#s-HYzD zysZ=f_RK~E0{S-n`JUVz{)b%rbH%BHkGQS^DsBWo^i8<@dt!C_1&OegxxSpefsVfO z|5;}VElqPW0GFZ)=t_?n+&up!!%wP<5iRQLHlV8N0OfehK z1W=C046XtHlHn)Lmpev{Uk<=<^*4qm!T*xsCk~ji_$)&Tz_9c;hKA68$?y{=yjsOf zcm}A4Z=uy=D_KPRONO5~;)n0MeS5|2duosTcMSjB8y>#!^B7+;>$mWKcr)%txAO2g zhQ~v3Vg4`h|MAg)pN)|ZA1M(3ZXm#yR@uMi_<{M?1J*;q>&Nw9RQ_+7|G9o1suMr9 z-)!wK7=9_E{bLNIhJXGSK zcz_8AQHOp5^)DryA9MRq0pKz2+~?oI{fS3=cscs96&faf2lt|;e0Umy>U(AZUpKivoak?G-1+qX^O@5%P|x0wFfMh|yA9xd K6BH0b0{uUIjmVz> diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/tango-ux-support-library.jar.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/tango-ux-support-library.jar.meta index 327fb373..d63af778 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/tango-ux-support-library.jar.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/bin/tango-ux-support-library.jar.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ab5d30c37ce034f8f97da7d59af5084e +guid: c19ee39257d2d4ecb9ffe05e28e4f8e0 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/project.properties.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/project.properties.meta index e6bada1b..01452aea 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/project.properties.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/project.properties.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 0d4bd0272f13248aba56ecc1e589ffa9 +guid: 58b250d77e25c4e8aaa1a16701165e8e DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res.meta index 26876e09..08bcef9d 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: fd9dcf3597e5d4387b74288b2f31442a folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi.meta index 6ab7ccda..68f56a57 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 8b284ef68867845fdba8889f5242a41e folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/exception_container_shadow.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/exception_container_shadow.png.meta index 9e201088..e82202cc 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/exception_container_shadow.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/exception_container_shadow.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 92e885633f5b0478c8ddfe15af3e62c1 +guid: c83f7ae2437a34ec2a2a4b87a21eac61 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_err.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_err.png.meta index b952c186..ea813ca4 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_err.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_err.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 33e1c79516e434be0ac9186037aa9eea +guid: 728b86c7f85df414bb48a72785c19aaf DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_ok.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_ok.png.meta index b1b038a8..792d8612 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_ok.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_bubble_level_ok.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: facbf073298f8457e9d0cc095dfb1155 +guid: a8f5c7e0c04354187889c0c7a015b4f7 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_err.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_err.png.meta index 131b35e9..230d70b7 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_err.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_err.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 038ce08ae5ade411485af0a8fcd0a9ef +guid: 5612d950d71a247a8b421d70df8a9dfa DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_ok.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_ok.png.meta index f4ab7114..be314062 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_ok.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_frame_ok.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9bacc2b46bdfb4e3480e457188d47892 +guid: fac73c7be55cf4d25bf1292aaf3fd849 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_1.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_1.png.meta index 59bc3d22..6b92d804 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_1.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_1.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 709bc139bb1564750ac2067eac8e7ec4 +guid: 680b0b26a3faf4f429467370161fecc2 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_2.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_2.png.meta index d4c6f49b..3913f6f1 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_2.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_left_2.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: bc70d1a2a2d6e4c62bcbc943a47664ca +guid: 93fab9a5d52a84b3e95318d39a241b86 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_1.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_1.png.meta index 57f1d846..aa256fc1 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_1.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_1.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d7f94cc4b613348dc886e6daab805459 +guid: 114602e7119004bae967929f739217a2 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_2.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_2.png.meta index 2269badb..7a3a9e78 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_2.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/hold_steady_trace_right_2.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 038eef80a51674a11928eabdaab8543c +guid: 8f18e3edf7d0c40ddab5d06787be7a19 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_dizzy.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_dizzy.png.meta index 42e4540e..90e46b85 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_dizzy.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_dizzy.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 63ea0364c9f0741deb3ff598832ed32b +guid: ccbc58387f5814b4ea83dcf29dbfa236 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_lost.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_lost.png.meta index 27073d7f..4abbe98e 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_lost.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_am_lost.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7d30719c6ae8d48fb825414fda35518a +guid: 3cfc0d6cc9e4048ce9095fcebb8e7f2c DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_cant_see.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_cant_see.png.meta index f709f48d..4cc8f148 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_cant_see.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_i_cant_see.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: b11d579b46ba54b58a98f3c9a8af66cd +guid: f96000b1f919c406db6de0a2e2960cc2 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_system.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_system.png.meta index f03452c0..6d987cbc 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_system.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/ic_exception_system.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 98d42567dd7a846ed8cbb9e75c2e4132 +guid: 33462bb6b34204a3aa56c00e63d4ac7d DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/splash_logo.png.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/splash_logo.png.meta index 363f9ce0..3f8cfcca 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/splash_logo.png.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/drawable-xhdpi/splash_logo.png.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6b595833602c34b5aa8928d366cf41c2 +guid: 86dd2879b137e463db2e1686aabcc74a DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout.meta index 7bac0e81..36f7c8cc 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 0fa3a214c4fdd4be8bf45d42f0596de8 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/component_hold_steady.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/component_hold_steady.xml.meta index 3d0d380f..4d94e280 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/component_hold_steady.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/component_hold_steady.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 337a1e50bf3954b2697013fe74527093 +guid: be434169d7c61486c8e90002886e0251 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/exception_component.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/exception_component.xml.meta index 9df78088..904b734b 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/exception_component.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/exception_component.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9cdbfb4548a8147d68e14b910cbe76ca +guid: c2e54118470ed49aa954b79ba6dd99f7 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml index b17d42df..e8c8455a 100755 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml @@ -38,11 +38,4 @@ android:text="@string/connection_layout_message" android:textAllCaps="true" /> - - diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml.meta index e49a303c..f97b6acb 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_connection.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: eb84e881bd975441594fb4a9135f1f02 +guid: 3474435349f5e4df2a59abef18c7504b DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_splash.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_splash.xml.meta index 1af0f909..7d8bd99e 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_splash.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_splash.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 98ab9deac97bc466fb0ba293e59d09f0 +guid: dec3305c4202a4898a053aac4c5835eb DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_tango_ux.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_tango_ux.xml.meta index 3c97e9cf..c84f4381 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_tango_ux.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/layout/layout_tango_ux.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 508d64f7e0bec4ed3aa07badadeada48 +guid: 445b640922e504a67b3717d8c815f3eb DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values.meta index db39e41e..f31845b4 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 9a4395c2824094c1d8f295967429fc62 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/colors.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/colors.xml.meta index 12694877..5c5d7c87 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/colors.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/colors.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 95ab709761a4449e1a1b8f4540aab554 +guid: 981fc3c35046042f5b3f8febf7462650 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/dimens.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/dimens.xml.meta index fe1a8be7..fd33d375 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/dimens.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/dimens.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fed378dee4e2a46778c6162d652572ae +guid: 485fdc2a9e5b14cb38b5c0e8f9f5d0ee DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml index ec7687a3..f0e8acd0 100755 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml @@ -53,7 +53,6 @@ Action required - Connecting - Please hold steady + Hold steady \ No newline at end of file diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml.meta index d9d52f12..b1a17d08 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/strings.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: cbc69026447e54056980fe57e06bb4f2 +guid: efe77506871ab46428f1b6966172f4ea DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/styles.xml.meta b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/styles.xml.meta index b93ac8ba..fb84ab4b 100644 --- a/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/styles.xml.meta +++ b/UnityExamples/Assets/Plugins/Android/tango-ux-support-library/res/values/styles.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 337e215e57a1444b491eb4b4890b6420 +guid: 4c153ed4c6ca8475d9f0420569f832e5 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/Scenes/Materials.meta b/UnityExamples/Assets/Scenes/Materials.meta deleted file mode 100644 index a9f3f95c..00000000 --- a/UnityExamples/Assets/Scenes/Materials.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: e806fdce175124c39ac9fe2c0ba8567d -folderAsset: yes -timeCreated: 1440525069 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat b/UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat deleted file mode 100644 index 993493e4..00000000 --- a/UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat +++ /dev/null @@ -1,138 +0,0 @@ -%YAML 1.1 -%TAG !u! tag:unity3d.com,2011: ---- !u!21 &2100000 -Material: - serializedVersion: 6 - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_Name: pCylinder1Mat - m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} - m_ShaderKeywords: - m_LightmapFlags: 5 - m_CustomRenderQueue: -1 - stringTagMap: {} - m_SavedProperties: - serializedVersion: 2 - m_TexEnvs: - data: - first: - name: _MainTex - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _BumpMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DetailNormalMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _ParallaxMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _OcclusionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _EmissionMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DetailMask - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _DetailAlbedoMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - data: - first: - name: _MetallicGlossMap - second: - m_Texture: {fileID: 0} - m_Scale: {x: 1, y: 1} - m_Offset: {x: 0, y: 0} - m_Floats: - data: - first: - name: _SrcBlend - second: 1 - data: - first: - name: _DstBlend - second: 0 - data: - first: - name: _Cutoff - second: .5 - data: - first: - name: _Parallax - second: .0199999996 - data: - first: - name: _ZWrite - second: 1 - data: - first: - name: _Glossiness - second: .5 - data: - first: - name: _BumpScale - second: 1 - data: - first: - name: _OcclusionStrength - second: 1 - data: - first: - name: _DetailNormalMapScale - second: 1 - data: - first: - name: _UVSec - second: 0 - data: - first: - name: _Mode - second: 0 - data: - first: - name: _Metallic - second: 0 - m_Colors: - data: - first: - name: _EmissionColor - second: {r: 0, g: 0, b: 0, a: 1} - data: - first: - name: _Color - second: {r: .800000012, g: .800000012, b: .800000012, a: 1} diff --git a/UnityExamples/Assets/TangoExamples/Common/Textures/ProjectTango_Logo.png b/UnityExamples/Assets/TangoExamples/Common/Textures/ProjectTango_Logo.png old mode 100644 new mode 100755 index d866555281d0d25964af60f79bf77bc3c3e97387..c53fe23e3178bbe1d9b71bbf05493c90c6efd74a GIT binary patch literal 33904 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 D{=QF* literal 262185 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 diff --git a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat new file mode 100644 index 00000000..f4ba8871 --- /dev/null +++ b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat @@ -0,0 +1,30 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: pin_shadow + m_Shader: {fileID: 30, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 270aaf7f8aaa0454ab5c3ed1e3d06087, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: {} + m_Colors: + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat.meta b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat.meta similarity index 55% rename from UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat.meta rename to UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat.meta index 72f6f1e6..c474e1f5 100644 --- a/UnityExamples/Assets/Scenes/Materials/pCylinder1Mat.mat.meta +++ b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Materials/pin_shadow.mat.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: f1a242400dee94ce3906f578b4f8e33c -timeCreated: 1440525069 -licenseType: Free +guid: 6260fee5fdb624898bd92068ab874264 +timeCreated: 1441140322 +licenseType: Pro NativeFormatImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Prefabs/Location Marker.prefab b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Prefabs/Location Marker.prefab index 669701b1..96cf86e5 100644 --- a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Prefabs/Location Marker.prefab +++ b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Prefabs/Location Marker.prefab @@ -1,5 +1,23 @@ %YAML 1.1 %TAG !u! tag:unity3d.com,2011: +--- !u!1 &141338 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 4: {fileID: 424758} + - 33: {fileID: 3388810} + - 64: {fileID: 6411824} + - 23: {fileID: 2356450} + m_Layer: 0 + m_Name: Quad + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!1 &188320 GameObject: m_ObjectHideFlags: 0 @@ -27,11 +45,24 @@ Transform: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 188320} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: .0199999996, y: .0199999996, z: .0199999996} - m_Children: [] + m_Children: + - {fileID: 424758} m_Father: {fileID: 0} m_RootOrder: 0 +--- !u!4 &424758 +Transform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141338} + m_LocalRotation: {x: .707106829, y: 0, z: 0, w: .707106709} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 5, y: 5, z: 5} + m_Children: [] + m_Father: {fileID: 421018} + m_RootOrder: 0 --- !u!23 &2344510 MeshRenderer: m_ObjectHideFlags: 1 @@ -56,6 +87,30 @@ MeshRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingOrder: 0 +--- !u!23 &2356450 +MeshRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141338} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_Materials: + - {fileID: 2100000, guid: 6260fee5fdb624898bd92068ab874264, type: 2} + m_SubsetIndices: + m_StaticBatchRoot: {fileID: 0} + m_UseLightProbes: 1 + m_ReflectionProbeUsage: 1 + m_ProbeAnchor: {fileID: 0} + m_ScaleInLightmap: 1 + m_PreserveUVs: 1 + m_ImportantGI: 0 + m_AutoUVMaxDistance: .5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingOrder: 0 --- !u!33 &3376278 MeshFilter: m_ObjectHideFlags: 1 @@ -63,6 +118,13 @@ MeshFilter: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 188320} m_Mesh: {fileID: 4300000, guid: 6c28710ea3d26482eba596282b5e6538, type: 3} +--- !u!33 &3388810 +MeshFilter: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141338} + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!64 &6406318 MeshCollider: m_ObjectHideFlags: 1 @@ -75,6 +137,18 @@ MeshCollider: serializedVersion: 2 m_Convex: 0 m_Mesh: {fileID: 4300000, guid: 6c28710ea3d26482eba596282b5e6538, type: 3} +--- !u!64 &6411824 +MeshCollider: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 141338} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 0 + serializedVersion: 2 + m_Convex: 0 + m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0} --- !u!111 &11140948 Animation: m_ObjectHideFlags: 1 @@ -102,8 +176,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 81f9f42e3ed5b417f97d7297e8ea7582, type: 3} m_Name: m_EditorClassIdentifier: - m_normalShader: {fileID: 10703, guid: 0000000000000000f000000000000000, type: 0} - m_selectedShader: {fileID: 30, guid: 0000000000000000f000000000000000, type: 0} --- !u!1001 &100100000 Prefab: m_ObjectHideFlags: 1 diff --git a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/ARScreen.cs b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/ARScreen.cs index 594a6d72..f633a255 100644 --- a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/ARScreen.cs +++ b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/ARScreen.cs @@ -300,8 +300,15 @@ private void _SetCameraIntrinsics() float verticalFOV = 2.0f * Mathf.Rad2Deg * Mathf.Atan((intrinsics.height * 0.5f) / (float)intrinsics.fy); if (!float.IsNaN(verticalFOV)) { - m_renderCamera.fieldOfView = verticalFOV; - + m_renderCamera.projectionMatrix = + ProjectionMatrixForCameraIntrinsics((float)intrinsics.width, + (float)intrinsics.height, + (float)intrinsics.fx, + (float)intrinsics.fy, + (float)intrinsics.cx, + (float)intrinsics.cy, + 0.1f, 1000.0f); + // Here we are scaling the image plane to make sure the image plane's ratio is set as the // color camera image ratio. // If we don't do this, because we are drawing the texture fullscreen, the image plane will @@ -320,4 +327,57 @@ private void _SetCameraIntrinsics() } } } + + ///

+ /// Create a projection matrix from window size, camera intrinsics, and clip settings. + /// + /// The width of the camera image. + /// The height of the camera image. + /// The x-axis focal length of the camera. + /// The y-axis focal length of the camera. + /// The x-coordinate principal point in pixels. + /// The y-coordinate principal point in pixels. + /// The desired near z-clipping plane. + /// The desired far z-clipping plane. + private Matrix4x4 ProjectionMatrixForCameraIntrinsics(float width, float height, + float fx, float fy, + float cx, float cy, + float near, float far) { + float xscale = near / fx; + float yscale = near / fy; + + float xoffset = (cx - (width / 2.0f)) * xscale; + // OpenGL coordinates has y pointing downwards so we negate this term. + float yoffset = -(cy - (height / 2.0f)) * yscale; + + return Frustum(xscale * -width / 2.0f - xoffset, + xscale * width / 2.0f - xoffset, + yscale * -height / 2.0f - yoffset, + yscale * height / 2.0f - yoffset, + near, far); + } + + /// + /// This is function compute the projection matrix based on frustum size. + /// This function's implementation is same as glFrustum. + /// + /// Specify the coordinates for the left vertical clipping planes. + /// Specify the coordinates for the right vertical clipping planes. + /// Specify the coordinates for the bottom horizontal clipping planes. + /// Specify the coordinates for the top horizontal clipping planes. + /// Specify the distances to the near depth clipping planes. Both distances must be positive. + /// Specify the distances to the far depth clipping planes. Both distances must be positive. + private Matrix4x4 Frustum(float left, + float right, + float bottom, + float top, + float zNear, + float zFar) { + Matrix4x4 m = new Matrix4x4(); + m.SetRow(0, new Vector4(2.0f * zNear / (right - left), 0.0f, (right + left) / (right - left) , 0.0f)); + m.SetRow(1, new Vector4(0.0f, 2.0f * zNear/ (top - bottom), (top + bottom) / (top - bottom) , 0.0f)); + m.SetRow(2, new Vector4(0.0f, 0.0f, -(zFar + zNear) / (zFar - zNear), -(2 * zFar * zNear) / (zFar - zNear))); + m.SetRow(3, new Vector4(0.0f, 0.0f, -1.0f, 0.0f)); + return m; + } } diff --git a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/AugmentedRealityGUIController.cs b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/AugmentedRealityGUIController.cs index 59ceb6bd..54511351 100644 --- a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/AugmentedRealityGUIController.cs +++ b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Scripts/AugmentedRealityGUIController.cs @@ -411,7 +411,22 @@ private void _UpdateLocationMarker() { return; } - Instantiate(m_prefabLocation, planeCenter, Quaternion.FromToRotation(Vector3.up, plane.normal)); + + // Ensure the location is always facing the camera. This is like a LookRotation, but for the Y axis. + Vector3 up = plane.normal; + Vector3 forward; + if (Vector3.Angle(plane.normal, cam.transform.forward) < 175) + { + Vector3 right = Vector3.Cross(up, cam.transform.forward).normalized; + forward = Vector3.Cross(right, up).normalized; + } + else + { + // Normal is nearly parallel to camera look direction, the cross product would have too much + // floating point error in it. + forward = Vector3.Cross(up, cam.transform.right); + } + Instantiate(m_prefabLocation, planeCenter, Quaternion.LookRotation(forward, up)); m_selectedMarker = null; } } diff --git a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..c863eae3ce157e7656a42abc6576858eb5eb7189 GIT binary patch literal 158070 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�!TcyUv}aC-i-k;74Uc}Utcw+X^=d- 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%0DV`Z*d^5Sc3TwcCd|c3xY;Kjq9`#W0 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�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%0Aeeb@pyZ7lJxeu z75mr0Rq+t;>CYyRTk6i|sg@Qw8T>3qz@~pVw!;c|edjC=D~I~~^ZNeezq<85{P|z6 z`@d}TztxNX53!B}JF5KWWBH%A@M|RgSH(IK?5OhVMgR7#e^)~MEQLW1pjS-$Tq@Oe Q?@$^4p<@Uy*K&&b7ZMcj(EtDd literal 0 HcmV?d00001 diff --git a/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png.meta b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png.meta new file mode 100644 index 00000000..05b4c30b --- /dev/null +++ b/UnityExamples/Assets/TangoExamples/ExperimentalAugmentedReality/Textures/pin_shadow.png.meta @@ -0,0 +1,55 @@ +fileFormatVersion: 2 +guid: 270aaf7f8aaa0454ab5c3ed1e3d06087 +timeCreated: 1441140192 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/UnityExamples/Assets/TangoSDK/Core.meta b/UnityExamples/Assets/TangoSDK/Core.meta index ea3c0c43..2dcc9fae 100644 --- a/UnityExamples/Assets/TangoSDK/Core.meta +++ b/UnityExamples/Assets/TangoSDK/Core.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: b80c15ce37a1447f69e465cf133f71b6 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts.meta b/UnityExamples/Assets/TangoSDK/Core/Scripts.meta index da3b86a8..c40fbb99 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts.meta +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 8e63f857443034fb6b291e8ff42a6c60 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common.meta b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common.meta index 954f4682..b6ca0cfe 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common.meta +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: a96639d914c7d4c11aa8634e9e475b09 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/Common.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/Common.cs index f244d824..79eb1efc 100755 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/Common.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/Common.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Runtime.InteropServices; using UnityEngine; @@ -33,16 +37,39 @@ public struct Common /// public struct ErrorType { - public static readonly int TANGO_NO_CAMERA_PERMISSION = -5; /**< Camera access not allowed */ - public static readonly int TANGO_NO_ADF_PERMISSION = -4; /**< ADF access not allowed */ - public static readonly int TANGO_NO_MOTION_TRACKING_PERMISSION = -3; /**< Motion tracking not allowed*/ + ///

+ /// Camera access not allowed. + /// + public static readonly int TANGO_NO_CAMERA_PERMISSION = -5; + + /// + /// ADF access not allowed. + /// + public static readonly int TANGO_NO_ADF_PERMISSION = -4; + + /// + /// Motion tracking not allowed. + /// + public static readonly int TANGO_NO_MOTION_TRACKING_PERMISSION = -3; + + /// + /// General invalid state. + /// public static readonly int TANGO_INVALID = -2; + + /// + /// General error state. + /// public static readonly int TANGO_ERROR = -1; + + /// + /// No error, success. + /// public static readonly int TANGO_SUCCESS = 0; } /// - /// Metadata keys supported by Tango APIs + /// Metadata keys supported by Tango APIs. /// public struct MetaDataKeyType { @@ -52,24 +79,28 @@ public struct MetaDataKeyType public const string KEY_TRANSFORMATION = "transformation"; } - public enum AndroidResult - { - SUCCESS = -1, - CANCELED = 0, - DENIED = 1 - } - - public const string TANGO_UNITY_DLL = "tango_client_api"; + /// + /// Return values from Android actvities. + /// + public enum AndroidResult + { + SUCCESS = -1, + CANCELED = 0, + DENIED = 1 + } + /// + /// DEPRECATED: Empty string. + /// public const string TANGO_PERMISSION_STRING = ""; - public const string TANGO_MOTION_TRACKING_PERMISSIONS = "MOTION_TRACKING_PERMISSION"; - public const string TANGO_ADF_LOAD_SAVE_PERMISSIONS = "ADF_LOAD_SAVE_PERMISSION"; - public const string TANGO_NO_PERMISSIONS_ERROR = "This application requires all Tango permissions to run. Please restart the application and grant Tango permissions."; - public const int TANGO_MOTION_TRACKING_PERMISSIONS_REQUEST_CODE = 42; - public const int TANGO_ADF_LOAD_SAVE_PERMISSIONS_REQUEST_CODE = 43; - public const int UNITY_MAX_SUPPORTED_VERTS_PER_MESH = 65534; + /// + /// DEPRECATED: Tango permissions error. + /// + public const string TANGO_NO_PERMISSIONS_ERROR = "This application requires all Tango permissions to run. Please restart the application and grant Tango permissions."; + //// \cond + //// Collection of deprecated fields that should be removed public const float UI_LABEL_START_X = 15.0f; public const float UI_LABEL_START_Y = 15.0f; public const float UI_LABEL_SIZE_X = 1920.0f; @@ -86,33 +117,68 @@ public enum AndroidResult public const float UI_DEPTH_LABLE_START_Y = UI_POSE_LABEL_START_Y + UI_LABEL_OFFSET; public const string UI_FLOAT_FORMAT = "F3"; public const string UI_FONT_SIZE = ""; - + public const float UI_TANGO_VERSION_X = UI_LABEL_START_X; public const float UI_TANGO_VERSION_Y = UI_LABEL_START_Y; public const float UI_TANGO_APP_SPECIFIC_START_X = UI_TANGO_VERSION_X; public const float UI_TANGO_APP_SPECIFIC_START_Y = UI_TANGO_VERSION_Y + (UI_LABEL_OFFSET * 2); - + public const string UX_SERVICE_VERSION = "Service version: {0}"; public const string UX_TANGO_SERVICE_VERSION = "Tango service version: {0}"; public const string UX_TANGO_SYSTEM_EVENT = "Tango system event: {0}"; public const string UX_TARGET_TO_BASE_FRAME = "Target->{0}, Base->{1}:"; public const string UX_STATUS = "\tstatus: {0}, count: {1}, delta time(ms): {2}, position (m): [{3}], orientation: [{4}]"; - - public const int UUID_LENGTH = 37; public const float SECOND_TO_MILLISECOND = 1000.0f; - - #if (UNITY_EDITOR) + //// \endcond + + /// + /// Name of the Tango C-API library. + /// + internal const string TANGO_UNITY_DLL = "tango_client_api"; + + /// + /// Motion Tracking permission intent string. + /// + internal const string TANGO_MOTION_TRACKING_PERMISSIONS = "MOTION_TRACKING_PERMISSION"; + + /// + /// ADF Load/Save permission intent string. + /// + internal const string TANGO_ADF_LOAD_SAVE_PERMISSIONS = "ADF_LOAD_SAVE_PERMISSION"; + + /// + /// Code used to identify the result came from the Motion Tracking permission request. + /// + internal const int TANGO_MOTION_TRACKING_PERMISSIONS_REQUEST_CODE = 42; + + /// + /// Code used to identify the result came from the ADF Load/Save permission request. + /// + internal const int TANGO_ADF_LOAD_SAVE_PERMISSIONS_REQUEST_CODE = 43; + + /// + /// Max number of vertices the Point Cloud supports. + /// + internal const int UNITY_MAX_SUPPORTED_VERTS_PER_MESH = 65534; + + /// + /// The length of an area description ID string. + /// + internal const int UUID_LENGTH = 37; + + //// Backing for deprecated properties below. +#if (UNITY_EDITOR) private static bool m_mirroring = true; - #elif (UNITY_ANDROID) +#elif (UNITY_ANDROID) private static bool m_mirroring = false; - #else +#else private static bool m_mirroring = false; - #endif +#endif private static Resolution m_depthFrameResolution; private static int m_depthBufferSize; /// - /// Property for mirroring. + /// DEPRECATED: Property for mirroring. /// /// Bool - sets mirroring. public static bool Mirroring @@ -122,7 +188,7 @@ public static bool Mirroring } /// - /// Property for the current depth frame resolution. + /// DEPRECATED: Property for the current depth frame resolution. /// /// Resolution - Sets depth frame resolution reference. public static Resolution DepthFrameResolution @@ -132,7 +198,7 @@ public static Resolution DepthFrameResolution } /// - /// Property for the depth buffer size. + /// DEPRECATED: Property for the depth buffer size. /// /// Bool - Sets the size of the depth buffer. public static int DepthBufferSize @@ -142,7 +208,7 @@ public static int DepthBufferSize } /// - /// Get the world rotation. + /// DEPRECATED: Get the world rotation. /// /// Quaternion representing the world rotation. public static Quaternion GetWorldRotation() @@ -151,10 +217,11 @@ public static Quaternion GetWorldRotation() } /// - /// Gets current window resoltion where width is - /// always larger than height. + /// DEPRECATED: Get the screen size if the screen was in landscape mode. + /// + /// This looks at Screen.width and Screen.height. /// - /// Vector2 containing the screen width and height. + /// Vector2 containing the screen size. public static Vector2 GetWindowResolution() { Vector2 screenSize; @@ -168,12 +235,21 @@ public static Vector2 GetWindowResolution() } return screenSize; } - + + /// + /// DEPRECATED: Get the aspect ratio of the screen in landscape mode. + /// + /// Aspect ratio. + public static float GetWindowResolutionAspect() + { + Vector2 resolution = GetWindowResolution(); + return resolution.x / resolution.y; + } + /// - /// Get the aspect resolution of the window. + /// DEPRECATED: Misspelled version of GetWindowResolutionAspect. /// - /// Window resolution aspect ratio as a single - /// precision floating point. + /// Aspect ratio. public static float GetWindowResoltionAspect() { Vector2 resolution = GetWindowResolution(); diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/OrientationManager.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/OrientationManager.cs index 56ca6f46..b80bedf0 100755 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/OrientationManager.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/OrientationManager.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEngine; @@ -21,55 +25,55 @@ namespace Tango /// /// Manages the orientation of the screen. /// - public class OrientationManager - { + public class OrientationManager + { /// /// Gets the Screen orientation. /// /// Returns the current orientation of the screen. - public static ScreenOrientation GetScreenOrientation() + public static ScreenOrientation GetScreenOrientation() { - #if (UNITY_EDITOR || UNITY_STANDALONE_OSX) - if (Screen.width > Screen.height) +#if (UNITY_EDITOR || UNITY_STANDALONE_OSX) + if (Screen.width > Screen.height) { - return ScreenOrientation.LandscapeLeft; + return ScreenOrientation.LandscapeLeft; } - else + else { - return ScreenOrientation.Portrait; + return ScreenOrientation.Portrait; } - #elif (UNITY_IPHONE || UNITY_ANDROID) - return Screen.orientation; - #else - #error not supported platform - #endif - } - +#elif (UNITY_IPHONE || UNITY_ANDROID) + return Screen.orientation; +#else +#error not supported platform +#endif + } + /// /// Get the current world rotation. /// /// Returns a Quaternion representing the current world rotation. - public static Quaternion GetWorldRotation() + public static Quaternion GetWorldRotation() { - ScreenOrientation orientation = GetScreenOrientation(); - Quaternion transformation = Quaternion.identity; - if (orientation == ScreenOrientation.LandscapeLeft) + ScreenOrientation orientation = GetScreenOrientation(); + Quaternion transformation = Quaternion.identity; + if (orientation == ScreenOrientation.LandscapeLeft) { - transformation = Quaternion.identity; - } + transformation = Quaternion.identity; + } else if (orientation == ScreenOrientation.LandscapeRight) { - transformation = Quaternion.AngleAxis(180f, Vector3.forward); - } + transformation = Quaternion.AngleAxis(180f, Vector3.forward); + } else if (orientation == ScreenOrientation.PortraitUpsideDown) { - transformation = Quaternion.AngleAxis(90f, Vector3.forward); - } + transformation = Quaternion.AngleAxis(90f, Vector3.forward); + } else if (orientation == ScreenOrientation.Portrait) { - transformation = Quaternion.AngleAxis(-90f, Vector3.forward); - } - return transformation; - } - } + transformation = Quaternion.AngleAxis(-90f, Vector3.forward); + } + return transformation; + } + } } \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoAndroidHelper.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoAndroidHelper.cs index bf6de0e4..091e8ead 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoAndroidHelper.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoAndroidHelper.cs @@ -1,86 +1,96 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -using UnityEngine; +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; +using UnityEngine; /// -/// Helper functions for common android functionality. +/// Misc Android related utilities provided by the Tango CoreSDK. /// public partial class AndroidHelper { /// - /// Holds the current and default offset of the - /// current Tango device. + /// Holds the current and default orientation of the device. /// public struct TangoDeviceOrientation { + /// + /// The default orientation of the device. This is the "natural" way to hold this device. + /// public DeviceOrientation defaultRotation; + + /// + /// The current orientation of the device. + /// public DeviceOrientation currentRotation; } private const string PERMISSION_REQUESTER = "com.projecttango.permissionrequester.RequestManagerActivity"; - #pragma warning disable 414 +#if UNITY_ANDROID && !UNITY_EDITOR private static AndroidJavaObject m_tangoHelper = null; - #pragma warning restore 414 - +#endif + /// /// Gets the Java tango helper object. /// /// The tango helper object. public static AndroidJavaObject GetTangoHelperObject() { - #if UNITY_ANDROID && !UNITY_EDITOR +#if UNITY_ANDROID && !UNITY_EDITOR if(m_tangoHelper == null) { m_tangoHelper = new AndroidJavaObject("com.projecttango.unity.TangoUnityHelper", GetUnityActivity()); } return m_tangoHelper; - #else +#else return null; - #endif +#endif } /// - /// Starts the tango permissions activity of the provided type. + /// Start the Tango permissions activity, requesting that permission. /// - /// Permissions type. + /// String for the permission to request. public static void StartTangoPermissionsActivity(string permissionsType) { AndroidJavaObject unityActivity = GetUnityActivity(); - if(unityActivity != null) + if (unityActivity != null) { int requestCode = 0; string[] args = new string[1]; - - if(permissionsType == Tango.Common.TANGO_MOTION_TRACKING_PERMISSIONS) + + if (permissionsType == Tango.Common.TANGO_MOTION_TRACKING_PERMISSIONS) { requestCode = Tango.Common.TANGO_MOTION_TRACKING_PERMISSIONS_REQUEST_CODE; args[0] = "PERMISSIONTYPE:" + Tango.Common.TANGO_MOTION_TRACKING_PERMISSIONS; } - else if(permissionsType == Tango.Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS) + else if (permissionsType == Tango.Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS) { requestCode = Tango.Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS_REQUEST_CODE; args[0] = "PERMISSIONTYPE:" + Tango.Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS; } - if(requestCode != 0) + if (requestCode != 0) { - unityActivity.Call("LaunchIntent", "com.projecttango.tango", "com.google.atap.tango.RequestPermissionActivity", args, requestCode); + unityActivity.Call("launchIntent", "com.projecttango.tango", "com.google.atap.tango.RequestPermissionActivity", args, requestCode); } else { @@ -88,15 +98,16 @@ public static void StartTangoPermissionsActivity(string permissionsType) } } } - + /// - /// Determines if the application has Tango permissions. + /// Check if the application has a Tango permission. /// - /// true if application has tango permissions; otherwise, false. + /// String for the permission. + /// true if application has the permission; otherwise, false. public static bool ApplicationHasTangoPermissions(string permissionType) { AndroidJavaObject tangoObject = GetTangoHelperObject(); - if(tangoObject != null) + if (tangoObject != null) { return tangoObject.Call("hasPermission", permissionType); } @@ -105,9 +116,9 @@ public static bool ApplicationHasTangoPermissions(string permissionType) } /// - /// Gets the current and default device orientation. + /// Get the devices current and default orientations. /// - /// The current and default tango device orientation. + /// The current and default orientations. public static TangoDeviceOrientation GetTangoDeviceOrientation() { AndroidJavaObject tangoObject = GetTangoHelperObject(); @@ -115,7 +126,7 @@ public static TangoDeviceOrientation GetTangoDeviceOrientation() deviceOrientation.defaultRotation = DeviceOrientation.Unknown; deviceOrientation.currentRotation = DeviceOrientation.Unknown; - if(tangoObject != null) + if (tangoObject != null) { AndroidJavaObject rotationInfo = tangoObject.Call("showTranslatedOrientation"); @@ -127,16 +138,16 @@ public static TangoDeviceOrientation GetTangoDeviceOrientation() } /// - /// Determines if is tango core present. + /// Check if the Tango Core package is installed. /// - /// true if is tango core present; otherwise, false. + /// true if the package is installed; otherwise, false. public static bool IsTangoCorePresent() { AndroidJavaObject unityActivity = GetUnityActivity(); - if(unityActivity != null) + if (unityActivity != null) { - if(GetPackageInfo("com.projecttango.tango") != null) + if (GetPackageInfo("com.projecttango.tango") != null) { return true; } diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoEnums.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoEnums.cs index e434da9e..11759a30 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoEnums.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoEnums.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEngine; @@ -24,99 +28,242 @@ namespace Tango public class TangoEnums { /// - /// Possible states for the motion tracking + /// Tango pose status lifecycle enumerations. + /// + /// Every pose has a state denoted by this enum, which provides information about the internal status of the + /// position estimate. The application may use the status to decide what actions or rendering should be taken. + /// A change in the status between poses and subsequent timestamps can denote lifecycle state changes. The + /// status affects the rotation and position estimates. Other fields are considered valid (i.e. version or + /// timestamp). /// public enum TangoPoseStatusType { - TANGO_POSE_INITIALIZING, /**< Motion estimation is being initialized */ - TANGO_POSE_VALID, /**< The pose of this estimate is valid */ - TANGO_POSE_INVALID, /**< The pose of this estimate is not valid */ - TANGO_POSE_UNKNOWN, /**< Could not estimate pose at this time */ - NA /*** + /// Motion estimation is being initialized. + /// + TANGO_POSE_INITIALIZING, + + /// + /// The pose of this estimate is valid. + /// + TANGO_POSE_VALID, + + /// + /// The pose of this estimate is not valid. + /// + TANGO_POSE_INVALID, + + /// + /// Could not estimate pose at this time. + /// + TANGO_POSE_UNKNOWN, + + /// + /// Not Available, not a real TangoPoseStatusType. + /// + NA } /// - /// Coordinate frames provided by the Tango Service. + /// Tango coordinate frame enumerations. /// public enum TangoCoordinateFrameType { - /** Coordinate system for the entire Earth. - * See WGS84: http://en.wikipedia.org/wiki/World_Geodetic_System - */ + /// + /// Coordinate system for the entire Earth. + /// + /// See WGS84: [http://en.wikipedia.org/wiki/World_Geodetic_System]. + /// TANGO_COORDINATE_FRAME_GLOBAL_WGS84 = 0, - /** Origin within a saved area description */ + + /// + /// Origin within a saved area description. + /// TANGO_COORDINATE_FRAME_AREA_DESCRIPTION, - /** Origin when the device started tracking */ + + /// + /// Origin when the device started tracking. + /// TANGO_COORDINATE_FRAME_START_OF_SERVICE, - /** Immediately previous device pose */ + + /// + /// Immediately previous device pose. + /// TANGO_COORDINATE_FRAME_PREVIOUS_DEVICE_POSE, - TANGO_COORDINATE_FRAME_DEVICE, /**< Device coordinate frame */ - TANGO_COORDINATE_FRAME_IMU, /**< Inertial Measurement Unit */ - TANGO_COORDINATE_FRAME_DISPLAY, /**< Display */ - TANGO_COORDINATE_FRAME_CAMERA_COLOR, /**< Color camera */ - TANGO_COORDINATE_FRAME_CAMERA_DEPTH, /**< Depth camera */ - TANGO_COORDINATE_FRAME_CAMERA_FISHEYE, /**< Fisheye camera */ + + /// + /// Device coordinate frame. + /// + TANGO_COORDINATE_FRAME_DEVICE, + + /// + /// Inertial Measurement Unit. + /// + TANGO_COORDINATE_FRAME_IMU, + + /// + /// Display. + /// + TANGO_COORDINATE_FRAME_DISPLAY, + + /// + /// Color camera. + /// + TANGO_COORDINATE_FRAME_CAMERA_COLOR, + + /// + /// Depth camera. + /// + TANGO_COORDINATE_FRAME_CAMERA_DEPTH, + + /// + /// Fisheye camera. + /// + TANGO_COORDINATE_FRAME_CAMERA_FISHEYE, + + /// + /// An invalid frame. + /// TANGO_COORDINATE_FRAME_INVALID, - TANGO_MAX_COORDINATE_FRAME_TYPE /**< Maximum allowed */ + + /// + /// Maximum allowed. + /// + TANGO_MAX_COORDINATE_FRAME_TYPE } /// - /// Enumeration containing the ID used for each - /// Tango camera. + /// Tango Camera enumerations. /// public enum TangoCameraId { - TANGO_CAMERA_COLOR = 0, /**< Back-facing color camera */ - TANGO_CAMERA_RGBIR, /**< Back-facing camera producing IR-sensitive images */ - TANGO_CAMERA_FISHEYE, /**< Back-facing fisheye wide-angle camera */ - TANGO_CAMERA_DEPTH, /**< Depth camera */ - TANGO_MAX_CAMERA_ID /**< Maximum camera allowable */ + /// + /// Back-facing color camera. + /// + TANGO_CAMERA_COLOR = 0, + + /// + /// Back-facing camera producing IR-sensitive images. + /// + TANGO_CAMERA_RGBIR, + + /// + /// Back-facing fisheye wide-angle camera. + /// + TANGO_CAMERA_FISHEYE, + + /// + /// Depth camera. + /// + TANGO_CAMERA_DEPTH, + + /// + /// Maximum camera allowable. + /// + TANGO_MAX_CAMERA_ID } /// - /// Enumeration containing events provided by the - /// Tango Service. + /// Tango Event types. /// public enum TangoEventType { - TANGO_EVENT_UNKNOWN = 0, /**< Unclassified Event Type */ - TANGO_EVENT_GENERAL, /**< General callbacks not otherwise categorized */ - TANGO_EVENT_FISHEYE_CAMERA, /**< Fisheye Camera Event */ - TANGO_EVENT_COLOR_CAMERA, /**< Color Camera Event */ - TANGO_EVENT_IMU, /**< IMU Event */ - TANGO_EVENT_FEATURE_TRACKING, /**< Feature Tracking Event */ + /// + /// Unclassified Event Type. + /// + TANGO_EVENT_UNKNOWN = 0, + + /// + /// General callbacks not otherwise categorized. + /// + TANGO_EVENT_GENERAL, + + /// + /// Fisheye Camera Event. + /// + TANGO_EVENT_FISHEYE_CAMERA, + + /// + /// Color Camera Event. + /// + TANGO_EVENT_COLOR_CAMERA, + + /// + /// IMU Event. + /// + TANGO_EVENT_IMU, + + /// + /// Feature Tracking Event. + /// + TANGO_EVENT_FEATURE_TRACKING, } + /// + /// Tango runtime configuration enumerations. + /// public enum TangoConfigType { - TANGO_CONFIG_DEFAULT = 0, /**< Default, motion tracking only. */ - TANGO_CONFIG_CURRENT, /**< Current */ - TANGO_CONFIG_MOTION_TRACKING, /**< Motion tracking */ - TANGO_CONFIG_AREA_LEARNING, /**< Area learning */ - TANGO_MAX_CONFIG_TYPE /**< Maximum number allowable. */ + /// + /// Default, motion tracking only. + /// + TANGO_CONFIG_DEFAULT = 0, + + /// + /// Current. + /// + TANGO_CONFIG_CURRENT, + + /// + /// Motion tracking. + /// + TANGO_CONFIG_MOTION_TRACKING, + + /// + /// Area learning. + /// + TANGO_CONFIG_AREA_LEARNING, + + /// + /// Maximum number allowable. + /// + TANGO_MAX_CONFIG_TYPE } + /// + /// Tango Camera Calibration types. + /// + /// See TangoCameraIntrinsics for a detailed description. + /// public enum TangoCalibrationType { TANGO_CALIBRATION_UNKNOWN, - /**< f-theta fisheye lens model. See - http://scholar.google.com/scholar?cluster=13508836606423559694&hl=en&as_sdt=2005&sciodt=0,5 - */ + + /// + /// An f-theta fisheye lens model. + /// See . + /// TANGO_CALIBRATION_EQUIDISTANT, TANGO_CALIBRATION_POLYNOMIAL_2_PARAMETERS, - /**< Tsai's k1,k2,k3 Model. See - http://scholar.google.com/scholar?cluster=3512800631607394002&hl=en&as_sdt=0,5&sciodt=0,5 - */ + + /// + /// Tsai's k1,k2,k3 Model. + /// See . + /// TANGO_CALIBRATION_POLYNOMIAL_3_PARAMETERS, TANGO_CALIBRATION_POLYNOMIAL_5_PARAMETERS, - } - - /// Tango Image Formats + + /// + /// Tango Image Formats. /// Equivalent to those found in Android core/system/include/system/graphics.h. + /// public enum TangoImageFormatType { - TANGO_HAL_PIXEL_FORMAT_YV12 = 0x32315659 // YCrCb 4:2:0 Planar + /// + /// YCrCb 4:2:0 Planar. + /// + TANGO_HAL_PIXEL_FORMAT_YV12 = 0x32315659 } } } \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoTypes.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoTypes.cs index e7b63ac8..a3c1aad0 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoTypes.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Common/TangoTypes.cs @@ -1,100 +1,205 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; +using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; +[module: System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1649:FileHeaderFileNameDocumentationMustMatchTypeName", + Justification = "Types file.")] + namespace Tango { /// - /// Represents the ordered point cloud data. + /// The TangoXYZij struct contains information returned from the depth sensor. /// [StructLayout(LayoutKind.Sequential)] public class TangoXYZij { + /// + /// An integer denoting the version of the structure. + /// [MarshalAs(UnmanagedType.I4)] public int version; - + + /// + /// Time of capture of the depth data for this struct (in seconds). + /// [MarshalAs(UnmanagedType.R8)] public double timestamp; - + + /// + /// The number of points in the xyz array. + /// + /// This is variable with result and is returned in (x,y,z) triplets populated (e.g. 2 points populated + /// returned means 6 floats, or 6*4 bytes used). + /// [MarshalAs(UnmanagedType.I4)] public int xyz_count; - + + /// + /// An array of packed coordinate triplets, x,y,z as floating point values. + /// + /// With the unit in landscape orientation, screen facing the user: +Z points in the direction of the + /// camera's optical axis, and is measured perpendicular to the plane of the camera. +X points toward the + /// user's right, and +Y points toward the bottom of the screen. The origin is the focal centre of the color + /// camera. The output is in units of metres. + /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.SysUInt)] public IntPtr[] xyz; - + + /// + /// The dimensions of the ij index buffer. + /// [MarshalAs(UnmanagedType.I4)] public int ij_rows; - + + /// + /// The dimensions of the ij index buffer. + /// [MarshalAs(UnmanagedType.I4)] public int ij_cols; - + + /// + /// A 2D buffer, of size ij_rows x ij_cols in raster ordering that contains the index of a point in the xyz + /// array that was generated at this "ij" location. + /// + /// A value of -1 denotes there was no corresponding point generated at that position. This buffer can be used + /// to find neighbouring points in the point cloud. + /// + /// For more information, see our developer overview on depth perception . + /// public IntPtr ij; - // Reserved for future use. + /// + /// TangoImageBuffer is reserved for future use. + /// public IntPtr color_image; /// /// Returns a that represents the current . /// - /// A that represents the current . + /// + /// A that represents the current . + /// public override string ToString() { - return ("timestamp : " + timestamp + "\n" + - "xyz_count : " + xyz_count + "\n" + - "ij_rows : " + ij_rows + "\n" + - "ij_cols : " + ij_cols); + return string.Format("timestamp : {0}\nxyz_count : {1}\nij_rows : {2}\nij_cols : {3}", + timestamp, xyz_count, ij_rows, ij_cols); } } /// - /// Tango event. + /// The TangoEvent structure signals important sensor and tracking events. + /// + /// Each event comes with a timestamp, a type, and a key-value pair describing + /// the event. The type is an enumeration which generally classifies the event + /// type. The key is a text string describing the event. The description holds + /// parameters specific to the event. + /// + /// Possible descriptions (as "key:value") are: + /// - "TangoServiceException:X" - The service has encountered an exception, and + /// a text description is given in X. + /// - "FisheyeOverExposed:X" - the fisheye image is over exposed with average + /// pixel value X px. + /// - "FisheyeUnderExposed:X" - the fisheye image is under exposed with average + /// pixel value X px. + /// - "ColorOverExposed:X" - the color image is over exposed with average pixel + /// value X px. + /// - "ColorUnderExposed:X" - the color image is under exposed with average + /// pixel value X px. + /// - "TooFewFeaturesTracked:X" - too few features were tracked in the fisheye + /// image. The number of features tracked is X. + /// - "Unknown". /// [StructLayout(LayoutKind.Sequential)] public class TangoEvent { + /// + /// Timestamp, in seconds, of the event. + /// [MarshalAs(UnmanagedType.R8)] public double timestamp; - + + /// + /// Type of event. + /// [MarshalAs(UnmanagedType.I4)] public TangoEnums.TangoEventType type; - + + /// + /// Description of the event key. + /// [MarshalAs(UnmanagedType.LPStr)] public string event_key; + /// + /// Description of the event value. + /// [MarshalAs(UnmanagedType.LPStr)] public string event_value; } ///
[StructLayout(LayoutKind.Sequential)] public struct TangoCoordinateFramePair { + /// + /// Base frame of reference to compare against when requesting pose data. + /// For example, if you have loaded an area and want to find out where the + /// device is within it, you would use the + /// TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION frame of reference + /// as your base. + /// [MarshalAs(UnmanagedType.I4)] public TangoEnums.TangoCoordinateFrameType baseFrame; - + + /// + /// Target frame of reference when requesting pose data, compared to the + /// base. For example, if you want the device's pose data, use + /// TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE. + /// [MarshalAs(UnmanagedType.I4)] public TangoEnums.TangoCoordinateFrameType targetFrame; } /// - /// Tango image buffer. + /// The TangoImageBuffer contains information about a byte buffer holding image data. + /// + /// This data is populated by the service when it returns an image. /// [StructLayout(LayoutKind.Sequential)] public class TangoImageBuffer @@ -136,34 +241,46 @@ public class TangoImageBuffer public TangoEnums.TangoImageFormatType format; /// - /// Pixels in HAL_PIXEL_FORMAT_YV12 format. Y samples of width x height are - /// first, followed by V samples, with half the stride and half the lines of - /// the Y data, followed by a U samples with the same dimensions as the V - /// sample. This is stored in the API as a dynamic byte array (uint8_t*). + /// Pixels in the format of this image buffer. /// public IntPtr data; } /// /// The TangoCameraIntrinsics struct contains intrinsic parameters for a camera. - /// For image coordinates, the obervations, [u, v]^T in pixels. - /// Normalized image plane coordinates refer to: /// - /// x = (u - cx) / fx + /// Given a 3D point (X, Y, Z) in camera coordinates, the corresponding + /// pixel coordinates (x, y) are: /// - /// y = (v - cy) / fy + /// + /// x = X / Z * fx * rd / ru + cx + /// y = X / Z * fy * rd / ru + cy + /// /// - /// Distortion model type is as given by calibration_type. For example, for the - /// color camera, TANGO_CALIBRATION_POLYNOMIAL_3_PARAMETERS means that the - /// distortion parameters are in distortion[] as {k1, k2 ,k3} where + /// The normalized radial distance ru is given by: /// - /// x_corr_px = x_px (1 + k1 * r2 + k2 * r4 + k3 * r6) - /// y_corr_px = y_px (1 + k1 * r2 + k2 * r4 + k3 * r6) + /// + /// ru = sqrt((X^2 + Y^2) / (Z^2)) + /// /// - /// where r2, r4, r6 are the 2nd, 4th, and 6th powers of the r, where r is the - /// distance (normalized image plane coordinates) of (x,y) to (cx,cy), and - /// for a pixel at point (x_px, y_px) in pixel coordinates, the corrected output - /// position would be (x_corr, y_corr). + /// The distorted radial distance rd depends on the distortion model used. + /// + /// For TangoCalibrationType.TANGO_CALIBRATION_POLYNOMIAL_3_PARAMETERS, rd is a + /// polynomial that depends on the 3 distortion coefficients k1, k2 and k3: + /// + /// + /// rd = ru + k1 * ru^3 + k2 * ru^5 + k3 * ru^7 + /// + /// + /// For TangoCalibrationType.TANGO_CALIBRATION_EQUIDISTANT, rd depends on the single + /// distortion coefficient w: + /// + /// + /// rd = 1 / w * arctan(2 * ru * tan(w / 2)) + /// + /// + /// For more information, see our page on + /// Camera Intrinsics and Extrinsics. /// [StructLayout(LayoutKind.Sequential)] public class TangoCameraIntrinsics @@ -175,7 +292,8 @@ public class TangoCameraIntrinsics public TangoEnums.TangoCameraId camera_id; /// - /// Calibration model type that they distorion parameters reference. + /// The type of distortion model used. This determines the meaning of the + /// distortion coefficients. /// [MarshalAs(UnmanagedType.I4)] public TangoEnums.TangoCalibrationType calibration_type; @@ -218,34 +336,72 @@ public class TangoCameraIntrinsics } /// - /// Data representing a pose from the Tango Service. + /// The TangoPoseData struct contains 6DOF pose information. + /// + /// The device pose is given using Android conventions. See the Android + /// Sensor + /// Overview page for more information. /// [StructLayout(LayoutKind.Sequential)] public class TangoPoseData { + /// + /// An integer denoting the version of the structure. + /// [MarshalAs(UnmanagedType.I4)] public int version; - + + /// + /// Timestamp of the time that this pose estimate corresponds to. + /// [MarshalAs(UnmanagedType.R8)] public double timestamp; - + + /// + /// Orientation, as a quaternion, of the pose of the target frame + /// with reference to the base frame. + /// Specified as (x,y,z,w) where RotationAngle is in radians: + /// + /// x = RotationAxis.x * sin(RotationAngle / 2) + /// y = RotationAxis.y * sin(RotationAngle / 2) + /// z = RotationAxis.z * sin(RotationAngle / 2) + /// w = cos(RotationAngle / 2) + /// + /// [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 4, ArraySubType = UnmanagedType.R8)] public double[] orientation; - + + /// + /// Translation, ordered x, y, z, of the pose of the target frame + /// with reference to the base frame. + /// [MarshalAsAttribute(UnmanagedType.ByValArray, SizeConst = 3, ArraySubType = UnmanagedType.R8)] public double[] translation; - + + /// + /// The status of the pose, according to the pose lifecycle. + /// [MarshalAs(UnmanagedType.I4)] public TangoEnums.TangoPoseStatusType status_code; - + + /// + /// The pair of coordinate frames for this pose. + /// + /// We retrieve a pose for a target coordinate frame (such as the Tango device) against a base + /// coordinate frame (such as a learned area). + /// [MarshalAs(UnmanagedType.Struct)] public TangoCoordinateFramePair framePair; - - // Unused. Integer levels are determined by service. + + /// + /// Unused. Integer levels are determined by service. + /// [MarshalAs(UnmanagedType.I4)] public int confidence; - // Unused. Reserved for metric accuracy. + /// + /// Unused. Reserved for metric accuracy. + /// [MarshalAs(UnmanagedType.R4)] public float accuracy; @@ -265,7 +421,7 @@ public TangoPoseData() } /// - /// Performs a deep copy of pose data. + /// Deep copy from poseToCopy into this. /// /// Pose to copy. public void DeepCopy(TangoPoseData poseToCopy) @@ -276,11 +432,11 @@ public void DeepCopy(TangoPoseData poseToCopy) this.framePair.baseFrame = poseToCopy.framePair.baseFrame; this.framePair.targetFrame = poseToCopy.framePair.targetFrame; this.confidence = poseToCopy.confidence; - for(int i = 0; i < 4; ++i) + for (int i = 0; i < 4; ++i) { this.orientation[i] = poseToCopy.orientation[i]; } - for(int i = 0; i < 3; ++i) + for (int i = 0; i < 3; ++i) { this.translation[i] = poseToCopy.translation[i]; } @@ -288,14 +444,19 @@ public void DeepCopy(TangoPoseData poseToCopy) } /// - /// Used in the Unity SDK to hold information about the UUID - /// to avoid too many conversions when needing to access the information. + /// Unity-side representation of a area description ID and its associated metadata. + /// + /// Used to avoid too many conversions when needing to access the information. /// public class UUIDUnityHolder { + /// + /// The Metadata for this area description ID. + /// + public Metadata uuidMetaData; + private UUID uuidObject; private string uuidName; - public Metadata uuidMetaData; /// /// Initializes a new instance of the class. @@ -314,7 +475,6 @@ public UUIDUnityHolder() /// public void PrepareUUIDMetaData() { - uuidMetaData.PopulateMetaDataKeyValues(); } @@ -334,7 +494,7 @@ public void AllocateDataBuffer() /// The data marshalled by the UUID list object for this UUID object. public void SetDataUUID(byte[] uuidData) { - if(uuidObject.data == IntPtr.Zero) + if (uuidObject.data == IntPtr.Zero) { AllocateDataBuffer(); } @@ -346,7 +506,7 @@ public void SetDataUUID(byte[] uuidData) /// Copies the data contained by uuidData into our UUID object /// data IntPtr. /// - /// The UTF-8 encoded string for this UUID object. + /// The UTF-8 encoded string for this UUID object. public void SetDataUUID(string uuidString) { uuidName = uuidString; @@ -381,7 +541,9 @@ public bool IsObjectValid() } /// - /// Unique Identifier for an Area Description File. + /// The unique id associated with a single area description. + /// + /// Should be 36 characters including dashes and a null terminating character. /// [StructLayout(LayoutKind.Sequential)] public class UUID @@ -395,15 +557,16 @@ public class UUID /// public class UUID_list { - private UUIDUnityHolder[] UUIDs; + private UUIDUnityHolder[] uuids; private int count; /// /// Count of all Area Description Files (Read only). /// + /// The count. public int Count { - get {return count;} + get { return count; } } /// @@ -411,7 +574,7 @@ public int Count /// public UUID_list() { - UUIDs = null; + uuids = null; } /// @@ -422,32 +585,33 @@ public void PopulateUUIDList(string uuidNames) { System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding(); string[] splitNames = uuidNames.Split(','); - UUIDs = new UUIDUnityHolder[splitNames.Length]; + uuids = new UUIDUnityHolder[splitNames.Length]; count = splitNames.Length; - for(int i = 0; i < count; ++i) + for (int i = 0; i < count; ++i) { - if(UUIDs[i] == null) + if (uuids[i] == null) { - UUIDs[i] = new Tango.UUIDUnityHolder(); + uuids[i] = new Tango.UUIDUnityHolder(); } - //Following three calls should be done in the same order always. - UUIDs[i].SetDataUUID(System.Text.Encoding.UTF8.GetString(encoder.GetBytes(splitNames[i]))); - PoseProvider.GetAreaDescriptionMetaData(UUIDs[i]); - UUIDs[i].PrepareUUIDMetaData(); + + // Following three calls should be done in the same order always. + uuids[i].SetDataUUID(System.Text.Encoding.UTF8.GetString(encoder.GetBytes(splitNames[i]))); + PoseProvider.GetAreaDescriptionMetaData(uuids[i]); + uuids[i].PrepareUUIDMetaData(); } } /// - /// Returns the latest ADF UUID found in the list + /// Returns the latest ADF UUID found in the list. /// /// UUIDUnityHolder object that contains the last ADF saved. public UUIDUnityHolder GetLatestADFUUID() { - if(UUIDs == null || (UUIDs != null && count <= 0)) + if (uuids == null || (uuids != null && count <= 0)) { return null; } - return UUIDs[count - 1]; + return uuids[count - 1]; } /// @@ -457,11 +621,11 @@ public UUIDUnityHolder GetLatestADFUUID() /// Index. public UUIDUnityHolder GetADFAtIndex(int index) { - if(UUIDs == null || (index < 0 || index >= count)) + if (uuids == null || (index < 0 || index >= count)) { return null; } - return UUIDs[index]; + return uuids[index]; } /// @@ -471,11 +635,11 @@ public UUIDUnityHolder GetADFAtIndex(int index) /// Index. public string GetUUIDAsString(int index) { - if(UUIDs == null || (index < 0 || index >= count)) + if (uuids == null || (index < 0 || index >= count)) { return null; } - return UUIDs[index].GetStringDataUUID(); + return uuids[index].GetStringDataUUID(); } /// @@ -489,20 +653,19 @@ public bool HasEntries() } /// - /// Metadata_entry. + /// UUID Metadata list. /// - [StructLayout(LayoutKind.Sequential)] public class Metadata { - private System.Collections.Generic.Dictionary m_KeyValuePairs = new System.Collections.Generic.Dictionary(); public IntPtr meta_data_pointer; + private Dictionary m_keyValuePairs = new Dictionary(); /// /// Populates the meta data key values pairs. /// public void PopulateMetaDataKeyValues() { - PoseProvider.PopulateAreaDescriptionMetaDataKeyValues(meta_data_pointer,ref m_KeyValuePairs); + PoseProvider.PopulateAreaDescriptionMetaDataKeyValues(meta_data_pointer, ref m_keyValuePairs); } /// @@ -510,13 +673,15 @@ public void PopulateMetaDataKeyValues() /// PopulateMetaDataKeyValues() should be called before calling this. /// /// The meta data key values. - public System.Collections.Generic.Dictionary GetMetaDataKeyValues() + public Dictionary GetMetaDataKeyValues() { - return m_KeyValuePairs; + return m_keyValuePairs; } - } + /// + /// The TangoUnityImageData contains information about a byte buffer holding image data. + /// public class TangoUnityImageData { /// @@ -545,39 +710,28 @@ public class TangoUnityImageData public Int64 frame_number; /// - /// The pixel format of the data. + /// Pixel format of the data. /// public TangoEnums.TangoImageFormatType format; /// - /// Pixels in HAL_PIXEL_FORMAT_YV12 format. Y samples of width x height are - /// first, followed by V samples, with half the stride and half the lines of - /// the Y data, followed by a U samples with the same dimensions as the V - /// sample. This is stored in the API as a dynamic byte array (uint8_t*). + /// Pixels in the format of this image buffer. /// public byte[] data; } - + /// - /// Tango depth that is more Unity friendly. + /// Like TangoXYZij, but more Unity friendly. /// public class TangoUnityDepth { - public int m_version; - public int m_pointCount; - public float[] m_points; - public double m_timestamp; - public int m_ijRows; - public int m_ijColumns; - public int[] m_ij; - /// /// Max point array size is currently defined by the largest single mesh /// supported by Unity. This array is multiplied by 3 to account for the /// x/y/z components. /// public static readonly int MAX_POINTS_ARRAY_SIZE = Common.UNITY_MAX_SUPPORTED_VERTS_PER_MESH * 3; - + /// /// Max IJ array size is currently defined by the largest single mesh /// supported by Unity. This number is multiplied by 2 to account for the @@ -585,6 +739,56 @@ public class TangoUnityDepth /// public static readonly int MAX_IJ_ARRAY_SIZE = Common.UNITY_MAX_SUPPORTED_VERTS_PER_MESH * 2; + /// + /// + /// An integer denoting the version of the structure. + /// + public int m_version; + + /// + /// The number of points in the m_points array. + /// + /// Because the points array always contains 3D points, this is m_points.Count / 3. + /// + public int m_pointCount; + + /// + /// An array of packed coordinate triplets, x,y,z as floating point values. + /// + public float[] m_points; + + /// + /// Time of capture of the depth data for this struct (in seconds). + /// + public double m_timestamp; + + /// + /// The dimensions of the ij index buffer. + /// + public int m_ijRows; + + /// + /// The dimensions of the ij index buffer. + /// + public int m_ijColumns; + + /// + /// A 2D buffer, of size ij_rows x ij_cols in raster ordering that contains + /// the index of a point in the xyz array that was generated at this "ij" + /// location. + /// + /// A value of -1 denotes there was no corresponding point generated at that position. This buffer can be used + /// to find neighbouring points in the point cloud. + /// + /// For more information, see our + /// developer + /// overview on depth perception. + /// + public int[] m_ij; + + /// + /// Initializes an empty instance of the class, with no points. + /// public TangoUnityDepth() { m_points = new float[MAX_POINTS_ARRAY_SIZE]; diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces.meta b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces.meta index b67addc5..9e25d3ba 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces.meta +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: f5d37fb7ce64947f28ab06d0dbf90ce4 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/IExperimentalTangoVideoOverlay.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/IExperimentalTangoVideoOverlay.cs index 61695067..b23c25b7 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/IExperimentalTangoVideoOverlay.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/IExperimentalTangoVideoOverlay.cs @@ -1,25 +1,35 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEngine; /// -/// Interface for experimental Tango video overlay event handler. +/// Experimental API only, subject to change. Tango video overlay interface. /// public interface IExperimentalTangoVideoOverlay { + /// + /// This will be called when a new frame is available from the camera. + /// + /// The first scan-line of the color image is reserved for metadata instead of image pixels. + /// + /// Camera identifier. void OnExperimentalTangoImageAvailable(Tango.TangoEnums.TangoCameraId cameraId); } \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoDepth.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoDepth.cs index 1d99a6f0..b6813eb4 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoDepth.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoDepth.cs @@ -1,25 +1,35 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEngine; /// -/// Interface for Tango depth event handler. +/// Tango depth interface. /// public interface ITangoDepth { - void OnTangoDepthAvailable(Tango.TangoUnityDepth tangoDepth); + /// + /// This is called each time new depth data is available. + /// + /// On the Tango tablet, the depth callback occurs at 5 Hz. + /// + /// Tango depth. + void OnTangoDepthAvailable(Tango.TangoUnityDepth tangoDepth); } \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoEvent.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoEvent.cs index eb2dad3e..d3619678 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoEvent.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoEvent.cs @@ -1,25 +1,33 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -using UnityEngine; +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; +using UnityEngine; /// -/// Interface for Tango Events +/// Event notification interface. /// public interface ITangoEvent { + /// + /// This is called each time a Tango event happens. + /// + /// Tango event. void OnTangoEventAvailableEventHandler(Tango.TangoEvent tangoEvent); } diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoPose.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoPose.cs index e0370544..06a8169d 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoPose.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoPose.cs @@ -1,25 +1,36 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEngine; /// -/// Interface for Tango pose event handler. +/// Pose interface. /// public interface ITangoPose { - void OnTangoPoseAvailable(Tango.TangoPoseData poseData); + /// + /// This is called as new pose updates become available. + /// + /// This will be called for START_OF_SERVICE to DEVICE, AREA_DESCRIPTION to DEVICE, and START_OF_SERVICE to + /// AREA_DESCRIPTION, based on which flags have been set on the TangoApplication. + /// + /// Pose data. + void OnTangoPoseAvailable(Tango.TangoPoseData poseData); } diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoVideoOverlay.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoVideoOverlay.cs index f208a9f9..06b7270f 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoVideoOverlay.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Interfaces/ITangoVideoOverlay.cs @@ -1,26 +1,37 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEngine; /// -/// Interface for Tango video overlay event handler. +/// Tango video overlay interface. /// public interface ITangoVideoOverlay { + /// + /// This will be called when a new frame is available from the camera. + /// + /// The first scan-line of the color image is reserved for metadata instead of image pixels. + /// + /// Camera identifier. + /// Image buffer. void OnTangoImageAvailableEventHandler(Tango.TangoEnums.TangoCameraId cameraId, Tango.TangoUnityImageData imageBuffer); } \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners.meta b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners.meta index 7adfc8ed..582cccc2 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners.meta +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: f2e1e806634414f10ad59d9b84c3130c folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/DepthListener.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/DepthListener.cs index 7e8e035e..bedbebd3 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/DepthListener.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/DepthListener.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using UnityEngine; @@ -20,24 +24,23 @@ namespace Tango { /// - /// On tango depth available event handler. + /// Delegate for Tango depth events. /// /// TangoUnityDepth object for the available depth frame. - public delegate void OnTangoDepthAvailableEventHandler(TangoUnityDepth tangoDepth); + internal delegate void OnTangoDepthAvailableEventHandler(TangoUnityDepth tangoDepth); /// - /// Abstract base class that can be used to - /// automatically register for onDepthAvailable - /// callbacks from the Tango Service. + /// Marshals Tango depth data between the C callbacks in one thread and + /// the main Unity thread. /// - public class DepthListener + internal class DepthListener { private Tango.DepthProvider.TangoService_onDepthAvailable m_onDepthAvailableCallback; /// /// Occurs when m_on tango depth available. /// - private event OnTangoDepthAvailableEventHandler m_OnTangoDepthAvailable; + private event OnTangoDepthAvailableEventHandler OnTangoDepthAvailable; private bool m_isDirty = false; private TangoUnityDepth m_tangoDepth; @@ -45,56 +48,59 @@ public class DepthListener private float[] m_depthPoints; /// - /// Register this class to receive the OnDepthAvailable callback. + /// Register to get Tango depth callbacks. + /// + /// NOTE: Tango depth callbacks happen on a different thread than the main + /// Unity thread. /// - public virtual void SetCallback() + internal virtual void SetCallback() { m_tangoDepth = new TangoUnityDepth(); m_onDepthAvailableCallback = new Tango.DepthProvider.TangoService_onDepthAvailable(_OnDepthAvailable); - Tango.DepthProvider.SetCallback(m_onDepthAvailableCallback); + Tango.DepthProvider.SetCallback(m_onDepthAvailableCallback); } /// - /// Sends the depth if available. + /// Raise a Tango depth event if there is new data. /// - public void SendDepthIfAvailable() + internal void SendDepthIfAvailable() { - if (m_isDirty && m_OnTangoDepthAvailable != null) + if (m_isDirty && OnTangoDepthAvailable != null) { lock (m_lockObject) { - m_OnTangoDepthAvailable(m_tangoDepth); + OnTangoDepthAvailable(m_tangoDepth); } m_isDirty = false; } } /// - /// Registers the on tango depth available. + /// Register a Unity main thread handler for the Tango depth event. /// - /// Handler. - public void RegisterOnTangoDepthAvailable(OnTangoDepthAvailableEventHandler handler) + /// Event handler to register. + internal void RegisterOnTangoDepthAvailable(OnTangoDepthAvailableEventHandler handler) { if (handler != null) { - m_OnTangoDepthAvailable += handler; + OnTangoDepthAvailable += handler; } } /// - /// Unregisters the on tango depth available. + /// Unregisters a Unity main thread handler for the Tango depth event. /// - /// Handler. - public void UnregisterOnTangoDepthAvailable(OnTangoDepthAvailableEventHandler handler) + /// Event handler to unregister. + internal void UnregisterOnTangoDepthAvailable(OnTangoDepthAvailableEventHandler handler) { if (handler != null) { - m_OnTangoDepthAvailable -= handler; + OnTangoDepthAvailable -= handler; } } /// - /// Callback that gets called when depth is available + /// DEPRECATED: Callback that gets called when depth is available /// from the Tango Service. /// /// Callback context. diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/PoseListener.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/PoseListener.cs index eb6a093d..4f79d849 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/PoseListener.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/PoseListener.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Collections.Generic; using UnityEngine; @@ -20,49 +24,32 @@ namespace Tango { /// - /// On tango pose available event handler. + /// Delegate for Tango pose events. /// - public delegate void OnTangoPoseAvailableEventHandler(TangoPoseData poseData); + /// The pose data from Tango. + internal delegate void OnTangoPoseAvailableEventHandler(TangoPoseData poseData); /// - /// Abstract base class that can be used to - /// automatically register for onPoseAvailable - /// callbacks from the Tango Service. + /// Marshals Tango pose data between the C callbacks in one thread and the main Unity thread. /// public class PoseListener { - public Tango.PoseProvider.TangoService_onPoseAvailable m_poseAvailableCallback; + /// + /// DEPRECATED: The pose available callback. + /// + internal Tango.PoseProvider.TangoService_onPoseAvailable m_poseAvailableCallback; private const int SIZE_OF_POSE_DATA_POOL = 3; - private TangoPoseData m_motionTrackingData; - private TangoPoseData m_areaLearningData; - private TangoPoseData m_relocalizationData; + private TangoPoseData m_motionTrackingData = null; + private TangoPoseData m_areaLearningData = null; + private TangoPoseData m_relocalizationData = null; private OnTangoPoseAvailableEventHandler m_onTangoPoseAvailable; private Stack m_poseDataPool; private bool m_isDirty = false; + private object m_lockObject = new object(); /// - /// Initializes a new instance of the class. - /// - public PoseListener() - { - m_motionTrackingData = null; - m_areaLearningData = null; - m_relocalizationData = null; - m_poseDataPool = new Stack(); - - // Add pre-allocated TangoPoseData objects to the - // pool stack. - for(int i = 0; i < SIZE_OF_POSE_DATA_POOL; ++i) - { - TangoPoseData emptyPose = new TangoPoseData(); - m_poseDataPool.Push(emptyPose); - } - } - - /// - /// Gets or sets a value indicating whether this - /// is using auto reset. + /// DEPRECATED: Gets or sets a value indicating whether this is using auto reset. /// /// true if auto reset; otherwise, false. public bool AutoReset @@ -72,7 +59,7 @@ public bool AutoReset } /// - /// Gets or sets a value indicating whether this use camera intrinsics. + /// DEPRECATED: Gets or sets a value indicating whether this use camera intrinsics. /// /// true if use camera intrinsics; otherwise, false. public bool UseCameraIntrinsics @@ -82,143 +69,210 @@ public bool UseCameraIntrinsics } /// - /// Sends the pose if available. + /// Initializes a new instance of the class. /// - /// The pose status if available. - public void SendPoseIfAvailable() + internal PoseListener() { - if(m_isDirty) - { - if(m_onTangoPoseAvailable != null) + m_poseDataPool = new Stack(); + + // Add pre-allocated TangoPoseData objects to the + // pool stack. + for (int i = 0; i < SIZE_OF_POSE_DATA_POOL; ++i) + { + TangoPoseData emptyPose = new TangoPoseData(); + m_poseDataPool.Push(emptyPose); + } + } + + /// + /// Raise a Tango pose event if there is new data. + /// + internal void SendPoseIfAvailable() + { +#if UNITY_EDITOR + if (TangoApplication.m_mouseEmulationViaPoseUpdates) + { + PoseProvider.UpdateTangoEmulation(); + lock (m_lockObject) { - if(m_motionTrackingData != null) + if (m_onTangoPoseAvailable != null) { - m_onTangoPoseAvailable(m_motionTrackingData); - m_poseDataPool.Push(m_motionTrackingData); - m_motionTrackingData = null; + FillEmulatedPoseData(ref m_motionTrackingData, + TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE, + TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE); + FillEmulatedPoseData(ref m_areaLearningData, + TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION, + TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE); + m_isDirty = true; } - if(m_areaLearningData != null) - { - m_onTangoPoseAvailable(m_areaLearningData); - m_poseDataPool.Push(m_areaLearningData); - m_areaLearningData = null; - } - if(m_relocalizationData != null) + } + } +#endif + + if (m_isDirty) + { + if (m_onTangoPoseAvailable != null) + { + // NOTE: If this becomes a performance issue, this could be changed to use + // Interlocked.CompareExchange to "consume" the motion tracking data. + lock (m_lockObject) { - m_onTangoPoseAvailable(m_relocalizationData); - m_poseDataPool.Push(m_relocalizationData); - m_relocalizationData = null; + if (m_motionTrackingData != null) + { + m_onTangoPoseAvailable(m_motionTrackingData); + m_poseDataPool.Push(m_motionTrackingData); + m_motionTrackingData = null; + } + if (m_areaLearningData != null) + { + m_onTangoPoseAvailable(m_areaLearningData); + m_poseDataPool.Push(m_areaLearningData); + m_areaLearningData = null; + } + if (m_relocalizationData != null) + { + m_onTangoPoseAvailable(m_relocalizationData); + m_poseDataPool.Push(m_relocalizationData); + m_relocalizationData = null; + } } } - m_isDirty = false; + m_isDirty = false; } } /// - /// Registers the callback. + /// Register to get Tango pose callbacks for specific reference frames. + /// + /// NOTE: Tango pose callbacks happen on a different thread than the main + /// Unity thread. /// - /// Frame pairs. - public void SetCallback(TangoCoordinateFramePair[] framePairs) + /// The reference frames to get callbacks for. + internal void SetCallback(TangoCoordinateFramePair[] framePairs) { m_poseAvailableCallback = new Tango.PoseProvider.TangoService_onPoseAvailable(_OnPoseAvailable); Tango.PoseProvider.SetCallback(framePairs, m_poseAvailableCallback); } - + /// - /// Registers for Tango pose available. + /// Register a Unity main thread handler for the Tango pose event. /// - /// Handler. - public void RegisterTangoPoseAvailable(OnTangoPoseAvailableEventHandler handler) + /// Event handler to register. + internal void RegisterTangoPoseAvailable(OnTangoPoseAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { m_onTangoPoseAvailable += handler; } } - + /// - /// Unregisters the tango pose available. + /// Unregister a Unity main thread handler for the Tango depth event. /// - /// Handler. - public void UnregisterTangoPoseAvailable(OnTangoPoseAvailableEventHandler handler) + /// Event handler to unregister. + internal void UnregisterTangoPoseAvailable(OnTangoPoseAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { m_onTangoPoseAvailable -= handler; } } /// - /// Handle the callback sent by the Tango Service - /// when a new pose is sampled. + /// Handle the callback sent by the Tango Service when a new pose is sampled. /// /// Callback context. /// Pose. private void _OnPoseAvailable(IntPtr callbackContext, TangoPoseData pose) { - // MotionTracking if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE && pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE) { - // Only set new pose once the previous pose has been returned. - if(m_motionTrackingData == null) + // MotionTracking + lock (m_lockObject) { - TangoPoseData currentPose = m_poseDataPool.Pop(); - - if(currentPose == null) - { - return; - } - else + // Only set new pose once the previous pose has been returned. + if (m_motionTrackingData == null) { + TangoPoseData currentPose = m_poseDataPool.Pop(); currentPose.DeepCopy(pose); m_motionTrackingData = currentPose; } } } - // ADF Localized else if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION && pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_DEVICE) { - // Only set new pose once the previous pose has been returned. - if(m_areaLearningData == null) + // ADF Localized + lock (m_lockObject) { - TangoPoseData currentPose = m_poseDataPool.Pop(); - - if(currentPose == null) - { - return; - } - else + // Only set new pose once the previous pose has been returned. + if (m_areaLearningData == null) { + TangoPoseData currentPose = m_poseDataPool.Pop(); currentPose.DeepCopy(pose); m_areaLearningData = currentPose; } } - } - // Relocalized against ADF + } else if (pose.framePair.baseFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_AREA_DESCRIPTION && pose.framePair.targetFrame == TangoEnums.TangoCoordinateFrameType.TANGO_COORDINATE_FRAME_START_OF_SERVICE) { - // Only set new pose once the previous pose has been returned. - if(m_relocalizationData == null) + // Relocalized against ADF + lock (m_lockObject) { - TangoPoseData currentPose = m_poseDataPool.Pop(); - - if(currentPose == null) - { - return; - } - else + // Only set new pose once the previous pose has been returned. + if (m_relocalizationData == null) { + TangoPoseData currentPose = m_poseDataPool.Pop(); currentPose.DeepCopy(pose); m_relocalizationData = currentPose; } } } - m_isDirty = true; + m_isDirty = true; + } + +#if UNITY_EDITOR + /// + /// Fill out poseData with emulated values from Tango. + /// + /// The poseData to fill out. + /// Base frame to set. + /// Target frame to set. + private void FillEmulatedPoseData(ref TangoPoseData poseData, TangoEnums.TangoCoordinateFrameType baseFrame, + TangoEnums.TangoCoordinateFrameType targetFrame) + { + if (poseData == null) + { + TangoPoseData currentPose = m_poseDataPool.Pop(); + + if (currentPose != null) + { + Vector3 position; + Quaternion rotation; + PoseProvider.GetTangoEmulation(out position, out rotation); + + currentPose.framePair.baseFrame = baseFrame; + currentPose.framePair.targetFrame = targetFrame; + + currentPose.timestamp = Time.time * 1000; // timestamp is in ms, time is in sec. + currentPose.version = 0; // Not actually used + currentPose.status_code = TangoEnums.TangoPoseStatusType.TANGO_POSE_VALID; + + currentPose.translation[0] = position.x; + currentPose.translation[1] = position.y; + currentPose.translation[2] = position.z; + currentPose.orientation[0] = rotation.x; + currentPose.orientation[1] = rotation.y; + currentPose.orientation[2] = rotation.z; + currentPose.orientation[3] = rotation.w; + poseData = currentPose; + } + } } +#endif } -} \ No newline at end of file +} diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/TangoEventListener.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/TangoEventListener.cs index 6f62da44..873098ca 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/TangoEventListener.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/TangoEventListener.cs @@ -1,31 +1,37 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using UnityEngine; namespace Tango { - public delegate void OnTangoEventAvailableEventHandler(TangoEvent tangoEvent); + /// + /// IDelegate for Tango event events. + /// + /// Tango event that happened. + internal delegate void OnTangoEventAvailableEventHandler(TangoEvent tangoEvent); /// - /// Abstract base class that can be used to - /// automatically register for onEventAvailable - /// callbacks from the Tango Service. + /// Marshals Tango event data between the C callbacks in one thread and the main Unity thread. /// - public class TangoEventListener + internal class TangoEventListener { private TangoEvents.TangoService_onEventAvailable m_onEventAvaialableCallback; private OnTangoEventAvailableEventHandler m_onTangoEventAvailable; @@ -33,66 +39,68 @@ public class TangoEventListener private bool m_isDirty; /// - /// Sets the callback. + /// Register to get Tango event callbacks. + /// + /// NOTE: Tango event callbacks happen on a different thread than the main + /// Unity thread. /// - public virtual void SetCallback() + internal virtual void SetCallback() { - m_onEventAvaialableCallback = new TangoEvents.TangoService_onEventAvailable(_onEventAvailable); - TangoEvents.SetCallback(m_onEventAvaialableCallback); + m_onEventAvaialableCallback = new TangoEvents.TangoService_onEventAvailable(_onEventAvailable); + TangoEvents.SetCallback(m_onEventAvaialableCallback); m_previousEvent = new TangoEvent(); m_isDirty = false; } - /// - /// Sends if tango event available. - /// - /// If set to true using UX library. - public void SendIfTangoEventAvailable() - { - if(m_isDirty) - { - if(m_onTangoEventAvailable != null) - { - m_onTangoEventAvailable(m_previousEvent); - } + /// + /// Raise a Tango event if there is new data. + /// + internal void SendIfTangoEventAvailable() + { + if (m_isDirty) + { + if (m_onTangoEventAvailable != null) + { + m_onTangoEventAvailable(m_previousEvent); + } - m_isDirty = true; - } + m_isDirty = true; + } } /// - /// Registers the on tango event available. + /// Register a Unity main thread handler for Tango events. /// - /// Handler. - public void RegisterOnTangoEventAvailable(OnTangoEventAvailableEventHandler handler) + /// Event handler to register. + internal void RegisterOnTangoEventAvailable(OnTangoEventAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { m_onTangoEventAvailable += handler; } } /// - /// Unregisters the on tango event available. + /// Unregister a Unity main thread handler for the Tango depth event. /// - /// Handler. - public void UnregisterOnTangoEventAvailable(OnTangoEventAvailableEventHandler handler) + /// Event handler to unregister. + internal void UnregisterOnTangoEventAvailable(OnTangoEventAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { m_onTangoEventAvailable -= handler; } } /// - /// Handle the callback sent by the Tango Service + /// DEPRECATED: Handle the callback sent by the Tango Service /// when a new event is issued. /// /// Callback context. /// Tango event. protected void _onEventAvailable(IntPtr callbackContext, TangoEvent tangoEvent) { - if(tangoEvent != null) + if (tangoEvent != null) { m_previousEvent.timestamp = tangoEvent.timestamp; m_previousEvent.type = tangoEvent.type; diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/VideoOverlayListener.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/VideoOverlayListener.cs index 5d06c399..5f07a266 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/VideoOverlayListener.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/Listeners/VideoOverlayListener.cs @@ -1,62 +1,88 @@ - -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -using UnityEngine; +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using System; using System.Runtime.InteropServices; +using UnityEngine; namespace Tango { - public delegate void OnTangoImageAvailableEventHandler(TangoEnums.TangoCameraId cameraId, - TangoUnityImageData imageBuffer); - public delegate void OnExperimentalTangoImageAvailableEventHandler(Tango.TangoEnums.TangoCameraId cameraId); + /// + /// Delegate for Tango image events. + /// + /// The camera for the image. + /// The image from the camera. + internal delegate void OnTangoImageAvailableEventHandler(TangoEnums.TangoCameraId cameraId, + TangoUnityImageData imageBuffer); + + /// + /// Experimental API only, subject to change. Delegate for Tango image events. + /// + /// The camera for the image. + internal delegate void OnExperimentalTangoImageAvailableEventHandler(Tango.TangoEnums.TangoCameraId cameraId); /// - /// Video overlay listener. + /// Marshals Tango image data between the C callbacks in one thread and + /// the main Unity thread. /// - public class VideoOverlayListener + internal class VideoOverlayListener { - private VideoOverlayProvider.TangoService_onImageAvailable m_onImageAvailable; + private VideoOverlayProvider.TangoService_onImageAvailable m_onImageAvailable; private VideoOverlayProvider.TangoService_onUnityFrameAvailable m_onUnityFrameAvailable; - private event OnTangoImageAvailableEventHandler m_onTangoImageAvailable; - private event OnExperimentalTangoImageAvailableEventHandler m_onExperimentalTangoImageAvailable; + /// + /// Called when a new Tango image is available. + /// + private event OnTangoImageAvailableEventHandler OnTangoImageAvailable; - private TangoEnums.TangoCameraId m_previousCameraId; - private TangoUnityImageData m_previousImageBuffer; - private bool m_shouldSendEvent = false; + /// + /// Called when a new Tange image is available (experimental version). + /// + private event OnExperimentalTangoImageAvailableEventHandler OnExperimentalTangoImageAvailable; + + private TangoEnums.TangoCameraId m_previousCameraId; + private TangoUnityImageData m_previousImageBuffer; + private bool m_shouldSendEvent = false; private bool m_usingExperimentalOverlay = false; - /// - /// Sets the callback for image updates. - /// - /// Camera identifier. - public virtual void SetCallback(Tango.TangoEnums.TangoCameraId cameraId, bool useExperimentalOverlay, YUVTexture videoOverlayTexture) - { + /// + /// Register to get Tango image events. + /// + /// NOTE: Tango image events happen on a different thread than the main + /// Unity thread. + /// + /// Camera identifier to get events for. + /// If true, use the experimental video overlay. + /// The video overlay texture to use. Only used in experimental mode. + internal virtual void SetCallback(Tango.TangoEnums.TangoCameraId cameraId, bool useExperimentalOverlay, YUVTexture videoOverlayTexture) + { m_usingExperimentalOverlay = useExperimentalOverlay; - if(!useExperimentalOverlay) + if (!useExperimentalOverlay) { m_previousImageBuffer = new TangoUnityImageData(); - m_onImageAvailable = new Tango.VideoOverlayProvider.TangoService_onImageAvailable(_OnImageAvailable); - Tango.VideoOverlayProvider.SetCallback(cameraId, m_onImageAvailable); + m_onImageAvailable = new Tango.VideoOverlayProvider.TangoService_onImageAvailable(_OnImageAvailable); + Tango.VideoOverlayProvider.SetCallback(cameraId, m_onImageAvailable); } else { - if(videoOverlayTexture != null) + if (videoOverlayTexture != null) { m_onUnityFrameAvailable = new Tango.VideoOverlayProvider.TangoService_onUnityFrameAvailable(_OnExperimentalUnityFrameAvailable); VideoOverlayProvider.ExperimentalConnectTexture(cameraId, @@ -70,93 +96,93 @@ public virtual void SetCallback(Tango.TangoEnums.TangoCameraId cameraId, bool us Debug.Log("VideoOverlayListener.SetCallback() : No Texture2D found!"); } } - } + } /// - /// Sends event if video overlay is available. + /// Raise a Tango image event if there is new data. /// - public void SendIfVideoOverlayAvailable() - { - if(m_usingExperimentalOverlay) + internal void SendIfVideoOverlayAvailable() + { + if (m_usingExperimentalOverlay) { - if(m_onExperimentalTangoImageAvailable != null && m_shouldSendEvent) + if (OnExperimentalTangoImageAvailable != null && m_shouldSendEvent) { - m_onExperimentalTangoImageAvailable(m_previousCameraId); + OnExperimentalTangoImageAvailable(m_previousCameraId); m_shouldSendEvent = false; } } else { - if(m_onTangoImageAvailable != null && m_shouldSendEvent) - { - m_onTangoImageAvailable(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR, m_previousImageBuffer); + if (OnTangoImageAvailable != null && m_shouldSendEvent) + { + OnTangoImageAvailable(TangoEnums.TangoCameraId.TANGO_CAMERA_COLOR, m_previousImageBuffer); m_shouldSendEvent = false; - } + } } - } + } /// - /// Registers the on tango image available. + /// Register a Unity main thread handler for the Tango image event. /// - /// Handler. - public void RegisterOnTangoImageAvailable(OnTangoImageAvailableEventHandler handler) + /// Event handler to register. + internal void RegisterOnTangoImageAvailable(OnTangoImageAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { - m_onTangoImageAvailable += handler; + OnTangoImageAvailable += handler; } } /// - /// Unregisters the on tango image available. + /// Unregister a Unity main thread handler for the Tango image event. /// - /// Handler. - public void UnregisterOnTangoImageAvailable(OnTangoImageAvailableEventHandler handler) + /// Event handler to unregister. + internal void UnregisterOnTangoImageAvailable(OnTangoImageAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { - m_onTangoImageAvailable -= handler; + OnTangoImageAvailable -= handler; } } /// - /// Registers the on tango image available. + /// Register a Unity main thread handler for the Tango image event. /// - /// Handler. - public void RegisterOnExperimentalTangoImageAvailable(OnExperimentalTangoImageAvailableEventHandler handler) + /// Event handler to register. + internal void RegisterOnExperimentalTangoImageAvailable(OnExperimentalTangoImageAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { - m_onExperimentalTangoImageAvailable += handler; + OnExperimentalTangoImageAvailable += handler; } } /// - /// Unregisters the on tango image available. + /// Unregister a Unity main thread handler for the Tango image event. /// - /// Handler. - public void UnregisterOnExperimentalTangoImageAvailable(OnExperimentalTangoImageAvailableEventHandler handler) + /// Event handler to unregister. + internal void UnregisterOnExperimentalTangoImageAvailable(OnExperimentalTangoImageAvailableEventHandler handler) { - if(handler != null) + if (handler != null) { - m_onExperimentalTangoImageAvailable -= handler; + OnExperimentalTangoImageAvailable -= handler; } } - - /// - /// Handle the callback sent by the Tango Service - /// when a new image is sampled. - /// - /// Camera identifier. - /// Callback context. - /// Image buffer. - protected void _OnImageAvailable(IntPtr callbackContext, - TangoEnums.TangoCameraId cameraId, - TangoImageBuffer imageBuffer) + + /// + /// DEPRECATED: Handle the callback sent by the Tango Service + /// when a new image is sampled. + /// + /// Callback context. + /// Camera identifier. + /// Image buffer. + protected void _OnImageAvailable(IntPtr callbackContext, + TangoEnums.TangoCameraId cameraId, + TangoImageBuffer imageBuffer) { - m_previousCameraId = cameraId; + m_previousCameraId = cameraId; - if(m_previousImageBuffer.data == null) + if (m_previousImageBuffer.data == null) { m_previousImageBuffer.data = new byte[imageBuffer.width * imageBuffer.height * 2]; } @@ -170,10 +196,15 @@ protected void _OnImageAvailable(IntPtr callbackContext, Marshal.Copy(imageBuffer.data, m_previousImageBuffer.data, 0, m_previousImageBuffer.data.Length); - m_shouldSendEvent = true; + m_shouldSendEvent = true; } - public void _OnExperimentalUnityFrameAvailable(IntPtr callbackContext, Tango.TangoEnums.TangoCameraId cameraId) + /// + /// DEPRECATED: Handle the callback set by the Tango Service when a new image is available. + /// + /// Callback context. + /// Camera identifier. + protected void _OnExperimentalUnityFrameAvailable(IntPtr callbackContext, Tango.TangoEnums.TangoCameraId cameraId) { m_previousCameraId = cameraId; m_shouldSendEvent = true; diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers.meta b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers.meta index ab2a508b..ecc99fdb 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers.meta +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 4fc55f6870f0443b986d0ef797cec697 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/DepthProvider.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/DepthProvider.cs index 841a7b9f..5dadf42f 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/DepthProvider.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/DepthProvider.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Collections; using System.Runtime.InteropServices; @@ -21,24 +25,28 @@ namespace Tango { /// - /// Wraps depth related Tango Service functionality. + /// C API wrapper for the Tango depth interface. /// - public class DepthProvider + internal class DepthProvider { + /// + /// Tango depth C callback function signature. + /// + /// Callback context. + /// Depth information. [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void TangoService_onDepthAvailable(IntPtr callbackContext, [In,Out] TangoXYZij xyzij); + internal delegate void TangoService_onDepthAvailable(IntPtr callbackContext, [In, Out] TangoXYZij xyzij); /// - /// Sets the callback that is called when new depth - /// points have been sampled by the Tango Service. + /// Set the C callback for the Tango depth interface. /// /// Callback. - public static void SetCallback(TangoService_onDepthAvailable callback) + internal static void SetCallback(TangoService_onDepthAvailable callback) { int returnValue = DepthAPI.TangoService_connectOnXYZijAvailable(callback); if (returnValue != Common.ErrorType.TANGO_SUCCESS) { - Debug.Log("DepthProvider.SetCallback() Callback was not set!"); + Debug.Log("DepthProvider.SetCallback() Callback was not set!"); } else { @@ -46,9 +54,9 @@ public static void SetCallback(TangoService_onDepthAvailable callback) } } - /// - /// Wraps depth functionality from Tango Service. - /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1600:ElementsMustBeDocumented", + Justification = "C API Wrapper.")] private struct DepthAPI { #if UNITY_ANDROID && !UNITY_EDITOR diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/PoseProvider.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/PoseProvider.cs index b619e33a..39473e36 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/PoseProvider.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/PoseProvider.cs @@ -1,65 +1,87 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- +using System; using System.Collections; +using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; -using System; namespace Tango { /// - /// Provide pose related functionality. + /// C API wrapper for the Tango pose interface. /// public class PoseProvider - { - + { + /// + /// Tango pose C callback function signature. + /// + /// Callback context. + /// Pose data. [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void TangoService_onPoseAvailable(IntPtr callbackContext, [In,Out] TangoPoseData pose); - - private static readonly string CLASS_NAME = "PoseProvider"; + internal delegate void TangoService_onPoseAvailable(IntPtr callbackContext, [In, Out] TangoPoseData pose); + private const float MOUSE_LOOK_SENSITIVITY = 100.0f; private const float TRANSLATION_SPEED = 2.0f; + private static readonly string CLASS_NAME = "PoseProvider"; // Keeps track of all the ADFs on the device. private static UUID_list m_adfList = new UUID_list(); +#if UNITY_EDITOR /// - /// Sets the callback to be used when a new Pose is - /// presented by the Tango Service. + /// The emulated pose position. Used for Tango emulation on PC. /// - /// Callback. - public static void SetCallback(TangoCoordinateFramePair[] framePairs, TangoService_onPoseAvailable callback) - { - int returnValue = PoseProviderAPI.TangoService_connectOnPoseAvailable(framePairs.Length, framePairs, callback); - if (returnValue != Common.ErrorType.TANGO_SUCCESS) - { - Debug.Log(CLASS_NAME + ".SetCallback() Callback was not set!"); - } - else - { - Debug.Log(CLASS_NAME + ".SetCallback() OnPose callback was set!"); - } - } + private static Vector3 m_emulatedPosePosition; + + /// + /// The emulated pose euler angles from forward. Used for Tango emulation on PC. + /// + /// This is not the pure rotation for Tango, when it is Identity, you are facing forward, not down. + /// + private static Vector3 m_emulatedPoseAnglesFromForward; +#endif /// - /// Gets the pose at a given time. + /// Get a pose at a given timestamp from the base to the target frame. + /// + /// All poses returned are marked as TANGO_POSE_VALID (in the status_code field on TangoPoseData ) even if + /// they were marked as TANGO_POSE_INITIALIZING in the callback poses. + /// + /// If no pose can be returned, the status_code of the returned pose will be TANGO_POSE_INVALID. /// - /// Pose data. - /// Time stamp. - public static void GetPoseAtTime([In,Out] TangoPoseData poseData, + /// The pose to return. + /// + /// Time specified in seconds. + /// + /// If not set to 0.0, GetPoseAtTime retrieves the interpolated pose closest to this timestamp. If set to 0.0, + /// the most recent pose estimate for the target-base pair is returned. The time of the returned pose is + /// contained in the pose output structure and may differ from the queried timestamp. + /// + /// + /// A pair of coordinate frames specifying the transformation to be queried for. + /// + /// For example, typical device motion is given by a target frame of TANGO_COORDINATE_FRAME_DEVICE and a base + /// frame of TANGO_COORDINATE_FRAME_START_OF_SERVICE . + /// + public static void GetPoseAtTime([In, Out] TangoPoseData poseData, double timeStamp, TangoCoordinateFramePair framePair) { @@ -69,32 +91,41 @@ public static void GetPoseAtTime([In,Out] TangoPoseData poseData, Debug.Log(CLASS_NAME + ".GetPoseAtTime() Could not get pose at time : " + timeStamp); } } - + /// - /// Sets the listener coordinate frame pairs. + /// DEPRECATED: Sets the listener coordinate frame pairs. /// /// Count. /// Frames. public static void SetListenerCoordinateFramePairs(int count, ref TangoCoordinateFramePair frames) { - int returnValue = PoseProviderAPI.TangoService_setPoseListenerFrames (count, ref frames); + int returnValue = PoseProviderAPI.TangoService_setPoseListenerFrames(count, ref frames); if (returnValue != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".SetListenerCoordinateFramePairs() Could not set frame pairs"); } } - + /// - /// Resets the motion tracking. + /// Resets the motion tracking system. + /// + /// This reinitializes the TANGO_COORDINATE_FRAME_START_OF_SERVICE coordinate frame to where the + /// device is when you call this function; afterwards, if you ask for the pose with relation to start of + /// service, it uses this as the new origin. You can call this function at any time. + /// + /// If you are using Area Learning, the TANGO_COORDINATE_FRAME_AREA_DESCRIPTION coordinate frame + /// is not affected by calling this function; however, the device needs to localize again before you can use + /// the area description. /// public static void ResetMotionTracking() { PoseProviderAPI.TangoService_resetMotionTracking(); } +#if UNITY_EDITOR /// - /// Gets the mouse emulation. + /// DEPRECATED: Legacy function that gets mouse / keyboard PoseEmulation data. /// /// Controller postion. /// Controller rotation. @@ -129,10 +160,13 @@ public static void GetMouseEmulation(ref Vector3 controllerPostion, ref Quaterni controllerRotation = rotation; controllerPostion = position; } +#endif #region ADF Functionality /// - /// Helper method to retrieve a list of saved area description files. + /// Gets the full list of unique area description IDs available on a device. + /// + /// This is updated by calling RefreshADFList. /// /// The cached ADF list. public static UUID_list GetCachedADFList() @@ -141,46 +175,51 @@ public static UUID_list GetCachedADFList() } /// - /// Returns the UUID of the most recent ADF file. + /// Gets the latest area description ID available on a device. /// - /// A string object encoded in UTF-8 format containing the UUID of the requested ADF. + /// The most recent area description ID. public static UUIDUnityHolder GetLatestADFUUID() { - if(m_adfList == null) + if (m_adfList == null) { return null; } - return (m_adfList.GetLatestADFUUID()); + return m_adfList.GetLatestADFUUID(); } + /// + /// Check if an area description ID is valid. + /// + /// true if the ID is valid; otherwise, false. + /// Area description ID to check. public static bool IsUUIDValid(UUIDUnityHolder toCheck) { return toCheck != null && toCheck.IsObjectValid(); } /// - /// Gets the UUID of the ADF at the specified index. It will be encoded in UTF-8. + /// Gets the area description ID at the specified index as a string. /// - /// The ADF UUID as string. - /// The ADF format that we want to know the UUID of. + /// The area description ID as a string. + /// The index of the area description ID. public static string GetUUIDAsString(int index) { - if(m_adfList == null) + if (m_adfList == null) { return string.Empty; } return m_adfList.GetUUIDAsString(index); } - + /// - /// Gets the UUID of the ADF at the specified index. It will be encoded in UTF-8. + /// Gets the area description ID at the specified index as a char array. /// - /// The ADF UUID as a char array. - /// The ADF format that we want to know the UUID of. + /// The area description ID as a char array. + /// The index of the area description ID. public static char[] GetUUIDAsCharArray(int index) { string uuidString = GetUUIDAsString(index); - if(String.IsNullOrEmpty(uuidString)) + if (String.IsNullOrEmpty(uuidString)) { return null; } @@ -188,27 +227,23 @@ public static char[] GetUUIDAsCharArray(int index) } /// - /// This method is used to make sure that we have the most up to date information about ADF - /// that are stored on device. It will make sure to cache it in a UUID_list object - /// for easier access without querying the device API again. This method will also - /// retrieve the UUID of each ADF by performing a Marshal.Copy and store the information - /// in a UUID object list. + /// Update the list returned by GetCachedADFList. /// - /// The ADF list. + /// Returns TANGO_SUCCESS on success, or TANGO_ERROR on failure to retrieve the list. public static int RefreshADFList() { int returnValue = Common.ErrorType.TANGO_ERROR; IntPtr tempData = IntPtr.Zero; returnValue = PoseProviderAPI.TangoService_getAreaDescriptionUUIDList(ref tempData); - - if(returnValue != Common.ErrorType.TANGO_SUCCESS) + + if (returnValue != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".RefreshADFList() Could not get ADF list from device."); } else { byte[] charBuffer = new byte[sizeof(char)]; - System.Collections.Generic.List dataHolder = new System.Collections.Generic.List(); + List dataHolder = new List(); Marshal.Copy(tempData, charBuffer, 0, 1); while (charBuffer[0] != 0 && charBuffer[0] != '\n') { @@ -218,9 +253,8 @@ public static int RefreshADFList() } string uuidList = System.Text.Encoding.UTF8.GetString(dataHolder.ToArray()); m_adfList.PopulateUUIDList(uuidList); - if(!m_adfList.HasEntries()) + if (!m_adfList.HasEntries()) { - Debug.Log(CLASS_NAME + ".RefreshADFList() No area description files found on device."); } } @@ -228,16 +262,22 @@ public static int RefreshADFList() } /// - /// Saves an area description to device based on the UUID object contained in the adfID object holder. + /// Saves the area description, returning the unique ID associated with the saved map. + /// + /// You can only save an area description while connected to the Tango Service and if you have enabled Area + /// Learning mode. If you loaded an ADF before connecting, then calling this method appends any new learned + /// areas to that ADF and returns the same UUID. If you did not load an ADF, this method creates a new ADF and + /// a new UUID for that ADF. /// - /// Common.ErrorType.TANGO_SUCCESS if saving was successfull. - /// The UUIDUnityHolder object that contains the desired UUID object. + /// + /// Returns TANGO_SUCCESS on success, and TANGO_ERROR if a failure occurred when saving, or if the service + /// needs to be initialized, or TANGO_INVALID if uuid is NULL, or of incorrect length, or if Area Learning Mode + /// was not set (see logcat for details). + /// + /// Upon saving, the TangoUUID to refer to this ADF is returned here. public static int SaveAreaDescription(UUIDUnityHolder adfUnityHolder) { - // is learning mode on - // are we localized? - - if(adfUnityHolder == null) + if (adfUnityHolder == null) { Debug.Log(CLASS_NAME + ".SaveAreaDescription() Could not save area description. UUID Holder object specified is not initialized"); return Common.ErrorType.TANGO_ERROR; @@ -246,7 +286,7 @@ public static int SaveAreaDescription(UUIDUnityHolder adfUnityHolder) int returnValue = PoseProviderAPI.TangoService_saveAreaDescription(idData); if (returnValue != Common.ErrorType.TANGO_SUCCESS) { - Debug.Log(CLASS_NAME + ".SaveAreaDescripton() Could not save area description with ID: "+ adfUnityHolder.GetStringDataUUID()); + Debug.Log(CLASS_NAME + ".SaveAreaDescripton() Could not save area description with ID: " + adfUnityHolder.GetStringDataUUID()); } else { @@ -258,30 +298,33 @@ public static int SaveAreaDescription(UUIDUnityHolder adfUnityHolder) } /// - /// Saves the area description meta data with whatever metadata is set inside the adfUnityHolder object + /// Saves the metadata associated with a single area description unique ID. /// - /// The area description meta data. - /// Adf unity holder. + /// + /// Returns TANGO_SUCCESS on successful save, or TANGO_ERROR on failure, or if the service needs to be + /// initialized. + /// + /// The metadata and associated UUID to save. public static int SaveAreaDescriptionMetaData(UUIDUnityHolder adfUnityHolder) { - if(adfUnityHolder == null) + if (adfUnityHolder == null) { Debug.Log(CLASS_NAME + ".SaveAreaDescription() Could not save area description. UUID Holder object specified is not initialized"); return Common.ErrorType.TANGO_ERROR; } - if(string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) + if (string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) { Debug.Log(CLASS_NAME + ".MetaData cannot be retrived for the area description as UUIDUnityHolder object was empty or null."); return Common.ErrorType.TANGO_ERROR; } - if(adfUnityHolder.uuidMetaData.meta_data_pointer == IntPtr.Zero) + if (adfUnityHolder.uuidMetaData.meta_data_pointer == IntPtr.Zero) { Debug.Log(CLASS_NAME + "metadata pointer is null, cannot save metadata to this ADF!"); return Common.ErrorType.TANGO_ERROR; } Debug.Log("UUID being saved is: " + adfUnityHolder.GetStringDataUUID()); int returnValue = PoseProviderAPI.TangoService_saveAreaDescriptionMetadata(adfUnityHolder.GetStringDataUUID(), adfUnityHolder.uuidMetaData.meta_data_pointer); - if(returnValue!=Common.ErrorType.TANGO_SUCCESS) + if (returnValue != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + "Could not save metadata to the ADF!"); } @@ -289,51 +332,51 @@ public static int SaveAreaDescriptionMetaData(UUIDUnityHolder adfUnityHolder) } /// - /// Takes care of saving a ADF file to the specified folder. + /// Export an area with the UUID from the default area storage location to the destination file directory with + /// the UUID as its name. /// - /// Common.ErrorType.TANGO_SUCCESS if the ADF file was exported successfully. - /// The UUID of the ADF file we want to export. - /// File path where we want to export the ADF. - public static int ExportAreaDescriptionToFile(string UUID, string filePath) + /// Returns TANGO_SUCCESS if the file was exported, or TANGO_ERROR if the export failed. + /// The UUID of the area. + /// The destination file directory. + public static int ExportAreaDescriptionToFile(string uuid, string filePath) { - if(string.IsNullOrEmpty(UUID)) + if (string.IsNullOrEmpty(uuid)) { Debug.Log("Can't export an empty UUID. Please define one."); return Common.ErrorType.TANGO_ERROR; } - if(string.IsNullOrEmpty(filePath)) + if (string.IsNullOrEmpty(filePath)) { Debug.Log("Missing file path for exporting area description. Please define one."); return Common.ErrorType.TANGO_ERROR; } - int returnValue = PoseProviderAPI.TangoService_exportAreaDescription(UUID, filePath); - if(returnValue != Common.ErrorType.TANGO_SUCCESS) + int returnValue = PoseProviderAPI.TangoService_exportAreaDescription(uuid, filePath); + if (returnValue != Common.ErrorType.TANGO_SUCCESS) { - Debug.Log(CLASS_NAME + ".ExportAreaDescription() Could not export area description: " + UUID + - " with path: " + filePath); + Debug.Log(CLASS_NAME + ".ExportAreaDescription() Could not export area description: " + uuid + + " with path: " + filePath); } return returnValue; - } - + /// - /// Takes care of importing a adf file from the specified path. Important: make sure that the filepath - /// does not contain ADF files already present on device, otherwise it will return an error, as duplicates - /// can't be imported. + /// Import an area description from a file path to the default area storage location. + /// + /// The new area description will get a new ID, which will be stored in adfID. /// /// Common.ErrorType.TANGO_SUCCESS if the UUID was imported successfully. - /// The UUIDUnityHolder object that will contain information about the retrieved ADF. - /// File path containing the ADF we want to export. + /// Upon successful return, this will have the new ID. + /// File path of the area descrption to be imported. public static int ImportAreaDescriptionFromFile(UUIDUnityHolder adfID, string filePath) { - if(adfID == null) + if (adfID == null) { Debug.Log(CLASS_NAME + ".ImportAreaDescription() Could not import area description. UUID Holder object specified is not initialized"); return Common.ErrorType.TANGO_ERROR; } IntPtr uuidHolder = Marshal.AllocHGlobal(Common.UUID_LENGTH); int returnValue = PoseProviderAPI.TangoService_importAreaDescription(filePath, uuidHolder); - if(returnValue != Common.ErrorType.TANGO_SUCCESS) + if (returnValue != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".ImportAreaDescription() Could not import area description at path: " + filePath); } @@ -347,20 +390,21 @@ public static int ImportAreaDescriptionFromFile(UUIDUnityHolder adfID, string fi } /// - /// Deletes the area description with the specified UUID from the default folder where ADF maps are stored. - /// This needs to be called before trying to import a ADF that is already present in the default ADF maps folder. + /// Deletes an area description with the specified unique ID. /// - /// Common.ErrorType.TANGO_SUCCESS if the UUID was deleted successfully. - /// The UUID of the ADF we want to delete. + /// + /// Returns TANGO_SUCCESS if area description file with specified unique ID is found and can be removed. + /// + /// The area description to delete. public static int DeleteAreaDescription(string toDeleteUUID) { - if(string.IsNullOrEmpty(toDeleteUUID)) + if (string.IsNullOrEmpty(toDeleteUUID)) { Debug.Log(CLASS_NAME + ".DeleteAreaDescription() Could not delete area description, UUID was empty or null."); return Common.ErrorType.TANGO_ERROR; } int returnValue = PoseProviderAPI.TangoService_deleteAreaDescription(toDeleteUUID); - if(returnValue != Common.ErrorType.TANGO_SUCCESS) + if (returnValue != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".DeleteAreaDescription() Could not delete area description, API returned invalid."); } @@ -369,89 +413,90 @@ public static int DeleteAreaDescription(string toDeleteUUID) #endregion // ADF Functionality #region ADF Metadata Functionality - - /// - /// This function sets the pointer to metadatapointer in UUIDUnityHolder Object. - /// UUIDObjectHolder needs to be initialized and UUID data needs to be filled in before passing in to this - /// function. + /// Gets the metadata handle associated with a single area description unique ID. /// - /// The area description meta data. - /// Adf unity holder with UUID data only should be passed into this function. If the data is valid, - /// this function sets the pointer to raw UUID metadata which can then be parsed using AreaDescriptionMetaData_get or set functions + /// + /// Returns TANGO_SUCCESS on successful load of metadata, or TANGO_ERROR if the service needs to be initialized + /// or if the metadata could not be loaded. + /// + /// + /// The TangoUUID for which to load the metadata. On success, this function sets the pointer to raw UUID + /// metadata which can then be extracted using AreaDescriptionMetaData_get, AreaDescriptionMetaData_get, or + /// PopulateAreaDescriptionMetaDataKeyValues. + /// public static int GetAreaDescriptionMetaData(UUIDUnityHolder adfUnityHolder) { - if(string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) + if (string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) { Debug.Log(CLASS_NAME + ".MetaData cannot be retrived for the area description as UUIDUnityHolder object was empty or null."); return Common.ErrorType.TANGO_ERROR; } int returnValue = PoseProviderAPI.TangoService_getAreaDescriptionMetadata(adfUnityHolder.GetStringDataUUID(), ref adfUnityHolder.uuidMetaData.meta_data_pointer); - if(returnValue != Common.ErrorType.TANGO_SUCCESS) + if (returnValue != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + "Meta Data could not be loaded"); } - Debug.Log("GetAreaDescription return value is: "+ returnValue.ToString()); + Debug.Log("GetAreaDescription return value is: " + returnValue.ToString()); return returnValue; } /// - /// /Populates the Metadata values of a given metadataPointer into a Dictionary object which can - /// then be used by application for listing the ADF's information. metaDataPointer should be initialized to - /// a valid MetaData by calling the getAreaDescriptionMetaData(). + /// Populates the Metadata key/value pairs of a given metadataPointer. + /// + /// metaDataPointer should be initialized to a valid Metadata by calling the getAreaDescriptionMetaData(). /// - /// Tango Success if successful, else returns Invalid or Tango_Error type. + /// TANGO_SUCCESS if successful, else TANGO_INVALID or TANGO_ERROR. /// Metadata pointer. - /// M_ key value pairs. - public static int PopulateAreaDescriptionMetaDataKeyValues(IntPtr metadataPointer, ref System.Collections.Generic.Dictionary m_KeyValuePairs) + /// Dictionary of key/value pairs stored in the metadata. + public static int PopulateAreaDescriptionMetaDataKeyValues(IntPtr metadataPointer, ref Dictionary keyValuePairs) { IntPtr keyList = IntPtr.Zero; - if(metadataPointer == IntPtr.Zero) + if (metadataPointer == IntPtr.Zero) { Debug.Log(CLASS_NAME + "metadata pointer is null, cannot save metadata to this ADF!"); return Common.ErrorType.TANGO_ERROR; } - int returnValue = PoseProviderAPI.TangoAreaDescriptionMetadata_listKeys(metadataPointer,ref keyList); - if(returnValue != Tango.Common.ErrorType.TANGO_SUCCESS) + int returnValue = PoseProviderAPI.TangoAreaDescriptionMetadata_listKeys(metadataPointer, ref keyList); + if (returnValue != Tango.Common.ErrorType.TANGO_SUCCESS) { Debug.Log("Could not read metadata keys list"); } string metadataKeys = Marshal.PtrToStringAuto(keyList); - string[] keys = metadataKeys.Split(new char[]{','}); + string[] keys = metadataKeys.Split(new char[] { ',' }); string[] values = new string[keys.Length]; - for(int i =0; i< values.Length; i++) + for (int i = 0; i < values.Length; i++) { uint valuesize = 0; IntPtr valuePointer = IntPtr.Zero; - PoseProviderAPI.TangoAreaDescriptionMetadata_get(metadataPointer,keys[i], ref valuesize,ref valuePointer); + PoseProviderAPI.TangoAreaDescriptionMetadata_get(metadataPointer, keys[i], ref valuesize, ref valuePointer); byte[] valueByteArray = new byte[valuesize]; - Marshal.Copy(valuePointer,valueByteArray,0,(int)valuesize); + Marshal.Copy(valuePointer, valueByteArray, 0, (int)valuesize); values[i] = System.Text.Encoding.UTF8.GetString(valueByteArray); - Debug.Log("Key Values are- " + keys[i]+": "+values[i]); - m_KeyValuePairs.Add(keys[i],values[i]); + Debug.Log("Key Values are- " + keys[i] + ": " + values[i]); + keyValuePairs.Add(keys[i], values[i]); } return returnValue; } /// - /// Gets the value of a key and populates into the "value" string object. adfUnitHolderObject - /// should be initialized with valid UUID before calling this function. + /// Get the value of a key from a metadata. /// - /// The description meta data_get. - /// Key. - /// Value. - /// Adf unity holder. + /// TANGO_SUCCESS if successful, else TANGO_INVALID or TANGO_ERROR. + /// Key to lookup. + /// On success, the value for that key. + /// Area description + metadata holder. public static int AreaDescriptionMetaData_get(String key, ref String value, UUIDUnityHolder adfUnityHolder) { - if(string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) + if (string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) { Debug.Log(CLASS_NAME + ".MetaData cannot be retrived for the area description as UUIDUnityHolder object was empty or null."); return Common.ErrorType.TANGO_ERROR; } uint valuesize = 0; IntPtr valuePointer = IntPtr.Zero; - int returnValue = PoseProviderAPI.TangoAreaDescriptionMetadata_get(adfUnityHolder.uuidMetaData.meta_data_pointer, key, ref valuesize,ref valuePointer); - if(returnValue != Tango.Common.ErrorType.TANGO_SUCCESS) + int returnValue = PoseProviderAPI.TangoAreaDescriptionMetadata_get(adfUnityHolder.uuidMetaData.meta_data_pointer, key, ref valuesize, ref valuePointer); + if (returnValue != Tango.Common.ErrorType.TANGO_SUCCESS) { Debug.Log("Could not read metadata key, Error return value is: " + returnValue); return returnValue; @@ -459,63 +504,152 @@ public static int AreaDescriptionMetaData_get(String key, ref String value, UUID else { byte[] valueByteArray = new byte[valuesize]; - Marshal.Copy(valuePointer,valueByteArray,0,(int)valuesize); + Marshal.Copy(valuePointer, valueByteArray, 0, (int)valuesize); value = System.Text.Encoding.UTF8.GetString(valueByteArray); return returnValue; } } /// - /// Sets the AreaDescription MetaData to the UUID in the adfUnityHolder Object.Make sure adfUnityHolder already has - /// a pointer to the Metadata of the specified UUID by calling GetAreaDescriptionMetaData(). + /// Set the value of a key in a metadata. /// - /// Returns Tango Success on successful set, else Returns Invalid or TangoError - /// Key. - /// Value. - /// Adf unity holder in which the metadata is cointained. + /// TANGO_SUCCESS if successful, else TANGO_INVALID or TANGO_ERROR. + /// Key to set the value of. + /// Value to set. + /// Area description + metadata holder. public static int AreaDescriptionMetaData_set(String key, String value, UUIDUnityHolder adfUnityHolder) { - if(string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) + if (string.IsNullOrEmpty(adfUnityHolder.GetStringDataUUID())) { Debug.Log(CLASS_NAME + ".MetaData cannot be retrived for the area description as UUIDUnityHolder object was empty or null."); return Common.ErrorType.TANGO_ERROR; } - int returnValue = PoseProviderAPI.TangoAreaDescriptionMetadata_set(adfUnityHolder.uuidMetaData.meta_data_pointer, key, (uint) value.Length, value); - if(returnValue != Tango.Common.ErrorType.TANGO_SUCCESS) + int returnValue = PoseProviderAPI.TangoAreaDescriptionMetadata_set(adfUnityHolder.uuidMetaData.meta_data_pointer, key, (uint)value.Length, value); + if (returnValue != Tango.Common.ErrorType.TANGO_SUCCESS) { Debug.Log("Could not set Metadata Key, Error return value is: " + returnValue); return returnValue; } else - { - Debug.Log("Metadata Set succesful, Key set is: "+ key+" Value set is: " + value); + { + Debug.Log("Metadata Set succesful, Key set is: " + key + " Value set is: " + value); return returnValue; } } - #endregion // ADF Metadata Functionality - #region API_Functions + /// + /// Set the C callback for the Tango pose interface. + /// + /// Passed in to the C API. + /// Callback. + internal static void SetCallback(TangoCoordinateFramePair[] framePairs, TangoService_onPoseAvailable callback) + { + int returnValue = PoseProviderAPI.TangoService_connectOnPoseAvailable(framePairs.Length, framePairs, callback); + if (returnValue != Common.ErrorType.TANGO_SUCCESS) + { + Debug.Log(CLASS_NAME + ".SetCallback() Callback was not set!"); + } + else + { + Debug.Log(CLASS_NAME + ".SetCallback() OnPose callback was set!"); + } + } + +#if UNITY_EDITOR + /// + /// INTERNAL USE: Update the Tango emulation state for pose data. + /// + /// Make this this is only called once per frame. + /// + internal static void UpdateTangoEmulation() + { + // Update the emulated rotation (do this first to make sure the position is rotated) + // + // Note: We need to use Input.GetAxis here because Unity3D does not provide a way to get the underlying + // mouse delta. + if (!Input.GetKey(KeyCode.LeftShift)) + { + m_emulatedPoseAnglesFromForward.y -= Input.GetAxis("Mouse X") * MOUSE_LOOK_SENSITIVITY * Time.deltaTime; + m_emulatedPoseAnglesFromForward.x += Input.GetAxis("Mouse Y") * MOUSE_LOOK_SENSITIVITY * Time.deltaTime; + } + else + { + m_emulatedPoseAnglesFromForward.z -= Input.GetAxis("Mouse X") * MOUSE_LOOK_SENSITIVITY * Time.deltaTime; + } + + // Update the emulated position + Quaternion emulatedPoseRotation = Quaternion.Euler(90, 0, 0) * Quaternion.Euler(m_emulatedPoseAnglesFromForward); + Vector3 directionRight = emulatedPoseRotation * new Vector3(1, 0, 0); + Vector3 directionForward = emulatedPoseRotation * new Vector3(0, 0, -1); + Vector3 directionUp = emulatedPoseRotation * new Vector3(0, 1, 0); + + if (Input.GetKey(KeyCode.W)) + { + // Forward + m_emulatedPosePosition += directionForward * TRANSLATION_SPEED * Time.deltaTime; + } + if (Input.GetKey(KeyCode.S)) + { + // Backward + m_emulatedPosePosition -= directionForward * TRANSLATION_SPEED * Time.deltaTime; + } + if (Input.GetKey(KeyCode.A)) + { + // Left + m_emulatedPosePosition -= directionRight * TRANSLATION_SPEED * Time.deltaTime; + } + if (Input.GetKey(KeyCode.D)) + { + // Right + m_emulatedPosePosition += directionRight * TRANSLATION_SPEED * Time.deltaTime; + } + if (Input.GetKey(KeyCode.R)) + { + // Up + m_emulatedPosePosition += directionUp * TRANSLATION_SPEED * Time.deltaTime; + } + if (Input.GetKey(KeyCode.F)) + { + // Down + m_emulatedPosePosition -= directionUp * TRANSLATION_SPEED * Time.deltaTime; + } + } + + /// + /// INTERNAL USE: Get the most recent values for Tango emulation. + /// + /// The new Tango emulation position. + /// The new Tango emulation rotation. + internal static void GetTangoEmulation(out Vector3 posePosition, out Quaternion poseRotation) + { + posePosition = m_emulatedPosePosition; + poseRotation = Quaternion.Euler(90, 0, 0) * Quaternion.Euler(m_emulatedPoseAnglesFromForward); + } +#endif + + #region API_Functions + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1600:ElementsMustBeDocumented", + Justification = "C API Wrapper.")] private struct PoseProviderAPI { - #if UNITY_ANDROID && !UNITY_EDITOR - +#if UNITY_ANDROID && !UNITY_EDITOR [DllImport(Common.TANGO_UNITY_DLL)] public static extern int TangoService_connectOnPoseAvailable(int count, TangoCoordinateFramePair[] framePairs, TangoService_onPoseAvailable onPoseAvailable); - - + [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoService_getPoseAtTime (double timestamp, - TangoCoordinateFramePair framePair, - [In, Out] TangoPoseData pose); + public static extern int TangoService_getPoseAtTime(double timestamp, + TangoCoordinateFramePair framePair, + [In, Out] TangoPoseData pose); [DllImport(Common.TANGO_UNITY_DLL)] public static extern int TangoService_setPoseListenerFrames(int count, ref TangoCoordinateFramePair frames); - + [DllImport(Common.TANGO_UNITY_DLL)] public static extern void TangoService_resetMotionTracking(); @@ -555,7 +689,7 @@ public static extern int TangoAreaDescriptionMetadata_set(IntPtr metadata, [Mars [DllImport(Common.TANGO_UNITY_DLL)] public static extern int TangoAreaDescriptionMetadata_listKeys(IntPtr metadata, ref IntPtr key_list); - #else +#else public static int TangoService_connectOnPoseAvailable(int count, TangoCoordinateFramePair[] framePairs, TangoService_onPoseAvailable onPoseAvailable) @@ -563,9 +697,9 @@ public static int TangoService_connectOnPoseAvailable(int count, return Common.ErrorType.TANGO_SUCCESS; } - public static int TangoService_getPoseAtTime (double timestamp, - TangoCoordinateFramePair framePair, - [In, Out] TangoPoseData pose) + public static int TangoService_getPoseAtTime(double timestamp, + TangoCoordinateFramePair framePair, + [In, Out] TangoPoseData pose) { return Common.ErrorType.TANGO_SUCCESS; } @@ -602,18 +736,18 @@ public static int TangoService_saveAreaDescriptionMetadata([MarshalAs(UnmanagedT return Common.ErrorType.TANGO_SUCCESS; } - public static int TangoService_importAreaDescription([MarshalAs(UnmanagedType.LPStr)] string source_file_path, IntPtr UUID) + public static int TangoService_importAreaDescription([MarshalAs(UnmanagedType.LPStr)] string source_file_path, IntPtr uuid) { return Common.ErrorType.TANGO_SUCCESS; } - public static int TangoService_exportAreaDescription([MarshalAs(UnmanagedType.LPStr)] string UUID, + public static int TangoService_exportAreaDescription([MarshalAs(UnmanagedType.LPStr)] string uuid, [MarshalAs(UnmanagedType.LPStr)] string dst_file_path) { return Common.ErrorType.TANGO_SUCCESS; } - public static int TangoService_deleteAreaDescription([MarshalAs(UnmanagedType.LPStr)] string UUID) + public static int TangoService_deleteAreaDescription([MarshalAs(UnmanagedType.LPStr)] string uuid) { return Common.ErrorType.TANGO_SUCCESS; } @@ -639,7 +773,7 @@ public static int TangoAreaDescriptionMetadata_listKeys(IntPtr metadata, ref Int { return Common.ErrorType.TANGO_SUCCESS; } - #endif +#endif } #endregion } diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoApplication.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoApplication.cs index e9205325..7965d18c 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoApplication.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoApplication.cs @@ -1,38 +1,63 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Collections; using System.Runtime.InteropServices; using System.IO; using System.Linq; using UnityEngine; -using System.Reflection; namespace Tango { - public delegate void PermissionsEvent(bool permissionsGranted); + /// + /// Delegate for permission callbacks. + /// + /// true if permissions were granted, otherwise false. + public delegate void PermissionsEvent(bool permissionsGranted); + + /// + /// Delegate for service connection. + /// public delegate void OnTangoConnectEventHandler(); + + /// + /// Delegate for service disconnection. + /// public delegate void OnTangoDisconnectEventHandler(); /// - /// Entry point of Tango applications, maintain the application handler. + /// Main entry point for the Tango Service. + /// + /// This component handles nearly all communication with the underlying TangoService. You must have one of these + /// in your scene for Tango to work. Customization of the Tango connection can be done in the Unity editor or by + /// programatically setting the member flags. + /// + /// This sends out events to Components that derive from the ITangoPose, ITangoDepth, etc. interfaces and + /// register themselves via Register. This also sends out events to callbacks passed in through + /// RegisterOnTangoConnect, RegisterOnTangoDisconnect, and RegisterPermissionsCallback. + /// + /// Note: To connect to the Tango Service, you should call InitApplication after properly registering everything. /// public class TangoApplication : MonoBehaviour { - /// + /// /// Permission types used by Tango applications. /// [Flags] @@ -52,7 +77,9 @@ private enum PermissionsTypes public bool m_enableAreaLearning = false; public bool m_useExperimentalVideoOverlay = true; public bool m_useExperimentalADF = false; - private static string m_tangoServiceVersion = string.Empty; +#if UNITY_EDITOR + public static bool m_mouseEmulationViaPoseUpdates = false; +#endif private const string CLASS_NAME = "TangoApplication"; private const string ANDROID_PRO_LABEL_TEXT = "Tango plugin requires Unity Android Pro!"; private const float ANDROID_PRO_LABEL_PERCENT_X = 0.5f; @@ -62,10 +89,22 @@ private enum PermissionsTypes private const string DEFAULT_AREA_DESCRIPTION = "/sdcard/defaultArea"; private const string MOTION_TRACKING_LOG_PREFIX = "Motion tracking mode : "; private const int MINIMUM_API_VERSION = 1978; + private static string m_tangoServiceVersion = string.Empty; + + /// + /// Occurs when permission event. + /// + private event PermissionsEvent PermissionEvent; + + /// + /// Occurs when on tango connect. + /// + private event OnTangoConnectEventHandler OnTangoConnect; - private event PermissionsEvent m_permissionEvent; - private event OnTangoConnectEventHandler m_onTangoConnect; - private event OnTangoDisconnectEventHandler m_onTangoDisconnect; + /// + /// Occurs when on tango disconnect. + /// + private event OnTangoDisconnectEventHandler OnTangoDisconnect; private PermissionsTypes m_requiredPermissions = 0; private static bool m_isValidTangoAPIVersion = false; @@ -83,37 +122,40 @@ private enum PermissionsTypes private YUVTexture m_yuvTexture; /// - /// Gets the video overlay texture. - /// - /// The video overlay texture. - public YUVTexture GetVideoOverlayTextureYUV() - { - return m_yuvTexture; - } - - /// - /// Gets the tango service version. + /// Get the Tango service version name. /// - /// The tango service version. + /// String for the version name. public static string GetTangoServiceVersion() { if (m_tangoServiceVersion == string.Empty) { m_tangoServiceVersion = AndroidHelper.GetVersionName("com.projecttango.tango"); } - + return m_tangoServiceVersion; } /// - /// Register the specified tangoObject. + /// Get the video overlay texture. + /// + /// The video overlay texture. + public YUVTexture GetVideoOverlayTextureYUV() + { + return m_yuvTexture; + } + + /// + /// Register to get Tango callbacks. + /// + /// The object should derive from one of ITangoDepth, ITangoEvent, ITangoPos, ITangoVideoOverlay, or + /// ITangoExperimentalTangoVideoOverlay. You will get callback during Update until you unregister. /// - /// Tango object. + /// Object to get Tango callbacks from. public void Register(System.Object tangoObject) { ITangoEvent tangoEvent = tangoObject as ITangoEvent; - if(tangoEvent != null) + if (tangoEvent != null) { RegisterOnTangoEvent(tangoEvent.OnTangoEventAvailableEventHandler); } @@ -149,7 +191,7 @@ public void Register(System.Object tangoObject) RegisterOnExperimentalTangoVideoOverlay(videoOverlayHandler.OnExperimentalTangoImageAvailable); } } - else + else { ITangoVideoOverlay videoOverlayHandler = tangoObject as ITangoVideoOverlay; @@ -162,14 +204,16 @@ public void Register(System.Object tangoObject) } /// - /// Unregister the specified tangoObject. + /// Unregister from Tango callbacks. + /// + /// See TangoApplication.Register for more details. /// - /// Tango object. + /// Object to stop getting Tango callbacks from. public void Unregister(System.Object tangoObject) { ITangoEvent tangoEvent = tangoObject as ITangoEvent; - if(tangoEvent != null) + if (tangoEvent != null) { UnregisterOnTangoEvent(tangoEvent.OnTangoEventAvailableEventHandler); } @@ -204,7 +248,8 @@ public void Unregister(System.Object tangoObject) { UnregisterOnExperimentalTangoVideoOverlay(videoOverlayHandler.OnExperimentalTangoImageAvailable); } - } else + } + else { ITangoVideoOverlay videoOverlayHandler = tangoObject as ITangoVideoOverlay; @@ -215,284 +260,356 @@ public void Unregister(System.Object tangoObject) } } } - + /// - /// Registers the on tango pose event. + /// Check if all requested permissions have been granted. /// - /// Handler. - public void RegisterOnTangoPoseEvent(OnTangoPoseAvailableEventHandler handler) + /// true if all requested permissions were granted; otherwise, false. + public bool HasRequestedPermissions() { - if (m_poseListener != null) + return m_requiredPermissions == PermissionsTypes.NONE; + } + + /// + /// Register to get an event callback when all permissions are granted. + /// + /// The passed event will get called once all Tango permissions have been granted. Registering + /// after all permissions have already been granted will cause the event to never fire. + /// + /// Event to call. + public void RegisterPermissionsCallback(PermissionsEvent permissionsEventHandler) + { + if (permissionsEventHandler != null) { - m_poseListener.RegisterTangoPoseAvailable(handler); + PermissionEvent += permissionsEventHandler; } } /// - /// Registers the on tango depth event. + /// Unregister from the permission callbacks. + /// + /// See TangoApplication.RegisterPermissionsCallback for more details. /// - /// Handler. - public void RegisterOnTangoDepthEvent(OnTangoDepthAvailableEventHandler handler) + /// Event to remove. + public void UnregisterPermissionsCallback(PermissionsEvent permissionsEventHandler) { - if (m_depthListener != null) + if (permissionsEventHandler != null) { - m_depthListener.RegisterOnTangoDepthAvailable(handler); + PermissionEvent -= permissionsEventHandler; } } /// - /// Registers the on tango event. + /// DEPRECATED: Unregister from the permission callbacks. + /// + /// See TangoApplication.RegisterPermissionsCallback for more details. /// - /// Handler. - public void RegisterOnTangoEvent(OnTangoEventAvailableEventHandler handler) + /// Event to remove. + public void RemovePermissionsCallback(PermissionsEvent permissionsEventHandler) { - if (m_tangoEventListener != null) + if (permissionsEventHandler != null) { - m_tangoEventListener.RegisterOnTangoEventAvailable(handler); + PermissionEvent -= permissionsEventHandler; } } /// - /// Registers the on tango video overlay. + /// Register to get an event callback when connected to the Tango service. + /// + /// The passed event will get called once connected to the Tango service. Registering + /// after already connected will cause the event to not fire until disconnected and then + /// connecting again. /// - /// Handler. - public void RegisterOnTangoVideoOverlay(OnTangoImageAvailableEventHandler handler) + /// Event to call. + public void RegisterOnTangoConnect(OnTangoConnectEventHandler handler) { - if (m_videoOverlayListener != null) + if (handler != null) { - m_videoOverlayListener.RegisterOnTangoImageAvailable(handler); + OnTangoConnect += handler; } } /// - /// Registers the on experimental tango video overlay. + /// Unregister from the callback when connected to the Tango service. + /// + /// See TangoApplication.RegisterOnTangoConnect for more details. /// - /// Handler. - public void RegisterOnExperimentalTangoVideoOverlay(OnExperimentalTangoImageAvailableEventHandler handler) + /// Event to remove. + public void UnregisterOnTangoConnect(OnTangoConnectEventHandler handler) { - if (m_videoOverlayListener != null) + if (handler != null) { - m_videoOverlayListener.RegisterOnExperimentalTangoImageAvailable(handler); + OnTangoConnect -= handler; } } /// - /// Determines if has requested permissions. + /// Register to get an event callback when disconnected from the Tango service. + /// + /// The passed event will get called when disconnected from the Tango service. /// - /// true if has requested permissions; otherwise, false. - public bool HasRequestedPermissions() + /// Event to remove. + public void RegisterOnTangoDisconnect(OnTangoDisconnectEventHandler handler) { - return (m_requiredPermissions == PermissionsTypes.NONE); + if (handler != null) + { + OnTangoDisconnect += handler; + } } /// - /// Registers the permissions callback. + /// Unregister from the callback when disconnected from the Tango service. + /// + /// See TangoApplication.RegisterOnTangoDisconnect for more details. /// - /// Permissions event handler. - public void RegisterPermissionsCallback(PermissionsEvent permissionsEventHandler) + /// Event to remove. + public void UnregisterOnTangoDisconnect(OnTangoDisconnectEventHandler handler) { - if (permissionsEventHandler != null) + if (handler != null) { - m_permissionEvent += permissionsEventHandler; - } - } - - /// - /// Unregisters the permissions callback. - /// - /// Permissions event handler. - public void UnregisterPermissionsCallback(PermissionsEvent permissionsEventHandler) - { - if (permissionsEventHandler != null) - { - m_permissionEvent -= permissionsEventHandler; - } - } + OnTangoDisconnect -= handler; + } + } + + /// + /// Init step 1. Call this to request Tango permissions. + /// + /// After setting up the necessary permissions and callbacks, call this to request each of + /// the permissions in order. Once all the permissions are granted, the permission callback + /// will get called to do the next step. + /// + /// Also see TangoApplication.InitApplication, TangoApplication.InitProviders, and + /// TangoApplication.ConnectToService. + /// + public void RequestNecessaryPermissionsAndConnect() + { + _ResetPermissionsFlags(); + _RequestNextPermission(); + } - /// - /// Registers the on tango connect. - /// - /// Handler. - public void RegisterOnTangoConnect(OnTangoConnectEventHandler handler) + /// + /// Init step 2. Call this to initialize interal state on TangoApplication. + /// + /// Call this in the permissions callback if all permissions have been granted. + /// + /// Also see TangoApplication.RequestNecessaryPermissionsandConnect, TangoApplication.InitProviders, and + /// TangoApplication.ConnectToService. + /// + public void InitApplication() { - if(handler != null) + Debug.Log("-----------------------------------Initializing Tango"); + _TangoInitialize(); + TangoConfig.InitConfig(TangoEnums.TangoConfigType.TANGO_CONFIG_DEFAULT); + + if (m_enableVideoOverlay && m_useExperimentalVideoOverlay) { - m_onTangoConnect += handler; + int yTextureWidth = 0; + int yTextureHeight = 0; + int uvTextureWidth = 0; + int uvTextureHeight = 0; + + TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_Y_TEXTURE_WIDTH, ref yTextureWidth); + TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_Y_TEXTURE_HEIGHT, ref yTextureHeight); + TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_UV_TEXTURE_WIDTH, ref uvTextureWidth); + TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_UV_TEXTURE_HEIGHT, ref uvTextureHeight); + + if (yTextureWidth == 0 || yTextureHeight == 0 || uvTextureWidth == 0 || uvTextureHeight == 0) + { + Debug.Log("Video overlay texture sizes were not set properly"); + } + + m_yuvTexture.ResizeAll(yTextureWidth, yTextureHeight, uvTextureWidth, uvTextureHeight); } } - /// - /// Registers the on tango disconnect. - /// - /// Handler. - public void RegisterOnTangoDisconnect(OnTangoDisconnectEventHandler handler) + /// + /// Init step 3. Call this to choose what area description ID to use, if any. + /// + /// Call this in the permissions callback after calling TangoApplication.InitApplication. + /// + /// Also see TangoApplication.RequestNecessaryPermissionsAndConnect, TangoApplication.InitApplication, and + /// TangoApplication.ConnectToService. + /// + /// Area description ID to load, or string.Empty to not use any. + public void InitProviders(string uuid) { - if(handler != null) - { - m_onTangoDisconnect += handler; - } + _InitializeMotionTracking(uuid); + _InitializeDepth(); + _InitializeOverlay(); + _SetEventCallbacks(); } - + /// - /// Unregisters the on tango pose event. + /// Init step 4. Call this to connect to the Tango service. + /// + /// Also see TangoApplication.RequestNecessaryPermissionsAndConnect, TangoApplication.InitApplication, + /// and TangoApplication.InitProviders. /// - /// Handler. - public void UnregisterOnTangoPoseEvent(OnTangoPoseAvailableEventHandler handler) + public void ConnectToService() { - if (m_poseListener != null) - { - m_poseListener.UnregisterTangoPoseAvailable(handler); - } + Debug.Log("TangoApplication.ConnectToService()"); + _TangoConnect(); } /// - /// Unregisters the on tango depth event. + /// Disconnect from the Tango service. + /// + /// This is called automatically when the TangoApplication goes away. You only need + /// to call this to disconnect from the Tango service before the TangoApplication goes + /// away. /// - /// Handler. - public void UnregisterOnTangoDepthEvent(OnTangoDepthAvailableEventHandler handler) + public void Shutdown() { - if (m_depthListener != null) - { - m_depthListener.UnregisterOnTangoDepthAvailable(handler); - } + Debug.Log("Tango Shutdown"); + TangoConfig.Free(); + _TangoDisconnect(); } - + /// - /// Unregisters the on tango event. + /// Register to get Tango pose callbacks. + /// + /// See TangoApplication.Register for more details. /// /// Handler. - public void UnregisterOnTangoEvent(OnTangoEventAvailableEventHandler handler) + internal void RegisterOnTangoPoseEvent(OnTangoPoseAvailableEventHandler handler) { - if (m_tangoEventListener != null) + if (m_poseListener != null) { - m_tangoEventListener.UnregisterOnTangoEventAvailable(handler); + m_poseListener.RegisterTangoPoseAvailable(handler); } } - public void UnregisterOnTangoConnect(OnTangoConnectEventHandler handler) + /// + /// Unregister from the Tango pose callbacks. + /// + /// See TangoApplication.Register for more details. + /// + /// Event to remove. + internal void UnregisterOnTangoPoseEvent(OnTangoPoseAvailableEventHandler handler) { - if(handler != null) + if (m_poseListener != null) { - m_onTangoConnect -= handler; + m_poseListener.UnregisterTangoPoseAvailable(handler); } } - - public void UnregisterOnTangoDisconnect(OnTangoDisconnectEventHandler handler) + + /// + /// Register to get Tango depth callbacks. + /// + /// See TangoApplication.Register for more details. + /// + /// Object to stop getting Tango callbacks from. + internal void RegisterOnTangoDepthEvent(OnTangoDepthAvailableEventHandler handler) { - if(handler != null) + if (m_depthListener != null) { - m_onTangoDisconnect -= handler; + m_depthListener.RegisterOnTangoDepthAvailable(handler); } } /// - /// Unregisters the on tango video overlay. + /// Unregister from the Tango depth callbacks. + /// + /// See TangoApplication.Register for more details. /// - /// Handler. - public void UnregisterOnTangoVideoOverlay(OnTangoImageAvailableEventHandler handler) + /// Event to remove. + internal void UnregisterOnTangoDepthEvent(OnTangoDepthAvailableEventHandler handler) { - if (m_videoOverlayListener != null) + if (m_depthListener != null) { - m_videoOverlayListener.UnregisterOnTangoImageAvailable(handler); + m_depthListener.UnregisterOnTangoDepthAvailable(handler); } } - + /// - /// Unregisters the on experimental tango video overlay. + /// Register to get Tango event callbacks. + /// + /// See TangoApplication.Register for details. /// - /// Handler. - public void UnregisterOnExperimentalTangoVideoOverlay(OnExperimentalTangoImageAvailableEventHandler handler) + /// Object to stop getting Tango callbacks from. + internal void RegisterOnTangoEvent(OnTangoEventAvailableEventHandler handler) { - if (m_videoOverlayListener != null) + if (m_tangoEventListener != null) { - m_videoOverlayListener.UnregisterOnExperimentalTangoImageAvailable(handler); + m_tangoEventListener.RegisterOnTangoEventAvailable(handler); } } /// - /// Removes the permissions callback. + /// Unregister from the Tango event callbacks. + /// + /// See TangoApplication.Register for more details. /// - /// Permissions event handler. - public void RemovePermissionsCallback(PermissionsEvent permissionsEventHandler) + /// Event to remove. + internal void UnregisterOnTangoEvent(OnTangoEventAvailableEventHandler handler) { - if (permissionsEventHandler != null) + if (m_tangoEventListener != null) { - m_permissionEvent -= permissionsEventHandler; + m_tangoEventListener.UnregisterOnTangoEventAvailable(handler); } } - /// - /// Requests the necessary permissions for Tango functionality. + /// Register to get Tango video overlay callbacks. + /// + /// See TangoApplication.Register for details. /// - public void RequestNecessaryPermissionsAndConnect() + /// Object to stop getting Tango callbacks from. + internal void RegisterOnTangoVideoOverlay(OnTangoImageAvailableEventHandler handler) { - _ResetPermissionsFlags(); - _RequestNextPermission(); + if (m_videoOverlayListener != null) + { + m_videoOverlayListener.RegisterOnTangoImageAvailable(handler); + } } - + /// - /// Initialize Tango Service and Config. + /// Unregister from the Tango video overlay callbacks. + /// + /// See TangoApplication.Register for more details. /// - public void InitApplication() + /// Event to remove. + internal void UnregisterOnTangoVideoOverlay(OnTangoImageAvailableEventHandler handler) { - Debug.Log("-----------------------------------Initializing Tango"); - _TangoInitialize(); - TangoConfig.InitConfig(TangoEnums.TangoConfigType.TANGO_CONFIG_DEFAULT); - - if(m_enableVideoOverlay && m_useExperimentalVideoOverlay) + if (m_videoOverlayListener != null) { - int yTextureWidth = 0; - int yTextureHeight = 0; - int uvTextureWidth = 0; - int uvTextureHeight = 0; - - TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_Y_TEXTURE_WIDTH, ref yTextureWidth); - TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_Y_TEXTURE_HEIGHT, ref yTextureHeight); - TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_UV_TEXTURE_WIDTH, ref uvTextureWidth); - TangoConfig.GetInt32(TangoConfig.Keys.EXPERIMENTAL_UV_TEXTURE_HEIGHT, ref uvTextureHeight); - - if(yTextureWidth == 0 || - yTextureHeight == 0 || - uvTextureWidth == 0 || - uvTextureHeight == 0) - { - Debug.Log("Video overlay texture sizes were not set properly"); - } - - m_yuvTexture.ResizeAll(yTextureWidth, yTextureHeight, uvTextureWidth, uvTextureHeight); + m_videoOverlayListener.UnregisterOnTangoImageAvailable(handler); } } - + /// - /// Initialize the providers. + /// Experimental API only, subject to change. Register to get Tango video overlay callbacks. /// - /// UUID to be loaded, if any. - public void InitProviders(string UUID) + /// Object to stop getting Tango callbacks from. + internal void RegisterOnExperimentalTangoVideoOverlay(OnExperimentalTangoImageAvailableEventHandler handler) { - _InitializeMotionTracking(UUID); - _InitializeDepth(); - _InitializeOverlay(); - _SetEventCallbacks(); + if (m_videoOverlayListener != null) + { + m_videoOverlayListener.RegisterOnExperimentalTangoImageAvailable(handler); + } } - + /// - /// Connects to Tango Service. + /// Experimental API only, subject to change. Unregister from the Tango video overlay callbacks. + /// + /// See TangoApplication.Register for more details. /// - public void ConnectToService() + /// Event to remove. + internal void UnregisterOnExperimentalTangoVideoOverlay(OnExperimentalTangoImageAvailableEventHandler handler) { - Debug.Log("TangoApplication.ConnectToService()"); - _TangoConnect(); + if (m_videoOverlayListener != null) + { + m_videoOverlayListener.UnregisterOnExperimentalTangoImageAvailable(handler); + } } /// - /// Shutdown this instance. + /// Gets the get tango API version code. /// - public void Shutdown() + /// The get tango API version code. + private static int _GetTangoAPIVersion() { - Debug.Log("Tango Shutdown"); - TangoConfig.Free(); - _TangoDisconnect(); + return AndroidHelper.GetVersionCode("com.projecttango.tango"); } /// @@ -563,7 +680,8 @@ private void _SetVideoOverlayCallbacks() /// /// Initialize motion tracking. /// - private void _InitializeMotionTracking(string UUID) + /// ADF UUID to load. + private void _InitializeMotionTracking(string uuid) { System.Collections.Generic.List framePairs = new System.Collections.Generic.List(); @@ -577,10 +695,10 @@ private void _InitializeMotionTracking(string UUID) if (TangoConfig.SetBool(TangoConfig.Keys.ENABLE_AREA_LEARNING_BOOL, m_enableAreaLearning) && m_enableAreaLearning) { Debug.Log("Area Learning is enabled."); - if (!string.IsNullOrEmpty(UUID)) + if (!string.IsNullOrEmpty(uuid)) { TangoConfig.SetBool("config_experimental_high_accuracy_small_scale_adf", m_useExperimentalADF); - TangoConfig.SetString(TangoConfig.Keys.LOAD_AREA_DESCRIPTION_UUID_STRING, UUID); + TangoConfig.SetString(TangoConfig.Keys.LOAD_AREA_DESCRIPTION_UUID_STRING, uuid); } TangoCoordinateFramePair areaDescription; @@ -638,11 +756,13 @@ private void _TangoInitialize() { Debug.Log("-------------------Tango initialize status : " + status); Debug.Log(CLASS_NAME + ".Initialize() The service has not been initialized!"); - } else + } + else { Debug.Log(CLASS_NAME + ".Initialize() Tango was initialized!"); } - } else + } + else { Debug.Log(CLASS_NAME + ".Initialize() Invalid API version. please update to minimul API version."); } @@ -660,14 +780,15 @@ private void _TangoConnect() if (TangoServiceAPI.TangoService_connect(m_callbackContext, TangoConfig.GetConfig()) != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".Connect() Could not connect to the Tango Service!"); - } else + } + else { AndroidHelper.PerformanceLog("Unity _TangoConnect end"); Debug.Log(CLASS_NAME + ".Connect() Tango client connected to service!"); - if (m_onTangoConnect != null) + if (OnTangoConnect != null) { - m_onTangoConnect(); + OnTangoConnect(); } } } @@ -683,13 +804,14 @@ private void _TangoDisconnect() if (TangoServiceAPI.TangoService_disconnect() != Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".Disconnect() Could not disconnect from the Tango Service!"); - } else + } + else { Debug.Log(CLASS_NAME + ".Disconnect() Tango client disconnected from service!"); - if (m_onTangoDisconnect != null) + if (OnTangoDisconnect != null) { - m_onTangoDisconnect(); + OnTangoDisconnect(); } } } @@ -707,9 +829,10 @@ private bool _IsValidTangoAPIVersion() if (versionCode < 0) { m_isValidTangoAPIVersion = false; - } else + } + else { - m_isValidTangoAPIVersion = (versionCode >= MINIMUM_API_VERSION); + m_isValidTangoAPIVersion = versionCode >= MINIMUM_API_VERSION; } m_hasVersionBeenChecked = true; @@ -718,15 +841,6 @@ private bool _IsValidTangoAPIVersion() return m_isValidTangoAPIVersion; } - /// - /// Gets the get tango API version code. - /// - /// The get tango API version code. - private static int _GetTangoAPIVersion() - { - return AndroidHelper.GetVersionCode("com.projecttango.tango"); - } - /// /// Android on pause. /// @@ -768,31 +882,33 @@ private void _androidOnActivityResult(int requestCode, int resultCode, AndroidJa switch (requestCode) { case Common.TANGO_MOTION_TRACKING_PERMISSIONS_REQUEST_CODE: + { + if (resultCode == (int)Common.AndroidResult.SUCCESS) + { + _FlipBitAndCheckPermissions(PermissionsTypes.MOTION_TRACKING); + } + else { - if (resultCode == (int)Common.AndroidResult.SUCCESS) - { - _FlipBitAndCheckPermissions(PermissionsTypes.MOTION_TRACKING); - } else - { - _PermissionWasDenied(); - } - break; + _PermissionWasDenied(); } + break; + } case Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS_REQUEST_CODE: + { + if (resultCode == (int)Common.AndroidResult.SUCCESS) { - if (resultCode == (int)Common.AndroidResult.SUCCESS) - { - _FlipBitAndCheckPermissions(PermissionsTypes.AREA_LEARNING); - } else - { - _PermissionWasDenied(); - } - break; + _FlipBitAndCheckPermissions(PermissionsTypes.AREA_LEARNING); } - default: + else { - break; + _PermissionWasDenied(); } + break; + } + default: + { + break; + } } Debug.Log("Activity returned result end"); } @@ -850,11 +966,13 @@ private void _FlipBitAndCheckPermissions(PermissionsTypes permission) { m_requiredPermissions ^= permission; - if (m_requiredPermissions == 0) // all permissions are good! + if (m_requiredPermissions == 0) { + // all permissions are good! Debug.Log("All permissions have been accepted!"); _SendPermissionEvent(true); - } else + } + else { _RequestNextPermission(); } @@ -866,7 +984,7 @@ private void _FlipBitAndCheckPermissions(PermissionsTypes permission) private void _PermissionWasDenied() { m_requiredPermissions = PermissionsTypes.NONE; - if (m_permissionEvent != null) + if (PermissionEvent != null) { _SendPermissionEvent(false); } @@ -890,16 +1008,19 @@ private void _RequestNextPermission() if (AndroidHelper.ApplicationHasTangoPermissions(Common.TANGO_MOTION_TRACKING_PERMISSIONS)) { _androidOnActivityResult(Common.TANGO_MOTION_TRACKING_PERMISSIONS_REQUEST_CODE, -1, null); - } else + } + else { AndroidHelper.StartTangoPermissionsActivity(Common.TANGO_MOTION_TRACKING_PERMISSIONS); } - } else if ((m_requiredPermissions & PermissionsTypes.AREA_LEARNING) == PermissionsTypes.AREA_LEARNING) + } + else if ((m_requiredPermissions & PermissionsTypes.AREA_LEARNING) == PermissionsTypes.AREA_LEARNING) { if (AndroidHelper.ApplicationHasTangoPermissions(Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS)) { _androidOnActivityResult(Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS_REQUEST_CODE, -1, null); - } else + } + else { AndroidHelper.StartTangoPermissionsActivity(Common.TANGO_ADF_LOAD_SAVE_PERMISSIONS); } @@ -923,9 +1044,9 @@ private void Update() { if (m_sendPermissions) { - if (m_permissionEvent != null) + if (PermissionEvent != null) { - m_permissionEvent(m_permissionsSuccessful); + PermissionEvent(m_permissionsSuccessful); } m_sendPermissions = false; } @@ -963,24 +1084,27 @@ private void OnDestroy() /// /// Interface for native function calls to Tango Service. /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1600:ElementsMustBeDocumented", + Justification = "C API Wrapper.")] private struct TangoServiceAPI { #if UNITY_ANDROID && !UNITY_EDITOR [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoService_initialize (IntPtr JNIEnv, IntPtr appContext); + public static extern int TangoService_initialize(IntPtr jniEnv, IntPtr appContext); [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoService_connect (IntPtr callbackContext, IntPtr config); + public static extern int TangoService_connect(IntPtr callbackContext, IntPtr config); [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoService_disconnect (); + public static extern int TangoService_disconnect(); #else - public static int TangoService_initialize(IntPtr JNIEnv, IntPtr appContext) + public static int TangoService_initialize(IntPtr jniEnv, IntPtr appContext) { return Common.ErrorType.TANGO_SUCCESS; } - public static int TangoService_connect(IntPtr callbackContext, IntPtr config) + public static int TangoService_connect(IntPtr callbackContext, IntPtr config) { return Common.ErrorType.TANGO_SUCCESS; } diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoConfig.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoConfig.cs index b2c0bb3a..e50ae856 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoConfig.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoConfig.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Collections; using System.Text; @@ -23,16 +27,15 @@ namespace Tango { /// - /// Functionality for interacting with the Tango Service - /// configuration. + /// C API wrapper for Tango Configuration Parameters. /// - public class TangoConfig + internal class TangoConfig { -#region Attributes + #region Attributes /// /// Key/Value pairs supported by the Tango Service. - /// - public struct Keys + /// + internal struct Keys { // Motion Tracking public static readonly string ENABLE_MOTION_TRACKING_BOOL = "config_enable_motion_tracking"; @@ -65,29 +68,45 @@ public struct Keys private static IntPtr m_tangoConfig = IntPtr.Zero; /// - /// Delegate definition for setting API callbacks when setting values in the Tango Config. + /// Delegate for internal API call that sets a config option. + /// + /// This matches the signature of TangoConfig_setBool, TangoConfig_Double, etc. /// - /// The IntPtr object, usually the tango config reference. - /// Usually the key that we want to modify in the tango config file. - /// Usually the value that we want to modify for the key in the tango config file. - /// Common.ErrorType.TANGO_SUCCESS if API call was successfull, - /// Common.ErrorType.TANGO_ERROR otherwise. - public delegate int ConfigAPIDelegate(IntPtr obj1,string obj2,T obj3); -#endregion + /// C pointer to a TangoConfig. + /// Key we want to modify. + /// Value to set, of the correct type. + /// + /// Returns TANGO_SUCCESS on success or TANGO_INVALID if config or key is NULL, or key is not found or could + /// not be set. + /// + private delegate int ConfigAPIDelegate(IntPtr obj1, string obj2, T obj3); + #endregion /// - /// Gets the handle to the current Tango configuration. + /// Gets the cached C pointer to a TangoConfig. + /// + /// This pointer is updated by calling InitConfig. /// - /// Handle to the Tango configuration. - public static IntPtr GetConfig() + /// C pointer to a Tango config. + internal static IntPtr GetConfig() { return m_tangoConfig; } /// - /// Fills out a given Tango configuration with the currently set configuration settings. + /// Update the cached C pointer to a TangoConfig. + /// + /// This should be used to initialize a Config object for setting the configuration that TangoService should + /// be run in. The Config handle is passed to TangoService_connect() which starts the service running with + /// the parameters set at that time in that TangoConfig handle. This function can be used to find the current + /// configuration of the service (i.e. what would be run if no config is specified on TangoService_connect()), + /// or to create one of a few "template" TangoConfigs. The returned TangoConfig can be further modified by + /// TangoConfig_set function calls. The handle should be freed with Free(). The handle is needed + /// only at the time of TangoService_connect() where it is used to configure the service, and can safely be + /// freed after it has been used in TangoService_connect(). /// - public static void InitConfig(TangoEnums.TangoConfigType configType) + /// The requested configuration type. + internal static void InitConfig(TangoEnums.TangoConfigType configType) { m_tangoConfig = TangoConfigAPI.TangoService_getConfig(configType); @@ -95,9 +114,11 @@ public static void InitConfig(TangoEnums.TangoConfigType configType) } /// - /// Deallocate a Tango configuration object. + /// Free a TangoConfig object. + /// + /// Frees the TangoConfig object for the cached handle. /// - public static void Free() + internal static void Free() { if (m_tangoConfig != IntPtr.Zero) { @@ -110,12 +131,13 @@ public static void Free() } /// - /// Gets a string representing the current settings - /// of the Tango configuration. + /// Gets a string of key-value pairs of all the configuration values of TangoService. + /// + /// The string is separated into lines such that each line is one key-value pair, with format "key=value\n". + /// Note that many of these config values are read-only, unless otherwise documented. /// - /// String representing the current settings. - /// Null if no configuration is found. - public static string GetSettings() + /// String representation of the cached configuration. + internal static string GetSettings() { if (m_tangoConfig != IntPtr.Zero) { @@ -128,67 +150,67 @@ public static string GetSettings() } /// - /// Sets the value of a boolean key/value pair. + /// Set a boolean configuration parameter. /// - /// true, if bool was set, false otherwise. - /// Key. - /// If set to true value. - public static bool SetBool(string key, bool value) + /// true on success, false otherwise. + /// The string key value of the configuration parameter to set. + /// The value to set the configuration key to. + internal static bool SetBool(string key, bool value) { return _ConfigHelperSet(new ConfigAPIDelegate(TangoConfigAPI.TangoConfig_setBool), m_tangoConfig, key, value, "SetBool"); } /// - /// Sets the value of an int32 key/value pair. + /// Set an Int32 configuration parameter. /// - /// true, if int32 was set, false otherwise. - /// Key. - /// Value. - public static bool SetInt32(string key, Int32 value) + /// true on success, false otherwise. + /// The string key value of the configuration parameter to set. + /// The value to set the configuration key to. + internal static bool SetInt32(string key, Int32 value) { return _ConfigHelperSet(new ConfigAPIDelegate(TangoConfigAPI.TangoConfig_setInt32), m_tangoConfig, key, value, "SetInt32"); } /// - /// Sets the value of an int64 key/value pair. + /// Set an Int64 configuration parameter. /// - /// true, if int64 was set, false otherwise. - /// Key. - /// Value. - public static bool SetInt64(string key, Int64 value) + /// true on success, false otherwise. + /// The string key value of the configuration parameter to set. + /// The value to set the configuration key to. + internal static bool SetInt64(string key, Int64 value) { return _ConfigHelperSet(new ConfigAPIDelegate(TangoConfigAPI.TangoConfig_setInt64), m_tangoConfig, key, value, "SetInt64"); } - + /// - /// Sets the value of a double key/value pair. + /// Set a double configuration parameter. /// - /// true, if double was set, false otherwise. - /// Key. - /// Value. - public static bool SetDouble(string key, double value) + /// true on success, false otherwise. + /// The string key value of the configuration parameter to set. + /// The value to set the configuration key to. + internal static bool SetDouble(string key, double value) { return _ConfigHelperSet(new ConfigAPIDelegate(TangoConfigAPI.TangoConfig_setDouble), m_tangoConfig, key, value, "SetDouble"); } - + /// - /// Sets the value of a string key/value pair. + /// Set a string configuration parameter. /// - /// true, if string was set, false otherwise. - /// Key. - /// Value. - public static bool SetString(string key, string value) + /// true on success, false otherwise. + /// The string key value of the configuration parameter to set. + /// The value to set the configuration key to. + internal static bool SetString(string key, string value) { return _ConfigHelperSet(new ConfigAPIDelegate(TangoConfigAPI.TangoConfig_setString), m_tangoConfig, key, value, "SetString"); } /// - /// Gets the value of a bool key/value pair. + /// Get a boolean configuration parameter. /// - /// true, if bool was gotten, false otherwise. - /// Key. - /// Value. - public static bool GetBool(string key, ref bool value) + /// true, if the value was retrieved, false otherwise. + /// The string key value of the configuration parameter to get. + /// On successful return, the value of the configuration key. + internal static bool GetBool(string key, ref bool value) { bool wasSuccess = false; if (m_tangoConfig != IntPtr.Zero) @@ -198,19 +220,19 @@ public static bool GetBool(string key, ref bool value) if (!wasSuccess) { #if UNITY_ANDROID && !UNITY_EDITOR - Debug.LogWarning(string.Format(m_ErrorLogFormat, "GetBool", key, false)); + Debug.LogWarning(string.Format(m_ErrorLogFormat, "GetBool", key, false)); #endif } return wasSuccess; } - + /// - /// Gets the value of an int32 kay/value pair. + /// Get an Int32 configuration parameter. /// - /// true, if int32 was gotten, false otherwise. - /// Key. - /// Value. - public static bool GetInt32(string key, ref Int32 value) + /// true, if the value was retrieved, false otherwise. + /// The string key value of the configuration parameter to get. + /// On successful return, the value of the configuration key. + internal static bool GetInt32(string key, ref Int32 value) { bool wasSuccess = false; if (m_tangoConfig != IntPtr.Zero) @@ -223,14 +245,14 @@ public static bool GetInt32(string key, ref Int32 value) } return wasSuccess; } - + /// - /// Gets the value of an int64 key/value pair. + /// Get an Int64 configuration parameter. /// - /// true, if int64 was gotten, false otherwise. - /// Key. - /// Value. - public static bool GetInt64(string key, ref Int64 value) + /// true, if the value was retrieved, false otherwise. + /// The string key value of the configuration parameter to get. + /// On successful return, the value of the configuration key. + internal static bool GetInt64(string key, ref Int64 value) { bool wasSuccess = false; if (m_tangoConfig != IntPtr.Zero) @@ -243,14 +265,14 @@ public static bool GetInt64(string key, ref Int64 value) } return wasSuccess; } - + /// - /// Gets the value of a double key/value pair. + /// Get a double configuration parameter. /// - /// true, if double was gotten, false otherwise. - /// Key. - /// Value. - public static bool GetDouble(string key, ref double value) + /// true, if the value was retrieved, false otherwise. + /// The string key value of the configuration parameter to get. + /// On successful return, the value of the configuration key. + internal static bool GetDouble(string key, ref double value) { bool wasSuccess = false; if (m_tangoConfig != IntPtr.Zero) @@ -263,14 +285,14 @@ public static bool GetDouble(string key, ref double value) } return wasSuccess; } - + /// - /// Gets the value of a string key/value pair. + /// Get a string configuration parameter. /// - /// true, if string was gotten, false otherwise. - /// Key. - /// Value. - public static bool GetString(string key, ref string value) + /// true, if the value was retrieved, false otherwise. + /// The string key value of the configuration parameter to get. + /// On successful return, the value of the configuration key. + internal static bool GetString(string key, ref string value) { bool wasSuccess = false; if (m_tangoConfig != IntPtr.Zero) @@ -292,17 +314,17 @@ public static bool GetString(string key, ref string value) } /// - /// Helper method for setting values in the Tango Config file. + /// Helper method for setting a configuration parameter. /// /// true if the API call returned success, false otherwise. /// The API call we want to perform. - /// Ptr to the current active Tango Config. - /// The key of the config file we want to modify the value of. - /// The new value we want to set. - /// String representing the name of the method we are trying to call. Used for logging purposes. + /// Handle to a Tango Config. + /// The string key value of the configuration parameter to set. + /// The value to set the configuration key to. + /// Name of the method we are calling. Used for logging purposes. /// The type of object we are trying to set. - internal static bool _ConfigHelperSet(ConfigAPIDelegate apiCall, IntPtr tangoConfig, string configKey, object configValue, - string tangoMethodName) + private static bool _ConfigHelperSet(ConfigAPIDelegate apiCall, IntPtr tangoConfig, string configKey, object configValue, + string tangoMethodName) { if (tangoConfig == IntPtr.Zero) { @@ -329,137 +351,150 @@ internal static bool _ConfigHelperSet(ConfigAPIDelegate apiCall, IntPtr ta } /// - /// Interface for the Tango Service API. + /// DEPRECATED: Internal API, should be private. /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1600:ElementsMustBeDocumented", + Justification = "C API Wrapper.")] internal struct TangoConfigAPI { #if UNITY_ANDROID && !UNITY_EDITOR - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern void TangoConfig_free(IntPtr tangoConfig); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern string TangoConfig_toString(IntPtr TangoConfig); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_setBool(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - bool value); - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern IntPtr TangoService_getConfig(TangoEnums.TangoConfigType config_type); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_setInt32(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - Int32 value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_setInt64(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - Int64 value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_setDouble(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - double value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_setString(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - [MarshalAs(UnmanagedType.LPStr)] string value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_getBool(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref bool value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_getInt32(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref Int32 value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_getInt64(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref Int64 value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_getDouble(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref double value); - - [DllImport(Common.TANGO_UNITY_DLL)] - public static extern int TangoConfig_getString(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - [In, Out] StringBuilder value, - UInt32 size); + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern void TangoConfig_free(IntPtr tangoConfig); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern string TangoConfig_toString(IntPtr tangoConfig); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_setBool(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + bool value); + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern IntPtr TangoService_getConfig(TangoEnums.TangoConfigType config_type); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_setInt32(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + Int32 value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_setInt64(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + Int64 value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_setDouble(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + double value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_setString(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + [MarshalAs(UnmanagedType.LPStr)] string value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_getBool(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + ref bool value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_getInt32(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + ref Int32 value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_getInt64(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + ref Int64 value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_getDouble(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + ref double value); + + [DllImport(Common.TANGO_UNITY_DLL)] + public static extern int TangoConfig_getString(IntPtr tangoConfig, + [MarshalAs(UnmanagedType.LPStr)] string key, + [In, Out] StringBuilder value, + UInt32 size); #else public static void TangoConfig_free(IntPtr tangoConfig) { - } public static IntPtr TangoService_getConfig(TangoEnums.TangoConfigType config_type) { return IntPtr.Zero; } - public static string TangoConfig_toString(IntPtr TangoConfig) + + public static string TangoConfig_toString(IntPtr tangoConfig) { return "Editor Mode"; } + public static int TangoConfig_setBool(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - bool value) + [MarshalAs(UnmanagedType.LPStr)] string key, + bool value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_setInt32(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - Int32 value) + [MarshalAs(UnmanagedType.LPStr)] string key, + Int32 value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_setInt64(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - Int64 value) + [MarshalAs(UnmanagedType.LPStr)] string key, + Int64 value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_setDouble(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - double value) + [MarshalAs(UnmanagedType.LPStr)] string key, + double value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_setString(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - string value) + [MarshalAs(UnmanagedType.LPStr)] string key, + string value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_getBool(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref bool value) + [MarshalAs(UnmanagedType.LPStr)] string key, + ref bool value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_getInt32(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref Int32 value) + [MarshalAs(UnmanagedType.LPStr)] string key, + ref Int32 value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_getInt64(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref Int64 value) + [MarshalAs(UnmanagedType.LPStr)] string key, + ref Int64 value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_getDouble(IntPtr tangoConfig, - [MarshalAs(UnmanagedType.LPStr)] string key, - ref double value) + [MarshalAs(UnmanagedType.LPStr)] string key, + ref double value) { return Common.ErrorType.TANGO_SUCCESS; } + public static int TangoConfig_getString(IntPtr tangoConfig, [MarshalAs(UnmanagedType.LPStr)] string key, [In, Out] StringBuilder value, diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoEvents.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoEvents.cs index 7c295be9..3af6fc60 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoEvents.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/TangoEvents.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Runtime.InteropServices; using UnityEngine; @@ -20,33 +24,38 @@ namespace Tango { /// - /// Wraps the interface from Tango Service to register - /// for callbacks that are fired on new events. + /// C API wrapper for the Tango events interface. /// - public class TangoEvents + internal class TangoEvents { - // Signature used by the onTangoEvent callback. + /// + /// Tango video overlay C callback function signature. + /// + /// The callback context. + /// Tango event. [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void TangoService_onEventAvailable(IntPtr callbackContext, [In,Out] TangoEvent tangoEvent); + internal delegate void TangoService_onEventAvailable(IntPtr callbackContext, [In, Out] TangoEvent tangoEvent); /// - /// Sets the callback that is called when a new tango - /// event has been issued by the Tango Service. + /// Attach an onTangoEvent callback. The callback is called each time a Tango event happens. /// /// Callback. - public static void SetCallback(TangoService_onEventAvailable callback) + internal static void SetCallback(TangoService_onEventAvailable callback) { int returnValue = EventsAPI.TangoService_connectOnTangoEvent(callback); if (returnValue != Common.ErrorType.TANGO_SUCCESS) { - Debug.Log("TangoEvents.SetCallback() Callback was not set!"); + Debug.Log("TangoEvents.SetCallback() Callback was not set!"); } else { - Debug.Log("TangoEvents.SetCallback() Callback was set!"); + Debug.Log("TangoEvents.SetCallback() Callback was set!"); } } + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1600:ElementsMustBeDocumented", + Justification = "C API Wrapper.")] private struct EventsAPI { #if UNITY_ANDROID && !UNITY_EDITOR diff --git a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/VideoOverlayProvider.cs b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/VideoOverlayProvider.cs index 1de7dbd3..3d3ecfb2 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/VideoOverlayProvider.cs +++ b/UnityExamples/Assets/TangoSDK/Core/Scripts/TangoWrappers/VideoOverlayProvider.cs @@ -1,18 +1,22 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; @@ -22,90 +26,46 @@ namespace Tango { - /// - /// Wraps separate textures for Y, U, and V planes. + /// C API wrapper for the Tango video overlay interface. /// - public class YUVTexture + public class VideoOverlayProvider { /// - /// The m_video overlay texture y. - /// Columns 1280/4 [bytes packed in RGBA channels] - /// Rows 720 - /// - public Texture2D m_videoOverlayTextureY; - - /// - /// The m_video overlay texture cb. - /// Columns 640/4 [bytes packed in RGBA channels] - /// Rows 360 - /// - public Texture2D m_videoOverlayTextureCb; - - /// - /// The m_video overlay texture cr. - /// Columns 640 * 2 / 4 [bytes packed in RGBA channels] - /// Rows 360 - /// - public Texture2D m_videoOverlayTextureCr; - - /// - /// Initializes a new instance of the class. - /// NOTE : Texture resolutions will be reset by the API. The sizes passed - /// into the constructor are not guaranteed to persist when running on device. + /// Tango video overlay C callback function signature. /// - /// Width. - /// Height. - /// Format. - /// If set to true mipmap. - public YUVTexture(int yPlaneWidth, int yPlaneHeight, - int uvPlaneWidth, int uvPlaneHeight, - TextureFormat format, bool mipmap) - { - m_videoOverlayTextureY = new Texture2D(yPlaneWidth, yPlaneHeight, format, mipmap); - m_videoOverlayTextureY.filterMode = FilterMode.Point; - m_videoOverlayTextureCb = new Texture2D(uvPlaneWidth, uvPlaneHeight, format, mipmap); - m_videoOverlayTextureCb.filterMode = FilterMode.Point; - m_videoOverlayTextureCr = new Texture2D(uvPlaneWidth, uvPlaneHeight, format, mipmap); - m_videoOverlayTextureCr.filterMode = FilterMode.Point; - } + /// Callback context. + /// Camera ID. + /// Image. + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + internal delegate void TangoService_onImageAvailable(IntPtr callbackContext, Tango.TangoEnums.TangoCameraId cameraId, [In, Out] TangoImageBuffer image); /// - /// Resizes all yuv texture planes. + /// Experimental API only, subject to change. Tango depth C callback function signature. /// - /// Y plane width. - /// Y plane height. - /// Uv plane width. - /// Uv plane height. - public void ResizeAll(int yPlaneWidth, int yPlaneHeight, - int uvPlaneWidth, int uvPlaneHeight) - { - m_videoOverlayTextureY.Resize(yPlaneWidth, yPlaneHeight); - m_videoOverlayTextureCb.Resize(uvPlaneWidth, uvPlaneHeight); - m_videoOverlayTextureCr.Resize(uvPlaneWidth, uvPlaneHeight); - } - } - - /// - /// Video Overlay Provider class provide video functions - /// to get frame textures. - /// - public class VideoOverlayProvider - { + /// Callback context. + /// Camera ID. [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void TangoService_onImageAvailable(IntPtr callbackContext, Tango.TangoEnums.TangoCameraId cameraId, [In,Out] TangoImageBuffer image); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void TangoService_onUnityFrameAvailable(IntPtr callbackContext, Tango.TangoEnums.TangoCameraId cameraId); + internal delegate void TangoService_onUnityFrameAvailable(IntPtr callbackContext, Tango.TangoEnums.TangoCameraId cameraId); private static readonly string CLASS_NAME = "VideoOverlayProvider"; private static IntPtr callbackContext = IntPtr.Zero; /// - /// Connects the texture. + /// Connect a Texture ID to a camera; the camera is selected by specifying a TangoCameraId. + /// + /// Currently only TANGO_CAMERA_COLOR and TANGO_CAMERA_FISHEYE are supported. The texture must be the ID of a + /// texture that has been allocated and initialized by the calling application. + /// + /// The first scan-line of the color image is reserved for metadata instead of image pixels. /// - /// Camera identifier. - /// Texture identifier. + /// + /// The ID of the camera to connect this texture to. Only TANGO_CAMERA_COLOR and TANGO_CAMERA_FISHEYE are + /// supported. + /// + /// + /// The texture ID of the texture to connect the camera to. Must be a valid texture in the applicaton. + /// public static void ConnectTexture(TangoEnums.TangoCameraId cameraId, int textureId) { int returnValue = VideoOverlayAPI.TangoService_connectTextureId(cameraId, textureId); @@ -115,8 +75,29 @@ public static void ConnectTexture(TangoEnums.TangoCameraId cameraId, int texture Debug.Log("VideoOverlayProvider.ConnectTexture() Texture was not connected to camera!"); } } - - public static void ExperimentalConnectTexture(TangoEnums.TangoCameraId cameraId, YUVTexture textures, TangoService_onUnityFrameAvailable onUnityFrameAvailable) + + /// + /// Experimental API only, subject to change. Connect a Texture IDs to a camera. + /// + /// The camera is selected via TangoCameraId. Currently only TANGO_CAMERA_COLOR is supported. The texture + /// handles will be regenerated by the API on startup after which the application can use them, and will be + /// packed RGBA8888 data containing bytes of the image (so a single RGBA8888 will pack 4 neighbouring pixels). + /// If the config flag experimental_image_pixel_format is set to HAL_PIXEL_FORMAT_YCrCb_420_SP, texture_y will + /// pack 1280x720 pixels into a 320x720 RGBA8888 texture. texture_Cb and texture_Cr will contain copies of + /// the 2x2 downsampled interleaved UV planes packed similarly. If experimental_image_pixel_format is set to + /// HAL_PIXEL_FORMAT_YV12 then texture_y will have a stride of 1536 containing 1280 columns of data, packed + /// similarly in a RGBA8888 texture. texture_Cb and texture_Cr will be 2x2 downsampled versions of the same. + /// See YV12 and NV21 formats for details. + /// + /// Note: The first scan-line of the color image is reserved for metadata instead of image pixels. + /// + /// + /// The ID of the camera to connect this texture to. Only TANGO_CAMERA_COLOR and TANGO_CAMERA_FISHEYE are + /// supported. + /// + /// The texture IDs to use for the Y, Cb, and Cr planes. + /// Callback. + internal static void ExperimentalConnectTexture(TangoEnums.TangoCameraId cameraId, YUVTexture textures, TangoService_onUnityFrameAvailable onUnityFrameAvailable) { int returnValue = VideoOverlayAPI.TangoService_Experimental_connectTextureIdUnity(cameraId, (uint)textures.m_videoOverlayTextureY.GetNativeTextureID(), @@ -130,12 +111,16 @@ public static void ExperimentalConnectTexture(TangoEnums.TangoCameraId cameraId, Debug.Log("VideoOverlayProvider.ConnectTexture() Texture was not connected to camera!"); } } - + /// - /// Renders the latest frame. + /// Update the texture that has been connected to camera referenced by TangoCameraId with the latest image + /// from the camera. /// - /// The latest frame timestamp. - /// Camera identifier. + /// The timestamp of the image that has been pushed to the connected texture. + /// + /// The ID of the camera to connect this texture to. Only TANGO_CAMERA_COLOR and + /// TANGO_CAMERA_FISHEYE are supported. + /// public static double RenderLatestFrame(TangoEnums.TangoCameraId cameraId) { double timestamp = 0.0; @@ -149,10 +134,15 @@ public static double RenderLatestFrame(TangoEnums.TangoCameraId cameraId) } /// - /// Get the camera/sensor intrinsics. + /// Get the intrinsic calibration parameters for a given camera. + /// + /// The intrinsics are as specified by the TangoCameraIntrinsics struct. Intrinsics are read from the + /// on-device intrinsics file (typically /sdcard/config/calibration.xml, but to ensure + /// compatibility applications should only access these parameters via the API), or default internal model + /// parameters corresponding to the device are used if the calibration.xml file is not found. /// - /// Camera identifier. - /// Camera intrinsics data. + /// The camera ID to retrieve the calibration intrinsics for. + /// A TangoCameraIntrinsics filled with calibration intrinsics for the camera. public static void GetIntrinsics(TangoEnums.TangoCameraId cameraId, [Out] TangoCameraIntrinsics intrinsics) { int returnValue = VideoOverlayAPI.TangoService_getCameraIntrinsics(cameraId, intrinsics); @@ -162,16 +152,28 @@ public static void GetIntrinsics(TangoEnums.TangoCameraId cameraId, [Out] TangoC Debug.Log("IntrinsicsProviderAPI.TangoService_getCameraIntrinsics() failed!"); } } - + /// - /// Sets the callback for notifications when image data is ready. + /// Connect a callback to a camera for access to the pixels. + /// + /// This is not recommended for display but for applications requiring access to the + /// HAL_PIXEL_FORMAT_YV12 pixel data. The camera is selected via TangoCameraId. Currently only + /// TANGO_CAMERA_COLOR and TANGO_CAMERA_FISHEYE are supported. + /// + /// The onImageAvailable callback will be called when a new frame is available from the camera. The + /// Enable Video Overlay option must be enabled for this to succeed. + /// + /// Note: The first scan-line of the color image is reserved for metadata instead of image pixels. /// - /// Camera identifier. - /// On image available callback handler. - public static void SetCallback(TangoEnums.TangoCameraId cameraId, TangoService_onImageAvailable onImageAvailable) + /// + /// The ID of the camera to connect this texture to. Only TANGO_CAMERA_COLOR and + /// TANGO_CAMERA_FISHEYE are supported. + /// + /// Function called when a new frame is available from the camera. + internal static void SetCallback(TangoEnums.TangoCameraId cameraId, TangoService_onImageAvailable onImageAvailable) { int returnValue = VideoOverlayAPI.TangoService_connectOnFrameAvailable(cameraId, callbackContext, onImageAvailable); - if(returnValue == Tango.Common.ErrorType.TANGO_SUCCESS) + if (returnValue == Tango.Common.ErrorType.TANGO_SUCCESS) { Debug.Log(CLASS_NAME + ".SetCallback() Callback was set."); } @@ -182,9 +184,9 @@ public static void SetCallback(TangoEnums.TangoCameraId cameraId, TangoService_o } #region NATIVE_FUNCTIONS - /// - /// Video overlay native function import. - /// + [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", + "SA1600:ElementsMustBeDocumented", + Justification = "C API Wrapper.")] private struct VideoOverlayAPI { #if UNITY_ANDROID && !UNITY_EDITOR @@ -195,7 +197,7 @@ private struct VideoOverlayAPI [DllImport(Common.TANGO_UNITY_DLL)] public static extern int TangoService_connectOnFrameAvailable(TangoEnums.TangoCameraId cameraId, IntPtr context, - [In,Out] TangoService_onImageAvailable onImageAvailable); + [In, Out] TangoService_onImageAvailable onImageAvailable); [DllImport(Common.TANGO_UNITY_DLL)] public static extern int TangoService_updateTexture(TangoEnums.TangoCameraId cameraId, ref double timestamp); @@ -228,7 +230,7 @@ public static int TangoService_getCameraIntrinsics(TangoEnums.TangoCameraId came public static int TangoService_connectOnFrameAvailable(TangoEnums.TangoCameraId cameraId, IntPtr context, - [In,Out] TangoService_onImageAvailable onImageAvailable) + [In, Out] TangoService_onImageAvailable onImageAvailable) { return Tango.Common.ErrorType.TANGO_SUCCESS; } @@ -246,4 +248,69 @@ public static int TangoService_Experimental_connectTextureIdUnity(TangoEnums.Tan #endregion } } + + /// + /// Wraps separate textures for Y, U, and V planes. + /// + public class YUVTexture + { + /// + /// The m_video overlay texture y. + /// Columns 1280/4 [bytes packed in RGBA channels] + /// Rows 720 + /// This size is for a 1280x720 screen. + /// + public Texture2D m_videoOverlayTextureY; + + /// + /// The m_video overlay texture cb. + /// Columns 640/4 [bytes packed in RGBA channels] + /// Rows 360 + /// This size is for a 1280x720 screen. + /// + public Texture2D m_videoOverlayTextureCb; + + /// + /// The m_video overlay texture cr. + /// Columns 640 * 2 / 4 [bytes packed in RGBA channels] + /// Rows 360 + /// This size is for a 1280x720 screen. + /// + public Texture2D m_videoOverlayTextureCr; + + /// + /// Initializes a new instance of the class. + /// NOTE : Texture resolutions will be reset by the API. The sizes passed + /// into the constructor are not guaranteed to persist when running on device. + /// + /// Y plane width. + /// Y plane height. + /// UV plane width. + /// UV plane height. + /// Format. + /// If set to true mipmap. + public YUVTexture(int yPlaneWidth, int yPlaneHeight, + int uvPlaneWidth, int uvPlaneHeight, + TextureFormat format, bool mipmap) + { + m_videoOverlayTextureY = new Texture2D(yPlaneWidth, yPlaneHeight, format, mipmap); + m_videoOverlayTextureCb = new Texture2D(uvPlaneWidth, uvPlaneHeight, format, mipmap); + m_videoOverlayTextureCr = new Texture2D(uvPlaneWidth, uvPlaneHeight, format, mipmap); + } + + /// + /// Resizes all yuv texture planes. + /// + /// Y plane width. + /// Y plane height. + /// Uv plane width. + /// Uv plane height. + public void ResizeAll(int yPlaneWidth, int yPlaneHeight, + int uvPlaneWidth, int uvPlaneHeight) + { + m_videoOverlayTextureY.Resize(yPlaneWidth, yPlaneHeight); + m_videoOverlayTextureCb.Resize(uvPlaneWidth, uvPlaneHeight); + m_videoOverlayTextureCr.Resize(uvPlaneWidth, uvPlaneHeight); + } + } } \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Tango.dat b/UnityExamples/Assets/TangoSDK/Core/Tango.dat index e4cb58ad..80235af0 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Tango.dat +++ b/UnityExamples/Assets/TangoSDK/Core/Tango.dat @@ -1 +1 @@ - undefined7f7a462release-vonmises \ No newline at end of file + undefined400af05 release-weyl \ No newline at end of file diff --git a/UnityExamples/Assets/TangoSDK/Core/Tango.dat.meta b/UnityExamples/Assets/TangoSDK/Core/Tango.dat.meta index 17288c6e..fddac95d 100644 --- a/UnityExamples/Assets/TangoSDK/Core/Tango.dat.meta +++ b/UnityExamples/Assets/TangoSDK/Core/Tango.dat.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 4c32e35ac7ec74461a887d63a617d537 +guid: ea270c395b242406694304142de3d5a9 DefaultImporter: userData: assetBundleName: diff --git a/UnityExamples/Assets/TangoSDK/Editor.meta b/UnityExamples/Assets/TangoSDK/Editor.meta index c5ac9dc2..066a5fba 100644 --- a/UnityExamples/Assets/TangoSDK/Editor.meta +++ b/UnityExamples/Assets/TangoSDK/Editor.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 78f7df302e5d14d179d4c2a81857cab4 folderAsset: yes -timeCreated: 1440434026 +timeCreated: 1441729896 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/Editor/TangoInspector.cs b/UnityExamples/Assets/TangoSDK/Editor/TangoInspector.cs index 0730ca1b..ef88ba1d 100644 --- a/UnityExamples/Assets/TangoSDK/Editor/TangoInspector.cs +++ b/UnityExamples/Assets/TangoSDK/Editor/TangoInspector.cs @@ -1,35 +1,34 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; using UnityEditor; using UnityEngine; using Tango; +/// +/// Custom editor for the TangoApplication. +/// [CustomEditor(typeof(TangoApplication))] public class TangoInspector : Editor { - TangoApplication m_tangoApplication; - - /// - /// Raises the enable event. - /// - private void OnEnable() - { - m_tangoApplication = (TangoApplication)target; - } + private TangoApplication m_tangoApplication; /// /// Raises the inspector GUI event. @@ -46,6 +45,14 @@ public override void OnInspectorGUI() } } + /// + /// Raises the enable event. + /// + private void OnEnable() + { + m_tangoApplication = (TangoApplication)target; + } + /// /// Draw motion tracking options. /// @@ -59,7 +66,7 @@ private void _DrawMotionTrackingOptions(TangoApplication tangoApplication) EditorGUI.indentLevel++; tangoApplication.m_motionTrackingAutoReset = EditorGUILayout.Toggle("Auto Reset", tangoApplication.m_motionTrackingAutoReset); - + tangoApplication.m_enableAreaLearning = EditorGUILayout.Toggle("Area Learning", tangoApplication.m_enableAreaLearning); if (tangoApplication.m_enableAreaLearning) diff --git a/UnityExamples/Assets/TangoSDK/Editor/TangoMenu.cs b/UnityExamples/Assets/TangoSDK/Editor/TangoMenu.cs index e97da219..145827a4 100644 --- a/UnityExamples/Assets/TangoSDK/Editor/TangoMenu.cs +++ b/UnityExamples/Assets/TangoSDK/Editor/TangoMenu.cs @@ -1,34 +1,38 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- +using System.Collections; using UnityEngine; using UnityEditor; -using System.Collections; /// /// Tango developer tools menu. /// public class TangoMenu { - /// - /// Opens the default web browser and navigates to the - /// Tango developer page. - /// - [MenuItem("Tango/Documentation")] - public static void ShowDocumentation() - { - Application.OpenURL("https://developers.google.com/project-tango/developer-overview"); - } + /// + /// Opens the default web browser and navigates to the + /// Tango developer page. + /// + [MenuItem("Tango/Documentation")] + public static void ShowDocumentation() + { + Application.OpenURL("https://developers.google.com/project-tango/developer-overview"); + } } diff --git a/UnityExamples/Assets/TangoSDK/Editor/TangoSDKAbout.cs b/UnityExamples/Assets/TangoSDK/Editor/TangoSDKAbout.cs index c3819c81..bed0d45e 100644 --- a/UnityExamples/Assets/TangoSDK/Editor/TangoSDKAbout.cs +++ b/UnityExamples/Assets/TangoSDK/Editor/TangoSDKAbout.cs @@ -1,74 +1,78 @@ -/* - * Copyright 2014 Google Inc. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +//----------------------------------------------------------------------- +// +// +// Copyright 2015 Google Inc. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +// +//----------------------------------------------------------------------- using System.Collections; +using System.IO; using UnityEditor; using UnityEngine; -using System.IO; /// /// Tango SDK about window. /// public class TangoSDKAbout : EditorWindow { - public static readonly string TANGO_VERSION_DATA_PATH = "/TangoSDK/Core/Tango.dat"; - public string m_branch = string.Empty; - public string m_versionTag = string.Empty; - public string m_gitHash = string.Empty; - public bool m_validData = false; + public static readonly string TANGO_VERSION_DATA_PATH = "/TangoSDK/Core/Tango.dat"; + public string m_branch = string.Empty; + public string m_versionTag = string.Empty; + public string m_gitHash = string.Empty; + public bool m_validData = false; - /// - /// Show the About Tango Window - /// - [MenuItem("Tango/About SDK")] - public static void GetSDKVersion() - { - EditorWindow thisWindow = EditorWindow.GetWindow(typeof(TangoSDKAbout)); + /// + /// Show the About Tango Window. + /// + [MenuItem("Tango/About SDK")] + public static void GetSDKVersion() + { + EditorWindow thisWindow = EditorWindow.GetWindow(typeof(TangoSDKAbout)); - ((TangoSDKAbout)thisWindow).ReadVersionFile(); - } + ((TangoSDKAbout)thisWindow).ReadVersionFile(); + } - /// - /// Reads the version file. - /// - public void ReadVersionFile() - { - if(File.Exists(Application.dataPath + TANGO_VERSION_DATA_PATH)) - { - BinaryReader binaryReader = new BinaryReader(File.Open(Application.dataPath + TANGO_VERSION_DATA_PATH, FileMode.Open)); - m_versionTag = binaryReader.ReadString(); - m_gitHash = binaryReader.ReadString(); - m_branch = binaryReader.ReadString(); - m_validData = true; + /// + /// Reads the version file. + /// + public void ReadVersionFile() + { + if (File.Exists(Application.dataPath + TANGO_VERSION_DATA_PATH)) + { + BinaryReader binaryReader = new BinaryReader(File.Open(Application.dataPath + TANGO_VERSION_DATA_PATH, FileMode.Open)); + m_versionTag = binaryReader.ReadString(); + m_gitHash = binaryReader.ReadString(); + m_branch = binaryReader.ReadString(); + m_validData = true; } } - /// - /// Raises the GU event. - /// - void OnGUI() - { - if(m_validData) - { - EditorGUILayout.LabelField("Version: ", m_versionTag); - EditorGUILayout.LabelField("Branch: ", m_branch); - EditorGUILayout.LabelField("Hash: ", m_gitHash); - } - else - { - EditorGUILayout.LabelField("Version data not found"); - } - } + /// + /// Raises the GU event. + /// + public void OnGUI() + { + if (m_validData) + { + EditorGUILayout.LabelField("Version: ", m_versionTag); + EditorGUILayout.LabelField("Branch: ", m_branch); + EditorGUILayout.LabelField("Hash: ", m_gitHash); + } + else + { + EditorGUILayout.LabelField("Version data not found"); + } + } } diff --git a/UnityExamples/Assets/TangoSDK/TangoUX.meta b/UnityExamples/Assets/TangoSDK/TangoUX.meta index 1099a9f4..4204139c 100644 --- a/UnityExamples/Assets/TangoSDK/TangoUX.meta +++ b/UnityExamples/Assets/TangoSDK/TangoUX.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: ab41d32a0a64440748e605a044b13387 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts.meta b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts.meta index b2e9da75..36d5e584 100644 --- a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts.meta +++ b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: dd9505c88c48745c8bc7a16f712938f5 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Common.meta b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Common.meta index 49267f5f..7378c305 100644 --- a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Common.meta +++ b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Common.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: e29d70e17a9154895b257ee30b296791 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Interfaces.meta b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Interfaces.meta index d18ee6fe..91c58181 100644 --- a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Interfaces.meta +++ b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Interfaces.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: 8c7c0ebacfab24a0cbe5503a4bc5fa07 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Listeners.meta b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Listeners.meta index 42701a6c..e063e8f4 100644 --- a/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Listeners.meta +++ b/UnityExamples/Assets/TangoSDK/TangoUX/Scripts/Listeners.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 guid: acb9e1dbfe50d40808cb4061f03790d9 folderAsset: yes -timeCreated: 1440434055 +timeCreated: 1442017923 licenseType: Pro DefaultImporter: userData: diff --git a/UnityExamples/ProjectSettings/ProjectSettings.asset b/UnityExamples/ProjectSettings/ProjectSettings.asset index 6c3613c5..b07c09f2 100644 --- a/UnityExamples/ProjectSettings/ProjectSettings.asset +++ b/UnityExamples/ProjectSettings/ProjectSettings.asset @@ -72,14 +72,14 @@ PlayerSettings: 16:9: 1 Others: 1 bundleIdentifier: com.projecttango.unityexamples - bundleVersion: 1.21 + bundleVersion: 1.22 preloadedAssets: [] metroEnableIndependentInputSource: 0 metroEnableLowLatencyPresentationAPI: 0 xboxOneDisableKinectGpuReservation: 0 virtualRealitySupported: 0 productGUID: c6391136f507d40acbbba7382166aeb8 - AndroidBundleVersionCode: 21 + AndroidBundleVersionCode: 22 AndroidMinSdkVersion: 17 AndroidPreferredInstallLocation: 1 aotOptions: From 3360b573d5908afc8eab6c59af99768288775f41 Mon Sep 17 00:00:00 2001 From: Jared Finder Date: Wed, 16 Sep 2015 12:45:50 -0700 Subject: [PATCH 2/2] Merge regression fix. --- UnityExamples/ProjectSettings/ProjectSettings.asset | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/UnityExamples/ProjectSettings/ProjectSettings.asset b/UnityExamples/ProjectSettings/ProjectSettings.asset index b07c09f2..444914a0 100644 --- a/UnityExamples/ProjectSettings/ProjectSettings.asset +++ b/UnityExamples/ProjectSettings/ProjectSettings.asset @@ -151,7 +151,10 @@ PlayerSettings: m_Size: 48 - m_Icon: {fileID: 2800000, guid: 87944d11c2cdb43679e685502eff846c, type: 3} m_Size: 36 - m_BuildTargetBatching: [] + m_BuildTargetBatching: + - m_BuildTarget: Android + m_StaticBatching: 1 + m_DynamicBatching: 0 m_BuildTargetGraphicsAPIs: - m_BuildTarget: AndroidPlayer m_APIs: 08000000
- /// Tango coordinate frame pair. + /// The TangoCoordinateFramePair struct contains a pair of coordinate frames of reference. + /// + /// Tango pose data is calculated as a transformation between two frames + /// of reference (so, for example, you can be asking for the pose of the + /// device within a learned area). + /// + /// This struct is used to specify the desired base and target frames of + /// reference when requesting pose data. You can also use it when you have + /// a TangoPoseData structure returned from the API and want to examine which + /// frames of reference were used to get that pose. + /// + /// For more information, including which coordinate frame pairs are valid, + /// see our page on + /// frames of reference. ///