diff --git a/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset b/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset
index 543c37f4..8b3c3b1c 100644
--- a/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset
+++ b/Assets/GoogleARCore/Configurations/DefaultSessionConfig.asset
@@ -19,3 +19,4 @@ MonoBehaviour:
CameraFocusMode: 0
AugmentedFaceMode: 0
DepthMode: 0
+ InstantPlacementMode: 0
diff --git a/Assets/GoogleARCore/Editor/ARCoreiOSDependencies.template b/Assets/GoogleARCore/Editor/ARCoreiOSDependencies.template
index 792dd75c..e18f4eb9 100644
--- a/Assets/GoogleARCore/Editor/ARCoreiOSDependencies.template
+++ b/Assets/GoogleARCore/Editor/ARCoreiOSDependencies.template
@@ -1,6 +1,6 @@
-
+
diff --git a/Assets/GoogleARCore/Examples/AugmentedFaces/Configurations/AugmentedFaceSessionConfiguration.asset b/Assets/GoogleARCore/Examples/AugmentedFaces/Configurations/AugmentedFaceSessionConfiguration.asset
index f0d64eb5..6c46c1a4 100644
--- a/Assets/GoogleARCore/Examples/AugmentedFaces/Configurations/AugmentedFaceSessionConfiguration.asset
+++ b/Assets/GoogleARCore/Examples/AugmentedFaces/Configurations/AugmentedFaceSessionConfiguration.asset
@@ -19,3 +19,4 @@ MonoBehaviour:
CameraFocusMode: 1
AugmentedFaceMode: 2
DepthMode: 0
+ InstantPlacementMode: 0
diff --git a/Assets/GoogleARCore/Examples/AugmentedFaces/Scenes/AugmentedFaces.unity b/Assets/GoogleARCore/Examples/AugmentedFaces/Scenes/AugmentedFaces.unity
index a56964f8..f044d2ee 100644
--- a/Assets/GoogleARCore/Examples/AugmentedFaces/Scenes/AugmentedFaces.unity
+++ b/Assets/GoogleARCore/Examples/AugmentedFaces/Scenes/AugmentedFaces.unity
@@ -254,36 +254,8 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- m_RootGameObject: {fileID: 496192901}
+ m_RootGameObject: {fileID: 755086854}
m_IsPrefabParent: 0
---- !u!1 &145471881
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100004, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
- m_PrefabInternal: {fileID: 2006304972}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 145471882}
- m_Layer: 0
- m_Name: FOREHEAD_LEFT
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &145471882
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400004, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
- m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 145471881}
- m_LocalRotation: {x: 0.14623038, y: -0.27242935, z: 0.041930888, w: 0.9500741}
- m_LocalPosition: {x: 0.03709, y: 0.0696401, z: -0.039809998}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1557677657}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &197346195
GameObject:
m_ObjectHideFlags: 0
@@ -325,84 +297,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
FaceAttachment: {fileID: 1626910332}
---- !u!1 &206329395
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100012, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
- m_PrefabInternal: {fileID: 2006304972}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 206329396}
- - component: {fileID: 206329397}
- m_Layer: 0
- m_Name: nose_mesh
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &206329396
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400012, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
- m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 206329395}
- m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: -0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 2006304973}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!137 &206329397
-SkinnedMeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 13700006, guid: 909f7e3faf16c4c1983434120ad9d7f1,
- type: 3}
- m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 206329395}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_DynamicOccludee: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 2100000, guid: 3e6f4ede1d3624331a46ec5006f54bb3, type: 2}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 0
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
- serializedVersion: 2
- m_Quality: 0
- m_UpdateWhenOffscreen: 0
- m_SkinnedMotionVectors: 1
- m_Mesh: {fileID: 4300000, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
- m_Bones:
- - {fileID: 427370416}
- m_BlendShapeWeights: []
- m_RootBone: {fileID: 427370416}
- m_AABB:
- m_Center: {x: 0.0000011539087, y: -0.010605735, z: -0.016754575}
- m_Extent: {x: 0.009687519, y: 0.0067871, z: 0.0057792068}
- m_DirtyAABB: 0
---- !u!1 &299489519
+--- !u!1 &412601019
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
@@ -410,10 +305,10 @@ GameObject:
m_PrefabInternal: {fileID: 96447268}
serializedVersion: 5
m_Component:
- - component: {fileID: 299489520}
- - component: {fileID: 299489523}
- - component: {fileID: 299489522}
- - component: {fileID: 299489521}
+ - component: {fileID: 412601020}
+ - component: {fileID: 412601023}
+ - component: {fileID: 412601022}
+ - component: {fileID: 412601021}
m_Layer: 0
m_Name: First Person Camera
m_TagString: MainCamera
@@ -421,40 +316,40 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &299489520
+--- !u!4 &412601020
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 96447268}
- m_GameObject: {fileID: 299489519}
+ m_GameObject: {fileID: 412601019}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 496192903}
+ m_Father: {fileID: 755086856}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &299489521
+--- !u!114 &412601021
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 96447268}
- m_GameObject: {fileID: 299489519}
+ m_GameObject: {fileID: 412601019}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
m_Name:
m_EditorClassIdentifier:
BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
---- !u!114 &299489522
+--- !u!114 &412601022
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 96447268}
- m_GameObject: {fileID: 299489519}
+ m_GameObject: {fileID: 412601019}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
@@ -465,13 +360,13 @@ MonoBehaviour:
m_TrackingType: 0
m_UpdateType: 1
m_UseRelativeTransform: 1
---- !u!20 &299489523
+--- !u!20 &412601023
Camera:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 96447268}
- m_GameObject: {fileID: 299489519}
+ m_GameObject: {fileID: 412601019}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
@@ -502,63 +397,115 @@ Camera:
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
---- !u!1 &364130651
+--- !u!1 &629689609
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100006, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 100016, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
serializedVersion: 5
m_Component:
- - component: {fileID: 364130652}
+ - component: {fileID: 629689610}
m_Layer: 0
- m_Name: FOREHEAD_RIGHT
+ m_Name: root
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &364130652
+--- !u!4 &629689610
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400006, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 400016, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 364130651}
- m_LocalRotation: {x: 0.14623038, y: 0.27242935, z: -0.041930888, w: 0.9500741}
- m_LocalPosition: {x: -0.03709, y: 0.06964, z: -0.039809998}
+ m_GameObject: {fileID: 629689609}
+ m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1557677657}
- m_RootOrder: 1
+ m_Children:
+ - {fileID: 2069706918}
+ - {fileID: 1018052715}
+ - {fileID: 1807210249}
+ m_Father: {fileID: 2006304973}
+ m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &427370415
+--- !u!1 &742124852
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100014, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 100002, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
serializedVersion: 5
m_Component:
- - component: {fileID: 427370416}
+ - component: {fileID: 742124853}
+ - component: {fileID: 742124854}
m_Layer: 0
- m_Name: NOSE_TIP
+ m_Name: earRight_mesh
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &427370416
+--- !u!4 &742124853
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400014, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 400002, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 427370415}
+ m_GameObject: {fileID: 742124852}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: -0, y: -0.00463, z: -0.075865805}
+ m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 1557677657}
- m_RootOrder: 2
+ m_Father: {fileID: 2006304973}
+ m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &496192901
+--- !u!137 &742124854
+SkinnedMeshRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 13700002, guid: 909f7e3faf16c4c1983434120ad9d7f1,
+ type: 3}
+ m_PrefabInternal: {fileID: 2006304972}
+ m_GameObject: {fileID: 742124852}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_Materials:
+ - {fileID: 2100000, guid: 8e3ccdbfb959e42c3b73ce3eabfbd40b, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ serializedVersion: 2
+ m_Quality: 0
+ m_UpdateWhenOffscreen: 0
+ m_SkinnedMotionVectors: 1
+ m_Mesh: {fileID: 4300006, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_Bones:
+ - {fileID: 1018052715}
+ m_BlendShapeWeights: []
+ m_RootBone: {fileID: 1018052715}
+ m_AABB:
+ m_Center: {x: -0.040482737, y: 0.05451026, z: 0.0054118605}
+ m_Extent: {x: 0.047615252, y: 0.054646783, z: 0.030449301}
+ m_DirtyAABB: 0
+--- !u!1 &755086854
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
@@ -566,8 +513,8 @@ GameObject:
m_PrefabInternal: {fileID: 96447268}
serializedVersion: 5
m_Component:
- - component: {fileID: 496192903}
- - component: {fileID: 496192902}
+ - component: {fileID: 755086856}
+ - component: {fileID: 755086855}
m_Layer: 0
m_Name: ARCore Device
m_TagString: Untagged
@@ -575,13 +522,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &496192902
+--- !u!114 &755086855
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114451889682527732, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 96447268}
- m_GameObject: {fileID: 496192901}
+ m_GameObject: {fileID: 755086854}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
@@ -590,18 +537,18 @@ MonoBehaviour:
DeviceCameraDirection: 1
SessionConfig: {fileID: 11400000, guid: efcd68010d9474f4090c50fc62ed33cb, type: 2}
CameraConfigFilter: {fileID: 11400000, guid: 200b4cba649e3413088e285251ccf44e, type: 2}
---- !u!4 &496192903
+--- !u!4 &755086856
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 96447268}
- m_GameObject: {fileID: 496192901}
+ m_GameObject: {fileID: 755086854}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 299489520}
+ - {fileID: 412601020}
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -689,15 +636,43 @@ Transform:
m_Father: {fileID: 1626910333}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &952537096
+--- !u!1 &1018052714
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 100006, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabInternal: {fileID: 2006304972}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1018052715}
+ m_Layer: 0
+ m_Name: FOREHEAD_RIGHT
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1018052715
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 400006, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabInternal: {fileID: 2006304972}
+ m_GameObject: {fileID: 1018052714}
+ m_LocalRotation: {x: 0.14623038, y: 0.27242935, z: -0.041930888, w: 0.9500741}
+ m_LocalPosition: {x: -0.03709, y: 0.06964, z: -0.039809998}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 629689610}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1043423815
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 100010, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
serializedVersion: 5
m_Component:
- - component: {fileID: 952537097}
- - component: {fileID: 952537098}
+ - component: {fileID: 1043423816}
+ - component: {fileID: 1043423817}
m_Layer: 0
m_Name: fur_mesh
m_TagString: Untagged
@@ -705,12 +680,12 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &952537097
+--- !u!4 &1043423816
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 400010, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 952537096}
+ m_GameObject: {fileID: 1043423815}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -718,13 +693,13 @@ Transform:
m_Father: {fileID: 2006304973}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!137 &952537098
+--- !u!137 &1043423817
SkinnedMeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 13700004, guid: 909f7e3faf16c4c1983434120ad9d7f1,
type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 952537096}
+ m_GameObject: {fileID: 1043423815}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -759,44 +734,90 @@ SkinnedMeshRenderer:
m_SkinnedMotionVectors: 1
m_Mesh: {fileID: 4300002, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_Bones:
- - {fileID: 427370416}
+ - {fileID: 1807210249}
m_BlendShapeWeights: []
- m_RootBone: {fileID: 427370416}
+ m_RootBone: {fileID: 1807210249}
m_AABB:
m_Center: {x: 0, y: 0.0018034149, z: -0.005423274}
m_Extent: {x: 0.039001808, y: 0.028062662, z: 0.012626011}
m_DirtyAABB: 0
---- !u!1 &1557677656
+--- !u!1 &1270619583
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100016, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 100000, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
serializedVersion: 5
m_Component:
- - component: {fileID: 1557677657}
+ - component: {fileID: 1270619584}
+ - component: {fileID: 1270619585}
m_Layer: 0
- m_Name: root
+ m_Name: earLeft_mesh
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &1557677657
+--- !u!4 &1270619584
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400016, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 400000, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 1557677656}
+ m_GameObject: {fileID: 1270619583}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 145471882}
- - {fileID: 364130652}
- - {fileID: 427370416}
+ m_Children: []
m_Father: {fileID: 2006304973}
- m_RootOrder: 4
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!137 &1270619585
+SkinnedMeshRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 13700000, guid: 909f7e3faf16c4c1983434120ad9d7f1,
+ type: 3}
+ m_PrefabInternal: {fileID: 2006304972}
+ m_GameObject: {fileID: 1270619583}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_Materials:
+ - {fileID: 2100000, guid: 8e3ccdbfb959e42c3b73ce3eabfbd40b, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ serializedVersion: 2
+ m_Quality: 0
+ m_UpdateWhenOffscreen: 0
+ m_SkinnedMotionVectors: 1
+ m_Mesh: {fileID: 4300004, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_Bones:
+ - {fileID: 2069706918}
+ m_BlendShapeWeights: []
+ m_RootBone: {fileID: 2069706918}
+ m_AABB:
+ m_Center: {x: 0.04049836, y: 0.054517675, z: 0.005435734}
+ m_Extent: {x: 0.047615252, y: 0.05464678, z: 0.030449301}
+ m_DirtyAABB: 0
--- !u!1 &1626910332
GameObject:
m_ObjectHideFlags: 0
@@ -828,119 +849,70 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1844707688
+--- !u!1 &1807210248
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100002, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 100014, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
serializedVersion: 5
m_Component:
- - component: {fileID: 1844707689}
- - component: {fileID: 1844707690}
+ - component: {fileID: 1807210249}
m_Layer: 0
- m_Name: earRight_mesh
+ m_Name: NOSE_TIP
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &1844707689
+--- !u!4 &1807210249
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400002, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 400014, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 1844707688}
+ m_GameObject: {fileID: 1807210248}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: -0, y: 0, z: 0}
+ m_LocalPosition: {x: -0, y: -0.00463, z: -0.075865805}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 2006304973}
- m_RootOrder: 1
+ m_Father: {fileID: 629689610}
+ m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!137 &1844707690
-SkinnedMeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 13700002, guid: 909f7e3faf16c4c1983434120ad9d7f1,
- type: 3}
- m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 1844707688}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_DynamicOccludee: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 2100000, guid: 8e3ccdbfb959e42c3b73ce3eabfbd40b, type: 2}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 0
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
- serializedVersion: 2
- m_Quality: 0
- m_UpdateWhenOffscreen: 0
- m_SkinnedMotionVectors: 1
- m_Mesh: {fileID: 4300006, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
- m_Bones:
- - {fileID: 364130652}
- m_BlendShapeWeights: []
- m_RootBone: {fileID: 364130652}
- m_AABB:
- m_Center: {x: -0.040482737, y: 0.05451026, z: 0.0054118605}
- m_Extent: {x: 0.047615252, y: 0.054646783, z: 0.030449301}
- m_DirtyAABB: 0
---- !u!1 &1937793032
+--- !u!1 &1892864295
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 100000, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 100012, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
serializedVersion: 5
m_Component:
- - component: {fileID: 1937793033}
- - component: {fileID: 1937793034}
+ - component: {fileID: 1892864296}
+ - component: {fileID: 1892864297}
m_Layer: 0
- m_Name: earLeft_mesh
+ m_Name: nose_mesh
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &1937793033
+--- !u!4 &1892864296
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 400000, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabParentObject: {fileID: 400012, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 1937793032}
+ m_GameObject: {fileID: 1892864295}
m_LocalRotation: {x: 0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 2006304973}
- m_RootOrder: 0
+ m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!137 &1937793034
+--- !u!137 &1892864297
SkinnedMeshRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 13700000, guid: 909f7e3faf16c4c1983434120ad9d7f1,
+ m_PrefabParentObject: {fileID: 13700006, guid: 909f7e3faf16c4c1983434120ad9d7f1,
type: 3}
m_PrefabInternal: {fileID: 2006304972}
- m_GameObject: {fileID: 1937793032}
+ m_GameObject: {fileID: 1892864295}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -949,7 +921,7 @@ SkinnedMeshRenderer:
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_Materials:
- - {fileID: 2100000, guid: 8e3ccdbfb959e42c3b73ce3eabfbd40b, type: 2}
+ - {fileID: 2100000, guid: 3e6f4ede1d3624331a46ec5006f54bb3, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
@@ -973,14 +945,14 @@ SkinnedMeshRenderer:
m_Quality: 0
m_UpdateWhenOffscreen: 0
m_SkinnedMotionVectors: 1
- m_Mesh: {fileID: 4300004, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_Mesh: {fileID: 4300000, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
m_Bones:
- - {fileID: 145471882}
+ - {fileID: 1807210249}
m_BlendShapeWeights: []
- m_RootBone: {fileID: 145471882}
+ m_RootBone: {fileID: 1807210249}
m_AABB:
- m_Center: {x: 0.04049836, y: 0.054517675, z: 0.005435734}
- m_Extent: {x: 0.047615252, y: 0.05464678, z: 0.030449301}
+ m_Center: {x: 0.0000011539087, y: -0.010605735, z: -0.016754575}
+ m_Extent: {x: 0.009687519, y: 0.0067871, z: 0.0057792068}
m_DirtyAABB: 0
--- !u!1001 &2006304972
Prefab:
@@ -1052,11 +1024,11 @@ Transform:
m_LocalPosition: {x: -0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 1937793033}
- - {fileID: 1844707689}
- - {fileID: 952537097}
- - {fileID: 206329396}
- - {fileID: 1557677657}
+ - {fileID: 1270619584}
+ - {fileID: 742124853}
+ - {fileID: 1043423816}
+ - {fileID: 1892864296}
+ - {fileID: 629689610}
m_Father: {fileID: 1626910333}
m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -1088,3 +1060,31 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
AutoBind: 1
+--- !u!1 &2069706917
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 100004, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabInternal: {fileID: 2006304972}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 2069706918}
+ m_Layer: 0
+ m_Name: FOREHEAD_LEFT
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &2069706918
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 400004, guid: 909f7e3faf16c4c1983434120ad9d7f1, type: 3}
+ m_PrefabInternal: {fileID: 2006304972}
+ m_GameObject: {fileID: 2069706917}
+ m_LocalRotation: {x: 0.14623038, y: -0.27242935, z: 0.041930888, w: 0.9500741}
+ m_LocalPosition: {x: 0.03709, y: 0.0696401, z: -0.039809998}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 629689610}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
diff --git a/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceMeshFilter.cs b/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceMeshFilter.cs
index 9368338d..229fe929 100644
--- a/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceMeshFilter.cs
+++ b/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceMeshFilter.cs
@@ -35,16 +35,16 @@ public class ARCoreAugmentedFaceMeshFilter : MonoBehaviour
///
public bool AutoBind = false;
- private AugmentedFace m_AugmentedFace = null;
- private List m_AugmentedFaceList = null;
+ private AugmentedFace _augmentedFace = null;
+ private List _augmentedFaceList = null;
// Keep previous frame's mesh polygon to avoid mesh update every frame.
- private List m_MeshVertices = new List();
- private List m_MeshNormals = new List();
- private List m_MeshUVs = new List();
- private List m_MeshIndices = new List();
- private Mesh m_Mesh = null;
- private bool m_MeshInitialized = false;
+ private List _meshVertices = new List();
+ private List _meshNormals = new List();
+ private List _meshUVs = new List();
+ private List _meshIndices = new List();
+ private Mesh _mesh = null;
+ private bool _meshInitialized = false;
///
/// Gets or sets the ARCore AugmentedFace object that will be used to update the face mesh data.
@@ -53,12 +53,12 @@ public AugmentedFace AumgnetedFace
{
get
{
- return m_AugmentedFace;
+ return _augmentedFace;
}
set
{
- m_AugmentedFace = value;
+ _augmentedFace = value;
Update();
}
}
@@ -68,9 +68,9 @@ public AugmentedFace AumgnetedFace
///
public void Awake()
{
- m_Mesh = new Mesh();
- GetComponent().mesh = m_Mesh;
- m_AugmentedFaceList = new List();
+ _mesh = new Mesh();
+ GetComponent().mesh = _mesh;
+ _augmentedFaceList = new List();
}
///
@@ -80,50 +80,50 @@ public void Update()
{
if (AutoBind)
{
- m_AugmentedFaceList.Clear();
- Session.GetTrackables(m_AugmentedFaceList, TrackableQueryFilter.All);
- if (m_AugmentedFaceList.Count != 0)
+ _augmentedFaceList.Clear();
+ Session.GetTrackables(_augmentedFaceList, TrackableQueryFilter.All);
+ if (_augmentedFaceList.Count != 0)
{
- m_AugmentedFace = m_AugmentedFaceList[0];
+ _augmentedFace = _augmentedFaceList[0];
}
}
- if (m_AugmentedFace == null)
+ if (_augmentedFace == null)
{
return;
}
// Update game object position;
- transform.position = m_AugmentedFace.CenterPose.position;
- transform.rotation = m_AugmentedFace.CenterPose.rotation;
+ transform.position = _augmentedFace.CenterPose.position;
+ transform.rotation = _augmentedFace.CenterPose.rotation;
- _UpdateMesh();
+ UpdateMesh();
}
///
/// Update mesh with a face mesh vertices, texture coordinates and indices.
///
- private void _UpdateMesh()
+ private void UpdateMesh()
{
- m_AugmentedFace.GetVertices(m_MeshVertices);
- m_AugmentedFace.GetNormals(m_MeshNormals);
+ _augmentedFace.GetVertices(_meshVertices);
+ _augmentedFace.GetNormals(_meshNormals);
- if (!m_MeshInitialized)
+ if (!_meshInitialized)
{
- m_AugmentedFace.GetTextureCoordinates(m_MeshUVs);
- m_AugmentedFace.GetTriangleIndices(m_MeshIndices);
+ _augmentedFace.GetTextureCoordinates(_meshUVs);
+ _augmentedFace.GetTriangleIndices(_meshIndices);
// Only update mesh indices and uvs once as they don't change every frame.
- m_MeshInitialized = true;
+ _meshInitialized = true;
}
- m_Mesh.Clear();
- m_Mesh.SetVertices(m_MeshVertices);
- m_Mesh.SetNormals(m_MeshNormals);
- m_Mesh.SetTriangles(m_MeshIndices, 0);
- m_Mesh.SetUVs(0, m_MeshUVs);
+ _mesh.Clear();
+ _mesh.SetVertices(_meshVertices);
+ _mesh.SetNormals(_meshNormals);
+ _mesh.SetTriangles(_meshIndices, 0);
+ _mesh.SetUVs(0, _meshUVs);
- m_Mesh.RecalculateBounds();
+ _mesh.RecalculateBounds();
}
}
}
diff --git a/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceRig.cs b/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceRig.cs
index a627ce60..42bb4b13 100644
--- a/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceRig.cs
+++ b/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/ARCoreAugmentedFaceRig.cs
@@ -35,7 +35,7 @@ public class ARCoreAugmentedFaceRig : MonoBehaviour
///
public bool AutoBind = false;
- private static readonly Dictionary k_RegionTransformNames =
+ private static readonly Dictionary _regionTransformNames =
new Dictionary()
{
{ AugmentedFaceRegion.NoseTip, "NOSE_TIP" },
@@ -43,9 +43,9 @@ public class ARCoreAugmentedFaceRig : MonoBehaviour
{ AugmentedFaceRegion.ForeheadRight, "FOREHEAD_RIGHT" }
};
- private AugmentedFace m_AugmentedFace;
- private List m_AugmentedFaceList = new List();
- private Dictionary m_RegionGameObjects =
+ private AugmentedFace _augmentedFace;
+ private List _augmentedFaceList = new List();
+ private Dictionary _regionGameObjects =
new Dictionary();
///
@@ -55,12 +55,12 @@ public AugmentedFace AumgnetedFace
{
get
{
- return m_AugmentedFace;
+ return _augmentedFace;
}
set
{
- m_AugmentedFace = value;
+ _augmentedFace = value;
Update();
}
}
@@ -70,8 +70,8 @@ public AugmentedFace AumgnetedFace
///
public void Awake()
{
- m_AugmentedFaceList = new List();
- _InitializeFaceRegions();
+ _augmentedFaceList = new List();
+ InitializeFaceRegions();
}
///
@@ -86,31 +86,31 @@ public void Update()
if (AutoBind)
{
- m_AugmentedFaceList.Clear();
- Session.GetTrackables(m_AugmentedFaceList, TrackableQueryFilter.All);
- if (m_AugmentedFaceList.Count != 0)
+ _augmentedFaceList.Clear();
+ Session.GetTrackables(_augmentedFaceList, TrackableQueryFilter.All);
+ if (_augmentedFaceList.Count != 0)
{
- m_AugmentedFace = m_AugmentedFaceList[0];
+ _augmentedFace = _augmentedFaceList[0];
}
}
- if (m_AugmentedFace == null)
+ if (_augmentedFace == null)
{
return;
}
- _UpdateRegions();
+ UpdateRegions();
}
///
/// Method to initialize face region gameobject if not present.
///
- private void _InitializeFaceRegions()
+ private void InitializeFaceRegions()
{
- foreach (AugmentedFaceRegion region in k_RegionTransformNames.Keys)
+ foreach (AugmentedFaceRegion region in _regionTransformNames.Keys)
{
- string name = k_RegionTransformNames[region];
- Transform regionTransform = _FindChildTransformRecursive(transform, name);
+ string name = _regionTransformNames[region];
+ Transform regionTransform = FindChildTransformRecursive(transform, name);
if (regionTransform == null)
{
GameObject newRegionObject = new GameObject(name);
@@ -118,11 +118,11 @@ private void _InitializeFaceRegions()
regionTransform = newRegionObject.transform;
}
- m_RegionGameObjects[region] = regionTransform;
+ _regionGameObjects[region] = regionTransform;
}
}
- private Transform _FindChildTransformRecursive(Transform target, string name)
+ private Transform FindChildTransformRecursive(Transform target, string name)
{
if (target.name == name)
{
@@ -136,7 +136,7 @@ private Transform _FindChildTransformRecursive(Transform target, string name)
return child;
}
- Transform result = _FindChildTransformRecursive(child, name);
+ Transform result = FindChildTransformRecursive(child, name);
if (result != null)
{
return result;
@@ -149,24 +149,24 @@ private Transform _FindChildTransformRecursive(Transform target, string name)
///
/// Update all face regions associated with the mesh.
///
- private void _UpdateRegions()
+ private void UpdateRegions()
{
- bool isTracking = m_AugmentedFace.TrackingState == TrackingState.Tracking;
+ bool isTracking = _augmentedFace.TrackingState == TrackingState.Tracking;
if (isTracking)
{
// Update the root transform;
- transform.position = m_AugmentedFace.CenterPose.position;
- transform.rotation = m_AugmentedFace.CenterPose.rotation;
+ transform.position = _augmentedFace.CenterPose.position;
+ transform.rotation = _augmentedFace.CenterPose.rotation;
}
- foreach (AugmentedFaceRegion region in m_RegionGameObjects.Keys)
+ foreach (AugmentedFaceRegion region in _regionGameObjects.Keys)
{
- Transform regionTransform = m_RegionGameObjects[region];
+ Transform regionTransform = _regionGameObjects[region];
regionTransform.gameObject.SetActive(isTracking);
if (isTracking)
{
- Pose regionPose = m_AugmentedFace.GetRegionPose(region);
+ Pose regionPose = _augmentedFace.GetRegionPose(region);
regionTransform.position = regionPose.position;
regionTransform.rotation = regionPose.rotation;
}
diff --git a/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/AugmentedFacesExampleController.cs b/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/AugmentedFacesExampleController.cs
index b072470b..4cb60d4f 100644
--- a/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/AugmentedFacesExampleController.cs
+++ b/Assets/GoogleARCore/Examples/AugmentedFaces/Scripts/AugmentedFacesExampleController.cs
@@ -39,9 +39,9 @@ public class AugmentedFacesExampleController : MonoBehaviour
/// True if the app is in the process of quitting due to an ARCore connection error,
/// otherwise false.
///
- private bool m_IsQuitting = false;
+ private bool _isQuitting = false;
- private List m_TempAugmentedFaces = new List();
+ private List _tempAugmentedFaces = new List();
///
/// The Unity Awake() method.
@@ -58,13 +58,13 @@ public void Awake()
///
public void Update()
{
- _UpdateApplicationLifecycle();
+ UpdateApplicationLifecycle();
// Gets all Augmented Faces.
- Session.GetTrackables(m_TempAugmentedFaces, TrackableQueryFilter.All);
+ Session.GetTrackables(_tempAugmentedFaces, TrackableQueryFilter.All);
// Only allows the screen to sleep when ARCore can't detect a face.
- if (m_TempAugmentedFaces.Count == 0)
+ if (_tempAugmentedFaces.Count == 0)
{
Screen.sleepTimeout = SleepTimeout.SystemSetting;
FaceAttachment.SetActive(false);
@@ -79,7 +79,7 @@ public void Update()
///
/// Check and update the application lifecycle.
///
- private void _UpdateApplicationLifecycle()
+ private void UpdateApplicationLifecycle()
{
// Exit the app when the 'back' button is pressed.
if (Input.GetKey(KeyCode.Escape))
@@ -87,7 +87,7 @@ private void _UpdateApplicationLifecycle()
Application.Quit();
}
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
@@ -96,23 +96,23 @@ private void _UpdateApplicationLifecycle()
// appear.
if (Session.Status == SessionStatus.ErrorPermissionNotGranted)
{
- _ShowAndroidToastMessage("Camera permission is needed to run this application.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ ShowAndroidToastMessage("Camera permission is needed to run this application.");
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
else if (Session.Status.IsError())
{
- _ShowAndroidToastMessage(
+ ShowAndroidToastMessage(
"ARCore encountered a problem connecting. Please start the app again.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
}
///
/// Actually quit the application.
///
- private void _DoQuit()
+ private void DoQuit()
{
Application.Quit();
}
@@ -121,7 +121,7 @@ private void _DoQuit()
/// Show an Android toast message.
///
/// Message string to show in the toast.
- private void _ShowAndroidToastMessage(string message)
+ private void ShowAndroidToastMessage(string message)
{
AndroidJavaClass unityPlayer =
new AndroidJavaClass("com.unity3d.player.UnityPlayer");
diff --git a/Assets/GoogleARCore/Examples/AugmentedImage/Configurations/AugmentedImagesSessionConfig.asset b/Assets/GoogleARCore/Examples/AugmentedImage/Configurations/AugmentedImagesSessionConfig.asset
index a13050f9..0b4adbfb 100644
--- a/Assets/GoogleARCore/Examples/AugmentedImage/Configurations/AugmentedImagesSessionConfig.asset
+++ b/Assets/GoogleARCore/Examples/AugmentedImage/Configurations/AugmentedImagesSessionConfig.asset
@@ -20,3 +20,4 @@ MonoBehaviour:
CameraFocusMode: 1
AugmentedFaceMode: 0
DepthMode: 0
+ InstantPlacementMode: 0
diff --git a/Assets/GoogleARCore/Examples/AugmentedImage/Images/Example Database.asset b/Assets/GoogleARCore/Examples/AugmentedImage/Images/Example Database.asset
index 920f3f03..cb07af04 100644
--- a/Assets/GoogleARCore/Examples/AugmentedImage/Images/Example Database.asset
+++ b/Assets/GoogleARCore/Examples/AugmentedImage/Images/Example Database.asset
@@ -11,7 +11,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ea1208cb4bfc946f7aa1d7b5348cb086, type: 3}
m_Name: Example Database
m_EditorClassIdentifier:
- m_Images:
+ _images:
- Name: Earth
Width: 0
Quality: 100
@@ -62,6 +62,6 @@ MonoBehaviour:
Quality: 100
TextureGUID: dcb12afed0f0a4ed6a26a0b49e5b66cf
LastModifiedTime: 6/14/2019 9:03:42 AM
- m_RawData: 0ac0cb0136a8de42c8db3b42f9fa8043d5f13343fcb927426e924d430bb16d430a30d24291fb1443e8802943560fa342eec7d442b59c2043031a6e43c820a542859c2342f58c2b431b5b514327ecf74271380143333a7f4211628042e95c12435eb22e438ee26243dd9d9942b511f842a83305439e1e4d43fa1e0143f46169430a9a6742fd465c43b03d544211b7e142ee1ce4425e66024315ce0643821c90426eef10432df32b433d15054319ab2d4325cd25437b4fa142166d6643cdc9b042659e01420d195543c7c0f742752b2e432eaa0343bfd50543dab0cf4214e17a43a9ae5642cf801943e8bdb54204480243a9d80d4381f33443ef900343d3b63643d7d6a242885d25435bf4fa42a3f58143202fa14220a4134308e963433ad41943ea8f8542827a634394ee1e4339be2a432208194317166f4392422543504c1142934fe8422dfa3c43865adc4260cafb425cb60c43979af842cbba34434c840c4242513842c6ada9425567e542c8e762431b7c574374951043da790543906f2742e3ab3743e9ef3443f48eda422f7b3243608227431d8fd942eb162d428665b54286816b434af1ab42a0dd1b43be6e2b43771cfd423ed93b436022de42d5a77943aa262542b5be09423e3f414334945d43f5ae0443e6b3804356b61d43a43acc42a326a442142c404310c6cf42455a0843c9e7c54292556d4374ae0d4386145743e9095f43c7323b4279573e43531f1243356da74245eea44291029042346c72434ee6bd4265d288420594944298a10e43201323437ab90b43958a23437e142d42a3a632420ce648430378dc42ac2d7e435c41b642576a3d4265615042b04e11423c119042e798ae421b83214313355243356dba424c1beb42a79f22433c19dc42c42bbb42461cf642522bc942a769be42a2088343d8158a42379cab428adca1420f998e4292155f42f64ebd421c330843b65f2343f0b4e442d84726427c425f42d4fe0a436e5a7842ae68f04288e4664315da1c4300db214326fe52434d3f2142f1d62e43257650436cee3d4236a43d43aae60c4225ef194312a11a43424a1f43c3b84c43a4be8642ec23a24247818042daa99542668f5b4303d81d43197983436dcc004347591f43ddbeae4215716d43c7de3043e0fd9242339ab5420e992e43795b6b438be8c542db340843f8d784439ce74142a1916543f42ead4203220f4289bb094299c72f43699fb842d8053e43fb3c574331c186423f38c642db2149430ba31b424d2bee42337b1b4223ecd342a6b6bf42feeba342f7fc30429e190d43c110df42715f4d426cac5c43da49384317600e43d55b11437c664e4254781f438650a9410a4036438cf8f442a0a66943cfceca42a17a1c431159754327f1044326cd2043c7091f43e32af042e107bb4229fdea42661551438f0106429ded9142da3ee8427dac294395881e426fa1f24285c6fc41edd88543ba7d2043664b71433ceaaf42e5b370439752b04244ccfc42e7179242a80455436cb31f43839e81434a6aa3423330d442fe4dc14238f07b431975b442c5aaa94245806f429b1c6043cc031c434ba13c43f2cf2642bf75f4429db01343be8e7d42dab77242a888d4420684714301e97b43934d8442d6132743d5afae42170d83435917a142ca142443258f5b43ca370a437c035243eaae26439ea2ef4261642943bc10204369753143cd913b435139b54204b71d423abdf7420bc793427be04342d668aa424fa931431548e142553749436c5bce424e4e9e42771d6343d5b04d43aa44f742e3821143cb885243d9804043d0f1914228d82743136e00427c4f1e4381c3b642f5ed2f43e6a794427a87544339c291429c98eb42740f254325216c430b63b242b9782f4397592642dff9324347cfba426f36c84253c602432a408842b9e6954263ae4b438ce2864204a60c439a717842320c0f43763fcf42de7e294299b51543aed4fa42ae9fd442221bea4203dbe142d4c53343e9015843c9650443fcd59942f9ec0443f0b8b642e4b52b43708d4643d8d66b43971f7d4265b81443298f4942b4b78c42c6750a4390d57843d34c0543d3cd5f42a4b20e4345717d43bd5cca425a2df44187ce85428654e442a7163742bfff2343b94fc94261effb4217b167437a8a80432aca2342cb2509431596654209b9b942f091db42ba00e442c88f044359494e434d4fd14237f14643f7c105433528794226c6444312e956435dfb874227a1954259e07343ecf553423389c84231409c42c6b19342a2941543c89c8c4242796143b8b12443de117943ed3a3f4257bc1243347b174346d92d4305e2e742478a9742f845804231403543604d67438c3c4443721910423325bd42caee0343b374ae42e11a05430dc77b431a0a86426863774319a1b14241d7dd42e58e1543a1fa3f43b7366042dbcb53431676e942f6390c43136a3242092461430d5d1b4299aecb4272280843befa48423af965425c805343d16cea42ebf65d425ad6854240ba6e4258b8df4239cdf44295e1fd421e37c042ab03ca42acfb2b4350b2c7428b73324383d40143685f22439568f742e5381843a7713c421833ba42c68c434353d42743bcf4c642d76e3a43142afa428d178c42058ac14217abe74279d8a242504771429c76d8422801ff4227e4c342c24db84274d802433e0c2743f03da642ae44154316d5f84271551d43c25a4c4369fdb54251ec3c4353bc34434bc93b42158ac84265f96442d952ca422ae50643650b2c435dc21a433ea2c74271b0f642125d37438c93cd428f14fd424def934287293d4315407b429233ff422dbd994289583543a3c0a142bd9dd342d7063c43bb708b42b6041f43a31ad742799c41439eb1a042004dd742a6538742e7fd314393805b43a3fd9d427de3fe427734c242f0577943b9442e4351652943b92182424867594307ad2b43c8883343559e8342e93c0843b56b2343c1314d433ee9bc42bd8c28432d6d8142b09ce8423275a04278de124348403e432ddb6943b7869e42910e5143325f0a429bb09e42ffef124359380d430002af4218f1e2420568c642f41d7243f063a6427981814305191d43ba8da24209de3f42c44a6b438afe1743afc3864211b53243d1cbc742a72c0f43174c2e43bbc7474397760543212ffa42ac527943a1d1c2423fa5cd4240572c43e77c7943e1da3b43955b3243aed34a43c9a8814349013d4382b98143b09707431f6c75430be06c43a0a58542d703f64220f14b43a7ff1143304e2143910d90429fbd314399c88e4283673b42bae4f042a08a104367a6db42586cdd426b936d438b5db7422f34864374c6554386790e42cf993943d9800b43dbfb6e4383381e436f75604293191a429dc88c42ac10be424ccc3d4357f9594325c6164319286243ec5b694311a3b142ba111243aff02d43e3e48643e3c683428b36574347762443f50a1e438ee1e1423577f2429c410543c2428243cf3d1c4393c0f9428eb2084201814643cf3a37439bd75f426727a94220751f435fbd6843b2c9f24205474f423cae6b42f193f542ab2d634242678842db90e1427b254a436f415142bdc8404360bf33438526d442ebb8e14200ed0e4370277d42189a5e439cb1d342e58ca142edf55a438fc8b142a85b0a43dfd73643911d8742e169a242a4a073430137c34208d0804249d6914267bb62436f4d9142dc1d8d427add0642aaab01434caedd4283f24e4232080a4341bcb742d0dc114396eb14430f380943cfb45d439764af4224694a43f9b5194337f3114338a17d4368261843475c5b437af83343a9d6fa424db10043117201430a8ca042cbd716436335fb42fe740f426577184272d44143dd4bbe423acc3f4287fac2422fd0314376cfb6429656ff4209eb2c43e69c7c438fc80843ca4af5427c4d474399eb2043520482436af85242a24638434160634387143043615d1b422358344352f36b42da4a1f432a4a3c4398782a42353e3c43ecace7422883bb4106f3db4212f29d42879d3f43cbe2c4419510a942fba391421d10824325091543a0510043e4da724318905a437a664e4235b2524365e5484288eaa042171c0d43ef284f43c3c36942f41cfb42dd24c142a5796443584f20430be84c4310515542f1afed428129ae425f03d8425ba6a84237cd2c43b56bff41e2c5864364ee6442dbdf5f43d55fa2428eed134367e29542da73df42b33015432a944c432cc257426c1fde42792fef422ea2e14224d0444368dc1143f3f8fe415e971c43b4e569425eeaf542172ebd42490204439e433c432f6d7c43f6c1d142eeb5c942d4bb0c43beb05643144c8a424907714324cc634312695b435713fb42d8d0094376fc2043a241774398fe35439f9d08437faac442befbc8428296764297b52442850082420cb53b43250300435f7ee64238d64f42b1600743cbdc6b42a3304343d1ce3143f6cf5142f546a54257a70043201c044309ebf7422fd51443dc212e430bd4d1427aa248438e922c438bb8554335b70643ccd93d42a77ad64293e4bb4272b6e242e1b3d942930cab428eb031433c4cb942c7803e427e3057425ff85643bd51ba427049a242f60952436d42a842b856ed42c01644430f9c5943891082438b781e4216f94642c5c17a428d682d4338ec2d43f72d6943fc31b44243921a427d505443571db24251e22c439c2044435c6b9642628f3d43dcbf9242dc732542ad092d42562fda421e145743fa39774220d29e42ca4d4f429985b0426db41c43681a5143f7f8df42c4307b431bd9b6424763bb42c4000443752967434dd229435cac2942cbe4e5424d3ec1429c72e842dade4943dead47435a421543137b824348e2b34244997f43e0394e43c0ce6a435f9e0f43db2a8a4245aaff4270db5b432bd061428cda6f43f9474e4209352a439b5c384318f364426002364361582943573a3343d6da36435e10164306b76e4337fcd942003b2d434f413743dd947843af574942c80fe342013e29437d242c43b3287f43c3793b43c17b2f431305334370b9f7424ada244354c52e4391e07b429e119d42489f0243ab0d044301730c432dec2643df17374359183c4357e73343f5e74543ce2680438d900c4332ad3743c9890e43d0431c43c9df7f43e9f7e1422a7437437a08834354e82443b27bd641c2b26b42d89da34223ac21439616a642b7f3434235345443d4afd1414aa9d842d170054303432043f5fd8543dd7fcb42765cd442f2ff8d42a62f654332f06343b063e7427eee3c43e4eb1a4357325c43943d904229b9de427f2263424b83044311a407431901f5420813b2429e040242dac5744202b57b4336871d43f1511043ad789e4235771c43eff6ed420105af427c341843da775443db132442cb4faf42d5d80a43929c3343176cfd4229637d4242431943aa9956431e22764304c91f42b4c9ee42defc39438280e742606f61439e993743a31ef0421f905d42174e73436a5a3943c1bc02431b3f5543b384c542cc7c8642cf974b4218e9a94218297443e4f62b43931741439c4b64427ca72843098d71430504b2423ddaec42bde843431ac57842467c2d43faa35d42922b82435b4f2e4293bfbd422172ad42f9d97d42df2a0c43513b114381f85b436e9d2a432aa91543c8b10b428620b642ee0d984251581943ff2bbe428a1c55424a2539434e4f8543c96c064357517143de193042fb3e344340b212438d731c43c4d11243d8e61b43867d6943a026d7420d9f5243ea501143e4f10b43799c244204ec1e433e55224357117c4368282842c4134b435c8a2f439600aa4222a299425ed34843ab4bd4428fa26d438313c342fb862043946eca428e23bb42071b2d43141c614396a50943e66efa4295e84c430bd42343277a814246154a4304ad394240e97d436f6beb4202415e432461f042656bb942cf0b1c43f0d7ab42868e2f4382e56d43336a0f43614d4e43f751ed42e929904292687643dfc77e437997174351f5ec42ce6b9542f95b8043f6465742ba2f4c43339536433fbb66438bfe21432d571242bcd9394322fac9425927264350d1cf4274d27643bea87642da2e8b42e33aee428dd84842fb98d04289545943d60b56432764ca4282d95543692cc942236ae54203320f43186fac4232d0f142d54414438c9d01430d115b4310b3364340d2184208e85e4398229f42b812f74263d77a4351d86543f51e24435cc38742ea7b3d43d1280243e75916431c31d542fac67b439443e74210a22643ea6e1643252213435a11fe427c4a2d43b3d073431fe984432d0940420357844334cf2e426b428742e2495643bc5fe94275d63c4343ff1b43dd2ed642687e85436bec27438fe61143eabe1042359ba442f0f885432e51c04247b3bd427faa4643746a7242c498b841f8231b431e6340434959bc42c8403e432a4661436b197143ad837642888ec742350aee42d9e257438dd06b429c121643775f7042fa013b43703ff942fe5c5043d5a4eb42bd88a042d7e4034205ab2943853d04439dbd4a436a300143a56cc342626b3343c604fb42d7bf1f43c15a27422fc9a642765b5b433860e0429d312d4399202e439fd33f4271ee5c4311c35543ad1c88425a0ea44229b6be422d5c7642bea50a422a19254316dda74264348842ce7f1a43cd1383431bbc1a430a2f564254f5b642141900430708ac424d5943432fbba2422b6e15433b52684317b901434cbb5c428c082243aabec4412b157043e27bd442feea8043c7146442866f494399b07b4227ea5e43e5359442dca4414366df8542ff99c242422e2f438aec1543db99c142da9b0143b2738b4293ded742ac2ae64239709f42ca4d8c4260812742017e3b426bb73243e13d9842486e77422f620143e90ba042315d2143f7028342ccf683425acf9142245f10433b8023434a626643e9a71343bae5cb42e65c8942cce9c542a2c4204243b9094364ea814379c2da4265bf134300a84643726d4843b7e379424c10c04270205f43b2af2a4363772b432d833042361025422a8668424f26ba426765134336c7b5425dfb5e439592e641c1fc064354e3f341e9865e43f74acd42de9c874369c43342db8f954289433643a844814357c04643f2aa25430cba6e4255d90343fc11ca4211be37429d2c0c43c78d62420f6cf5421c8bf04232cc0143364ca5421112c942e0027843737a2343875d88423c2c1d43e7ccb44265c0524331596843d9db8f4285029a4268b4024332be174231b79c42dd712843b7a895426cd3884336c2104267bb7a431b08e7429351fe4248387142bcef7e4380c71a43166bb2427a8cba42e1724743c342ae42b11bf242d6311343aa92414324eeb142a457804287ef2c4330ded44230596c427794a842840c504351eb5743a1b50c43da160b437d8528425e4985439f4b7842f7d53f43e11ec842974e3d435fcabb42821528436c3114437dd998422838494351cd1c434c26ef4222dff6424dd41d43ec0355421dbd6e425a798043cfa85b4352010443b2f3af42dbe8164396c20b43de55cf428a003043639d6d439b1fcc42a43c0743d3ab13435bc06b43e38c4843706b2343aa4dd042c0f0444261821a437d002043a9158143e6e70e437430174207e92e4343da664290135e43de6b314345a03343fb8c3c438084f141208581428ef03f439d35f242e432c54236cb3043f6315843dfa51543d86918431ad782430a5aa842e21181421c1501430a858142bc01fa4276504f43ba23814220faad42222eb742387ef341b12d6f436cc8e0420ced5843c9f3cd4269e7a642c28eda42026f62438f7f7f42d97924420515bf42dbfb9d42f837e6425d734442fd074643b92f754381c50343eab70643b72abc429b07144322cbfd4209c81843f26835421bb4c34259b781431154ba425aac5e42afe6774334a1024280425f4337ca93424232f84292f69e4248ab194357d6e3426207fc4208bc8342a3634a4230829f4201920843d75a1642c3a11d4373f5af42e62b1143dd00ed42b3a85f43d1d9f9423279814332eec54234c448436a3dc842e730df42606972423b618f42237657433bcb8043eaf0ad42c72c64431caad942a92c4d43a95c26437d321d43151299423c1e5643523520421ef2dc4282c76042456257431813b64263355b431448c042905433431122074261215243e1b5b242aba80343e56abf42838afa4216ec2642f9da5e4307d59642534dc84253a7154394005343ddfa5142cad4284235961543f6dce44253fb6542253311432dd043434388dc4244e7094374c8fd4227650e429e9762428a3eed42800a5942fad0c242bff6ed4238bc4443e64385426e125342b9883643d9ecd74276ffe64256a89d427edd42438e27d4429dc22f4309b52e42d5f2a142eddb0843ed88c94203d1164382938342ecb8cf4271b1a44207d3ea4277331b434fe4724234a579426db3f8423ab91543a8c7a642feb76c4310c7f7418f49394398361e4300df27425264e5429ce437433942474320791543c1831a42f7913a43e6bbd742dc9f2042dfd1374345bfe44221bed542db552043dd9f0142bea2ef424e5338425e60114336c2a342f46e3a43f1ea0343b127674240a26143ff7d4c439f283f43eaf95443439f0a43cef94f43e6a389422b4ea142eeabc64271c9f14273e8b842d3db0b43bd03d14259939a42184743432999674315fd1243162927435a6b954299bf15432261cb42b8a53743d6420e439aae9542937d2b4274cb69426ce67a4231ccb542e15c0d432a171f42627df4421cec1a4344112442e28cb14236d2344347b27b43e94112436d7c2f431ecc594346cd2c43df8385437b3c93426d1f2643c2bf20438ae482434e039242c93859435b914d43d3664643c39116434a0ed04228a0bb42e9de4943c67005430457cb42eec18f424067ed42a3a03843d75f224238cf9242ced419439967a842aed90243b6879e4291241b4321dcb542f922034305c30043de8675425378a042f307c64286351b4317ee28434ee63f4392184a42350b1143ec29c142c5ec224346523042ea3eb942a03b6b42dd461843ad7da0427cdb0743f680a342a311e242498dc1425904194309f828430a4d46434dee1a43f3831c423f415042ebced842d5087b42a711a6420d537142e6c141431c7a9e42e494174388e1d8421e2c4043334549426f112143417f3143a9389642782cf342cbc3204364a021438d607b439603b642887b62433e15f842ad862c43db21c142b22202432e264b4242d4e142876d874299d239432c6383422b756e43db9f2c42ae93b342a32715434d152b4324c53742ff165442702ab7423a302743a124b3425025b0423e758a42ed12c0421913f74219585043708e3a43a2763e4338c17d42b86c0643e4d917433449454306f751426b431943eacd1943e6d3f342466ca742c45c6a43cf659942ecf6e142f410c942d5893b4325c90d43e3fd1c43dfe3d94220c52d43c9d24743aa4218438911ec42ede767432867ba426f75fe422da02b437b9bff427e0f2a43d4fb484331c0bc42cbfcef4251d0bb42e0ea53427c7de34294390143a42852422a06234318065b43b591324306295843510b304335d00f435ef75542e54dbe424fe7cd42712a254286b2834334f31843c95c5942fac0ee4288913343c41a254362ae074337fe3b4308e42f43012573436c0c014386f79a42b20dd342bfbf9b42aa58a642065a6c43ea22ce424c3e95420579ac422b829942cdc2ce429ffc104329cfb94272a7ad427efd0143a7a0504269c77f4273e5e242cd9d3643f09bb342c625af42f2dc8f426ee8f8422e326c43a5cc7042bcf4ff426f85f542b24a0b43aed5a142d2a2e642729f27433ede084384a6414369c26d43e6471443e72950436d9b8143296c1e43edc5a5426dab734246ae3c431a4fcf42947bd74265cf594305974f438c009a42b251f54208350743c216404353fa3a427f33bc42f5c20243585e8742c87b4c43be326d43e32e5c43485b81435aa91e4370c79d423999f8425b083443d7e05c425543c942f6375c4240ac2743219de042e2280843a37d08437d0e7b4220f0c542df94bb42dd3f124358370b4348824b4319d63142e7c761435ad60843c9df1e433c126d43e2ebca424947f742f0c47a431250cb42b867814356f70d4385fcfc42b4e85943377f3c43b844e142df8f2f4355fff04230f764432be71b43425a5a439fdb3a4384276d436e8e55433b72b742a6c306439cee17433af9914280aa8a42acc1074389bf6b439687cc4236177c43faef0e43dffa02433819ea4209e9c64296ea844313e79e426a455f436d414f4323fba142bbd6814375be1e439bd38842a8d05f43c754c442b21ccf42f9f0544391dfac42bff4a44201d1df42bf8cf34244de5f4344c46d4254cb2543ecfb60435d54744336a26a42c98c64431c00c3427f9a8c42ff5ae0428ecb24430ccd57431571644286933943eef6f342512691428cc61b430eb72543fd41c442c257f142655f7c4360397842e9d530436767d14246c97743d1e48e422df3fa425e1254431fc096428c310a4327e60543abd0f14234647c43124fb342a6126a439fb51d43c0d83e438ddbc3424f79aa4249073943d7400543f6193c43c79cf842c02db54248410d4328fe824291108e427cc67e43bd7d3442742842436ecaf7421fd1b342700abc42e973ca426b35054320f69542922a4843a09bc8426263ff42ce63ba42bc512543f2b826430aa2a9427896a6427df92443e4a50e437c9e1e43f17910437ab4ef42405dda428ef86b43240408434bdbb54207be6443c90114434cbb1242f3c7c2411a981443e3c4a4421a875b42163ee842a2d52043c34719430d98de4295001a432b05d142de3f6843f624a942b096854301049042346a5343a617a042ee78df42debb4c43e24b0d4379b622436cec3043cfa6f142a32eff410ff30543feb726436689f542ecba304348bfd242c6642a439baa6e431a487942a20c2643ebb7d64233e4df42160b7a4326b791424487cd4250e9574395c65b436a0f034394b7c741f0bca14295b186438c2b3b433d903c42aa9e144263cc1a437d6d8d42533231436d6ea74262f4cd424e4c7043a4666f42771026427d070f4222c037434c4165431ee44042e78147427269bd42fc8a8143a450164335ed2c43466726432cbce94228e43443a488c34288f85b436d23af42b41cef42325aa24283f82f4366c53043266a0d42bd291143e1f59c426b3c0f43810e1042b1fd074368ecc042a198324307f78142022019432a67ae4203b9c2427928ff41bc4e5d431f092b43a388fd427720dd42f4b37a437e22fd42d2390742915ffd42d5a257439a637f420570ef42396d104379e55a4346e9df42c0994843cd73444391061643d4403a4397d49742f895e1422790634390828f4293129b42fa836c42ce7d344385bf8f4293d42843b0c0fb42d5747b42265e4942a4948942502d41432807834220e4d8428d8c6f432dc80043af1ee64191dea6424d7a63435950b442018329436f14e642253a7b434c2e8c42bc68b0429fd4da42fc854f426e3b1a4335f86643caf9eb4221d6eb42fef8054316508342f0ba72436c900243bb9b1a42b8bc46433ce25b420b157d4316910d430f0ae04244b4bb4209281e43d7502743bb5d04431d411b43a2f348434fd09442277e224387b7524355e0c142cfbf8543027714438653074334300043565a384380fc13433d850b43f3181d439ac25543d1f114434b2f0743d2ac5c435367fd42e38a5543fadeef428533b142dc774443272dc4425210f0427c6cc542521ff142eefac542ede3f942d99a0b434085b642efec124276d0404356f5b34297666742e1d3c44293b1ec42ed4fb84227593442ee3e29428d001b43ba341d43570f3643852cce42ed4e2e420b3856429e7714433a6a04434fa9d2420ef32a436357fb4226503a437b8219433cce6e43dd970343e4e44542605f1543eb021a436657d542bbac6b4345f2b342f871dc423276b742cb806342bbb69e42022cb842c5f2e6426fbb25432f1702436159c54270fbb3428348d5429e62fe42df8a2e43bea50643a7e7804346521143a0658842728b5a4378ae40434e183c4333f2a442095907437d965343f3c24a43c97d87429e0d2b430d4b7d435fee9f426a2d804301e0ed42cdd89b42b07ba74275b2a742176727433f8c2f43852700439e035b4339cc1b4379fb33438cc187439d95374359f17c42b99fd6422c27224316cd604348577642bb510243a76a2f4266dc37421a79d142b20f60435e91a742c28d6d42db301b43608bb74299b7da4269742043732d1b43003acd42da292e4395aea0429358eb42912ed5421bff324304c4764353aa1443c38fd242a87d0143195cdb428aca0a4365f155432b32d842858c774336f2bf427eab5b437767e3427eee2d43f17c0e43632fe042b2a10743ccb5b242f1f23c435d463a4388c6e6420777e24235aa3242ff9e3343df0d8542b3903d42cd8e3c42567396427ebc02437bc19c42995144433e8b6642229a14434b0242437c4d25426ef26043cd7ab342fcabbe42a9498d4299b4a2421a0c0d432943cd422597cc429ce8f14275b09c42abc7134379099b4205c627436cc4e1429f1ffc422e5a43431079c242b7ace442f33d614313bee4428f2da042cb6eaa423d3673434fee0443e8454f432f3ac74277e9e5425323f84262c06543684baa41330a4c43d5f978426948c442cc83114340103743ea6e714271a91343183f0c439bd10643c95325423ce85f436590a34251e8c3422b413643acbccd42e125234342e1c042ec6c1f43d1314243b329174375364e42496e1a429dba79435ae02142e51a9e42702a3b43bb2edf42d58b8343aca177432f58e34268bed842532683422295e642153d404374a0e542cbbb31437567c44206fe05436f851243da842642be3f5243762d35438de2284333720c43f9cb37433a46bc42fcb58a421db8f241e8dcbb42ebd92842052b3d43f2b3cb424878e942f5d6b642a7cf0b435f07dd42d3b75b4201e24f43114b9042e15c174316915f42801e5242134b9c4202be7c4248d3a1425eeca342c3a40e422bff54423fa93143d0061f4394dfc5428b290043af39c8424d8e7243b24e1d43a2d831423d353c43bffe4843f8837c42c0c18e423c00844284518b4212c67443937931421a2b3743f52454438b40ac42434a3c43e70d4d4223c8ad4202b9e2422c94af429cbe4543dcfbe1427ec67443f3941e42288c2b43e9176742a3e9594359e461424d9063434c3ed0420fefff426460fd427d073b432823c8427ee99142757f154343fa3942d6239f423b2f0c43e3cf2943c8883b428855d94291b3c34279b89d422c335e43d55972425662af42d65b99423f740c43aa4a2a4382f664439190cc4278cac84248ed894242c2ea42ef25f6429a16c742bad3b4423f60f54243560943bee20d438e9cd5428ea04a4321246e43189e2d4309b3674313670343e54fec425db65542d676224335d50442236e4043bdcf81437822ba42e7173043e5c548431aff36435412034397140f43d8f44f43ad66f942b02ec2420f6aaa420b6410431e10594352f018433d721e42eb8fbf425e6c04431359e04287084c42cf80e7425fc09342110b7642fff2ce42afdbce42e617174292503343aa110743d0fa2843e28c6042a588a84250f3cd427564b742f38145431b646e4282dcdb42792d92429b370243b647814318ac6f4379a99342a0fd1c435bd94b431c2dc1429f866c4355546743b6f2584204a08343b15e884289bb0143f1ed5f426064b442b293274310d8094379326243567540431dd64a42090a6c43d0013e4379f71143b18ab442cf4326428da9224336c8fb42c2b1bf427fbf00438b58cf425ce696424aaf3643ca92d44229d0c2421735f5428a029f426103144317602243ab95fe42e6211743218f5c4309e15743007993427093574280c1cc42d5337643e62e2b43e79baa42c65b36438ab25243b5a72443d54a244362a11243543c814345c7e2427e6907439ebf4442fef4ba425c2e0e43880cad4247f7e942f8ef47420950804304b1ba42ff612343727cae42fba4054322003e43dde398427e2f50421c276e4381524b42275e16438d025e43ac8923437c878542804db542aed1fd42e45b3843ae27f742edd3d14254e84543d30e104362f65e420f22ec42ad80584373c7244389cc23435d072e43acc12f424429a242e6f30b43fe5e0443d23c7543e10f3c43582f4e42490a4543a28a254369611e432dadd242ef5f2743937093420a600843930602432917dd42fc46ac423ce3464215382943354631431dde28436cb8324384ff2d433a1aa04294896543896fa142a10d0f433016e1420035294329f8b9428bc00143a3ea174344aa2a4321e670427e8f6b42680b164370631243c0102b42e2ffd04242b29c42cb12ab42e1c79d4291cba742ffe58742fb59614312a954429b9403432fe2c942df37464388be6642189eef4294014243cb06e6423cb8a342d601884223062743061e9542f40d8143b8f91143bcd18742b5272243131e63430db5ac423dc80143a02178426a4aa2423efd144312b00443354de642dec0644231c838424a2e02438554e4423ac8974274b53e422f566a43843a0d420f8655421d900d43df9e014353b81543917bd642b28b1743453f06437120f1428e1e0f434703a442a0b22e42cc786042b1f46b424fa3dc4243fc2b431b061543bbb3b1426070804379303f424eec3343b2175042903e90422d0f41434710c442b89a21433d3163428b2cd5424d7b9042c7f40a4301a25e43ce9a52430317e1423b251b438398854262c66b43b42c2a43f6831443845cdd4242830943432dd142c090db42586b084352b1cf42974947434329b24235ad2a42d0b031437e58914270472742cd641a436dc2ac42c2f51043de8f7543f2e90b43403881434e44954294bc434336192943fbcff142055d42436086bd428b0ad8426765b742024a1343541cbb42f7cec242594f204351d13f43e0af784352e81e43d274f34290546d43c051fd422932ce423c51bd422f717343585f1943cf9dfb423c305443ab4712438bb10443ca76fd426be0814381c59d42ce0d2543628ff442d057d142f35bc542d7a7064333776f4345050c43e37060432be34e43e83f9442c12666434e1f414346359f42bde46c43d419294395cbfb42cd4fed4268301f434ec1234345fa7943ba47dd424a48aa4298c98b42113dbe42a1b163435c861f4258418443da0de142fd442c428304fd425fcb034302362d431fa158430bd99e42a930534297a50443a8835e43180b1843c8ca09436dab7d4382e70c43444ff5426d9b1b43d04aa542d8ffda42101f64426cd82a433d18854245364c431ad290420a192843b23f784294047d4306387242a5f1024309fa1843e2763a43d5e785429ae5834326f30a434c538443991cd3426f749442a6302943f2806a43f17c2143e8e9d342b4cf0f4323c76f43cb034b424c98c242e9f7274323ff3f436939804248b82e43ef01fe42056f6a43829218439d9ae24238c6d44233b1f542a20b4543a3fd0c438f27c5425e651a43f705c042907303435659e2420908564399b1964266a95f43391da64210f6eb429eda2343b2240e432b5ab142d92dd74263cb6743c5fde342937705433a816243c229784271f05943f5ca354296c75a434d0ce842bc0a43434653a8429c8e81439c4bd642637c344313daff4266f20b4351984343cf897b4333a8b842acb032426dac2a438dd4384344f6c44209ad1943e075af42a586154350d153433c191342e30126432e7b2f434bd9f342dba9f542dd7dd942393e1643a953f841049bab42e148b04265839442c567d84204aaaf429b5c264360941b439c580f421a043843995d97429bbe0f439edad642ebd7274364ddd5422120fa4295afbe42c69d0f43d5799442533aee42c07dcd4223c531434a0cb342079d0443f6f0d24212e42a43fcc553426894324365de194307cc43434910894297036c4260c4da422ed5794350382643fadc0c43fb388443674f3a42f9a9d24204b7c7429393e642705c33434bd8ca42d3967142c1e4d3427280a442ff1fe442722b0c435b3b04435060b342f2ed8242698c5042feb9a542970c0e437c0210425c9d1f43a74ce242ecceca422b12b842b7787f4354190d43effbdf41e8083943f0467542b29718435ee56643f5a92743530dc8421fd39f42e567d741176f474218d8cc4207ff40429b050742d8222c435dee2043068ff742ff001943253b1f43e1e1b042dd14be42c3a3c4421e723c425f308143cd30ea4274857143bdbc574299e88643784b774287d93443eea76743133c8c42c7dd4742be9aef42a567184375193543a0fd4643d192c6423b100c43966a0a437f071542415e0843781be142f1f9744312e8de422529014318309e42799b98429eaff642f61ccf42729ed742315b9f42dca4324356f5074342df1b43f8116b42906fc7425ec30043b511cc42ec104f435d876243c2d23e43811da6423482f04214908d425c69c442ecc0c242cfbcf142a1325d432420814352f3d4423a95ff426a178c425351b0425f7ead4208cabe428e431e431f4f6f43e718264317117643b989ce42c81d1a43c4d116432e44be421cf752423d8f6e439044b0413f1e0143b2031b43b71b3f43373731433591f542130a4042d1c30843c61d314387901843cd7c0a4209672b427757ee41c7cc684327e62a42a9f49d426e361543b1bd2b42f4034a4228f58243ee88d842d73fac42655b8242fb1f46438cc5f74257d5f442deb39742890e7842b6003d42567654438153fd427df95043e9ff36421dfc58439522084322c4da429bf91a43db5ef64260c6db42739134438d32d942d2d14843aa758b4296ff7143a8d60c438b6b8a42289c184377520b43f5a83043108dd242a2be4542cc76cf424c4a964273697b43e28ca24210cedb42c39ca0425b1896421de43a43713140438331db421ff6264392ffd14236cd7b421d069542a13d3c43934640430ebdfb423ce5f34218e3cb42255ac842e2957743f5de30432c27fb423a3192422fba25430cea4843f73d0a434af285424e5711433f16124301c93643ee1291429eae5d4359060f423fb92b43b8c50c430c74e2429d203643a3d38f42791b204320be0043e5b69a420b37314398da6d4380c004432f6f7b432b8c5243c5942a428b8e0443854fdf42e5baca426c228f425901bb425d54b442e13efd42fc8c004362a46d43e8b891424b2a8b4215efb742ff81eb42af90de425620664304058c423be4e542f23a17425f1aa8429668e54294154a43beb005432d158343126a8642d6bf6e4391ad6e424b1faf4285ec5b435b8797429821e642c0dea44248ec80421411c542d566254320072143ccfa9042f4bd0643590375437c4d03439930a042905df64258bbae42c69dc4428a2c0a4343b790428a196042c030d8422ef146425eb32f43ce0f8b4200514a430f60ee427650bc4211610b4390e54c432be7d742cb2e354304e94043c46d8f420c7c5e427cdf5f43c80b2143feb16142e50fe342f969714385d9e942d6fa16430a1d1743c0454643c7ff4142bd5883436b0e8d42a6d6624307ad0243b96f1843a98002434ed66d43a9862742a1734743f8d1d842728515430f4c71430bd94b43d4690f42a2eebe424eb97c423cc01a43bf4b15432a1f0b4383f4e542c22eb942afa4274321e52e42ca86014334cd08436bca5743b8c8244383ad0643e13bbc4295c92c43c9cb2c4213eb1343d6e467434912d042504f89426c520443c97d8442a006c442bc4b04421743cd42a6efcd42cd2b86423cf22843aaaa5b42d97c85421ffa2643bb86e741ea3a6e4276de75430cbe0043e6537b43a689d84224c229432a2f074377394d43b9f37842f76e3b429313ac42dd1e2f4307ac1f42492200439a044543d7fe0143ee1a4843eb044a4381d5ed4210e03943a1a16443bc5b6643324fc34209481d42325fb0423cb404432f170f43028bfe4289084642aa394a43f5afe24262f5f4422e4c8243db06b442d2a39442bec73443b0a352425991d842a612f142c94ac642fe92a64266875f43b144b642a45c59439c24df426b5453430e0b53429d112143f224a94265b1a542b8a756420c910c43ca25644384fa4b43f835ae427d65e24262fdae4296da354339b53342025a3c43d54118435f9ba942442995425df38e4203d00d43e7e87b4340e85c42f59cbd425ab48f4243a2f042d3489342c15b1743888011433d512c43eddc31423294af42f60c92423438424367d8654271434243d08a174282fbcc42fc4fff42e5a963427e27c4428ff2364355a6654256182042fbd3aa42f122984226c25b4321c37c42c37feb423e480b435fdb6d427d315f43e2a4d542018e24430f824142b92d74437a5b91422b49d0429ecbae42109bd842eef3194307179242a2b157438524ea425eca19439fa30e43ba86084319e10843625a0843ef020643261c26438a8bf9423e58ac424b400d434394ae421c6c75435b3d40424f1d25434de1d242fca1ab42fc306f4290e85c43fa3fd0422bf9cb4244fc94425869644392161343d78123434670d442de5473434ddeb942a67b464308ef03433e3969430e069d4296180043d990d242a9af9e4209e90d43a2a21643f48fb042adb7034330432942f63bec420dd5ce4259a746436b12d0429d9c7343ee9daf4286225b43f1b26e4304be3442b2faba4299aa6042a6639a4219d183432e6e8a42d879bc421ab46243f7705a4367d5f742ae21f8421200ee421997cc4274a784432bcd5e42ef1a9f42da0cfc42f97b3e42e90c4e43610ac642df6ebf42fd810043c4310a43019dc3429113ea423ee2de429bc38a4226eecd42d53d3743e7ce0643f03c2343563378436c47d742a4c93743d0a42a424033014368c1b1420b565a430093244370d44743f83cfc423b91dd42593c17431f3abb4292612b43b347ba42ae3aea42c39736432ac510439c7e39433582f942be4e8043a377824377809d42ac1b634293ebf9420ef05f42a11a3b437c3c7f42586a0f43d795cc41c64f37432174c34206628e422644b742dc9a80421e9a1d4328bdb6424acc6e432c3b7b42eda7664339f43043e2c7374361136442e35e37430e3f6042012f27432b58fb42465b5643479777420841b24272a95a43784a5b43de9d874230ea4743b4d23243e87ffe42b89c6f42c4843a437bba064259532c432e47f14273191143649b5842e9441b43eeeda842625af5413dcb4543c5d89a4231060443a55dee428f1b7543c43dbc428e2dbd42d377134359c054437a863d4209fec742e4f08e427df9aa42a2be5f42cfada842f9bc41433b750043dc17db42a6c89942fee0db42576bcb422a8bc842dc6e5b433170bc4216fc07430ab450431e79864221b6df4259331f43ee58bf4244d8e84294256d4379178042936d3543cf97124350ca2343d6ea8d42c9202e43ac33bc426b39484369f52842ce9e8143f4d81f435c56d9413b78184227e0764340b388425db816438c84d14267650f43141645426ef93b4229f30a43dc211c434898d442422167431d7cc842c8c5c74216512d433009a84296f58d42f70fbb42df5c8642365f3843cbbf2543a08e0342283710439b7ff74277052542bb64df422d27ea42f9296f420a0ae14247814c426f6b98428b7b864214a7d94287a84243886d1943e751ad4210a7ad429acdc042961d144300f45e42da6d0843cf7080422cf9bf42a70b9842db67da42c8ea3d432a93d6429738b642d13907431d056943d153664375427d436f063942dcec64436e0fb6429e5b9742f8911243f06080426b8ef342ecac1c43d4de0343bb5d6a43b8d1e7428c9635437fd381426535804250771043a7a55443733d01423d103243ba1fc0421b415342d30bd8421060764346cc744297dc5843077f454399e10b43dd0b154344f580432fe21d43e2223342b841b042618c9c42ddec154328b41d43bd61a442c0c2ff42d1e23d4371894b433fcc2543b227704367520b431f3c45438f66ee42f94c0d4243230443018e914207fa344206f9234352e2c24253ad394305541643f4d8fe411c0f5043b12d3e433111424371a40d4389e219438c6c5c4382390e43637d8442eda4ea42fcba544390976b42e75f6742bd6e434326bf5043304a3642ee2eba42a05621438a4bff42c1747c421ec03d43bfed8642168a2b434a69b0425de8404361305543c6c1ea426c285b437d8c8143392b29432a24b3426061a24203ca3042d33bc142bd74cf42d2bf7642c3f2974272c3ae4254171e43c1b98f4262aeeb42ae410243f330794340012943a33e13436988214264014243a725534343824a43869d2643eee508437a023c429cb86743abe5d642386dfe42f7fff6428bd74743e8624842694f7443c58be04271abef4250696a4355744742ac14174389e25143d20b0943132de54212730b4358f13943472ea242e1ae7e428a46b242b5c75d42a67e104238ce4c43b93efd4225913e437cb621431578f24259296543e206f742b6a1964219af1f439cf4c1422716e5421661a942ffd72f4305e8d242d5e30d43dc5307437c4d1f435549ca422e884443ad1fa7420b52eb42f8cafa424d9a534350f826430a977a4385f6d5425aed424309621a43209d06433f904343374102432ae4c44277dad6420d37e54289bf214376ca8a422c74c4420997d6429227cf421aaea142b9ecf042afa48342fed4814346ab2743a4132d43c3ad3443326d34437056b9427bd1a74210d25a4208c8bc42aa9c2143190f8543ad760743acbc27433c657542d8adbe4253d3804272bfdd4228681f436fde204379649342e5dbab42fe40a742628ddc42b9ebdd42ff0402432533fa42b24f20426dcb1642a9388342e3c43e426f2bc742216ec3425c84c142e802da42c698cd42b9c6d84299e35c430f175c4261fd0d4385549642bfbf5c4358b78442edeb2f43aba3d0421b6d1943d5eab2425571ae4248023243cfe60f434e11f842454854430937ce423e3c7343b7b71e43b1222a42a6032a43bcbe0e42c4928d42e383cf4218a41143054a8d423c4e154321224b4365c61f43f566254344230d4319794943a2d41f436e5c064357eece414b961f4335ad28432daf3543e873c742c9de71436aca2e43c15a8043aa8013428c00f34250310e4394090b439df05d4371505f43e8f91343793a2942785cdc421d52bd420c4b8642fa0f36437ff5424264e43d43303ed04223fe47433bae0442d8698742b5950d4324b14043cd1ef542d1200543a965434392e61c43e12dc54289cd4b43e01318431a405a42a85b8c42d52f1a434cb368439488c242c12d1d4328d9604386f107437ba91e434be30e43be8629420f16d842b94e0d43b12145432dc7ec4215177a43ff9d3c4388c9e942ca8c3c43218cea42e8ecef42e7ed5043ea547642b6373d4286c2214363901943a5291e43ee157d431c851f43d798dc42c1dfcc426c764843315ba8422e21ec4123aeb742040d5a4339a78e4217b6d4424501ab4215be1b430afac942c5640843980d824214c42e43e8933f43d1fad742da87c1426bac3e4315014d4330679142de2717435dbc1f4252e79c4289ac474397bd4f432e7c94427a5f40435b34d6420f8e5f4293344543f1435e437d4b8642665d1d43f579464392125642b822b24254183b43e3715f435eab34437f5e664325f43d4282f71c4385f03943546685422cac04430f64b042cab41b43d16d4043f0a83043249af4426418174381ab44433a45eb42fddf23430ebe6f429e1db142ea7e2342c04ade421f343b43ccee854295afcf4292f299424419194312a0574213a8c84249e9a742de0ded42dcfaec4255482643e01edc42d7f969434b24f242f95d4243f8ff9a424b42fe427ce9f3422f00924202aa5a4349ab2043b5d8fe428bb7444311df5b422c52a842891764433b44084371835343b4bc074397ff51433f9c5542f1378243185f1d42d450ee4281d63a43a92554439366564309db334368d3ee4290ef5c43d94d7943066e0643990661432173554276ef83428454ea421107404311c4dd427a3bbe425f081643f5fb4143630d2243ccc609432293fb425fedbb42081a7c43eefc4f43d00abe42251bdc42952529426ee851432004c142a89e8642edcec942a4b2164316c60a4395d1af424b6df742f70dfd428d3bb1428b72b14241a41e439e0101437c33f542912e2f4337d22743c00cd14273552b43b41ad842b9ed2743bee71d4353c4e9423d1817434b70b442e8cd50424685d542b3fa3c4349bd07438ba7274339d9044380f55043cd2c1e43a5e06a434124cb4225a0fd424093be42793c3c43e21bec42ad4036431d5a1f430794df422819674370c7614373dff542f8e78143b2ad0443581b724372770b429b641443faab0043ea153c431eb42c436e934a43218e9f4292e83643c3448242040b43435ffa2843703b6943b62e6b43cb28db4271109a427df245435ff48142ca978b4275d58f424b1814425581094393565543c59b674238ea4c43365189421154214358e87043e5ae39432f3b4a42332c5c42b21a09433636164325d02243500f1e43156d8443af1f4f43604ddc42c475a842e968fc423c8deb4228c0674301816943f21f1b42fc5bd542d3e3b242fae13143bfe4f242e97ea64259fdae42da274a43b7afe64261531343a2ff214365963443b53285423c071e43f11b5a43bbe868439dc9e1428a7ee44243ee1a43b515c342d393b742d9d1ee42211a2943fae4544364a39e42b20f3a431e8de5426b4a0d43d72c7943b41c4543db2a52427789c342131a534300c53343a16a704218be5f430d73614293f60d4315503143bd862a437dddd842bf1b28439aa94642bba62a438c494d43bda1454302078143c5261d43ad951b432d19854351627c426cb91b437927424271808d429bead8424d415d420e786743282c8143cc181543151381437e621543de1155425175df42dc1553429439a34264a82d43bcdaa34204cb3843efb2274313cc8243336abe42d480934294022342c2dda542387c03434e34eb42820ca742b8b6274301d43443000d0e439bd4ba423dd12042c3ab034371b00f43c349b242fd052243939fd642dc68984241402c4341f825437262394371044143bd5ac842af566c42774f2a43be177e427cde4e43c4fd0443ca4b0243dc6c5d4378d6ce42f4ccd642c60fc942b013a7420543c942725b8f42b93a0043174b40434e1bbf42f00f3543931417434969f14285730b43d84749423fff41435f8753426c3ad142d533ab420c31de42d0b6cb4240269e4203c201437cfc0e439671544345a2da429558c84202881e43beaebd42dd3a394317643a43f132a342a6febc42c8763743f68fad42126cf342bc220442348520433b073343113d7642f1c6324323c57442b14656435898bf42843959434ecf55434295a742f9dbc742570fed42f309a7425c8a0f43d7d2bf42fcb00543e1d2b142eb6670437e7626421510ac42275193429b353b439647be4209df3043fa25e9423ca6f3423e809d42ea750442e100eb420ff11843984d3d427b38ae424a224343deae85424833144231866943901cf942b68b2b42d13a0b43eab51643a41e59439f5a1843ef310143c679ec42697c174310e70e4348ff98427bcf09423e3f0243d9053a424378a142f04222430daf0842f862724348c396422cf230437356a442c5f446434ad5324214a08542dee60443ad701b4382bbf542ed37c442ab4218439aef494312487042061c2a42aa64814355fb6b42b251144327e9d242fe6286420c2d4a430368b742d916c642e948b84218ff7843b50c2243b3ea46433703bb426b964042a92f7943c44ef74220366e426dfefc42b1d18242686d3143b67ae04212feb842469b75425b75a0427136df42132d384349d5324304608142dbb47843bb264843404e79420fb08443675fb042335a1143c7a2c142f5c01f4328bd2e4285583a43f6f2e142762bf2420a82ad42d47361432b7a47422c10e742db3dfa4250fb4f4321843043926f804320f5684201f6dc42e1e7064214e2db4299b99842490e02432dc61b43ba236d42de7acd42ea6fd74241502a4375dc7b4394d65343d637734271a5e142614d9b417cbec9425b7a2f42c97dce41bbb33b430fa93c42ebe30b43e5512c42a14008425d33e84256c59342ee7a9c42d99baf42d4e05a437a385e422f0d57425c3e644309322443227c22435347ee420b02744284423643b9127842d4deea427e3752434b2eb142e3ba8b4286d9ef4272ffa442ff1a11439a44b0422711c942346c83434a6bb642cddd87424f2cd14232a14c430a6c0743e370214335a50d42649c2643e84ee0425a254243bc29ae420b4303432ab20d431815d342ab8d8d42f19d06438e57034256419d4224e3274270580843986a0443eb418f424b871a4348b1284360d17343fdd01a43fcff0b43ba6b304355b1e34280bdb442c99063439d3c474261fe9242cb243b43ef78d842c570ca42e6cfc44270ad1843c1ef98429f9f2c43fa16e842726ffc425752bd42d91633434f16614369931843ca254143fbff3142b1bbcb427354c042212037428a9e1843cd85d242c5533843275301420623d4428e9a9f429a9e3b423c9f83434fe601434a7329431d3ba84226d1b34267b44a431d830c42b1b514439764bf42bab6f8421f506a43862b9742e970af42c71b75422525424397328143b8148742ea35d542365dda42c9fa6d42e604df4289b09442d26bd0428b1ffe424c1b2b43bd036543c8359d42e76d1c433784a442b32c4542301ee642c361e84277836442dad6d042a8e23642c108e44285ef4743878cc2423de75843c1aec3427060a642433da8423e29a3422ab27e434676f242d5e83b43cdf3b34254c933431fb7c742cefaf541801419435c905b4385bae042f6e5334380ce9542e9aa6642545cd2423e067543e93d9142ded13143f9284b42461d5143590cd2420d392543135f474396cb09435761814310758b42cb824f4345fab242cc671143b11c5d438f4142424ee8cb42e7738d424259eb422c0f194364120743950c3443904d74424fdc0e431eacab424596ca429f972943597f5b420f261b43803b574327120b4306221e43f4de4f4353bda342acff1443f02db9426cb21b427be7c24285762b431b5b9e42cbfe1e43b6ff2043b06b0743f1a009436daa4b43e5244843f53cf5426cc4f54239a982434bc73a42b2581f43abd8c642829b1f43463fdd42ba69304311617843d3f97c426ffd0843631ba242e4a3b44203469042b672d94219fc5243f6c81043832f8243efb39a42da726f438d561342fe327f42f96d0242a0a55043d3f85f43fb8f7242c0b7cb422fd90443e1b738423b028543c69ec942e4f8574218289a421ff80b43681b5743df175443a18e8e42731584428fffaf4246cfa9420a8cb542f9612542f6c84a432cee1543d39aaa42b4ff47430a782543453c2943e270be4264ef00430def8442125a2642eb9bb242cba27c437e58ae42e9f47a4312cac142ca615b43bbf21c434d0675438a6ee64213a44e4366e6b742d0eb51433e9ac442562fc6426050cf427c6f0243536ac24230fa4343d3614242c6518443b39b0e431f8b30433aee5f4281704d43776b27428efb18439fb37b4392881e43abf31542daef2e43d3935c4254dcfd42064a47420b2b1a43a99d2f43d59b6a42b1c60843cad6054360ff7d426f975e432aee96423346c6426d9ead429ed50c43a40f0d423ff24a4346e852429ee8e0429ce95b43168dd5424e9372427be230438fb60943b2b62a427f8fcf4297b6f542cfaf0d43f7cb93422650e7424e623743bf882e4350632942cb13eb42a2baf042aeeb0d4357233b4337fcbd425c00174363cb8d42f4ba27436b58a24201fb0842dfe51a43c04367436dbdff42ab120442c2b6d142a7d29d4225a1a34208ac814397a775424c107843a18d9e42b64a314372c5074301400f435522e042c4af6d433b6080429d338543054991428f695f437e8d7d4297e39b426228884293e13a43b10cb042e6741943f21a1a430dcc6b4395f883424b444f42260f4b435b7231435cce4043acf1ce422f2b394300317243a623144326ad6643fe405e42dd23ab423bb4bd42baee35439c0720433fd71a4236100643824fa0423c900443cb550343816b9c426c371943b8cf81420518bf4284236c42a11b5043cdf739436357a94233268c428c23ed429fe5a442d0fc9c428e78dc42ffc08442e4efad424cd58a428772ef42bc027042b4771a42fa90bb42fcbf9542b4b0e142a2cca642482079431461884211f27543ad349a42d887af4273748b42393ae3424a37ba42b2e65043f41db7427e0938429ec31943022a004317a2194362a72443788a23433c29d34241ccff42e03e16435f5ba942c9f8aa42ac834e425f3948433537d042150653433f1faf4213c7b142b5eef842b8c11843005d03434ee66b4381e2384360b33f42c0581043a7b3524399fccd4277155c4269f9de420454434264572c4290ce11434fd5cf419de41343bbd2744213211343ac68cc42a217cf42d6559b424643d142214d6443f28e78433332d542a336bb4214ae4d431902f742552eaa42b3861d4345dcc542eaf81d43aee2c54287e33443efa25143745bcd4215ac81436847b342b39cfd421481b0420826a84291c10b431d838f424bad204394544e421ac4e842c3fcca4280e8ba42cc6b354395e7bd4279919942cee7814209eaa04223d5b1429bcead4253386942b8323d42de54594254720843a08d8e4256dace4239251a43fceb0e4329a0ab428b1a9e42dd63274274565b4255192c43edc6c84273167d43edefe042209e46431455714251502b4334dad242efca8243e0fdae4228b325435c28ac42d66a3e4328a9a9422cd16e43ba31fa429bf0d242abeedb42b1635b430a3f444344df674254a4a4422087734338600e43be480343d4eade425b191342e2a44c42dde21443f9d45343d38240424d7d04436a47294340918442043451437c6926431e62fb41b107034308773f42fc8c7d42ba2e6343a4f18c422b7b15430dcab642eaccd842477fc142c6b1f942a8882543edac80438908f542a256134398ed10430da34f42181787426a3a73439f0fb342208e1d43e7b121436c0f694309c7e44259ed02432477f5421908e242402eb542803f2e423edeaf42ba2b9942182d9a42e1153443fb48084355cf4143b5798b42aa7f93426ab68f42a3b7a34287cd3e43f2c6cc422b763943a9923f43a383a942fb36f6427a673443d69694424c758842331a0d42b3835d428aef3043b3cb4d437089db42e9da28430bd7394354a96d425c023a43cb596e42d40c7b4389a3a24265cff842136d9f425ac16f42a8829e424be7c542bb746743ef970a428329f042d5c86543898c8142d10a3642584a4643a50136425a374643a910664351ed214326a05b43400c22424ad47542dfce1a43e028a8426d1adc42c2d65443e27dab4246f20f43f411654289bc6343e1ec5d42528f84420d40ad42c0f00043306749438819f2423feb1b435d6e29434cc5d742983326433bd9de4295a41b42b2f360420400e942105be942471e624276b60f437ccd5643bd8e9342d26f1443b78ec342380b7f435fcd2b4204f2a34205a9c642c7fb4b430f7a9842f87b9c4216739842383a7143bfcfc14251b98c42f0ffb8428e653a43d0d2a142d4a9174392530d42f610874222097942122c1c42b06c4543e35c3e437126a4424cb4ae42c0909a42ad090843b69cfa42d6967b42001b1e430d3cb84298671743fc6dd142b5311b43b818f242ee9bca42d1a906431fe7d242aafb2c43f0cedd423b391843012f654289856943bea458429335174358b97942e6ee77439f710743363583437bece9421e70f9420a69db42c0521543899035427394f74251988043a1da024342cc2d42f08607433b9ba542a8c15d436b28b841ab311043de2b774382209a42740faa42b0088842bfcb8e425e423843332661429abe1a420135dd42c02a3443c162bf42502b594351eead42ffc7ed4201795e42183f2c420b372a4386308343bc451442964a6f421256434380674943d20e16437b909c4214f1de4240ee0543b2e066420068114325d42f42ae013042c4fb3843c5a6d741a375d242ef543e43920fa8421fb8af420f4c7b43a13c7943813cf042e8c37543f313df42fed125431fb4a34209bb25438eaecd426f41e542497e1343483e2742d2743b4337fd9f4288072f43ac337f42464f8e42ea8c1b43bdd3a742edda29439f44a442521b0943a1190743c5bedf42b5265f43d0081b43b7721f43c8378042a7328d421efa2843c0b6bc420206fe42cdd01343558d9842e51d6e4350120043fada9a42f9280543ee081243fa322143e5465e43aeb326434f0bbd42eb9b1a438a4be84284eced42c2cd7543f6411d439b0c9942a24b8e42b6e35742887d0643eacd1343d45d5f43b3e04743711ee642fea21c4359d92d438dda15437fd71043b5d82c43eaca40437f3d8e421a8daa42a2c74143419e3c428dd974422de10b43b43d97422c5d8943b563d842c720b74245d9a6428e196743cc4a03435146fb428806be42a8842043f94cdd42f00c614336d5744287af3843bc0166424576f4424694da42f1a37a434f31e34290f7dd421b70fe42e9952143eb5a1243f6fb5e43cd15024382ed1743c5f58b42c974c242000b1142b80dba421a770143902c064375ed8a42e883f3422e82de420d772d43a9eda242ea0f6b424cc58542074e86420f99e84268128d42aac54b42ea558d42bed24642023b0b431bef1243db8b234305393d43b575134377ff1c432210e042629e83439507d74233416143c7377343f16d1643e1602143c4d5004214778343d7861f43e1ce4643b2019c421ce93f4305fe824215f4ed42c5bdec42713a6442b74556429d109c42e8474e431027d842d0f047421115b642afc1e042ca845143c6a5dd42821c2d437b50ee416404ee428ca05c42845a83425067de42ee9236439c61a942ea6fea42a0d50f4243a80443582e274375bf5143180c0043d3a38a43c32711432f00f1428cf7b542aae46242e0704243c1372842ef65494235222743ac3dbe42bc7ed04284b37d4370891f435c7d4343f8e09d420314eb42e1d68443acbb4142ad476143e5eb5f4275520343201d7f435902bf42b42a5743f52d81431c613d42b00c4743d0b32f43ae251243ae7cda426dbd084366984b4286b575432761a54253da1a43135d4b42ef155743727d234380067e43da343f42b3b8e7426f952542434a0b420e9b51427232774373bd074399425e430fafef424424ff41e505454344e6524232f3d44225730143177ca642143e7b43029418426c161b4235760143c14a2d43ab94d642661b264366c8b842f4f582436e7d2c43cbdf714348e481424a83b1426360be42c04e464386e7f542b0536243e617d942c94b12430973d8421f159142a8505d439f2f2443182b004376c8a342b7ff87438a1151435cb98342693451439adb8442381758432d4c36435c4e32439808dc42722fe342fb041743ee902542127f4b428e7e0543736ae7425b70e942faa3b842dd04fb42e971f14221e59c420f5cdc428612d142d928a74232796c43aef8eb425ba05943734e9942f4bce642f2afc242716b0743d4aba3420c192a43ca927d4247cb4843bb99ca428fd53e43efa75042f6ca404375264e43f9b8384234933843751f2243f4e503433d795c430dab3e421f99ab429b716543843b144378dd3043060c8f42608d07438abc774352c2cf424ca615426ebe154326e1e34231ed804366928e42c3a7ac42f2cd534220e56d423bf82b431fe909434eea5c43530bc5428bbecb4291e3de42775f9642c6c2194388a75f4333c074422332e54282457543c31a7c4319fff742df235443bd62e64280f2d14291ca8542e84683431c006542ef235643553699425d003542dba97342ed161b43200d2b42fc14a3421e988742f4b70a43b58ff242251a97429e6f2e434323924289abb74227ff2743cb7f8a432d405743e5a99d422f1d3f43e5050f437dfdc142cb8435426d863f438fd2684331d263436a67f542922e0c43984bd4424b216942cc38f9421d993b432c8e114239330343664cb242ac9a8443cd150e42b8b61f43e26d0b42f4024043c7a01143ebd33643d54f2c43c9f78142a2883d43374309431b91bf421df2ba4270688d42aab31343fbb94a43e5d3924244346442b8679842238a5d42a7c6c3428686b942105bad42677d35434abd3542b39e43437655204390291642c2abb4423d35fc42ee9a23434578b64285ee864339fb09432fae0043b976b84200283643dd66e742827fdd427fe1d342cde905433355554209e72643198b0043a8e91a43c41ce842e8b42143461015439ccd6443c0d03b42ccf78343cc39ad425a28074388014642f93686437637d542e71c8142a2ce6643ca2133438d7722438f262e438a3073425ab068428d998142019951435dfe1943a6aba2426fcf38431c876a43d6442b43cbfa174321dd5142f7078642820bf642e14625427173d942e3341143d615f24248a96f430517f5425293f142cf6b4243de03fa42cbfd1e431e2f2043599ebf427132c6421aa0174355fa81432afa094331c1f142a400d3419c237a436023f8427e0aa342b3205343809dc84291cbfe424e4416426198f9424c372d439abee042415b4242db210d43bf19bb422f9eb0425cafd5426651c042ce1e384373ccfd419dde3943ae31014394610a42e6364a43a03d344330b6044360fa284359c7fd42b4056d4376356543d84d234307836c422b143943a8b3654269a68443ef98024303368f4279536043a56d84426931854238f1524347311343522a1f43b0def842bec2154231231f43eed72c4310d452432a7d8b43f82a1e4386482043a42ad542216497423ea1ca42124d0543d1e0a942768d80431fe7d3424415764399c4ef4230b6454306632943e6b544436b8e2943049a1343db3915437e03b7424c6d3e43b26c424227bae542b95169429fed354318732343197ea942b6cfdf427836204381069242afc24e4317c56e42d0d71643447a094349d4504396034e430b179a4224494e43acc99742abd00643d099fe42f24ee342b2b1ba4252f1224362a43743f66e354375d9a042db1ef6420560194332def4429c360f4354934243347b884206868342ae690a4399b56f425a68ca42c7e73f4376873643b3e11143b25a0943de254a43084e3743ec084f435b73a542f85024425bb98f4280416b428fe82043d9e8644361fc5c42c362814244d2e242eefb2f43d28ee84238a5294231220843f2f33243aee12c43c045b0422cf86243c0ac4b432f12ad427086f642e843cf42405a23432695ae4217df4643b1ece642214d9442481d1743dd2fe2424f292842ac169b429c29d04242fb224339b7ed4237f51b4335bc5e43c5c20e43886ef041f32b42430d70974235c608437ac58942f50df2424094244287d863428db90f43a9bdf942bf11294382327442c6e50e427679da425bc243433e01ec42435c7242a8612a43560d68431fd00443146830435c8e5b43f0146f430c5c53422580dd424eac7142b988f2422f6b674362ca164369239a42014b0743c89dfd427bb4b8426a9543420981ba42f8f314437f531c4282c75e43175acc42788171432a04ef429e1e21437c2b2242e822ca427dafab4242436243e3fee5429b140b43d9239c42ef62fa42ad6cad420c11654361a9e4425fa10d43a32dc842a17d0b430ab470421a363d423464a042d15826433478f542f3610743d845734312cf7e43a43c1642f42aa842fa1d8c42ef5d8e4219086f43f7bb80436f40e9422a8e9c42e4f8ef42d126d44282335043681a6b43c587f542ac12494327a60b431c8c3043ee4c12438035a842bfb1a84292fab542e71d6b439c2ff6426058fb429bb35343ff53584201bff642dae67b43476c1f43c4cb4342e8310b4301432843aae44e43df21ce42d5ca85433d096e4271292d43572e054298292f43d3cb9842ebfd77435244ee429bf802439fd1b54260bc10432b54ac42e1a63e432dab0c420e99834206436042424481437cb48942c2fd664380c8fe42c97c0043aabd64420d9ee34240971343ec69c04264b15543c09e694366217b4277a76943ab6c9b42a3fc7c439b24ce428fcf40439527c942c534fc4204550843a8131543ec8224435e2061439ed106438ba01f4360cc0843d4326e43ce7c7742d572d3428f020d427742ef42d8303c4205b3b442d6684a42e04bcb42398b71435fef8e42aa55a4420900654244c8f542638a1c437b237543609214430f166b436443e542e58f5243e0fea942c5e71c43333021421099a74270279f42055aa142cf587e4295cda1424787f1424a742f4324d78542b1e5884267e83c4326a623430f187c4278fbf542230f2943292a3f43870d4e43ac76fc42ef8d1f430b9e04434d99394220a9f442dd08104317c7cc4212040943bffc1a43f88a6f43963da04257226943f79e43425e6ed24220ab5d424469594313352e421546244308f8dc426c240943727efc42ee4fe242a89a304362846e43155e8d420ce31e4349841c438736064334825b422debc842a1ca524364a5a642a2191842642ddd42bd45ba426f9c1f43788c05437b3832430a235943ef020e4317e3cc421f9f71438dbd054370dd53437941d742c4a828434cfa4e4366a85d42abea3842583a0243f6b46d43e5f7db427296144359e6044387a8bd4236b3064238020543599c2a4370605942965667426358204382637c420e7c23432176054384866b431d050f43689b464234b15643f8de0a4381b837425ccb7e43f7bcee4287904442bf7a06436256a94295bae442563a7343d76e684242070043446c07437189bc420e5a6042f4b456430d8a1e439b3646429a3c4d439515aa4249fa75433af8fd42fe0b0a439f6f2e42e1618b42ab4c67435c6b2a43add3544288f9da42387787425ad4c042a44b9a427e094142290b2543f9563a43abf41542a6f3a242700f0143e200b442700d5642be4aef427c8d76426c385543944824432ea628431b729e42fea09c42920c1243c7006f43e3fa8a42468493420c278d420bbc95426a580743cb726443a644c042cbb4704317f9cd426844ee42b712ee427b950e430e368742208e3c433d682b43decb1843927a5942b51c49430bc0a4421ffead424a2ad4420a4a6b430a0109431c1333423af79242e5a40243fd220942473fc242ceddc442e741104259f227432b169342f73dfa422b281142f82b77423f522243953f1742e0ad244385962c430363954234e662432158cf425eaf4343e8e15742fa9002433feb0643db598e426aae2b42446009420cdabd4205998a42b3c9e4426d916b43e7729b42b1079b42df8197425cb72243c527214311c60a43f84583428b19d74265dc3b436c0522435e0e57425400aa42573a524357cb6c42627c1943d7d43743a43233433d732f4299682043596a9642b4948c42421fd8429c5c0a43e388df425aac7b4339e7ac42c1283143e6db4343ac965a43acced542fb165542673ce041cd079b429b11f842f8922f43c9a4344304aa4c4384db2b43273a45433bbc8f428f9d6243686362423053f54239fef5427867934284000f4307845443b3df8d4255510143fce1e642c1d42d4331ae8043222db94215ab30437cfd04434a90334337fc4b4338eda642584f90427ea70643e47438434f451643537a70430813464365f1f342170b1443f1e7b3420c819242a288254365e040430b846e4387c6a14230d837434bc72b4269c3b7429be8474348ef2c4381ff9a4285001e43073dc4427039214367d6b54254fcc542909a18434498d2429e14b442a06e3e4260195943497b6042ec3cd742c2990d43e2401542d0381743b49761430ae2ae42de2520433b752943b1ae2843bc0037435eccc94239fb544305b44143d71b3e433a8b5d42bbfb0843c561f242aa5f8f4254b0b5427253fa423bbc1d42a39f0d4321804f431cb4374305a0fb422fb3b34281e6f1424a09774363cc8042966477424820e14247946a43fa318342b79b5e437af314438c757c43c6043a424ad5384307ea70438a91fc422b9bd0429b2565434d39474285992d431c75a342259a09435560954291c01f4387d2294372376943581d5042daeb0443d64427421d6f654315b84142efcf3b436ced4e42ec5605432db5314372b23043c7ac7d43616c3143ab914a421c050843849589428a8d874202011143ffc5464288da3043c173464287463143e81a3f430f2196422aa01a43af2a0843053f0943d31347423646494307864943adeded42f08ff14267100c43a1add042a3114343c4b1334336647d439edc6f422f72664256a46142406b9042936e2f43de275643dc015b42960882433832d74274613243baf9b542d809d2424e7800437c6f6a4333d9d342171fd14260a8ec42faa21242290ea0421da64c437175eb423bb67142ac42f342b80533433bb097426abc3b43e84819436b30d54268894343b3c556432a44894273b26b430e1db0423748d242e1c28442c116ed42be015743b1b62b4338f9c34252bc2542a7b08443693d9242b740054362f0f342d258cc42de182e43cb10c142e826c442e1a6ad42dbb1fd422024aa42739bc3428224d942e3d65943419200437cef0c43ba08a8421543c142e7499c42a63b8043e3ccdb4253fc12430f310d433b935c4355270e431cf658430b430c43b528844363923a431bf9a4428fa70643940c2a4306cc0e43307062439f76db429770bc42efd3d6423db704431974f9417250694328143843a3ad1f432d4d9042fb95314358e50d435def7d4291c39f4207df8543242dee429716bd424a4f284355a45843c2cf374284a9fe42708f27423aa3dd4240330e4276a54f4390b75e420f4a244387322c4382c45f43f8b03d43565b6943a1a845422fde764317cb174286cadf42e9b473431929614267cb3043dadb37430b585d4368217542982af142408b4b438fec4642570d244326179b42107380436e5a6a4285b5a64287fce242539f0b43ef05704231614e433b130543084d694362a2a642c186784398bed142ac955d4366e7a842ef874c42ecea0a4212519942aa9345439c0a54428518c442391994420bccff42c7601b424e86c74276839a420fb0c84290d85343256bcc42b7941142cc000d43e41825423f13194214190c433a68b94212bd14421327ca4224355743bcd99942d240b442a4cce441b4b6d2421ce3d142cfb27d4311082d43989c0d43c6eb4543ee6f1643f58cea4255f615431704334351e02143ff7ad642d8861a4388f0e042f053d842f2390c43087b9e421c9584437d52254356cbee42aef51543087292426f764943b45d764352625c42008a9a42a6f37d424804234307a69c422c282d438cbf0d42b83230430816ee420839244354240043a6af03432ea0164386dbe7427939ca42fef58f42c884b642d3c9364308254c43fd49e7428f9862439d6ea9425f9af3420e6de342d585f0428f32794380d13e4300d9cc42f8ae5843955ade4250963543b17db4426f87054363794142694b8942c7f845433579fe42747ef3423cfb1e4224cf214375e6314320658942b5c4c042eeb42f4216115143ff3c4c42f26d9342d01c9e4236a7d842e9dbe242d56573430b1f1f4340e483427066c242f2989c4276f1a3420b201d43856ef142b74e7843dc7718430cea7943e8751e42a08aa642a240e24201fc3c43beb70d43f2810643c287a042046a434309720143aa277a42300df4427a5424431b2a0343e476ee422d45f842dc9bd842ebd2b242f37f1243a3aded424d45d542c5bb1d431d66534319e07042a5e527431149bd421d5814433c25ac42f9a8fa4225f1a642291c97424ab90c43211a094355a18443e9a1a642b9178a42515b8243c333de42d028df427bea18438b2ff042d43bae425d606e43865c0043c59daf426cc60343ed6cd242466798421b1a7543a5673d42bd997243d9afbb42e9b8644382d1d84252e70c4373acec41f6e23343265a3b4284feee4295164042e08f3e42a0084d4338737343f410174273cf2443fb265f42dd4cff4221cf5d43cc58cb42df6023426fc60642b04bac420ffe3843dfb91043c5b33b437b38cf427af4214329d34942d3c5d5421078a2423d843d43f3e6024339c0fc42483959430821404368014d4209f31842b922b142f3152c43edf762423608e042b09e7842619f1b43d2f18e427c9f8f428540a542e87fef420589bb42ad9a4642da97f44216180f43850e014398131f43fb5dd4420a738243ac6b5e42d73d8343abf475421cf0244378605f4234e2fb423288704252f369436a07df427c00a4426a505e43988856431abbe942703ff2426792ee42121208ac0210ac021d000080bf22054561727468121108ac0210e1011d000080bf220443616665121508ac0210c7011d000080bf22084b6579626f617264121308ac0210a9011d000080bf220657696e746572121008ac0210c8011d000080bf2203446f67121508ac0210c8011d000080bf2208436c6f7468696e67121308ac0210c8011d000080bf2206436f66666565121108fb0110ac021d000080bf220446697265121308ac0210e1011d000080bf2206456e67696e65121408e10110ac021d000080bf2207466c6f776572731ab8190001090300060004070408080201010105000702070709050608020301060005020800080108010900040003020008090300010000020103070600040309000001020008080401010108090800030403030708080204080906000901000809070402020003010409060200010609040002080000000706030600070008010306050900060608080600000100080005070200010700000900030906070609010003000803030000030204080508080004050901030001060800010308040807060300080508000807060108010200090809000909080602030305080506030908050901030009000309010002030104090000000303000204040804030909000000060200060006060406060700060701050800010207050706000901010103000101060609030707030800010000070609060105080009010007080001090902080009040104010000060001090308010909000008010905090707000701070804070701040309000000060903050006050309060008080603090905050001000600080900040402060104070106090102080909090005030905000102080209090606060008020709070001030007020001070101090100090307010900070207010200070906070908050101040606090907000103000506080204070503040908000106010101070303010807000400020901070909090009000104040603090106080302010108030705020808070702020904090201020100090804000404090301010903000409040009040703030701040505070702010109040404020702030000080109060909010501020601080405000500020806060501080603000508070802080700040101090409070301080400040807000008000707090407070109080508020001030306030904000803010208070002070500000409030600070607060401090900070007060100030300030501010709060609000704060002080005080008000100030901020105060804030308000308010300040700030609090301010100020603090102060607090908050003050805030001050800040500050303080102060803010607090009070002000305000904010609040904080906010309090205060101090401000701020208060404000300030300010200060002060806000708000909010009010907090106020307010008010701080100030608080000010900000906030609010406060900060409060906090809090200070901010000090000020100090108020007080807090001070803010007000002030106090101010800000909030700090003080101080009000107030000090300060602000201080808000104080901020109060209090802020107090705010900080306050606020001030104000102050608070207000208060101010102060709040007090903000709090909020300090101090901090102000108080601080008050506000308090409000000090001080600000701070307000206030704000103090409060403040405080303080500070800020208030803010903010201010504030906010002070101090902010003030001010201040004000108030001030104010703000809060902070100030006060300090306020108030505010606090507000007030109050902090802060901060002010905020500090000070508040707080108080300070505000400030700090007050205050001000604000809010002090906010703020100030000090100000800010301090505090600020301000209020401080308050206000602030602010708050303090006030005050407060108070608070005060800060705090401070001030709050009090907020002010300030102000602080806030206060608090004030803020101070502020206000600000503080008070703010906070007080600060706000606030309040909080802010903090400000508020001010007020005030509010102060105030709090701020500050601080700040004080200030302020006040906070801080803010208000401020802030002040308030007050605000903090009040401010101070103070701060709020108020101010100010106010507030801030900080004090506040600040003020804020308020407020301020109070907010203080002030008020808020805000006090205020503070303080801060400060000010402010104030308080800090003030800020601060405080008020209000004000503050600010603000207010504010009020600060007080803020204090800070000090305000009090306090109090606020101010601090400010000090809020005070500080605000007050404060005080301030308000806080801050106080100080300010200000604000004080107090805070301020500040201020601070107010904010001040101000906060300050000000603090605030000000809010403080900060808060806000905000809090903010202080902090302090001010909000203090803030505090502010008050806090904000208090201010701090700000400070000080600050907070102060709010905000707070006060707070300010102010807060307060607020705000009060509050701080603040000000808020007030207070707030701070404080708070709060606010806010202000007000009080205060909010901020305010501070007010300010409010004070206070304070002090507000000090805000609050309050809000703050500060605010607020907050003010003000001010901020503000200060003020609000209080001010000020003030609030901090108060706020300000709030303060008090100000701050403000307050505050808000102040506060806000102010701090001020606010109090606070000050000020102060901080809090809080901000901020908090800070209090902070005030000090703030809010605080109070900040004020801050504090607090001020007000902010004000200030107010701030709070802000606050000080306000000020702000306090600000501050504020206020703030007010205020902070200080901000609080308090108050200030403030204020708000009020804070900090602080203000803050500050303060001090903030105000909000003060909000900090309080505000704000309030909050405070007060906030503030805080901060109090905010609060208050108040800000602010600020602080804080403070005050600090900060707000601050403060307040208080400080103000202000802050400000203090202040406030603020206050005050609090208010806090908090803000908090307010805080401090101010100090104010003010701010902000100020707030705010203020906050009010907020501040309080500050502070107070101050806010509030201060302040807060503000306000906080200000601080806090206050803060108030505000000010800060909090706060000010300090004000300090300000000000506000100080809080905010107060902020201060301030808050905070009030109090503000608010402070100080709050308000400040500040401000403090905030207010506030106000900010000060001000209050405060005050009090307000505080001010101060601010100000901010909090303010107030107050908000800060307000900000709050806070802020207030502090009040708000700050400030005060308000706080003000109080902020003020700000809000803090807040201080808090305060103070705080804000100000202000909060907090708010602090806020708000004090003060202000006000200030000000103030001090108000607070909010704040007080006030308000602080803090602000406050109010601050100040301090900010203060700070300030600030903080706060705040806060708030400070102070704060707010602090000000705030901020300090001010701000100060605020702000106000603000100060600000402050709080608010100070500080608080201020204090801050004000009050300090207080908030104000102000705050104010005050102070600090104060100000101070107010102030605080600000309080903030206010508030504010901070905090705020003080700000703040901080900030105030908010003020801010201050208040206010301030103010508010906070503040104070701020306010209020507050802000508000708010009010204040305060606080800080922ad010a280801122439363261663032312d363561362d323936362d616165662d35626166346232663162616512280806122431626333336263662d383633372d323732362d613835652d3234376433313866656634361a280806122436313631656365362d383961342d323732362d616164342d31643566356364366461376522280806122439343738356132372d386138322d323732362d613933372d3135383463366663396333365203312e32a206f4fa010ac0cb010fd415e2cbb620ff902f35e10e840a558efac93e9b45785f35de2b93d524fd60014f035801cf5687c2eb88f91a70e5832c38821f380a2b9d005522456efafd42b673b316e685eb8495b75316b06f034f3db3e64f0bb27693bc31b4a0d53418f7a2b22e5e9a891a9100878c18b84354fa39421e85ea7ca4c8e533bea65ca4307558256993b039a2400ae488a56b50388cf890248229cd0ea0dd453180ed3a763fa9e309a4ec273d02fadbc61e7ed95b83f20e82af5613cc08474fe7a096fe83120c435a7055040c8a50353085293910a2db34a590bbccd84dd1d6753efd2e2a72013d794d54cdf165587e4def31500ba3f14e2fd0261ec2c32d843b4411cc25a4e37f5908670729710b17e0d74338a17bf3475f595cd17190e57eacdb7e0505f32f73f9283e97af34eb3ed497643220755a68e97e73587e789e9eff52654fce0ab5783f42a4b51787735ff477f6040b8f09f131bbef380a112fbb10cd9df04bf85863505c17d8530a758739d058876550afd89022863dec45305e9f506fb9a64d7b41f0f8d84f43e4b998c2e4d621f244ff9d3e27e9496e0b9619cad732398835ef1440b911adbd40c34d0f74154102c3297ab6e946209b4bd21f3a545a5ae8e32dc7cab50a2331619cbd85cc86bd420a2af26f23fa032ce6659ffa823bb18b20aa11f95566b53dcc39111c29ca9206fe31740eec62cf15c8db0954da9025761770fb3db3edd0dfd65d00858783fd0f78c11985e3088e2c08e121f32542f5c438cf76a9b509525a3f59d00a25e466abdf4227214f39781ad5dae7da0c56ba9b39d45b0e8112c880eef9483ef4050ff960bb8716929a090aa4279a2c5c6b2abc28786efd988627940429594d8040a75906df70e529876fb0e818fbf295693df2146d64c30944c39966a6cb71adf629999040f5643a1c233e7606a8871d969f6a072943734bdb94a2a09b868ef1ee3f4889e3ee19dcc5178dd7ea5634af34088a900345cb481c91c963c4d9262aba2a52d11fe6d658639581768b9296b9ed2c876e6c0e7489c5de2fc8954e8ed8bc492183ad89f10f4bded91b9e958337323d4f2d661f85d064045636c7cbc3459f75e890c012c0e465d04b9dc6fbe270f900664d2e2af4c4fa1343cf759ae3b7d058c1bd3e43d2407ec2ce4770b4ecefd60ed0b4cb8c0e2ac64c510342bb4b538513425304b7350b5040b2112204b2a0d9af968c5cc6b007e706e92c808b773e78254187bcf9c1046c6ff618961e3e6cc2297c03d72fe11bf37804790146328ff848665888de7334eadd19e8bc9ba902f6a5046e5bcd2e43ed8a7f3994c062f96a014beed18ea0f7273096abdd89089f6af3bb566b7b99d195f855b5dbd8bee242d689faabae3597a78a0c2100a6cacc3f80c64daf20a3063d9052be569251ea718757e5febfbd3eccf3d3575c49d1a3926a79f698233b0342026a884f6782605a9981bc5e0f539ed2d507a173580c32491028980e1182c2336e3a67c7ad23518a0a351355d2ec12c80528b9850ef47139034ae5ca990f3986b5393c27dedd4eba0e739f5f9af30ee41d7378f09bf3102ce9781be45958581d0ee838d614f52c5072ab50485423735c73c5b2aa4555927e63052076d30c0390ca27baf2c93e4ebe9422c09cf89524454ee58e2cd78957ab982bb799c5e7704ff1e0954283d9999d38ca686bfba917634715227091c2c97b270ee96453a9ce052065453162c20f1917123461928e30a24834f3d6d0093986d52f7953242ac2738ee409ff93cbe8b406e549a89e4a800c37f80a6e61555950ec18d6a91d951ebb84d9f4bbd599c26ead44d122af0db54736bf7da3177d068f928884879809c0804d64ca2e5a6b067170f6d9dc174b0838ac524057446e0ee199df80f055ebde49e1e030da3f044bdade993fbbd340447657db0ee7ab52c03551899094d19e55851244e25e88192c844813c5da80322cce48c59ebe180c35b926c9b0add70292f57a17527f01a68d358a1da3dedc3f4cbd91e67d53f2fc124a3e42d543f48f134076015bebd599cbf503e825a33f41974f8b8cec8f48ff9ede36f3d315e26bb9695a027cafb4fc1c604bae5aabd5656de107f85f4b4c9258ec4fea9b74073eb510384465309acb50e4955051b9416b500b0b42dc9accb1df90985f3fe85a89a3757238b3f6a6e324809281735aaa4c6311df13c5c7eb6e2d654f3f348778696989555357ec892b719de1d8fa0b89ee53f6b027bc5af666cb3c7807a81fb78699340a8df445d7c52a850ed18dd8d967c6906988c3cab0177da7d18e345670ab72822da7b1c34c4729f487007d675a7064cd348db2e4dea5a5a7d7e10793db2f49f23504ef6e1d44e71010ddf535d444318e40508d2946e966a4df75f96f2f47395f2efb3e064906cd64fa2c2cd5ec8cc1e6576758793772752907057865377cef688789565a50357e299b822e14608b9868069ee74c722bfdcf322ade5c357225900ffd156b2c3e28e967a74208a5a02ea6360cf86adf084784f4ac661c2f5d535fcb1bbcc07fd421e2932eafe300fd573f8e65b269ff4fa0dda0f02d5338cf76493ca13a67d904be9c093276c52857c9028d90ca3417aa7e4c3b005c5795790d0fcf59d3b36e0767694d3e3533676d075a025c1229f6c859c2563823f410d517c00cf45c564a3acc00dbfbb4b22c3cf97971502a9774dd402400c6e6488565037105f97368ede4fb6e481cb8b4a734d99e60040e6fb884fce43239509c240ddda3e95aef9230c18c29205040bfe3cbe1cf52dc534dbb0e81e69cca3854e2e3f15f5abfd8bdc1f37fb634e97c44117715b3327e4a0a5204b7ae5ded0e32c65c8bbbfa306dfd7864f93da4f72084eed093244c8c9bf67b65010e561deb8aec8c52291a7b7ce0b200f69e8371473c783bfa278b442c710451f3f380a99dfda891fdacf738779c24c8997498f9a76cbed2048971bc9011ebb84183af082ccef5893c025cd5706937385d86604a3804211f0dac88220903ba067ccae03a42575b0a3f28271e5482ed1eec51f3479e2a484652d48b433af504c94f537dc38f05ece8291218ebcc08b5d7a3883e24444d483b0bb8c4747b45bd3c6bdf35f9097c59013c0fb0e56791f206b3aad7d4745cd2a83eb6b31322f914f9994df18f35d377aa00684c622a6e2812e951a710ceb9b59947ff755402e3fe4f5fd3a95fc71e8f453b9af069f12fea1f27112f38e9533407b7177624752d1cf58e86e94c781377f0f9ceca090ee97bb90c0ef048538ba5dcebffef5ee1168308fece54cc8569f8b267629e3c6f5bdf80e6e8ee7238cd4a72a43a37c700a58531a0f7ab6b333b36fb6fe4a15686ac392bc9726c00497b3590e19de333d7a8d5136aab507e58583b759baaf6c286e74f364b3303e404b23fb7c96bd9b4073e7e4f7e3d9a4640ef1b9b8570aab071205ddbbb8d82b9d2a27bf3690bcb8dbcaf6f7cb33ae3186e70c59b480ec9c90008bd37528cf77a4eb83b29d1fb45c0802e1fdd8e472d824fd9e6322a67801089698ba392ab578fb192086781440b41f5e2aa9676f6ae85a83098bdddd8a5a2d5948d6d3b81422282d975ae7d7a6957f9694656641cb8093fd1b99d3d5bc967124c63170844d02fc318b19b680db43ff53ea08956d318545c6174c4c5c2fe357738c83e639e643b729cc3fe867f431c75f8b71cef6435638c617dae1f33e1dcdac9e2e4c5504a451bd87afe8f71663e992d82a9439bd7dd04d8fd2488eb7517f154122d329bc92922998a9ee68ab971ad61ecf733cb0306e3efae6d499b287671e76bd0fbc086bbc9ed428cdaab45f268305508b90fe875d97b9bd0eb996431dbeb526fc0de85cae80fa155cbe2e48d44e34539a4bff9465edb48b8eae4b3729a37b9bc7774436ab4f7884ae639959989b082824a99f5f3957592649f1eed29b4d80204b66839f37b280d2f59883c2547033e0c951deaf544e728bca3dd3374a1593001ff5d21de015d2de9040f4231b9b8cbbda63ca38f79767235ff245dad1ab57706869c89c95bd693cfc94e8f6e6b753be0bf6c7ffe75228639c6d0f5808f85112fa9188bfa6b95ebe1bfa6d99566d9a41400abff62a2dcaba675aa4b8b013b3186e35d9b3892fc246f8db752b92296438af64c7d7b2049d87eb3329308de8f495f7366c38c84030f5e9ba56d6c569d3283231573ff0727999aa4a88893a383b6a37f1b3e845ae835de294fdf9785004d89473606222f0300c65349ca09cb44fd76ac2099a5b94c1ab53db19d37554e9d7640f9d8fac19096dee3d92fc950123a3b9b0449adba26bedd261c126092b1d0cade9f8864bc919d55b9d128726185ed419e79df793a0b9b817ed3473927dd653fb74293b9877f60e74e404cd50c2bcce22ef4af2308c1585348bc35c45a7b5a6c8d46e4269810947a7736150c836506b16d7e71f8d575d7d8ef56846f7a1d2ae2d5eed848e2dfbb5b2c0eb24d024b960dec1cc201d454791eb75f7c6e823b3e8bef2d89600ae3fff5bbc81ae21433b108f033057622f1b3412ce1490873d00ecd0c4055ef21538b33a8755d663208f3039d4b456978adf33e1588c7a0fe5f9e2ff825044ccb3736b2ee4130eec7a6306d9d0de571e12af499fe93bbaba922225f9321843034f96b627dc4d3702b0a0305202e52b70023f19f2c867be48a2e310ac03af55b339187c95405908220a0a9ea30f617768eb1422dea512d8d28f8d9dc266641d68fdf09a38fb05b694032350194c7f937ef47b023fd5452359747947fea998c2ffe41f075a4598581046dd3884abf1f83e4d77875795b7ddf3370857ebeae5aea40971f0f722ce594633347a005e3ac1bb0872d723e37effe8e762d789eaef7c83de4f8f8332b3384ca287488bf069022c17332864fe3faf2698659d4d5a5f9b62fc3b5a2d2490a7431a0fb13613b0980a6dca0f9ba7545554c72e8f35234aeb012a39bc0131998d2680463c2970ce991a48f06658853e02dfd4d9bc4c879c490d4eedfc90d81e4b002490e896c0d11c4d35c501c9d747e85842cb6c0b85b91cb07dccc974daba12742bef601225829cbe59405a45a072373794e3b86225c7f55071205a05a44851209a1dc6595533e4ce792657445905e12593276f58e6339b3be1ef831ce00cd3a5327838d1acb73928ec9d490d600b51079a407cc948e23c70dd84f028977866684270053522d2c80da48934e2a27034b8218750c42e62226e1ff9ceeb7abb17d055f1ae79c7a53c96d01b9828d8ec2cfb7f1dc72e5e029bfc60c4aa23e54861818ddec612776cc2d479e3f82f503d7a13276260709d10029898d88489f10c66c483e2cd7ac42f54859061c2b647778bebe0f7fda655792955f7b0badf5767a89f32d8fd846d03a3bbb74b868723c87e54a330808c457f4a13478b57e34324f56c81601902936002d5011062a5809308d22f714df46028080816fccf188b506dc0b261124bf4e99e7599ed964127f8917909f1f2686cdd08bd343328c5f36db3f234ff4a50443b9319c9e5d92a44df24b4043e402dca01c45c784737c14043d7dc92b9124d80243d9459937ce523d980d39637bcba12683538e580eb065f9e4f02a10fcc7d4cfee11c60e543032de7c10c8527e07587e4b3b341e78b7dcc7baa5129fc73980905173598f23e216535860d2bd72b374421b6a9ee08ebbe0445b1f77f97501aa46d288f78f14ceecde0410b091d9bc16d515459e28d4d9afa03306faf4f7d95f2d05dbad5a7c3822b553900b5851e4db72d78cddd588f0f43843279a04de1225fbe18560db3243892a03388254bb99250f80df900c6165387933e5e84b2e844f451664787e82498ef59d9afaa0047576db4bc7849754f3ceefa253b83fd243578aa736152332e3342a4b98bcc733e7e86e84fa0598dc3c5e41ca41326b6c1085d56cc86910691d38a49ecb53d6e358485535b156dde7baad6481813f23e71474d5ef836417c9c5f09e02736b960589a4abf6f24e06630185cb558226d8e7dedb586f49a7750111832b3753bf386db0d69510d5109ee39d2c75b73fe15ad732041c533f51c81953e0370bdcccc74f73444d0c5a870e718da188e5415094698022536ecf0371e6cd52fbbfd377396e7785f2c04da2eae27703fcd02b710cf8eea358c9b044a929afec7a202bc6282d77e028335677692db227930bda4cb022fa59bb77aad5cf3f60e0732cca5acdfe0f2a490dc6999f221fa0b15764bebf3662b7c6d42fa1363e0b158f1db19803d7fb258fc358043bc2243b4af08d0d90c23d69ffe18552a9877a3039a29b507028fe04f5b14c82210b2813ce3069a96d7515812aec446c668f08634d03c295ddbd5008dbe1772a25080eb1b9c5b3adb261dbb57fa808262d99a00c00bebf747669908798f3ac8528880fed6f46c6a38f469c928526b35e562efca90509a24cfa41a8ec3a2f8aac784db2af4df25135c4712505105d18dcef4929859dc5799fe211212a0afd6f84a31f56e529f7e07ceafc587761eec25aa2564b200a79fda32ff98435f4951e3fe3041a2476ceb4577df53894496f4eba6432b5f9659bb3f07d6455f7d827445c571264258f5484b028e77a6bbbf622dda86226355bdfa226aaa660f832500446e1eb6ef90e3b98bf5ced8c453b4458136cdedc5f1b7012f8647ce25867fc337845396ca7a979851831842c3051aa8ad35bf4897f8f694525e46b3c313a6399130a3fb537d8b65c09526612247cc694d56c581289775b03330db3c44d4776b96e0b842505885e47234d084e71aeed0fe84101cf929857750096281a44979d2c69e02829d177b0cce855b9f219514e7c3bcda5d84c388412e6c0b6f3a2f31eaa13516c2f60542a8e90afb9cb1bad2c539990bfae10d0731516c00f8f3aea0a23313f2032e20f4056e5c0c122979a424fe8842644354732fbedc434ca19644fa67f8ab342e5758d1e81b31b250bd90cd132c99d70826a65f2599de8e3afa597837bb222fd1a372dc2c2f72623699fa65df04592d4f910b0612889e0e1603d898b8b4e3822310fff8f23a902ed858bf15f2af89721089ab44fd80ee9128050255ba948458aa8c3a509900488d80c7f9508e562ca8c92c64142a29d987fd11b38c6633d290b2d95fcaef9d53a6add6e90c57d36eedf089af43789d53fb4f1146d9956dabafccce1415b38d9203cee0b66442c7b0aaa0480f2fc403d385b289f7f0c78d591fc316d9d1fc065bee2d7cc99382dab407bc2d78c7a063b1349bd64d079e796399fa602e52128d627948e2c35dd3253587bb6de4f9f39388467d07f914a41f1c0f106dc7942d421c9f739c140fc0956d230b61e76d928684749204f1cbf42380003891fec0c27decafa7c5eaba6143209660d170cec485f23e53dec85ad3934821393b542758714b846220e24379d583344cf803d9f4589e202041ccb08cafe31c10a46457d55cc22f890b45d096bb7a5ff6b0ad433a7b14ddc3406b0f955ecba766121f0d260c5920320b34017424395faec9fa55b808a2809a946b70754e9d1c422c304968a24dee5b6d3038cc8ca6eea8df8bfea4bc5b2b8dfe134e9864becb20722f852a5952c48211dca499529dd8c30bd49e0e200ea288f3318348ba2009d05b3411a88ac0c58370df1600bdaa004a59c9d859614fac8fd6ce5686d4318a5a5a97628e92f5e8d2732166a1a1b2fa7d7a977e02f0470578d12154a105b3297213b354b1039055a29280c4be54d0743576bd5bc34cf8c36d0c18107204492e487d589420b106caeed9d66925dc34134e484a435cea138857e87d8d02f6d5496e31ec248e2b25afbb1650309340f34048b928ad8de8e3825fe72ef331ea08325ed5b69cc1044ea85be71620193025d4858fc1b5492737b3ed0364c4f4b41c485b6242de7eeae63775b9587d1e435dceaaadc2a836e776f32651329f39a3cf0d725531b0aff4f489010ec82b5adcfa892d80f86e7e5378c3e68b331c4b685e598b3f984ee81355956259334c90ba82e75868493b5f1eef05613e249892766c89a1147a7215933441a2556c24af2a67065641868f744f583758f3db9fc9abde2726f6219707aa0e08503f8497f4a82adf74da9357fe288e774d9261a807bd949379f3794b3a44760f655f0349a6a399b7d472f8b079e499d78b45c53a96dc666fe15e8781a2babea7542a0fccbe5c6831e990ddb45e1b922551d5900d3dd51332b518036ae8f92728ecc0a351867ebbb4291114eacb8ce1e8640b4d044f27908a5da0a99c50f33a584a132d7dc60b41d9edb08aa3d52440c285d239b3e42f6e90a946ec5cc38b2d8e80d0acdf5668221630096149e5eac8b91895ad18fc3672726ff7f0779bb8e2acdd4679751ae03040be51a86a63423f76674db88fd3842453d8c4f14a812d7abc634b8601025faa77c3326d1b31456fa4c075f28d024b324710c8d0c5cf43296662eb15fd06b3671c139d4d4977be24121481e35c34477a12e3d5f1f803c9e23e9c98a43d191922a894a02c9509ace76bc136daf8f3687ca1025c760c18c87798f0215e063d033e1f4289b085d89525035238af388f36658f41a0ae4a90a2be33a704e9f8080451e6627e3afd89c29982caf70a3e891644ec78a38a7822255c4e64605eb85ae622930b58c515ac20194f59ca3baa601461db395035f2db7d08ec3a9b945828dd71f243228ec18a49195e45741e5a283591d4b4924bc780051f96706b342dfa3597c165f0bc1643a0ffbcddcbd8c8b4e5ad8e0c090fb647830a492fc5836ee04439d3289a70527293f8d3dc68c787ac24023d0de05debf51c75a3405a5d5717253b2653005e7c2ead691e78a348277555808015efd2ce52532722473d993b4025baf3d84b81301df418f38339346c43838ab2e35791ed718cb2d9778b4cb87b2825b32927a3cc46ca327e81547ce849560fa5f1cdd7358d2ac9f4881a05be22145533e836be2f49bc8845bc23296f3c2af3ffe518914aef0279936c54b35880f2981cc9216ac2e5f2d5133a8166e077da59a38ee3ed65737bfb301f0bf8d1481207a0ba04578da48adf9fea0c382f8704de3957a7469b6f1083e1da22114935679f064a941384708cf196df38c946fa42fb2a209b592289b871db307979fc979402fc9573745807c7227ceb3768e63443ff4a4e0676e047f5627944fd0286981e0536908abde831cdf855995af1e73b182712793e08570675860861cc0ea07349733420a7e3358d04c4c2ae0792b79fe250fc846abdf97f1fe416936825c36c4f7d81eb6464993f49d31ef4a065f741e500bf52cf2dac0187539a7536cc45038736fa9641b5d69f821b84000e8401c19b85783442d2aec47ec257c8eb55fa8253ea3cca204b572a06dc889958b418c276351fb45534a385c83b3e790bae665ce4349ae835152af5e36f85443d0e41bbe7db13b77dea820303507cffe925426593cdfa3734ba4317e127fb42408d4e7709f6b8b902d0600c76e26c76d85665c8e000e4e35019020754e1f170e93530044801856608d29a25ae54292ce3bb950469c7e4f17440c992042be3f6ef60f5e8c7c566944093fb3334dd16b5e986b44830d97884dc1c2795f8760b338a327e01ff3d27262182b5bfe8144a2b4002b6760528f2fb492030287d777b544383c4997ff87096ffcee569588aeb75d60914183223cbb820f2948fbe020b72db874234d9a9bcba137c448ae532b120e4698090cf20202b754456b3083f3a5ae191204a9c28e024f90883faf80ea510a7a009c5599c26886170455efe578c42da45f4db19938ba47d064c374b726cbd506c7d2c3844720a56392aca783f08e668a5cdf780b34410947a6b3e1e9801d22f3b06af951c6a155b0d36e5b752bb0d5b9a7b8e3f34c7fd4301dc8101389cd2949eee1b24a10b8d84373d4c84a9ac050a82b9ce82b85c10cc42939d0401577d30857dd92e370bd8fca4e9cff320f08cc3b5538eca0844bbebff1933e06f8803772ebd21f434b1b39a640d21f26dd7135702858530d308fe165afdc90f2d4613420c369982e3ab0429ac0ab50e6de2934e8d9dcf1a63c4bcc6c080044b8a0d379708fc943412c8005513ccbf7ab010397d6c26b2e3e4a43b261891b93f90a982302fc4819fa424f415720aeb9b63e54cfeef8eb52c29d7e74ae4a5f3f5d5955bd38300a87cc81da50f03a8c394004445c09033d4b51d158853acabf9ff337024c6973585d96bb60eddf4099e5a92cc0d478c87215fd280cc995fb9400f86b43bd6db3c2306ab1e7d921b4ab573108dfbb2e6f009453f54a32b03bc2379b24c12f10ad7f1231547e13081a3bc29f63da4d295502b06ce268833bd887c4c86ceb124fa20bc6292617c50a2b45c28d110163b879da84597fd2e1ede3c5c69a977ff24f5157782d4c718d311de39b50b04d16b21643b84c02c3a8f3a76a42d55d34eff5b05f8cb4b94140bfeb24405447aa20452ce4c424a3d454e5c45a684cf3abbbd55f3b6d832d60a633cd5ede2c44a9f0faab45c65e34138bcaa1ca74a82c6b5b55ee5c0285f37245482dfeeb41b727a83c0d907aa684839c3ba08e7839b05c51814301e6f7522033f83227aea7fe92b82500b537eaf7ccf631b31413da975bafc59ee86788653442d241ac3ae49c186cc6c2aa0ce287b74851448a400d3495f1710a1263673627e115839807169287fe21e2105c299135bc7f55df65ae572d8321040c6d32492948ea1d5018ecad1127c6f05aa2455534e354daabe2fb954fd724921b75b692084645441499b66c2b03744f1497250e0cf6e8774b0aaef70bbc51a2897edefbfb429a4ec3510ec74ef5bf9273753d60f891ea57f8723ef6461cf48e491201c6da6fc6a16aab259e416c0a4207e1948c290c3cafd8876ed8ef12bb8b180060cc339205683ccd5550bc9c4a7d8a78c0fe99c24b0d5d8741d6e3390573b43a55e51c47cb00bbe052c733439b5e3f0b62d749281bb849691b44ab2f976c984af2c6602da2638325ba75c07cc9db35ee0a948bc0503d47b08026a0f6e1b92df804f4c259dc3d4a06fc4c83ae9e530826a09126ab13b0ecfd94164eac83734e1b0a827e943e8e892ec7d000681c036438837e8608085f5c110ed3f34a280b27c2a945b82ea4a4eb5efb6de6efbb0f42b8096b00a43ffddcf8f7d47024945b720e343ab304b1bac2a0559c97256d8c2891deafcfd4339dea61d2cf30521302c9d257e172cd0d1ac9f731fa1da89edc298e44bd290cfbefd104411444b3a9e880fc215205dea23415983a059b0540d6eb63378ed9c7d9e8a43d04588d862d03f04034d9ecdefa4c3d49b8aa954dfb129826e94652fb7514d56cc5b9ce0fbe42f66b9cc2c56c84d7238cd63998209cb5f45d4283c5a58f002006aef81b0c34d2639dd1933c9a509355a4e719b381b0aeb1e4a588b981bd0c8824e49402dac2d1e82f36eccc3079af96945745d232ac895f1d3d11ec283f325472fe9057e1b10fa324fe0bf50e6c47b20973dcf07f64df99fade865bc3d2ea8bf0745d27e769ee502327a792b5a9d46bdb7edacc58c484291ff6922bfcf61507380fd4f5994f28f3a15688b0799e643a11e6e3706c030e969d3c643bc0ac583f6eec09751fea2a84249093e3fd83bfe78d866e0ce0aa0f50e99c27fb55db57631298efeae45828851b43a70575ec04d387a8febb875defd917e2dad8ec7dccdcc70a0a4f9adb51463b9425a12e13ce2d2868b871eb23ffa676942a746505928a84db69ce7f7e48fb98e9a262da4cd7e8d930aa78cd1593a0c6e2307c4bab59c33a7848e24e7b3a44914c48a06e85b380badbefabded8e9ee8af34a04ca3630696361958295d594e6f1320ab704d822a26c4ee7f894c8b144c3d2812ccc1b5bf6bbdb3a351f633af5c401995b8f5a9db6108f040e031f914b447687f74a6189e629f888b914e055ed7fba98aff93ff5171789d3c539bf32605bc0bbdec03e344f10b8607e07dfbe8e017f7170d4697526b3a682ee6d15f3da48d00eae81727871834d1e24b8d970b55082233a0911f6330477403f92cc0eb65373b9442d8838f2605e6ff6006cc633f8d0ce693694b9fdb35c0aea40bc05b84ae498e6f2e8d930bbf382462931117497bc37030db65979b5a8834c3050fb308298b6bca5b9570b430b7d6d0b22b617916785659c29c3ee9f93b359423882b1a305ab6b0d6287130bc8eee51f95f5cae044a861d34326dcd92577e40723a4868cad472e20d3c0d44a2029ef9320460561b57d3155c8c191e2bfd4157cec72fec31873a55ccc76be2d768fa455d833f0badfe7ca7199bc373396788892f692bf911030368faf8907a0e24cf74be0f63d6dadf04055a562d5f68562ca1409d0255449dd1bb3791a2734377db7f4a50367e3724fb61b72c6be8efa5792253a327a46c231990772b5df22608ce2876df87c32bc4c517a7a6e95d9f52001c7bd581737326a87c681da598302fc8884f4456af697501367a873921b7f6e02093bf1781c7f15a226aa57b8a4673d97102349bf0e9bbf58f6fd188b8a8359befe076949d9b0f0690e86f7d78374f00c90cc0e40ef8acfbf455df7088abc6aa98f50c3ecf667223441a88239eb71ce90a399c892d57757a3b65ce5c375ce355b972c0cb2f1644c0b0abaaf40d80463b36f40251fb0b1daff050e2865ad69e4ea9747063235981f26c5897441d77b0fdf74866458a87b59b3832fd4021e0392f893f1087a615bf69b74bd8236ba6a1d2542979ff40fe2e42b83f5dc5f9e491342ee31795ba712ce03008a3d73bc2cb5970010104354418e27d406518a94030167f28be33c028cc91a680a9f349c7cc0bcf89d32ab8271442946a845744f9b963efce3198088d8b915a4998b8b384ad542625f4b8795c4791e56c57c0e9631736900aaa60e1ba3c1ed645c9b52658a94a4b4e050b1402279e5d71f562520fa491d7695e45953a5d7b2b5c8a56edbf281546fa08d0979a6887e1400fd064d23789b09c8a1550d03184384e619c757eabd739add35ea02843cf987ccc78384b9fe9231db9bc201659ef7cfe47b598ebfb59c721629638ce000712886c1f60cc3814c39276eb7892779e27d0ad17260e8791911f3977ff3757f483d87ec2ad7284b70b8025b586f67250daa259d70fd706914c2d4ff910814b6395fa7788ae3fe758cb97320a6487f4aec9e534079ad374b92b1b225651564409976ae2de3f88623dde403c1acb9330cd1f02e92b5649bea38ad18f427964928a48435f713654a2576d979b2bcf258052724e80b250d277abf7bfdbf78024a46cecf2f0a18082ad48e15e2d4cffd5a119225dc15addf0dbd46c852f40f90e2d1b58aa323516527de243f29adbab2471a15a35e92281fa2cb0a47c0c3271809c18a17e51bca0fefb28043d3634d841122805c1682cf743b2750323a8a813c2bc82695ff66c59c282a5abf07595ef0f00d55b9508410f0af35c41d722b8b1b183cc57895402f691576f212529dd493c178ed0d8e94c5373e4af5fda27cd5315fc51942cd58f82b7a10829fb9ee9dd84e55aa11a9049d021751ec92af2805e5ba0074dad778857a0cc5175cfff7c8423082e8b09f8b48c150f7c442e229205e93703abe66cac5cfd0d86d9248544054a4e89988f32434349ea857fd3b96036c9445f42172e9a4c611e6f8926fd85c911ff53507c8540793fb1f0eb3392d62c8e9e5d4f0d3aec0684011ad60839392c88409073b07dbb47ebb88cf879af4e5a05c557d7e64524846023d612b3e6855ed088feea440099dd9bc8a95b424c678779f4772bb1257c0f7703c8ca7ebf76bf945faa5b70f23ac207a8ac9bee8ecd375b0f323b5ec85f45d59d3735e928942759a5ba670fc008025e5910b59d2f0bb0a2e7262d01a50bb56cfcacd09ba4c52f848ca86cc999c6da0db25e6442377bc0034397e71ff1b55cc85051e70860153919c7cfe414383b600e39fcc5320cc402e83b9cca6bb69c74edd0337d4a67546de8c3eae8e175f542c7037850aaf641b57250b97e16c32247e13e90fbfe022d439b934717ca3a2a47b198c09e6dd805c809e243d69d427fd87be3ac2714a5dc03c23eeaf90ecb02e39559ea5a42d9726383061f8276018992c95c780bd6ede442cfd9c7eaf200f80205831a84d39fd3a75298a36d9a6ae618c031a039dd1faefa8674a6408b05e487299b863828e2ed13b0cc221b9d98b92a78aabb80934729ddd57ccfd99fb12a482138c48d3009e25a266c208282537580c08c1d386fc894252b5335e15d25fbc909a4c44384455532e80f0523f373735de939361903d31fb73833b7683060cf80e7e22a0f1aada0518d13f67863031e68cc77ddf700bc452ff02084e3474983a14092f4773ae8bcc18882bdc2dedcc6400918944ec3935224857347b7265d9a1897d05f052953d665e061cd16905d71d7bf49a3b3dd948ab746d7941872e449440efd693a5bd6328bf77eb165aae84fbdb722d6baeb4bd369ffb000018dfe05ae0496ff8a2204545c4408235036ba79c0282562ea145666c50c2df5322dfb445af41da0db999a72030b98b0528637553b2a42229537dd33fa730f258457e78aad8b8b38c6d24e4c97aede257b8d76892759614fa2629061a59a6248384b2f2fcb3b806ef899beaa545cbdc7e30220482321b644faa8d452a2d86b13045c485cc201013bff81f7035e0bf61be1064aa745782c095f5ef4598dac08f4a09ed5c550668fbf989d92142ff8a42be062b255e59a160df4bde7ee3979347fd4500d7efadd406b0b50b34c78dc9267509582e218db8c06395754e65e7c52b9c6fcc4c81d8e6aa29328c4c2ca49f6b7e001f97617ff77727518fd3bd989d1f2cf8c67ab1948d62a1a9cb18ff982e23bbf62b8fd34e48128982b45039f558cadea32107ed994884d734075b0734506679b804b345d9ed6c0f84150d20279b0d65e97555f6542a5275a82298a44b75350c5a2e7813992d6faa0ff804038db8e3e650079c8354fa0b0a4d9cad69f0924cf905cb4a494098e4763286ffce1396a2450ef749c52a623cd31423299b525518a621625c5109fa98c320c0baca97963c6054a119016ff88b4dc3713c6ca477123350652c821254ad7b3f630f16a9787fb42542049806f273832cbdc7e64d480bffd2fe73a49bc8fe7f7129de943e622847384d0ef2244ba652f513b4d4fecba58781bbe3c2788e4b9f036a4b792d9ca1d1990ffe654f86f20e9c873cef29524be227c9a3c13d96ffcc7935dc0c0b550f9be5ae6d3f154690e53b1f852283e70578f2d839e193b4cb314b4353fdeb0ed44084e2c86c88f1555444524d3c70c8397013dc0fdc0e2a0cda3a222132342cda8c40e055333580d1d821f39f805bec1b0b3b442dc4ffcca1de146d59086e9a2fdbd3430b2456d731842246171990e51908804768c582faf66f15f86f00a822bea2f85f39c6f3ef46defc71a2644da9e54d9a37f2ac290822442bcb4d319fd2ca5684d0e0dc9b376cae2fb55e054c95f4dc27c072e81142d49f4f17f12f5535815b67b5530e25c95c0b1064d129260ed565c31b239db156ef942f4099eef932f2bd982e836d49287d85e8c63e1908e1798933be29f2eb4034882a0332228da248e7a5e99b429344870f894d5e4e62cf8def8640864ed0910a0f2805ea92955420fe38b57caf6287f2fccd56a2bbe502a662a9b959046664848525f002b46eb488753a2cc203211dfa7238a294742bb44c1a98d189c1cc0d8a03d547615f2dda9ac39c75495c657a77a6277a7e75fd1fb3b49779577b12d7095127fb025802b9765343c5fd0b0dd14f7e075d76c77041e48a1d7bc8ab5a4d89402068debab9d59918f8642dbb58b7b2f06a8e685b86af9a3243ac4823c60a80c599a321ed306971434cb2c801a4129db19335c6d9698548055023fbf63472fd2322ad5ffd005c98f930483f33b226b5924495e8363c2f46019f81d950ca3b1385ab5ed88106c074b50c4d57b69998b8ba9f2ca5879fc82a979bfb0ea1518ee505e3a297a8060f873ed57a897b1ad9152e0b023739f2412ade69109f0538cc33cfc44292b8e485230fd4f45496d039f99531008bc04463070fc45885bce232355690a045322bc102b8b19dd220872086c6797af30b773d2ac8c5678445dae92685082a28920405b7e98de80c794be45c7ca0546034eadc5f8d84a25337e5583e8af106789410782f68520c9b1f2e3125a709ff6922931c03c300484c59c51420d2d2c0bf3c630f5535803330fd180fae4bf876f05bc58b7469355a04391a292e84d593ae28068d57c4d3cc086cd6673e4150b116fc145974b85cfdc683f0fe5e039a37d355c6e3063568cfdb94d31e3cd92ad78a1ac60ffd0225882439511b48355166f180c962378448b23058afebf7bb0fc075fe3836ca0a15b74fdcd7f632f55c9e6a3b275d3be993c9f1982fb9e9da3c3c291b3f8b4a6b70c51a9a3e4cc7a309e20707821e8f287d8562c4e089a628559abe2be890a7171a3ee2d2dbabf7aef64ab256a135f6966c0dcf48d73b1812c3efb1033352fd68e42989527e129d3ff07098d7a8cdb5ed11a3cc889273d54e310fb91926f8ed8cff46d10539a44859366e3c0a1bc8ba00f88bc83709db470b3cd6a85c662028f231a37232b077ffe31b23e9bf3ad521635a5082df776b2f8424342212d8743ca7459a9dcde94e2c8d2d35962a4ace8ca2d262237e556a835b5d2df41f2943ab3b723d42b80d85d88ecef5f215b22b83cff9deba332755bca043193925c8ffe2149a9342779d50dcdc04f6e929c6e70f602547f4e3007ae7d6f99d75070019ce47ae4d6622771906139d2d5322325083558d0544aaa29e0889fc98f80c5792b72913451fca4e4e1e549386068ebd0fde848870b8db0384d27843f44d1fc108f72342a1f251e6b7630559f5400fa00f595a74cfdedb8500b9c501007403500e784d6ff4834377c9ffb22e80078ac50c32d5dcae39c4d3affc558abb73ec8108ad0234d2430cf6fb82abd4c5721dc69c1925c9e9ac5d536964841ba72403ee8eb00f40ac20e68b5fb2f00aeece8d33c455cd44383e801c0c4d2ce9b586f3ca822f20bcda2d0b4afdf50f5b70bb62e2f4e8a0c54df49464e267238ea04bc4923accae8b4b442ad336c3e261a9d07730ae4fe5da81a9c208ad203c409f02a04e67cc34e7be89e1d2d8f3a034cd81fbfc778a8f80e9ec439d6d8cd08e16174f27d5d15252bd2fcd75ed47abf74b897bb53d4fb2126b52fdca7888c72742cc8c345f49558cc0700d454db8575a0112954f39c9af8f1b49f26a44962feadd85bd06cea502e3ffa26f192d24108e5d2fa08a33e3b5ba36d341a6a4a0b8ca995946a383e5a45634062cedb276285313089ab7183b4208f3ee31f8d2cf56862fa16734ad4d0b0c72e7ce591f01b80203903cde792445757fd9b3584f028f064d36e84a1ec15d5064d75960852c39e74f5ac93ea6f1d490c3513422078869955883d899e5c2148ebad9fefc3910089f23f3b7104d8007086d24e9c7d9bdd2c14a0e177ae93413f1a2ebab1fc96d0df235ad61b83b7f139351d471567f4d0e2a16e3c418207d5041e54cf111a4c32bc900388ac1470532ce346ff3544aeef2e72a60f4ece9c0bc4d400737dbd5e12789437e1ba2b98a92f0a66072e0c57f5bbec0b7eaf7c0a74007d3942b3da9c8ec40be3f39a5f9505341b3a0c6efe884b9ca55e3cc8e9e729173ef37087830ca63c6627885d2111b1727458afbcf22592feedead4329089fb038bbb880d22e5644ef26ae69002133e12f16c4241d2b238c125f754ddc1e54d50082a15f09590c3f840d4ef2ebda4f45fff06a203e2a4e2120e00332cb09cb332faef75e1d0b4c9c54705cb8622f34b69829d7951279170726458cf5b6dc8d9f3ac147c00baeba8037015decf221b0937ca2bb258e39bf3c5f60932123462e456a415551596afc822be58e1134be2f08d5a129eac0c9af5269d98b343a792c532fb1480279bb15350691d0661d0cd8f18a0d2f758965a0c56584e2ccc30470a539e369240c231b3d91fbcce33ce6752478db1e58b54105cb36b3c80620442e9f635804f29dbfb4a3a51d25c953742e4515edd9e64080baa852fa7a72b057eb34a9d3f19535324389b743384c13190927bf877d25a49cc4e4001934f5873b383b88e1805e833ab75dbf018ddc74e567957ec4a235e0940deafcf0e54306596d4990d0095683cbdd3fc8b9440397498027f49698ebcaaa7f53ded66717441aadf5394861833940f940540fcfd0be22c2fe333bbd5079e966bdd5a5328572d68927b7ebf67630e42d575eb60ae8e3c2f5e4c43fea5abc34b4201ceb2dca71a7aa47751571b68280735badaaf100c27d88953732869e48e4f5e9910647d85f7be2289eb9b78474dd21982ca5a3b37a5fccc9f1eb65b123189df2072d29b89784f203b6927e366971f1bf29a7f922986cc4ff483e88f90e8ede1b134787ca30875ccfb5cb0f255af98829b79133683d1eea847c59d76314af9fff87313241052b34a59c0e8275a524e9407d5faffca8892f41fd3f5d1cc9f8f7eb96598fb39f0e6f3b0705f7b1a8002a30d7b1df3a59d0aab0a2728d4e88095532c6df6c83f60e43e2f83806ad5892fa9245f6b45a67ebb548a7ae3deee1528bf2bea38ea7e265db04f9c124e92bf8bde14a8e735103203fa97036613cbfe2607e70ea20a52f3ee0ca6a8bcfc2dafb63053cd4fb2ce8eb3a92f6725e1507f7e1038a95e25db6e062685df06c6e334c9d3784b387d02ca1327ee1de192a09500072a42d33a1f7a922612e26d154a7321429de6a54e3462a483f386b6b0d235553be81eae132ba82c0dc270fab3909e4de2b787b93706d66568ad93f04a50c2546fefe81def15d231ec8ca2e9bdabc7005c5c1c9e4512102839a85fc3d728bf3f6731268a5d370b50c98cf985e021a9bb170219e8452ffe289aa1a295b0ad5795f1d15abdddb8e4d4a6145bb9106aad560b2f14dbba99f2208a91d95d62539a2061859cf98f26635b80551368e599752bcba21e6b4589588751605252f21a54c0d097ce1b812203496ef71b9c90956e19f4850680ed739eb05d475b23b322ac2ff1a76fb03607d2a71bc4355b7183c47437661451100b9bd0782fdedae36f88e3e8bde4a180b601e9d89702a23070635a118782ff0de4e75d97c380c079ad0b2e028ba51dfa9828a5674519a10b1718b5ae3bb4bfce3f66608127660b68ac294ac2984d1f9c886d3867d04b28d5373daf125526137780217a84048a64340dda13e3204a8bfa05f0028b2fdc403885d2618943d6283a2052c82cbc6cc39510553ea00f3a68b44a75bc1af9580db44f295963b366becd2316f12a31fb6391f4aafc7efe593f94c0a8bae38a820c8fd4758e504f415afc53c8379c5fb8edb9d4b73894e9af9ba52156ccb391d88ae447b22acfdbc2d4cfb47512f4a8d9bd4d2e59a1f4d72c0753533d0348986999c1a689206e7f946599c93e4897b4d4b034d5ed1ac9510cfaa1547bf4e2dc3fc1c2e6c721d28052a08cf8f8fcdd36ce2f4d9b0b8cd361098604d20fcad0acedd62b324e2d34300932878b953a8022c8dcc23cb9c58bb8ace022d3db8688a507dd36c6d8cb1250de81bfcbf73d54f8491f0c813403e7955417f6dd859f3a89c3f16f3e90912ebe2a358563eb087d7a00499a6f19cfd8640bad5386789e1799961b7f88b562740454e22898e81d6285b9cf83c05eb0ea89736c3348747e6baca34016000c8d70f73815779e985b350830a0ef490fa988306c3ba94ef7258fe89f2eeb0db07b3ea766b073e19f25a09b46915e8262ffc7f1317da458fff1727191724b3d5339d00710b35c3a4b55bb4a420408093fe11e2d78a3ff4d8decd72db99ffd7da608f8251278b7ab5be7159bebb5283964f3259e51c485809ee39325d007432de0ae8ce3e77ba044ca3cba5826e89428cfad94e51999599f49ff250b25b914acb5f14e3ae2042391a9a33ed1da5ac99a895b226d805b1963968c78d8f4cfbf30e3ef69815598b9a4d6e216a646f54d40551fece9eeab3a0850098fa95559c12e22ac842940c33ece58494ad9010f94970f40f84e54e70120f5ddcdb37afef528f5032d49010534f5432b6e95b4ce3413011df8cfd691d9330f6995e282097c4921284d5963ca8beea82123d25438546904182c4e72b3444c46d5fdb5ec248b2686c040460f272ae84d5189131be0b36f4634212595307859bc0841003804aa353519d3f4de4ce8290d565fdb1253fcb8cc66eb9657b6696c31df1104b2c9e9489f2e831efb833afece178c3bf2a0d6d7c1e59a340d1230495a95d60325e8fafad9ea50874dc229a423e779e84d56993cd33cebf571581799a4969e9929a91082ebb85670f84a283699dc54f9e8bf8dde112a9a30328c53f94e2c3ae49248b9a45b5801eea02540e97406f0f92043d234c626aa89e74e894ae12e008574914403051410024175c9fcc4009070595c4014e1e5a550a744315660c845016a422130ad12bd504ac4e0b501b904e47ca248c03e1aede088491e6fe42ed288191d2a2d69198a8673470048e48a4b45e2ab4d87389ccad55f2035d7714eda502b77bc8b77d6fa369dc7d410568f2a0eec3539263d257966629c5b12c25617d95d4c412f598f06da85975bd8bb88213de8a8b01688ecb35e24e0b23202ec2988220de931085bda52f34bec1949070f838c8b3b6849346633cc2601e50b352776e3e5918842e6d407c5413d804b20f35647bc4b76ebef7d09f2ed7ce22683a4a20fa5d61e2ac954d4e87fd5b71e9d53954a35880c6e2c0972cba391b22465a50c819ba399c4c3a2135217d0b2d73b6f5e11c5eb3d74f30889e848e38dd27744cb0878f5336552917a4c787b33043f65323a21528160ff037f5cd053a8e32f3dcea14ef626287cf058314f59db836d312134b0f59aff859bfa9f788881b49974f698d5c550cc2f7e1de18445d90b68f68702a2c565995fd72228119f65042db902c376d3f3254d2fc0319ad6143b2c89273a3b3d04b3f7830db38e2d378473fb93eb70b1515228012c7b34d1fc06174ce9dbf5e70aafbb13b674ab78ea2d09439fc83a01eb1d4bc83e035c34b10b1860d8af7a51618a9930f9f33675a3550785c06d1b8d40c982355433550898802c2efd392ee50af18a4c154025263354f4ec88d073ea158d73ec75861339284e750eaad18551b8c68a056485d789137209f2d8d4d8fc983bd1c037d507e27a7d42c29c3cfc56ba1fd8c9f90559f88c3e3d116b1eb8a6dd514404c087c0f324109c94343303efcd9b572e738973905f5ecddd2fb35061212584b7c7ed9368946f98d62312e887292fbdf1f2bfe0227a38552b0ae657740f0cd34494debf7ce8384a48044f093d6f68cb10f5f5bf7d5dbe658003853d01b27edc9c0478972448406985231ef938a99989e279bb9c22e566883d23104d32536261834406245aeb064ea6b2869d3594005b1375422238385c5f140979a943e7b252027afb6764c33d09c3e20f3afc859d25e2eafc5284b40a0652e7736148025c4f07e290a3c05d5e0a87e59513b9e9f26934a79267d787254d7112707ed9b29be5a3b57f0d809d6be17454452813f98e073ac942005367226ea84e719c948890141709969e908dfa00a6c48d2da62ab80d850286744e5dcc85d7322713a4be289cbf19d00d4f05a2999f902498f10061d9a9e4140c6d3c234c148c570dcdc2db7908420cb6c412724589798e21487d2e866d3bec7592be004063acec48184999d08624bf3ad7368862c989e011259a6acc23b22f69441a5049269be995921c139e038ce88f4597e97e28029d675835fc56b8bc9023cf9c9596953b026a3b2cab188ee29ae0a47294a8674e08422c95e2a5cf069c3a193004709f394665091ea073915b228a3de8c724d8bb0691ab0ee942cbfb2d4570ce0adad2b1cb1108a639bce6c349fd932ec645ea3016a64e65d9aadfa526c39652796aee3fec1b534abcd6691791b5a7502e5d59e566fd0b20d444597744c45b5d3f8d9e94b5e8903ec886902e57003a0c8e71d181b0d69689038a40151dab0360f9e04df59ce99325c8a43e0bd02f9ad933fd287ea973389b97c908e191a23d022ef03189348f4151e6f5d227f2bc5dd589b3fd95907583296227a9de0fd4d9747d5200bb53ec0f943f99b5fce2bdb0ac3aa62300cdb94204a3844ddc3e9f2b1963377fdeba392c8a55c76635629de59f26324cff69e365867d96a904783ea4904f424f7097c2e1f45b276249cc50414beb1836143a26aef5b020011813ad54af2f83049c7642083000f3b985f892f5819fbf05194a8d09507bb61ebaa0898abcccc00b3305dda59faa0b1a8c5edfff45037a38ac7e16814ae8bfbebe5b297834002e08d4c85934f7233ce5126ed58cb5eb56d98e564238908f900d593848cc664bb2b0b05e69abdfbef018f8a969549e744b985495535e8346b948b83b527bed367ea065217c3d02ac14d52fb518dc325f98b9afce099435191bff0e30cfc3aa56f02a05619873a19af1075f6701efb7dcc36a55626608e35789682549e7b6151b3e77954280f3551301a9bc91b569cce47e0e195277b7a042a946c604d42b4bf82cec263283bab2c124f918450d3d549122e04330e5717489d719748fff0f8622d713190195d140feb0bb2ee96f21e7f5438fe93952bc60445116fabf6dd4be2803e6c500254f9ad62eb4de836b71a2acae8ab59dc0ad4a23c523eb8f9d479242bf888409bbab259e416213f473cc17d2f8d1359755b81c846d24e883be3161f70d34f2fd40b8a9472a8f60518eae16fc822b29780017c990a08469788f70c36eba9ee5a97700ea2047083c2e74fbb49406d16b41fccc5137671d41ebc0be0607b2a6cebf59a1804640559028da71bc13897043887243bd35546f29fe5289652b627a418620c4cb86803e888599374e49bcfb052cc369b70910a18b0a342762956f13e5638f5b5006ba393b52a9acd9c14be62e84b4287f134b9e31344b2fc28b773d8554589a0a31450b775ef9a6b2f5a99d2b11cc450a7751941f3aaa0cf3c3130f74857b731dfc2b26e2039155f281cb4aad7e8f033282935fc676aada7b9611f1b686b42870ed72019a2e94e5386c2245939fc479226bd235862d50586367f501fefce37b4e0a7a505a700e2cb6012a6dce799166287773da085c9bda37bdc1e253885f67601ff9ab853533a2078fc9ea4a5cd1371246b85249875967ca94b902e11b3478920affadc110d89557ef324980f9dbe936089f654434f60060958dd4e372d8ac8a7a9dd440b1b21f558fb03300dd99d4a55acf9bdac9f0d8d40199aa56389f20183b86e7431c6f290296906978ea1269f71ea4fd28ca71b8239437bc5a64e735325e9c2cfaa19cff5ef233591e4509bab2031fa7234a6597ad9b3740f3ea8c804e44992d90096653d67f68395b9862682ee3e7807a6d0aae1dce2336953f7851f3c0125335442ac2f339839d9b54d0742118e5d5219f5838f490e6fd20f9c200585ccfb7aec3e55f7ffc85ab7996a098d77d6f6351ae9a1f1703cf995a1d6ac6b8da633883d2029ed5c0479b9192578f873f54cdd3041cd01210edad4e2314f45b4bae539214e4623007a39af3189c00b126211bde84887b65c2872efa7cd369b360463778e6d7d748d58a089d8f1daf18f6f9d72c0bad6d9b2cadb9c5e684237f4b9b0d454a88d1208c00f3e597ba5c7d1eeb2ab448c11cb13c42c9328d12b37b71d8135cc9b4d9090f1cf5223c52b6c01949fb094d01e08072761235b702de15abc8b7b5eb8264cccda9a554855f2134208cfd4bd815433c8e51ba42914ebfaec471224909828c934fa22df44528c348e0202941cec09b17f942ae82c324e40feb3255740b5df13c4cd69afca258bd9b9d362434bea24355f480f9ca3158df62f86a05350d5915bed96d18b4459b6cbe8d2bd49b22650abb238e475404a080dfa4c3b31238a2c364bd4b398b27284040cf2450d38f894d6f4a5047bc0bf09c8cf4c68089465ccf5bbb0e252f94eb235c8aa44784c89d34b69c81a5217613ae03606b17585286b1f48c055956d055e29626be346624e3356f212f9f436ad6613ba85dc727ccee730908c8c41109e8e442965c4a5440286d56251422067447492e4e8d57826868629b21006a394077220f65d52e93db5f3ea5459f73763e1211a41dd22a75f8a6554baa44b508c436d38c2cbaaf8438e5f031b8bfbfd393e685b027d3b0966e379595465130b835ffbc537910e24af8d808045985b668831e80829d0544822b4797a0400aaf1791b812fa1d4956624e63fc805ec5b8d8064090a4927c56d2bd1cff44e283e9e6f6286db2593b2cd45edbed805e19125806f0948c67d30abd0d0393f221355954347d2eca41829da490f4dfc9beba08282b48a7619893b468a6f369aee2ec7533d543fed496784261f05c53f135e5c28222f914196c734c6b925490921019db91f69c82f72890c76b66effe34fca90c093324ee17643ae3a2daf2ff579587019542bd41cd109500385c47b4a824c5d081c6995d55a41285bce61f84a5556b777c5cb442011c88d4912565a3600505a8be7ddb943deecc051691e4cdaf6b1e449ae0d4a930f0bcbe095a0017cb972ff49c806fda0437ac2f785331f23ed38d1e084b8dabeaa67a24858e66f7a8f64d1f0e6b29b2911d3f0b5293e10177cb96b7fc8999da97f35cd2d0b265e33987bd1d4e53592eb02ccff76113e336bb61327f5e4c0a838fe8251fa4e8250a2846600828adf68a20ad2d3a0c8caeec5d634ce4c59055aa07238845e6854935b947489c396b4c0864d49c9b90be345366174b762c3d810468e525fd54e53a2882cff3a7ee131b2479c38e06808ee56513fe02ea792d2ba1ad5d40f8986d1b379b3ec7e7f9ce52b8be2dfd182c47fcd568442b0335794fe5c522ff75d8312238fbf0d58007827111098e607dc7b83a8f1c51bded61d1f0a196ea08b0945589382994cc999815e6caa42e1ea05bd410e930ac6889b3cfacba76ad848361180ba99bc7c8ab03b48988bd5eab8a8654cd78086c4e39cdb8ed4b3e41c8955d33ff57480d1ee121bd790e54cf9484202a6824f9cd4fe5150991f8f12317fb5e947f094a4fd6592cf847957528eea6624fa03321989117d5370ad954831ad039d6756a4944605391dd76d2c474d649391dae8e704318439e314f135e97aeddb9c0e9c5e7c1471eb93c5423132a87549addda7c93d34dc38feb8cd25ca13054a53d5930910ad7079afd48066ef58be5883f39ef92fa45e604880db7830d0b38a9718c700899625791199c269e8a0eaf459d33844d0518f307473d3154e7e0362b653eb58933d31ee2d03ce4bfc8ef634a5ad69536f0dafc44c665116a0dc40b3c1a2a2f59c9d41097c3c55131dbb6161bc1c9cba4a145efb9f0a5e045a9b1875efe594216dac02280ef6475c6f4388140e1d9a6c92381012b1e62588b83784e48c7ec637b1fbb77e865554718d42573119f3ebe84e74bff67f31f2b36d6b2b9df3e333c13b83f33411b2d2b5aa91099ebc0b72f41d502e0494f4429c76dd51114743e548a4e044d42ead54f555cb36ee84503ce487518c3e608698b7f3c72606e3b1d5f0b5a205c08fb3c5a9f774d114b509507303be0092d021a64955e7603fb82cdb5b5d891d35582373cbc1fd591f48d0e24bf85f4aa720d31ec2944b381b85be25aa82e47bd6ecbd9f6b205078bfe34a02104a22cfabb59d4a5b8cdb636bc3b4efa5b5e8910848de9089c6eb9526695edacbb6f1027b042eb270d38c351d32e0db0e4488094c0fe07c8ad42fb9b466edeb800b68882fb77afd3d3e45e02718829af392d40ef8fae5a5a2a2871aeaf9f098f89755d251f03dbcfad1bc35a04d23a0ca3da84871bb881dc776ad8fa559daf53ea91386d033a0847bd19fa2aa78eb7d53b36930a00dce7a46e8807fb079bfd199e39607ab6a44f8c098ff2ee3c4aa299d959496c3895193cc3c393292a4e4ae3491d8365dcd0fdbbe52764b440f2040c2b41e5ee766632c385d77c7908ca8060d00f29fb1b80a9620e44f1717f4914f249f154443391e2d989a665fc443996e89321e9cfa68dc07b9596bbbab2b53523d926900004aac438e998ec62438a515a1b016bb5d2b90129f0e8ae3bdcb4904b22660f89982197f1a3acc28a7141009f5479f5bfc68af997de78e85fa195856e53591cca9de409ff808c6f761fb51e98ef0c3389452a189390c53dab00e56b0377ecfe0b7bcdc4fccf08ee183a3b45e9cf36ca937d2042344468238e499589c52d494db007c74548c6d4aecb09d873b44381508152991e5779f1e079b7e303f103164e0992ef8a14e69dd4ca34973c7632d04fe6a15df35a34a8751ab60c5a20d5ae3a3090d244a790415dbad242650914b0e49795820b78b48ee8d75d1a624c594cad674535687973340c6957333887f157a87a72a13653330d46791206215ecdcef0059ccf881f680ada479713b100b09e8565e209e5d53e4a57ec6b6269af844c5371e9260363d7bdf5957bb6e3ab34ff4d5b9f21443483e7624129b24038c2cf499d0db5b432a23fb6241fb09779801ef1bc2e7b2a5853d2f03179738039975001699eb0ec993804a99a692d52876a70bd005bb2a6e946e72c1a757ef8b14191975b4482b5fd69327d57e80acb5df167fc0ed0d82c5ee3f7e274210f890846bee50065c4aefc468988abd10151be8e057d442556849077376357af27058408d167e8011ea2422dc98ea36598aa7452c61bf311241c14fb38167f0990e055d7a51721951fafd3320829f14d0669104aaa96f1f76bf254133c4d84b3f518fb0d8ff7440c0d421513da4e4051cc030e2d2b17faab26b7902e7b533be4695014c94b9202787ef2d0d3b205b79172d13288d6f4c1603ac4a16f24fb5341b9c9345bc6fd5bbdb823f3592f160c631b78e45b2bb2f88af4eed88b37bd5a71947feb3d81a3ec8875852ace09aa0955f1515f30c402690f6d21f4b24952d7c504f3f3116513f5fc2749326795247b2bbc3403f80744751e96549bb173cdc82fc6f448580a9139f1330e1a5509529bfb4cb0babbd9e187da59bf6a87a53bfb787e34fb2962b029f1857477e3f4bf0b289b9a638b632be0d12e13e08b0eb964104ebc8176f4b9ccfefd96f82209414c6f0b0dafa834197a25f1cb97c1a9b768c59250c35ebe464e052c9e82c1d5120bfcc1a80366e422c9f00550d8c05a6e90abb35d2eb3b9354f40991851a8bd292c523fdc74e8405effc65d137faacd8c8406d339e0371ba8434001882f484dd2af08b6297f0081c6a2aff6a02c8fccb230a3038390cd4460bfd681ae60aeb4e90e05e99869394d65b92522a481363d99ca550f3e7ea02129280024063c9c65850b84088289e3854b9b35e7153bc49b6e7556ff91585fe345b39720e414eb751db5053032043309c093d603ac28a58710954f0902c37ea32990c2bfb76cd74e198394e10bdd4c524bf8487e3850995f7d523730d8e0c2ff42eb59ff98f55ed93745c467db2990449e57458be6e7c58c64d21026102a28560edf80ea83b08fff3bb7bda16485555fb727268155be0f209e46c2ddfc1eb37c09ff08fc487a00101c8d029130153e2252ed5e91c016023ff83db172c6b76cc3a22a9f33475ccf5f3729f780b757f7af1460e796403f92b09d3d13192243a5dd2b850837458aa7aed2984376e584078f14dbfaea6d23cd6312d887c33fecc0beaa85296276308f8830a406462a39ae3628b4296dad60ee7f218bfdd05deb946d37580df53fe7170662d8a97bd6f4104f2fc190ded2a4c64860d81831e3743291b9f44f53bc5cc0db9a4a40a90910c869b02067cbb4e010e15eda337ab2d46f963e9063270316cf2585210035cd01c8e2497ac5b1b53a05ded844e54c9dc8284b90029d57eb2bd92028103a7a253ae792ae8a03aa2bf229750ac804504861c904a566cb0499aa1209b184464cf2d7a849ff2e33d89714579bf8c4406b2e869fc998ca03dd13df7011d902c55ba6e3026309542f944746ce506bfa49de3317e62cbe481bc27ecf4315d7228b24e9d1aba1e6155645289c060b3f8c9e6711b96a75e485dab681c260d8e088c248120450403e9bf09296d392c837405be8e6079e3250befe1cf01222042643bf8096703615789186137289123dead04c1c83f8c54354e0f0240bcbd56b4501b7191ca997c653943c4bfc3e0a9d1d196ee86c6ac8f25cc75ed141155b6a0fc2a8b4f739f0fdccee7e2b656409d37868f25a26427d5558b440f63688d5867ca4320b6d4afc570e53ed3e8f591c61e9365e332c59b65c4ca2f4af128d288b44b8449d787ea84c2bbdea1f2142d419fe138ab0025c98d795384430e486700e7d85a225b8c240551ca4f0293b2fe16773552277aac902a6ee3e227d168502fa055c83d07438b6baf562a6fe31d239ec903a6f434f3554ff861403373a59b322cf5bbf00cc668e94f32b7d33750b3ac8c9c5c8500b74aeaaf38ab586bbf22898185d4c7159c77e41a6ed402580b38b2f12a7ca07cf2b432f1dab09780c73c9d84618be0230abf35ccfca52803aaa0cda60b2458bb1143cbb54892cfd8ec49a5f7a08a835475889627a2c5889fa1b2e04838091b8c402f626fbc745512c23c7813decbc2fdc014cb977369cca5cae68e4915cd09b3178d23be449c0d13856654c80035e514dc100cc9039e40149274e92bc9c9b9febcee71748c314c57c51805ca968b89a6da542817f0314f629602e801ae3a15c6f0f7c379cb6a757aa30e3e0493e302f9dcac09ba430290fa71c242c0010245a67ff253f507e611c4761b14b9bbcbb3564825b30afde0e57d805045c7b1c214003a04906fff5aad7f0c634d58639fe3e01c868408940b155abd004d432f044f1db1d91fff4d109c89197abf0fcc40ae6be612ec7031206092603fd27388997e6fe3a4458b2944f97405450a439981fe6109e6681fde2658ecf5e327303e974207f895829e808a4167c8ad2c922181d89860f3c94acee1af1d48522c9055c4bdbeb41b1990883af2ef2e6e902041a4f81fd94b8fd22a44ff44dcc18dfc87de28e23251301718c43540ba5433d9a8c1ae8be331ffb484e4a3083910c283dae241434e9cf37279ca3d93b304a9209e5ff3d8778d2f25b5e98ed9083f20ff845c7f2676ca398058793ab254b597b9f4051754c46f05e9572935ac9bffc3348d4225aefc9e407013980273bc9e6aaa6fd593d2df3dc985f0519000fc2abfbfb92ba576575a9f3d0e9b5504f023207dbbf873d02557d3a9b555a2881fa3b052b18bc29a113a7e217f4d4ab8790e99c881694e1c7714a458f50f865fee341d050cc55c19801a0099bd238f8dbbdbf5594d4788413706b0ca3444e92daac7082a614bf444959fa38ca9ce58bb394820f6136903225304b4949efdc9f055ca5876f8520d9d350bcb20b8f1431b8929db5e471e90ec055a8232cbce23184001556705f81c788a1429cec48884f6f402c50bcf2ef909926ea624cf384aef860ad173b4c8e51e67d57ad367f1ec8cee9a53bff3f8ce6f4ccf82f87fc915e27ddf5e5bb1b0556116b82fcff360f4ae96479cdbf89f17eb747c30c4e4993c7075d7b57b3f8d5ae2a361185babb3d5e78f9a49e26fcfd234d82f9780ec7b957b474423689aacf5318e74fe3456c8bf325d03e62b08166a9c13921a9d5329e50fb626d1c18b9524f30951a420769675c35b1af928861fba795074482c4df2967bf81dd095caa4d85b35483fd814fd6ad121f074e2006625ff41aef4b687cc75cc459655ed425a9ddbbe0f320f032c3588d3af5949b06050fcf1543b6d5c11a679831590415385e7664bcad953364f960bf0f410432c99614e225a925c449a60e8a6456358c70c7d0c7be614cd9e1352e1a5656cd3bfca7714b584ccc584459e17cb9dc8504b01cb2578754be8e48b3c9d2af71f4a6743ab766789c22ff2eede74264fe0d2f5b2557e93a52b724250805d21b54893b6b04c4b6798396abb9b5281cb9ed708f08d9e46672852d803b4c966f44572dff088f85027f22174375e0379e75a22ee447d1bce23a560e90075f1e329e2778dcab8806d7f5dfde95b8b3fd8483b56e62f9b91e365b54399ba09bbcf64a5d843b893a014ea8cb7898f4d38a8ba290ce90580d03fad9f18f4aba5289280cbf49908bcd31d70a5e43799b82487a2b8dad0040723e99b7683ff06319bbbe3e489af8019ab319ea48305ae9a541ea5e5fa8af7731d7ea481f0967752d03b341b3b9c3ae9107a0adc1cde8a2c39372ec6ec5f13f5229e101f967551e1337408485f9938915168315215e7a01584c093dafae85e79f406f038407b46e31f0a4d87198340098e01aefb66b2657f1360c0eb55c0e342a4736b1b31d4057a1992058445d25dbd4bc21abbddb8874c9101370d0c5c94d7f3353f0391b21778e330bcf1b0a1965c0d9bbec2327598c5d051367040c5d1e00b25595597bad101a4a8db91ac90730ffc3c2b0e37601884dccc295bf79c98969de659473720e5ae0f6b43dc758498241369a5430e06063a3aea93b689f47b8d10cb7edc2d56655328f8b4a60f47668eec80ee2f123bb9df0af6cb03a344f924813c91ade08f998a0afd4d9d4859903aa373125c163790532d08e09d43228fe21996251400670fc20fa5345f8084a605715437f4206a894542e7f1d11ac40b9816959ac8ed5b5b0274c408923d68b36c24bd40005b2c80c2b56af1c60b5ea89c3646820abb1b9a4fefeefb203212af50d1fc5cd04d01938d732a6a0ad9532206c3e6f80eb955f0fd82a8275da2cadd3c79c37c41a8f2935a7a262527b4032320894439dd0b46f8b405c31855f4f733f6443925489693a554beeed96fefa66c2d4bcf68e95e56995fc640f73d370e0737f841cfd3ca68dc58ba84e3e1c30cd6eed5593b3303d42e5f6381855d23a9f0f8e933e828bd0383c9f9039914f2f64cdaf1b97b7300a4ead9bd056fe9083bb5a022111c9453e89eac85d62e1d8cafbea090e4bf30428689da70908204c53e90df4c901862a0f9f894443e86a24e8a965b2481d60ceaacfda9828408fb35b7556bf7e36ca44c1f3c3a54b92ef88f2132fca8d670e951c4f50be9bf09248c5bdafe59f2814aaa5610841cb2623b99591ed25986335f801c005fea247a2689042e044fa40fe2bd63f6b5fdd693da6f6c10d37bf646b7d48ef9a59d3fb2752a9ef7a377ff6279e3dce2916b62c537eaebf6286c946c8d2bd33f133bc878513be33ffaacd358017e3c04906afbe8bd372a99107a0fecae4418f829944f28622394341b357dffd93430651c5c4d02759eb78f5264a1ceea3614b24e4fda0be8d01bdff742f44cc2a3d8e4eb35fe2203853085731938f0f2d4ce60f389eb28703d5b9ed774984ad88889e83c4f51e647339e381acb61458345ddc2375c4f6e3ea86864c0fe699594d28f773fa992c0323f5b8974acc242bb4ec739e07f6dc4e841ea2d9394152f2ec6999b2e46c388453bb8043b1ed41271d4353c95b163555c5a52e9921aec52cca80285f780635429e6008a26347187c1fff2355f27213b5bcaa5eef2ee02eabec9813a784fc7a5491c083b04cf513bcdb441148dc33000f699c5e728c19d803b556f05d4097400935256f5e08d75ae28c08015ad7d81e3e0332e62f2e448d84ce38173e5e029d8c44f8b72a274277489e3c9075a89ea8acad9492260255392132c3e608a05825fdcc45bc83367d8bf4990829f3205788d520ae13df7e2b38620372028d64c7729262d621cbf6970706cfa0dbd2bec38d52086e45a8002d05aafc0739b7ebed8250d84b5d64e7f853eb80d855ef2e2b80536e6e6e700848bf2131828885b617ed550c368b3cac7ff552bf92665a40a78c25f322052c9f9b6a6edb2e86e70489e0394c0e7a54a7a566130787b367777cefa92535307d1266d61e86b86a020b46df2e7e9b9b4a09c6df8cd028851dc7e899301f423be2c6b6526cd6aa6f9988dc909553bd6a702e38824e81b55805be84c3bb3c03924eea4000621066ffc7e25e1da196e382065e32db9253e7f9c75f20e85c64d64e8873f65aa105e8301bb639cb407f44df9cfc9b6087ae8a03844e2c2a6afc3e7830324a412333610a5ae45f845b0c32d2c139801c5c40fdac938683f06fb407864931516a682e051546ff7b4499fa2791e239590aa84018c334e6e8288d23428e25983e055c1cb7b014a3351f8eaf3895f0089e47c9dd5e7cb2cf784625690d10390ab9ba295d0c04bc37fd8545cf823f2860ec82314331228836d1a903dcc8a190f254c1fa0e436076eea9d20ed47614497f50e7d58c03a69cf529a53677fda1298593e641c62eaa09dd455b215f201fc026daa5908fa377574023ff54de13d531066233c00386bf233583b21ed294b8bd6397a3c00599b4d9e3ac8bbd278864c98224d7699d1686c4e9f5daef483d5da0261b7ef808f90d42e39421394b2271d45eaad89ec55f265c8ebedfbcd0a3a530449d53df36b893d40e9efdba19a8238d4404ee1cfaef00fc4f0fdbf8444b89b22c92500588a8d7891ffd95af0ca2e855405727aa073792b843b9c3aef2f5bcfaae63f54a5745ecc8903fc146ec83fdec95eff0210b48bdbab74810c23783772767a10635f25c276f8726f404c42b7de452a30059ffcd275368cbfe93c247b6d71bfb235930f23022d73e0dec8cdf7cdfdc9be4024d7010385b8c4de0934ec08f8bdac2e9062caf473bc4f4fa2891a6474ff0e0e2c2b0c9875d7713add5e67ba08c75e13de70d597993835b39f2529f572cfff2eceabe1594644419ac62fc6fa2d27138fcfd529c41b75d14d5fd3fb5893d500e3b51b38fc910f2928c820ca8c445b80d0ce3af3f83f330b1d4c4770ba7397c6494181decc440aac99e5a400d837004ec5405e8234d66a57955ece7e2c004e33d05e65ad358dbc40c2a54f7c3c6c54f9b8853076e7d9cbde025853f448dde8d686e7acc65542b8f863f87f13c2d7e3991f8bf8a70fe57029f3c91d8122e2ebbdc5a4457f23456edede81ccfabbfaf2a64ab1c301ae48980518223e8208f12e8a58664a039aea286bb2d0f70595be24cf48df0ff4384c00315f7c7f75cbeb17519b2a7304eb32acb46ac868a35a7052cf95065f28189e70ba382331c4b32689a8cacc70bd1c036962d56d84de503d7c5873f086102ee28f32957948adf272b518755cf1ffcaca1b95e60ac1e7f119fc0634ebf2944849c50f535c6868bc61b11d4d6a3ba3bca0a19426f251091f371d224642691880959740353c45fcf10800232b12110ad002201bb085905b8950bdd45860870e69fe38687cfd25827fa55df123bc1fed6552093e9bfdb0f83897bef57b888219004ea563900e3bb9f70987eb0381ed4ae43c1d269c99ace7f057ff43d60262e5820373f6e0f4a03ae92210b98842631e4d1989c114923140d30c2006c273f0df8f3a0012d93784a28a6f530584417782402510883eeee0833e1f5fb0c6df07c90e8f0397480aec2aed0fa411bc1bffd014615940d3b9598b331972f25c3824ef14808834ca92a3e093e245f990043490a4c5cd7cfbc27ce60f80e055aa9d4b9ac95484c9332b199558c09c79f756c19ff88a92ed38976e0fd62158eb3761135aa88b384f854933f31c508a5d6598d3160ef3969af1cad354734092626e81fcdd0373b73449f7caa06586a4636cd23befac99db095406ef9086989b4c08a53d0f66242f643812cf94a8cb9ba29698910fab20616d4de2b896fe5d49c0dfa7e1d0d9902b077234aadb5d56cdb36999650e6383afabb55184da2278a47022aa6c80595b269ce2d9392e9d309bf08dc608e84553050089995458e38e3e3993c8f33a1237903d1ec327a0856f87ce919ce38c4f0c3769a025f4cf3a1525005d07f1befc073b4c4c7b11c344794116e08a8bca16054318ac6bc008259de9e1999a0a0f767c5b584051c95109f81c000ae48840b538008630ea2078ea670ed85a49c901ffa213df4d46aa5f78b25fa5b4c01fa37bf1c3ade046970cfd8b76ca4d7059b47dd6251d4a8eadf2b5c3ee4cae0f3c89dd94b99e7038c7fe97bfc2642d49a09053d909f7ab1f235215d6c8fb5b2a199ed0a2674568c35899d605c324c63105c9ab818b50f096061ba8b5c28337836821071e431a902b9d42c256b943e62ea433c5827a3cd8fb1754a5fc05b78004e8f0617e69d3a3d23249ce4fa1b558a094403b9549ccfceaa442383c792828ef92300039654bd5efb61a16042fe916e488453547e499988c9485c6363c12500ebcb5c841ec462e932086dd93037b78e7957bf94efd18bc1595ad2bec99f5278023b268083df857b39492bb8a99f85c807429450ac34bcb7ba7af5b6d3807991441f857f68c9929a26d722255288c850006f98149a9a9a48b301582a8fd64754bdf3370fe9054d322f837b8a3232bc19c9825ec082fbc6b8a07024a9cf1b8084a83035f77683ed487e134639f3f8cf8d70f850eaf507a282af637086f1264d5275ca0f20fd411bc1a0963235bcc9d903459a56e5514d628640883ee2265600d5dd4237e60f3bdaa2ab32282b19cc1574f48970d95042a866c02f2f679e847bb04c7246b86d3839da1406f51491fe6f683e02bd90f036f79313360eb03131d28980c8ced4024c775d3c0504241254944afbf5d04ea24a6c87235001f883e6b3a39923d88352e0c62c99bad30ee742a970f419648407d8f309c9deb8c637590c29f5aee3b29b56cc0e5fc5d98317847c3ae6fd894f64e1f7a518efb855957498c8db0069b0e9069ac4aa55b7d39fcb53202a890f912fe485d159a8549345fae8c2b5292bd1bad6153d5afdeefa37d48e38ba254d07054e74b7a041773c9987c6224e4a828769d3bd125496044cb0c2541339f9b0e4f8520e812063335441b50eaeb79177a344b70ea4c490521f04d621df3fa321ac425d84ab31e3d20e918844ea1f23a5048050f1b95bce62ca1741db53694dd320fcd529aabc1d6a10bc22229db41480a2ff31d12adb0f89734253a63d2b9b8f3f72f8b9426d25bdb52fc428e32c36d0b0c53e68ef01b890dfb79b2c800a54d0ae32262ccbc5020d28a0865b9fdd69fd9451a0e87e00d88a2b30fc3fbac84f5f035c7325304103f2a21481be030503322e87ce7f3e8898eb333b0f2eb35ee150fe510140f33cb28024792688b5efb0a97a8adc53c40ffdf424190a8c0659e81fb53a4fb03c31e765d2344253b5bc9679a71d56b68887da28a807fc3295463c3432310822b483246e372bec913115f1c06e0440da3c9f3ec190059305d585ee6034529e9bbac71a12ae86599ed285cd234907163689e2581f4304f3709077c3f9ef33ca5022990a28ef407603600d085535d1dfd4c8f2dc348954f20dd426c83474157005a6b5e176e2014c1027f2324c11e15265f520278a8df9f8bd41bab5391d15faef49fb78049e089eb312e2458039293fea238348488ab463254ba426b8498921dcf2baf02ca7cbd86a9e825ce30b73cd9b8363850d4c337283b17cf3656e71e2f93aaca9b3d218c8ed9a57cf53044c63d0b5e3e149f83f3ed5a5c1fce4d1ecd2d4c5386f7fb45f2c55f5d01f1b49619b7e74b9e8b0354de999e0d38c300c7102055e539f476b85f9ce4995ef49ff3cb1d08264890a25aa58f03e7b0a5d228188c776e70ab9e7c42ec305935a072ef69b351290790a6317f931bc1d609a481ac98f0ad8a287448ab344f65246015bce328a1e8c8781d892ac55e7cba1fa59720d1e34b31647c208e118da76276c402117776e324c94dfd075f3434b9729498c64fefe5d91b92792c4cc975b73804a222c71b298fec91b290f8515624b009a064e19da4094ad4260d5c7fd82f8283a0c70af2081fd33d2092593b1f5de87d2293e2b0c114d5d94a52f721253a048b9568fa742a934f9d09ad8f7a2b36600d0500b745025e255279c3fe1912d853ac0426434df3b1e5302d68cd41787f52cd6c6e6b8a076018e55a44a1cae06b48b008087c3bf898445077b1a2cf03690e33f643a22ea455f1a23d400518690944790a84f27635008f594a0cc60c84a751dd5e7725925d17fb70570d8029c2a83e9dc82c6d30914f05807595033eb8ca89a6a208b114989e76b9c25379333da770f4e2554598b08588dc2be8c9890c7646a50c1545546a6dfa987a32aaa9d739046cc9092cd199325840b72e8525e3a28738c58fb7d108a2778841ed28e614a11f76c835168f7ba42411eef9d40bc387346526bc86f29a4a0737caf9cf9644f50b6570ccf3f4b28fed5e8e2c61c0c2e835d48bba88190a99c01974751c1be52d334195deff51e3c775be044024719445e2c67fe29645c5551914b45825c0c8e977c6f06dc327d8ea22842f60a84005799517723533ddbc84091bf096cf0bffdfe079a39dc835f350aff5bf5487b8d969b44af0617d15cd25f4d77432e982047ff585cce84dcb6027b01110591bdd8e5f1fe927405298b2f202ab577a257522eb765197c60b1f64e7adc8d8533314424a1a395b1346a8d4200e6bd72a5a7df6919c62a158cd9787801ae34dcd6ad5a97a084e431fb4e51307ba98999fd58f527ee9ec2e8a53001d938d61001f0141b64cb479d5b3d62ae3ff786086f6cb5441787186a9a0470ca7ad0f56569d7665584a869f0258657d1503869a6ab26ffd618012ad2f808004b8190603180342036803040562033803d601033a031403060304031a030803620326036e03be02035a0354037c032c030803580312032c03b001032403480304030e03080508071a031a030e0306032e030e031003240304031e0318030e05360304030336034a0308031e032003100314030403320305031803030c03260318031c0302031003280314050318036003060358035803180370030a031a0308038a010306034403034203340526032403a001031407120305880103360302031a032e030c033a032e0302032c0330031a03560324031e031e0318030a03680303100380010304039e0105740303080340050a031a0322033a030203080344032c0364034a0322031003400308030603a601031c030e050c03200322039801030e033a0308030a031c03260368033c030203200328031e03ac01032e0314030e034a03020354030c031403a402033c0320030a0336031403900105020306033003600316031c03031e032a032a0303060338035403280326031e03480346031603030203680302030c034e05033c035a033e03032a031203033003037003680306030c030a0303520302030c030205180308030a031203180306031603030c034203060304031e03200526030a050e0306032e0310030803b201030803032805040316031c03180320031803da010356034e030803580304032a03440340030a0318031203ce010334030c039a020322030a03020368033e05032803080316038001031c031203180312032a0322030314031a033a03120324031c031c0340032603280304034a03100318032e0330031403120318032c031a030a0308033a051603480330036803160320031803340332033603020308031c03030c03240326031a030362031e03140318030c030c03a801030c030334034403180304031a03360366032c033a0318032c0306030e0326031a030a0320033a0304032c03160302030e03036a030803120394010360052603200318050a030203920103140330037c03700302032803ba020360030a0346032803360330036603031c038001031e035a039801032403760346031e0386010326033e050e0326033e0326033e051603440380010328032a030e03080314036203180320031a0303160304031003020303100302031203780303200320030a0376033c032e03100384010316034803a40103140338031c0332031e03f60103bc01035c03160338031c03760316032c0322032e05c6010328030a032e0310033e031c031a033a035e0316030e034203700328032a031a030303080318030c037e0306030a03060330031603030c030a031403780312032c05200320030c050a031803ec01039e01037e030c030356034c0326070303440310030203160334034a031e0318054e0314032c031607360302030e03360364030c0366037c031e034403220346030a031403200316030e0302038a0103b801032a031a0330032203460318032803220308034e031003340336030203360304030c031c030203420378034c036a030c0508033c031a0320036e033e0303560336030e030203080342034c051803260376032a030a0306036203020590010336034e031803340308030e03030203300308031c0302032c05120316031a033e03220304054803200318032c030803ae0103140312030803300502050c034403260338031c03300304030c0314031e03900103580302032a0504031c0368033003580302030e036a031e032e0326031003020528030c0338032e0326034a03360330030c03560350051c0338031a03280304031a034c033203e40103020320030603040312030a031e030c031e0320052603080312030e03080326034405080304032403440518031e0312034e031e0324032e032c031003100308030203033a031a0338033203240303b2010328030e03400312031203200305760306036c032e03180302039a0203bc020304030a03120310051c03260304035e0378036e0334031a037605060302032403100312030c03030358053c0304033e0318031403080346033c03200364032003260324033a03240340055c030e0342031203180340032403100310034603120308032c0318031203080344031a032a03100306031e03260522030e0316037c03080324035c0318032c030e0302031e03120348031403100314031403080302032e030548030c0326033a0342031603060322030203100350032c052e0314036603a20203b6010324032403100308032a0316037a0302034803a80103400360030e0310031c030e031203040302031a05520314031e0326035403400314035203400398010348030a0308032a0302032203034a0302031203200318030203080302031403160332031a031a037403680354030a03bc010303320312030203040332030605b401030e03580326035a0338030310031e03020310050306030c030803240312031e0316030c03040308031a0322031a031a032e0396010316036e032a03032403260312032e0302032803be01030a0344032a03a201032e0338037e031e0318034a0320030c03600334033a03140316032203080354030a03800203120346033a032003040316050e03020316031803020306030a050803100310031c032a0312030e034003ac010338032a031a031003100352030e03200320032a034a031e0303100342031603200346034403052a052a033e03120338030c030a03040346031403e001035c033e05300510050a03ea01036a032c03b203033a0330032e0306035405060358032c03020308033a032e0326030e03440314031e0308031203180314030c03580338034803040314032003a001031a0312031e034e031c033e0305300308035203030203032a031405100302032403100308033a031603020320030308030c0314033a035c050403340310032c030a035a03200314038a0105140322033603400304034203c60103034a0316031a030a033e03240318033e03020316030c03260346032c03040362031a03160342031a030203120328030e030805360318031c038001031c03780320032403be01031403160328030a0306031e033e0312030a031e03540314030c0316033a051403fc010310035a0338036c0304039e010306035e0332050a05060322032803240304031c03220566031403260348031e0322030603220334031c037c030a0328034403320320030e030c031203c0010328030403600304030a032e030303160332030e030c030c03080318032003160318030a03060348031c030e032a033a032803140504030e03100308030403180320031a0322050c03020306030e0303320382020322030a033a034003360304032603020510031a052e070c03120320030203080334030803020302030c0322031e0306030c0304030c030304030a036a030c03220358030a0304032e0322032c031e0305d801030e0362033e03020302030c03380302033a0310030e0306032403060306039201032407c601030403f801039a01038e01030a032a0328032c0326033403160322031a038a010316031c0312030304030e03040306030c0320036a030a031e030c032e032003280318031803de0103340312030e03030a031003620326037203200330030a032a03400303360318031603220330031e032c03120302032403160304030603360350031a03b201032603100326033e0506031a030603380526034a03140306030c03260310031c03032a030203053003100344030a0302030a0306030a031c0706035a030e0318034e032a033c03ca01030e030e03060306030e0326030310032c03ae01030a030320030a030a03280304034a032c03240328030a030e030304034a033a031a0310032803300338034603580303200312031e0320031a03040326032e032e031a030a031c030403033c051e03340303400303040303033a030e03030603030c030a0534032a03180316031a032003033003600338033e032a031e0310033a050e033003060304031203160303020336036e05034003580332031c03020334030603031a03040344033e030318031e033c050c0344030312038a0203be01030a03a00103031003080312032a0334030e0506031c051403280306036403040312032805037e0303020308032203060314032e03e801036a03460324031c0382010312030316051603020324031e03140304030203180354031803600328031c031a032e031a03360354030603180304033a03080334038001030c03440344034a0324035e03035203020302053c051a032a034e034603040308031203220324032003740318037003120306033e03240352051003380320035a03160318030203031e037603460324031c03580360031a03320314033e034a0306034a031a031403600318035c03031c03038a01033803440302035e03031603100318056c05020308030e03060334050a03480346031c0332032e03180368035a05020308030316033a039801030312030a052a031c03640302030203040312030e03050603030203030302030a052c034805100314031203160308030e0366032e03260314031a032a05032a03080346037c035a030c0342035403ae01032e032a0362034003036a03340328031803a8010312036003720318030518036e03030a031e031c032603030302030c0330030203040328030a05160703260308030e0302050e03240324030c03160304032803040304031403440312032003140302030803180318030c030a0304030a030314034c034205080328031803220722031803030c030c030324051203020310051c03040304031a0310031807940103100550034e0304030a032a035c030603a001033803120374030a0302031a030a0306031803620302031e0303031a031c030c032403200334033e030a0304030403120546031c03020303180338032a03020318030803040328032e031a03031803440308031e03040302031e030e032e0318030e053003040330030c03120320031e0322032c034e034e03bc0103040316030c038a0105080366030e030e05260350031c033a034e033e031c031203120334030e0362033e03080322031a03031a030c030310033a03180328030e03120340031c032e03520542032803220308050c0312031c05880203400316032c03140302037603060303020322030e03600356033c03080310032003020318030322032e037003380322030603039e01030a03030a030c050320030e03a4010360030205200316034a0302031a03520354031a0506034a031c0302031e0302030e031c031803a00103060320031203440504035a034c039401030e0528030203220308050a030c030203060302030e03030a050c030a05220514030c030805060320053803640318030a0316033203be0103480302032e033203060308030e03100308030a035e032a03220336032c03060348033403020312037e032a031a031c035e031c030e03020318038401035e036a050e03e801034e032803b6010324032203a601050a0348030c034203140305100310030a03050203040322030803d80103032a03ae01030e032803260362033803160316034e032003080332031403680344032c030a032c0324032003540306036a030a036a0304031203080322050c0303031003020314031603060308032e03140308030a031e0304052a0318030e050e0312030e03033003080332035003b201032c03b60103d001031c033603f601033e0330032a032003030803060342033003620322030c033003560346033c0324039a010336032c03700332032c03040328031003d4030314031003040346039a0103020316030203031603420348031e0312031a0322031a032e032803020324038e0103a202030e03080310057e0308037603720350031003560304033a03030603180326034403580330033003740344030c031403280314052e0303280303480308031c032c03220310031203180304051203020344051a030326030a0344030e03120308030a0314030302072803060306031a03040302031003031e030a0344033a030c035003140322031a0318030a030c0308031e030c033e031a030c031c03b60103360304030a03080302030c03320322030a058a0103640316030e03020506031a030e030302031c030c057403035603160336030312033e03180512030c039a010506031c0302031a0305020302031a03140310033003120342052403080312034a030c03040310031c031405031a07020318030c038a01038a01031e031e033603280326030603220308030a053403020303031603160540051a030c0346032e03160350030318039001031803020332030a033203032605640318031603920103030c03220312036c03380304030c031e033403035e0318030a030603039e01030603340308035c0320033e030e0514030603060324030304053e031c03020304035a031e0316030e032a030e034203240336030203420312038c01033003035803140306030c032005080346031a035e035a030302033c05020320030c03400314031a032e0320033a0512030c050a0306050c030a031803b20103160304030303073003bc010318032403160360034403080318030203060310033a0502034a0320050e03360374070a034803580310032e031603d00103060332031205b202031a034203920103f401032403200318030324030e0328034603180530030203b201032a033a0312031205680336036603020302030a050803030c031e031003180302031e0514031a03380332031403200544030c030803640360033e030e030e032203080306032c0372032a038201030a033c0326033e03300352032e030e03080316030e0310032a039e01037403360326032c030e031003320306031e03240318037803d601032e0596010338030803660303100306030a038001052c031e030e030a031003060354036003800103980105d8010354038401032e031803020302030c0324030a0308030e0314030c030603620326031003240350033a03120318030e032c031c031c037e03040303680330033e030302031603260368030e03032a03037c0370035c03080340033003480302051c03052a031a03480320051403033a0326031403100302031c030508031203040322039401030326031403180328030203240316030c0332031403400708038001036a0303260366031a03360304034c031003860103032c035c034203320316038801033a050a0310032603160308030e03220303060342052c034e033e03035c031a031a050403200304034a03100342031e032e03060334050398010302031c036e033a0318032603580312030603200348053e03180302031003080314030c03520332032c033c033203540308031203840103030a0312033c03f2010302036a0344030e0326032a0304030803080308031003160512052a0304034c030c0318050a03040306050e0326032803360306032003060312033603640310031603080512031403400302030a03100352032a031a030c036403280328030e03080303560308031603d801030a03080334032c0304030e0302036003a6010306033e035003080354031e0344031a03480303060328031803640364032003040340030c03030a030e0320030c050a0380010334031a030403200332051a0338030803030c03340332030374032a0332032c030203080310032c030a0316030e031e033003480328037e03020316031a037e03140306033e03440312033c0334032003140352039601030c030a035a033c0336030a0320039e01033603030c0312038201030a0372030c03da020366032e030e039e0203260322030c030a030a0526036005052003040302032e0304032e0308031c0362030e0332030a030c030203020304050e0320033c030403280308034c0326030603080304050203040304031c030c03320306033e031603040302054c037c032c030803260314034a030322035e031a03060304031a05340348031e0304030c033a03060312032c03036203a601030a0312030306032e03200332033e0364034c03180330032e0306033c0354032c032a03100348032403200370032603420306030c03400308035a035e0336031e0306034c0368031c039a0103bc01033e03e00103120366036803880203220304030403060322031803320318038801031c032405020318031005040338032803d8010328031c0303560324030203460308030c031203030c032a03900103180330033c03a401031a036403020348033403300312036003030e031403300334053603160314050e038e01030e033603520392010316033c0316035a0304031e0332034003ce010338030203460330031203
- m_IsRawDataDirty: 0
- m_CliVersion: 1.2
+ _rawData: 0ac0cb0136a8de42c8db3b42f9fa8043d5f13343fcb927426e924d430bb16d430a30d24291fb1443e8802943560fa342eec7d442b59c2043031a6e43c820a542859c2342f58c2b431b5b514327ecf74271380143333a7f4211628042e95c12435eb22e438ee26243dd9d9942b511f842a83305439e1e4d43fa1e0143f46169430a9a6742fd465c43b03d544211b7e142ee1ce4425e66024315ce0643821c90426eef10432df32b433d15054319ab2d4325cd25437b4fa142166d6643cdc9b042659e01420d195543c7c0f742752b2e432eaa0343bfd50543dab0cf4214e17a43a9ae5642cf801943e8bdb54204480243a9d80d4381f33443ef900343d3b63643d7d6a242885d25435bf4fa42a3f58143202fa14220a4134308e963433ad41943ea8f8542827a634394ee1e4339be2a432208194317166f4392422543504c1142934fe8422dfa3c43865adc4260cafb425cb60c43979af842cbba34434c840c4242513842c6ada9425567e542c8e762431b7c574374951043da790543906f2742e3ab3743e9ef3443f48eda422f7b3243608227431d8fd942eb162d428665b54286816b434af1ab42a0dd1b43be6e2b43771cfd423ed93b436022de42d5a77943aa262542b5be09423e3f414334945d43f5ae0443e6b3804356b61d43a43acc42a326a442142c404310c6cf42455a0843c9e7c54292556d4374ae0d4386145743e9095f43c7323b4279573e43531f1243356da74245eea44291029042346c72434ee6bd4265d288420594944298a10e43201323437ab90b43958a23437e142d42a3a632420ce648430378dc42ac2d7e435c41b642576a3d4265615042b04e11423c119042e798ae421b83214313355243356dba424c1beb42a79f22433c19dc42c42bbb42461cf642522bc942a769be42a2088343d8158a42379cab428adca1420f998e4292155f42f64ebd421c330843b65f2343f0b4e442d84726427c425f42d4fe0a436e5a7842ae68f04288e4664315da1c4300db214326fe52434d3f2142f1d62e43257650436cee3d4236a43d43aae60c4225ef194312a11a43424a1f43c3b84c43a4be8642ec23a24247818042daa99542668f5b4303d81d43197983436dcc004347591f43ddbeae4215716d43c7de3043e0fd9242339ab5420e992e43795b6b438be8c542db340843f8d784439ce74142a1916543f42ead4203220f4289bb094299c72f43699fb842d8053e43fb3c574331c186423f38c642db2149430ba31b424d2bee42337b1b4223ecd342a6b6bf42feeba342f7fc30429e190d43c110df42715f4d426cac5c43da49384317600e43d55b11437c664e4254781f438650a9410a4036438cf8f442a0a66943cfceca42a17a1c431159754327f1044326cd2043c7091f43e32af042e107bb4229fdea42661551438f0106429ded9142da3ee8427dac294395881e426fa1f24285c6fc41edd88543ba7d2043664b71433ceaaf42e5b370439752b04244ccfc42e7179242a80455436cb31f43839e81434a6aa3423330d442fe4dc14238f07b431975b442c5aaa94245806f429b1c6043cc031c434ba13c43f2cf2642bf75f4429db01343be8e7d42dab77242a888d4420684714301e97b43934d8442d6132743d5afae42170d83435917a142ca142443258f5b43ca370a437c035243eaae26439ea2ef4261642943bc10204369753143cd913b435139b54204b71d423abdf7420bc793427be04342d668aa424fa931431548e142553749436c5bce424e4e9e42771d6343d5b04d43aa44f742e3821143cb885243d9804043d0f1914228d82743136e00427c4f1e4381c3b642f5ed2f43e6a794427a87544339c291429c98eb42740f254325216c430b63b242b9782f4397592642dff9324347cfba426f36c84253c602432a408842b9e6954263ae4b438ce2864204a60c439a717842320c0f43763fcf42de7e294299b51543aed4fa42ae9fd442221bea4203dbe142d4c53343e9015843c9650443fcd59942f9ec0443f0b8b642e4b52b43708d4643d8d66b43971f7d4265b81443298f4942b4b78c42c6750a4390d57843d34c0543d3cd5f42a4b20e4345717d43bd5cca425a2df44187ce85428654e442a7163742bfff2343b94fc94261effb4217b167437a8a80432aca2342cb2509431596654209b9b942f091db42ba00e442c88f044359494e434d4fd14237f14643f7c105433528794226c6444312e956435dfb874227a1954259e07343ecf553423389c84231409c42c6b19342a2941543c89c8c4242796143b8b12443de117943ed3a3f4257bc1243347b174346d92d4305e2e742478a9742f845804231403543604d67438c3c4443721910423325bd42caee0343b374ae42e11a05430dc77b431a0a86426863774319a1b14241d7dd42e58e1543a1fa3f43b7366042dbcb53431676e942f6390c43136a3242092461430d5d1b4299aecb4272280843befa48423af965425c805343d16cea42ebf65d425ad6854240ba6e4258b8df4239cdf44295e1fd421e37c042ab03ca42acfb2b4350b2c7428b73324383d40143685f22439568f742e5381843a7713c421833ba42c68c434353d42743bcf4c642d76e3a43142afa428d178c42058ac14217abe74279d8a242504771429c76d8422801ff4227e4c342c24db84274d802433e0c2743f03da642ae44154316d5f84271551d43c25a4c4369fdb54251ec3c4353bc34434bc93b42158ac84265f96442d952ca422ae50643650b2c435dc21a433ea2c74271b0f642125d37438c93cd428f14fd424def934287293d4315407b429233ff422dbd994289583543a3c0a142bd9dd342d7063c43bb708b42b6041f43a31ad742799c41439eb1a042004dd742a6538742e7fd314393805b43a3fd9d427de3fe427734c242f0577943b9442e4351652943b92182424867594307ad2b43c8883343559e8342e93c0843b56b2343c1314d433ee9bc42bd8c28432d6d8142b09ce8423275a04278de124348403e432ddb6943b7869e42910e5143325f0a429bb09e42ffef124359380d430002af4218f1e2420568c642f41d7243f063a6427981814305191d43ba8da24209de3f42c44a6b438afe1743afc3864211b53243d1cbc742a72c0f43174c2e43bbc7474397760543212ffa42ac527943a1d1c2423fa5cd4240572c43e77c7943e1da3b43955b3243aed34a43c9a8814349013d4382b98143b09707431f6c75430be06c43a0a58542d703f64220f14b43a7ff1143304e2143910d90429fbd314399c88e4283673b42bae4f042a08a104367a6db42586cdd426b936d438b5db7422f34864374c6554386790e42cf993943d9800b43dbfb6e4383381e436f75604293191a429dc88c42ac10be424ccc3d4357f9594325c6164319286243ec5b694311a3b142ba111243aff02d43e3e48643e3c683428b36574347762443f50a1e438ee1e1423577f2429c410543c2428243cf3d1c4393c0f9428eb2084201814643cf3a37439bd75f426727a94220751f435fbd6843b2c9f24205474f423cae6b42f193f542ab2d634242678842db90e1427b254a436f415142bdc8404360bf33438526d442ebb8e14200ed0e4370277d42189a5e439cb1d342e58ca142edf55a438fc8b142a85b0a43dfd73643911d8742e169a242a4a073430137c34208d0804249d6914267bb62436f4d9142dc1d8d427add0642aaab01434caedd4283f24e4232080a4341bcb742d0dc114396eb14430f380943cfb45d439764af4224694a43f9b5194337f3114338a17d4368261843475c5b437af83343a9d6fa424db10043117201430a8ca042cbd716436335fb42fe740f426577184272d44143dd4bbe423acc3f4287fac2422fd0314376cfb6429656ff4209eb2c43e69c7c438fc80843ca4af5427c4d474399eb2043520482436af85242a24638434160634387143043615d1b422358344352f36b42da4a1f432a4a3c4398782a42353e3c43ecace7422883bb4106f3db4212f29d42879d3f43cbe2c4419510a942fba391421d10824325091543a0510043e4da724318905a437a664e4235b2524365e5484288eaa042171c0d43ef284f43c3c36942f41cfb42dd24c142a5796443584f20430be84c4310515542f1afed428129ae425f03d8425ba6a84237cd2c43b56bff41e2c5864364ee6442dbdf5f43d55fa2428eed134367e29542da73df42b33015432a944c432cc257426c1fde42792fef422ea2e14224d0444368dc1143f3f8fe415e971c43b4e569425eeaf542172ebd42490204439e433c432f6d7c43f6c1d142eeb5c942d4bb0c43beb05643144c8a424907714324cc634312695b435713fb42d8d0094376fc2043a241774398fe35439f9d08437faac442befbc8428296764297b52442850082420cb53b43250300435f7ee64238d64f42b1600743cbdc6b42a3304343d1ce3143f6cf5142f546a54257a70043201c044309ebf7422fd51443dc212e430bd4d1427aa248438e922c438bb8554335b70643ccd93d42a77ad64293e4bb4272b6e242e1b3d942930cab428eb031433c4cb942c7803e427e3057425ff85643bd51ba427049a242f60952436d42a842b856ed42c01644430f9c5943891082438b781e4216f94642c5c17a428d682d4338ec2d43f72d6943fc31b44243921a427d505443571db24251e22c439c2044435c6b9642628f3d43dcbf9242dc732542ad092d42562fda421e145743fa39774220d29e42ca4d4f429985b0426db41c43681a5143f7f8df42c4307b431bd9b6424763bb42c4000443752967434dd229435cac2942cbe4e5424d3ec1429c72e842dade4943dead47435a421543137b824348e2b34244997f43e0394e43c0ce6a435f9e0f43db2a8a4245aaff4270db5b432bd061428cda6f43f9474e4209352a439b5c384318f364426002364361582943573a3343d6da36435e10164306b76e4337fcd942003b2d434f413743dd947843af574942c80fe342013e29437d242c43b3287f43c3793b43c17b2f431305334370b9f7424ada244354c52e4391e07b429e119d42489f0243ab0d044301730c432dec2643df17374359183c4357e73343f5e74543ce2680438d900c4332ad3743c9890e43d0431c43c9df7f43e9f7e1422a7437437a08834354e82443b27bd641c2b26b42d89da34223ac21439616a642b7f3434235345443d4afd1414aa9d842d170054303432043f5fd8543dd7fcb42765cd442f2ff8d42a62f654332f06343b063e7427eee3c43e4eb1a4357325c43943d904229b9de427f2263424b83044311a407431901f5420813b2429e040242dac5744202b57b4336871d43f1511043ad789e4235771c43eff6ed420105af427c341843da775443db132442cb4faf42d5d80a43929c3343176cfd4229637d4242431943aa9956431e22764304c91f42b4c9ee42defc39438280e742606f61439e993743a31ef0421f905d42174e73436a5a3943c1bc02431b3f5543b384c542cc7c8642cf974b4218e9a94218297443e4f62b43931741439c4b64427ca72843098d71430504b2423ddaec42bde843431ac57842467c2d43faa35d42922b82435b4f2e4293bfbd422172ad42f9d97d42df2a0c43513b114381f85b436e9d2a432aa91543c8b10b428620b642ee0d984251581943ff2bbe428a1c55424a2539434e4f8543c96c064357517143de193042fb3e344340b212438d731c43c4d11243d8e61b43867d6943a026d7420d9f5243ea501143e4f10b43799c244204ec1e433e55224357117c4368282842c4134b435c8a2f439600aa4222a299425ed34843ab4bd4428fa26d438313c342fb862043946eca428e23bb42071b2d43141c614396a50943e66efa4295e84c430bd42343277a814246154a4304ad394240e97d436f6beb4202415e432461f042656bb942cf0b1c43f0d7ab42868e2f4382e56d43336a0f43614d4e43f751ed42e929904292687643dfc77e437997174351f5ec42ce6b9542f95b8043f6465742ba2f4c43339536433fbb66438bfe21432d571242bcd9394322fac9425927264350d1cf4274d27643bea87642da2e8b42e33aee428dd84842fb98d04289545943d60b56432764ca4282d95543692cc942236ae54203320f43186fac4232d0f142d54414438c9d01430d115b4310b3364340d2184208e85e4398229f42b812f74263d77a4351d86543f51e24435cc38742ea7b3d43d1280243e75916431c31d542fac67b439443e74210a22643ea6e1643252213435a11fe427c4a2d43b3d073431fe984432d0940420357844334cf2e426b428742e2495643bc5fe94275d63c4343ff1b43dd2ed642687e85436bec27438fe61143eabe1042359ba442f0f885432e51c04247b3bd427faa4643746a7242c498b841f8231b431e6340434959bc42c8403e432a4661436b197143ad837642888ec742350aee42d9e257438dd06b429c121643775f7042fa013b43703ff942fe5c5043d5a4eb42bd88a042d7e4034205ab2943853d04439dbd4a436a300143a56cc342626b3343c604fb42d7bf1f43c15a27422fc9a642765b5b433860e0429d312d4399202e439fd33f4271ee5c4311c35543ad1c88425a0ea44229b6be422d5c7642bea50a422a19254316dda74264348842ce7f1a43cd1383431bbc1a430a2f564254f5b642141900430708ac424d5943432fbba2422b6e15433b52684317b901434cbb5c428c082243aabec4412b157043e27bd442feea8043c7146442866f494399b07b4227ea5e43e5359442dca4414366df8542ff99c242422e2f438aec1543db99c142da9b0143b2738b4293ded742ac2ae64239709f42ca4d8c4260812742017e3b426bb73243e13d9842486e77422f620143e90ba042315d2143f7028342ccf683425acf9142245f10433b8023434a626643e9a71343bae5cb42e65c8942cce9c542a2c4204243b9094364ea814379c2da4265bf134300a84643726d4843b7e379424c10c04270205f43b2af2a4363772b432d833042361025422a8668424f26ba426765134336c7b5425dfb5e439592e641c1fc064354e3f341e9865e43f74acd42de9c874369c43342db8f954289433643a844814357c04643f2aa25430cba6e4255d90343fc11ca4211be37429d2c0c43c78d62420f6cf5421c8bf04232cc0143364ca5421112c942e0027843737a2343875d88423c2c1d43e7ccb44265c0524331596843d9db8f4285029a4268b4024332be174231b79c42dd712843b7a895426cd3884336c2104267bb7a431b08e7429351fe4248387142bcef7e4380c71a43166bb2427a8cba42e1724743c342ae42b11bf242d6311343aa92414324eeb142a457804287ef2c4330ded44230596c427794a842840c504351eb5743a1b50c43da160b437d8528425e4985439f4b7842f7d53f43e11ec842974e3d435fcabb42821528436c3114437dd998422838494351cd1c434c26ef4222dff6424dd41d43ec0355421dbd6e425a798043cfa85b4352010443b2f3af42dbe8164396c20b43de55cf428a003043639d6d439b1fcc42a43c0743d3ab13435bc06b43e38c4843706b2343aa4dd042c0f0444261821a437d002043a9158143e6e70e437430174207e92e4343da664290135e43de6b314345a03343fb8c3c438084f141208581428ef03f439d35f242e432c54236cb3043f6315843dfa51543d86918431ad782430a5aa842e21181421c1501430a858142bc01fa4276504f43ba23814220faad42222eb742387ef341b12d6f436cc8e0420ced5843c9f3cd4269e7a642c28eda42026f62438f7f7f42d97924420515bf42dbfb9d42f837e6425d734442fd074643b92f754381c50343eab70643b72abc429b07144322cbfd4209c81843f26835421bb4c34259b781431154ba425aac5e42afe6774334a1024280425f4337ca93424232f84292f69e4248ab194357d6e3426207fc4208bc8342a3634a4230829f4201920843d75a1642c3a11d4373f5af42e62b1143dd00ed42b3a85f43d1d9f9423279814332eec54234c448436a3dc842e730df42606972423b618f42237657433bcb8043eaf0ad42c72c64431caad942a92c4d43a95c26437d321d43151299423c1e5643523520421ef2dc4282c76042456257431813b64263355b431448c042905433431122074261215243e1b5b242aba80343e56abf42838afa4216ec2642f9da5e4307d59642534dc84253a7154394005343ddfa5142cad4284235961543f6dce44253fb6542253311432dd043434388dc4244e7094374c8fd4227650e429e9762428a3eed42800a5942fad0c242bff6ed4238bc4443e64385426e125342b9883643d9ecd74276ffe64256a89d427edd42438e27d4429dc22f4309b52e42d5f2a142eddb0843ed88c94203d1164382938342ecb8cf4271b1a44207d3ea4277331b434fe4724234a579426db3f8423ab91543a8c7a642feb76c4310c7f7418f49394398361e4300df27425264e5429ce437433942474320791543c1831a42f7913a43e6bbd742dc9f2042dfd1374345bfe44221bed542db552043dd9f0142bea2ef424e5338425e60114336c2a342f46e3a43f1ea0343b127674240a26143ff7d4c439f283f43eaf95443439f0a43cef94f43e6a389422b4ea142eeabc64271c9f14273e8b842d3db0b43bd03d14259939a42184743432999674315fd1243162927435a6b954299bf15432261cb42b8a53743d6420e439aae9542937d2b4274cb69426ce67a4231ccb542e15c0d432a171f42627df4421cec1a4344112442e28cb14236d2344347b27b43e94112436d7c2f431ecc594346cd2c43df8385437b3c93426d1f2643c2bf20438ae482434e039242c93859435b914d43d3664643c39116434a0ed04228a0bb42e9de4943c67005430457cb42eec18f424067ed42a3a03843d75f224238cf9242ced419439967a842aed90243b6879e4291241b4321dcb542f922034305c30043de8675425378a042f307c64286351b4317ee28434ee63f4392184a42350b1143ec29c142c5ec224346523042ea3eb942a03b6b42dd461843ad7da0427cdb0743f680a342a311e242498dc1425904194309f828430a4d46434dee1a43f3831c423f415042ebced842d5087b42a711a6420d537142e6c141431c7a9e42e494174388e1d8421e2c4043334549426f112143417f3143a9389642782cf342cbc3204364a021438d607b439603b642887b62433e15f842ad862c43db21c142b22202432e264b4242d4e142876d874299d239432c6383422b756e43db9f2c42ae93b342a32715434d152b4324c53742ff165442702ab7423a302743a124b3425025b0423e758a42ed12c0421913f74219585043708e3a43a2763e4338c17d42b86c0643e4d917433449454306f751426b431943eacd1943e6d3f342466ca742c45c6a43cf659942ecf6e142f410c942d5893b4325c90d43e3fd1c43dfe3d94220c52d43c9d24743aa4218438911ec42ede767432867ba426f75fe422da02b437b9bff427e0f2a43d4fb484331c0bc42cbfcef4251d0bb42e0ea53427c7de34294390143a42852422a06234318065b43b591324306295843510b304335d00f435ef75542e54dbe424fe7cd42712a254286b2834334f31843c95c5942fac0ee4288913343c41a254362ae074337fe3b4308e42f43012573436c0c014386f79a42b20dd342bfbf9b42aa58a642065a6c43ea22ce424c3e95420579ac422b829942cdc2ce429ffc104329cfb94272a7ad427efd0143a7a0504269c77f4273e5e242cd9d3643f09bb342c625af42f2dc8f426ee8f8422e326c43a5cc7042bcf4ff426f85f542b24a0b43aed5a142d2a2e642729f27433ede084384a6414369c26d43e6471443e72950436d9b8143296c1e43edc5a5426dab734246ae3c431a4fcf42947bd74265cf594305974f438c009a42b251f54208350743c216404353fa3a427f33bc42f5c20243585e8742c87b4c43be326d43e32e5c43485b81435aa91e4370c79d423999f8425b083443d7e05c425543c942f6375c4240ac2743219de042e2280843a37d08437d0e7b4220f0c542df94bb42dd3f124358370b4348824b4319d63142e7c761435ad60843c9df1e433c126d43e2ebca424947f742f0c47a431250cb42b867814356f70d4385fcfc42b4e85943377f3c43b844e142df8f2f4355fff04230f764432be71b43425a5a439fdb3a4384276d436e8e55433b72b742a6c306439cee17433af9914280aa8a42acc1074389bf6b439687cc4236177c43faef0e43dffa02433819ea4209e9c64296ea844313e79e426a455f436d414f4323fba142bbd6814375be1e439bd38842a8d05f43c754c442b21ccf42f9f0544391dfac42bff4a44201d1df42bf8cf34244de5f4344c46d4254cb2543ecfb60435d54744336a26a42c98c64431c00c3427f9a8c42ff5ae0428ecb24430ccd57431571644286933943eef6f342512691428cc61b430eb72543fd41c442c257f142655f7c4360397842e9d530436767d14246c97743d1e48e422df3fa425e1254431fc096428c310a4327e60543abd0f14234647c43124fb342a6126a439fb51d43c0d83e438ddbc3424f79aa4249073943d7400543f6193c43c79cf842c02db54248410d4328fe824291108e427cc67e43bd7d3442742842436ecaf7421fd1b342700abc42e973ca426b35054320f69542922a4843a09bc8426263ff42ce63ba42bc512543f2b826430aa2a9427896a6427df92443e4a50e437c9e1e43f17910437ab4ef42405dda428ef86b43240408434bdbb54207be6443c90114434cbb1242f3c7c2411a981443e3c4a4421a875b42163ee842a2d52043c34719430d98de4295001a432b05d142de3f6843f624a942b096854301049042346a5343a617a042ee78df42debb4c43e24b0d4379b622436cec3043cfa6f142a32eff410ff30543feb726436689f542ecba304348bfd242c6642a439baa6e431a487942a20c2643ebb7d64233e4df42160b7a4326b791424487cd4250e9574395c65b436a0f034394b7c741f0bca14295b186438c2b3b433d903c42aa9e144263cc1a437d6d8d42533231436d6ea74262f4cd424e4c7043a4666f42771026427d070f4222c037434c4165431ee44042e78147427269bd42fc8a8143a450164335ed2c43466726432cbce94228e43443a488c34288f85b436d23af42b41cef42325aa24283f82f4366c53043266a0d42bd291143e1f59c426b3c0f43810e1042b1fd074368ecc042a198324307f78142022019432a67ae4203b9c2427928ff41bc4e5d431f092b43a388fd427720dd42f4b37a437e22fd42d2390742915ffd42d5a257439a637f420570ef42396d104379e55a4346e9df42c0994843cd73444391061643d4403a4397d49742f895e1422790634390828f4293129b42fa836c42ce7d344385bf8f4293d42843b0c0fb42d5747b42265e4942a4948942502d41432807834220e4d8428d8c6f432dc80043af1ee64191dea6424d7a63435950b442018329436f14e642253a7b434c2e8c42bc68b0429fd4da42fc854f426e3b1a4335f86643caf9eb4221d6eb42fef8054316508342f0ba72436c900243bb9b1a42b8bc46433ce25b420b157d4316910d430f0ae04244b4bb4209281e43d7502743bb5d04431d411b43a2f348434fd09442277e224387b7524355e0c142cfbf8543027714438653074334300043565a384380fc13433d850b43f3181d439ac25543d1f114434b2f0743d2ac5c435367fd42e38a5543fadeef428533b142dc774443272dc4425210f0427c6cc542521ff142eefac542ede3f942d99a0b434085b642efec124276d0404356f5b34297666742e1d3c44293b1ec42ed4fb84227593442ee3e29428d001b43ba341d43570f3643852cce42ed4e2e420b3856429e7714433a6a04434fa9d2420ef32a436357fb4226503a437b8219433cce6e43dd970343e4e44542605f1543eb021a436657d542bbac6b4345f2b342f871dc423276b742cb806342bbb69e42022cb842c5f2e6426fbb25432f1702436159c54270fbb3428348d5429e62fe42df8a2e43bea50643a7e7804346521143a0658842728b5a4378ae40434e183c4333f2a442095907437d965343f3c24a43c97d87429e0d2b430d4b7d435fee9f426a2d804301e0ed42cdd89b42b07ba74275b2a742176727433f8c2f43852700439e035b4339cc1b4379fb33438cc187439d95374359f17c42b99fd6422c27224316cd604348577642bb510243a76a2f4266dc37421a79d142b20f60435e91a742c28d6d42db301b43608bb74299b7da4269742043732d1b43003acd42da292e4395aea0429358eb42912ed5421bff324304c4764353aa1443c38fd242a87d0143195cdb428aca0a4365f155432b32d842858c774336f2bf427eab5b437767e3427eee2d43f17c0e43632fe042b2a10743ccb5b242f1f23c435d463a4388c6e6420777e24235aa3242ff9e3343df0d8542b3903d42cd8e3c42567396427ebc02437bc19c42995144433e8b6642229a14434b0242437c4d25426ef26043cd7ab342fcabbe42a9498d4299b4a2421a0c0d432943cd422597cc429ce8f14275b09c42abc7134379099b4205c627436cc4e1429f1ffc422e5a43431079c242b7ace442f33d614313bee4428f2da042cb6eaa423d3673434fee0443e8454f432f3ac74277e9e5425323f84262c06543684baa41330a4c43d5f978426948c442cc83114340103743ea6e714271a91343183f0c439bd10643c95325423ce85f436590a34251e8c3422b413643acbccd42e125234342e1c042ec6c1f43d1314243b329174375364e42496e1a429dba79435ae02142e51a9e42702a3b43bb2edf42d58b8343aca177432f58e34268bed842532683422295e642153d404374a0e542cbbb31437567c44206fe05436f851243da842642be3f5243762d35438de2284333720c43f9cb37433a46bc42fcb58a421db8f241e8dcbb42ebd92842052b3d43f2b3cb424878e942f5d6b642a7cf0b435f07dd42d3b75b4201e24f43114b9042e15c174316915f42801e5242134b9c4202be7c4248d3a1425eeca342c3a40e422bff54423fa93143d0061f4394dfc5428b290043af39c8424d8e7243b24e1d43a2d831423d353c43bffe4843f8837c42c0c18e423c00844284518b4212c67443937931421a2b3743f52454438b40ac42434a3c43e70d4d4223c8ad4202b9e2422c94af429cbe4543dcfbe1427ec67443f3941e42288c2b43e9176742a3e9594359e461424d9063434c3ed0420fefff426460fd427d073b432823c8427ee99142757f154343fa3942d6239f423b2f0c43e3cf2943c8883b428855d94291b3c34279b89d422c335e43d55972425662af42d65b99423f740c43aa4a2a4382f664439190cc4278cac84248ed894242c2ea42ef25f6429a16c742bad3b4423f60f54243560943bee20d438e9cd5428ea04a4321246e43189e2d4309b3674313670343e54fec425db65542d676224335d50442236e4043bdcf81437822ba42e7173043e5c548431aff36435412034397140f43d8f44f43ad66f942b02ec2420f6aaa420b6410431e10594352f018433d721e42eb8fbf425e6c04431359e04287084c42cf80e7425fc09342110b7642fff2ce42afdbce42e617174292503343aa110743d0fa2843e28c6042a588a84250f3cd427564b742f38145431b646e4282dcdb42792d92429b370243b647814318ac6f4379a99342a0fd1c435bd94b431c2dc1429f866c4355546743b6f2584204a08343b15e884289bb0143f1ed5f426064b442b293274310d8094379326243567540431dd64a42090a6c43d0013e4379f71143b18ab442cf4326428da9224336c8fb42c2b1bf427fbf00438b58cf425ce696424aaf3643ca92d44229d0c2421735f5428a029f426103144317602243ab95fe42e6211743218f5c4309e15743007993427093574280c1cc42d5337643e62e2b43e79baa42c65b36438ab25243b5a72443d54a244362a11243543c814345c7e2427e6907439ebf4442fef4ba425c2e0e43880cad4247f7e942f8ef47420950804304b1ba42ff612343727cae42fba4054322003e43dde398427e2f50421c276e4381524b42275e16438d025e43ac8923437c878542804db542aed1fd42e45b3843ae27f742edd3d14254e84543d30e104362f65e420f22ec42ad80584373c7244389cc23435d072e43acc12f424429a242e6f30b43fe5e0443d23c7543e10f3c43582f4e42490a4543a28a254369611e432dadd242ef5f2743937093420a600843930602432917dd42fc46ac423ce3464215382943354631431dde28436cb8324384ff2d433a1aa04294896543896fa142a10d0f433016e1420035294329f8b9428bc00143a3ea174344aa2a4321e670427e8f6b42680b164370631243c0102b42e2ffd04242b29c42cb12ab42e1c79d4291cba742ffe58742fb59614312a954429b9403432fe2c942df37464388be6642189eef4294014243cb06e6423cb8a342d601884223062743061e9542f40d8143b8f91143bcd18742b5272243131e63430db5ac423dc80143a02178426a4aa2423efd144312b00443354de642dec0644231c838424a2e02438554e4423ac8974274b53e422f566a43843a0d420f8655421d900d43df9e014353b81543917bd642b28b1743453f06437120f1428e1e0f434703a442a0b22e42cc786042b1f46b424fa3dc4243fc2b431b061543bbb3b1426070804379303f424eec3343b2175042903e90422d0f41434710c442b89a21433d3163428b2cd5424d7b9042c7f40a4301a25e43ce9a52430317e1423b251b438398854262c66b43b42c2a43f6831443845cdd4242830943432dd142c090db42586b084352b1cf42974947434329b24235ad2a42d0b031437e58914270472742cd641a436dc2ac42c2f51043de8f7543f2e90b43403881434e44954294bc434336192943fbcff142055d42436086bd428b0ad8426765b742024a1343541cbb42f7cec242594f204351d13f43e0af784352e81e43d274f34290546d43c051fd422932ce423c51bd422f717343585f1943cf9dfb423c305443ab4712438bb10443ca76fd426be0814381c59d42ce0d2543628ff442d057d142f35bc542d7a7064333776f4345050c43e37060432be34e43e83f9442c12666434e1f414346359f42bde46c43d419294395cbfb42cd4fed4268301f434ec1234345fa7943ba47dd424a48aa4298c98b42113dbe42a1b163435c861f4258418443da0de142fd442c428304fd425fcb034302362d431fa158430bd99e42a930534297a50443a8835e43180b1843c8ca09436dab7d4382e70c43444ff5426d9b1b43d04aa542d8ffda42101f64426cd82a433d18854245364c431ad290420a192843b23f784294047d4306387242a5f1024309fa1843e2763a43d5e785429ae5834326f30a434c538443991cd3426f749442a6302943f2806a43f17c2143e8e9d342b4cf0f4323c76f43cb034b424c98c242e9f7274323ff3f436939804248b82e43ef01fe42056f6a43829218439d9ae24238c6d44233b1f542a20b4543a3fd0c438f27c5425e651a43f705c042907303435659e2420908564399b1964266a95f43391da64210f6eb429eda2343b2240e432b5ab142d92dd74263cb6743c5fde342937705433a816243c229784271f05943f5ca354296c75a434d0ce842bc0a43434653a8429c8e81439c4bd642637c344313daff4266f20b4351984343cf897b4333a8b842acb032426dac2a438dd4384344f6c44209ad1943e075af42a586154350d153433c191342e30126432e7b2f434bd9f342dba9f542dd7dd942393e1643a953f841049bab42e148b04265839442c567d84204aaaf429b5c264360941b439c580f421a043843995d97429bbe0f439edad642ebd7274364ddd5422120fa4295afbe42c69d0f43d5799442533aee42c07dcd4223c531434a0cb342079d0443f6f0d24212e42a43fcc553426894324365de194307cc43434910894297036c4260c4da422ed5794350382643fadc0c43fb388443674f3a42f9a9d24204b7c7429393e642705c33434bd8ca42d3967142c1e4d3427280a442ff1fe442722b0c435b3b04435060b342f2ed8242698c5042feb9a542970c0e437c0210425c9d1f43a74ce242ecceca422b12b842b7787f4354190d43effbdf41e8083943f0467542b29718435ee56643f5a92743530dc8421fd39f42e567d741176f474218d8cc4207ff40429b050742d8222c435dee2043068ff742ff001943253b1f43e1e1b042dd14be42c3a3c4421e723c425f308143cd30ea4274857143bdbc574299e88643784b774287d93443eea76743133c8c42c7dd4742be9aef42a567184375193543a0fd4643d192c6423b100c43966a0a437f071542415e0843781be142f1f9744312e8de422529014318309e42799b98429eaff642f61ccf42729ed742315b9f42dca4324356f5074342df1b43f8116b42906fc7425ec30043b511cc42ec104f435d876243c2d23e43811da6423482f04214908d425c69c442ecc0c242cfbcf142a1325d432420814352f3d4423a95ff426a178c425351b0425f7ead4208cabe428e431e431f4f6f43e718264317117643b989ce42c81d1a43c4d116432e44be421cf752423d8f6e439044b0413f1e0143b2031b43b71b3f43373731433591f542130a4042d1c30843c61d314387901843cd7c0a4209672b427757ee41c7cc684327e62a42a9f49d426e361543b1bd2b42f4034a4228f58243ee88d842d73fac42655b8242fb1f46438cc5f74257d5f442deb39742890e7842b6003d42567654438153fd427df95043e9ff36421dfc58439522084322c4da429bf91a43db5ef64260c6db42739134438d32d942d2d14843aa758b4296ff7143a8d60c438b6b8a42289c184377520b43f5a83043108dd242a2be4542cc76cf424c4a964273697b43e28ca24210cedb42c39ca0425b1896421de43a43713140438331db421ff6264392ffd14236cd7b421d069542a13d3c43934640430ebdfb423ce5f34218e3cb42255ac842e2957743f5de30432c27fb423a3192422fba25430cea4843f73d0a434af285424e5711433f16124301c93643ee1291429eae5d4359060f423fb92b43b8c50c430c74e2429d203643a3d38f42791b204320be0043e5b69a420b37314398da6d4380c004432f6f7b432b8c5243c5942a428b8e0443854fdf42e5baca426c228f425901bb425d54b442e13efd42fc8c004362a46d43e8b891424b2a8b4215efb742ff81eb42af90de425620664304058c423be4e542f23a17425f1aa8429668e54294154a43beb005432d158343126a8642d6bf6e4391ad6e424b1faf4285ec5b435b8797429821e642c0dea44248ec80421411c542d566254320072143ccfa9042f4bd0643590375437c4d03439930a042905df64258bbae42c69dc4428a2c0a4343b790428a196042c030d8422ef146425eb32f43ce0f8b4200514a430f60ee427650bc4211610b4390e54c432be7d742cb2e354304e94043c46d8f420c7c5e427cdf5f43c80b2143feb16142e50fe342f969714385d9e942d6fa16430a1d1743c0454643c7ff4142bd5883436b0e8d42a6d6624307ad0243b96f1843a98002434ed66d43a9862742a1734743f8d1d842728515430f4c71430bd94b43d4690f42a2eebe424eb97c423cc01a43bf4b15432a1f0b4383f4e542c22eb942afa4274321e52e42ca86014334cd08436bca5743b8c8244383ad0643e13bbc4295c92c43c9cb2c4213eb1343d6e467434912d042504f89426c520443c97d8442a006c442bc4b04421743cd42a6efcd42cd2b86423cf22843aaaa5b42d97c85421ffa2643bb86e741ea3a6e4276de75430cbe0043e6537b43a689d84224c229432a2f074377394d43b9f37842f76e3b429313ac42dd1e2f4307ac1f42492200439a044543d7fe0143ee1a4843eb044a4381d5ed4210e03943a1a16443bc5b6643324fc34209481d42325fb0423cb404432f170f43028bfe4289084642aa394a43f5afe24262f5f4422e4c8243db06b442d2a39442bec73443b0a352425991d842a612f142c94ac642fe92a64266875f43b144b642a45c59439c24df426b5453430e0b53429d112143f224a94265b1a542b8a756420c910c43ca25644384fa4b43f835ae427d65e24262fdae4296da354339b53342025a3c43d54118435f9ba942442995425df38e4203d00d43e7e87b4340e85c42f59cbd425ab48f4243a2f042d3489342c15b1743888011433d512c43eddc31423294af42f60c92423438424367d8654271434243d08a174282fbcc42fc4fff42e5a963427e27c4428ff2364355a6654256182042fbd3aa42f122984226c25b4321c37c42c37feb423e480b435fdb6d427d315f43e2a4d542018e24430f824142b92d74437a5b91422b49d0429ecbae42109bd842eef3194307179242a2b157438524ea425eca19439fa30e43ba86084319e10843625a0843ef020643261c26438a8bf9423e58ac424b400d434394ae421c6c75435b3d40424f1d25434de1d242fca1ab42fc306f4290e85c43fa3fd0422bf9cb4244fc94425869644392161343d78123434670d442de5473434ddeb942a67b464308ef03433e3969430e069d4296180043d990d242a9af9e4209e90d43a2a21643f48fb042adb7034330432942f63bec420dd5ce4259a746436b12d0429d9c7343ee9daf4286225b43f1b26e4304be3442b2faba4299aa6042a6639a4219d183432e6e8a42d879bc421ab46243f7705a4367d5f742ae21f8421200ee421997cc4274a784432bcd5e42ef1a9f42da0cfc42f97b3e42e90c4e43610ac642df6ebf42fd810043c4310a43019dc3429113ea423ee2de429bc38a4226eecd42d53d3743e7ce0643f03c2343563378436c47d742a4c93743d0a42a424033014368c1b1420b565a430093244370d44743f83cfc423b91dd42593c17431f3abb4292612b43b347ba42ae3aea42c39736432ac510439c7e39433582f942be4e8043a377824377809d42ac1b634293ebf9420ef05f42a11a3b437c3c7f42586a0f43d795cc41c64f37432174c34206628e422644b742dc9a80421e9a1d4328bdb6424acc6e432c3b7b42eda7664339f43043e2c7374361136442e35e37430e3f6042012f27432b58fb42465b5643479777420841b24272a95a43784a5b43de9d874230ea4743b4d23243e87ffe42b89c6f42c4843a437bba064259532c432e47f14273191143649b5842e9441b43eeeda842625af5413dcb4543c5d89a4231060443a55dee428f1b7543c43dbc428e2dbd42d377134359c054437a863d4209fec742e4f08e427df9aa42a2be5f42cfada842f9bc41433b750043dc17db42a6c89942fee0db42576bcb422a8bc842dc6e5b433170bc4216fc07430ab450431e79864221b6df4259331f43ee58bf4244d8e84294256d4379178042936d3543cf97124350ca2343d6ea8d42c9202e43ac33bc426b39484369f52842ce9e8143f4d81f435c56d9413b78184227e0764340b388425db816438c84d14267650f43141645426ef93b4229f30a43dc211c434898d442422167431d7cc842c8c5c74216512d433009a84296f58d42f70fbb42df5c8642365f3843cbbf2543a08e0342283710439b7ff74277052542bb64df422d27ea42f9296f420a0ae14247814c426f6b98428b7b864214a7d94287a84243886d1943e751ad4210a7ad429acdc042961d144300f45e42da6d0843cf7080422cf9bf42a70b9842db67da42c8ea3d432a93d6429738b642d13907431d056943d153664375427d436f063942dcec64436e0fb6429e5b9742f8911243f06080426b8ef342ecac1c43d4de0343bb5d6a43b8d1e7428c9635437fd381426535804250771043a7a55443733d01423d103243ba1fc0421b415342d30bd8421060764346cc744297dc5843077f454399e10b43dd0b154344f580432fe21d43e2223342b841b042618c9c42ddec154328b41d43bd61a442c0c2ff42d1e23d4371894b433fcc2543b227704367520b431f3c45438f66ee42f94c0d4243230443018e914207fa344206f9234352e2c24253ad394305541643f4d8fe411c0f5043b12d3e433111424371a40d4389e219438c6c5c4382390e43637d8442eda4ea42fcba544390976b42e75f6742bd6e434326bf5043304a3642ee2eba42a05621438a4bff42c1747c421ec03d43bfed8642168a2b434a69b0425de8404361305543c6c1ea426c285b437d8c8143392b29432a24b3426061a24203ca3042d33bc142bd74cf42d2bf7642c3f2974272c3ae4254171e43c1b98f4262aeeb42ae410243f330794340012943a33e13436988214264014243a725534343824a43869d2643eee508437a023c429cb86743abe5d642386dfe42f7fff6428bd74743e8624842694f7443c58be04271abef4250696a4355744742ac14174389e25143d20b0943132de54212730b4358f13943472ea242e1ae7e428a46b242b5c75d42a67e104238ce4c43b93efd4225913e437cb621431578f24259296543e206f742b6a1964219af1f439cf4c1422716e5421661a942ffd72f4305e8d242d5e30d43dc5307437c4d1f435549ca422e884443ad1fa7420b52eb42f8cafa424d9a534350f826430a977a4385f6d5425aed424309621a43209d06433f904343374102432ae4c44277dad6420d37e54289bf214376ca8a422c74c4420997d6429227cf421aaea142b9ecf042afa48342fed4814346ab2743a4132d43c3ad3443326d34437056b9427bd1a74210d25a4208c8bc42aa9c2143190f8543ad760743acbc27433c657542d8adbe4253d3804272bfdd4228681f436fde204379649342e5dbab42fe40a742628ddc42b9ebdd42ff0402432533fa42b24f20426dcb1642a9388342e3c43e426f2bc742216ec3425c84c142e802da42c698cd42b9c6d84299e35c430f175c4261fd0d4385549642bfbf5c4358b78442edeb2f43aba3d0421b6d1943d5eab2425571ae4248023243cfe60f434e11f842454854430937ce423e3c7343b7b71e43b1222a42a6032a43bcbe0e42c4928d42e383cf4218a41143054a8d423c4e154321224b4365c61f43f566254344230d4319794943a2d41f436e5c064357eece414b961f4335ad28432daf3543e873c742c9de71436aca2e43c15a8043aa8013428c00f34250310e4394090b439df05d4371505f43e8f91343793a2942785cdc421d52bd420c4b8642fa0f36437ff5424264e43d43303ed04223fe47433bae0442d8698742b5950d4324b14043cd1ef542d1200543a965434392e61c43e12dc54289cd4b43e01318431a405a42a85b8c42d52f1a434cb368439488c242c12d1d4328d9604386f107437ba91e434be30e43be8629420f16d842b94e0d43b12145432dc7ec4215177a43ff9d3c4388c9e942ca8c3c43218cea42e8ecef42e7ed5043ea547642b6373d4286c2214363901943a5291e43ee157d431c851f43d798dc42c1dfcc426c764843315ba8422e21ec4123aeb742040d5a4339a78e4217b6d4424501ab4215be1b430afac942c5640843980d824214c42e43e8933f43d1fad742da87c1426bac3e4315014d4330679142de2717435dbc1f4252e79c4289ac474397bd4f432e7c94427a5f40435b34d6420f8e5f4293344543f1435e437d4b8642665d1d43f579464392125642b822b24254183b43e3715f435eab34437f5e664325f43d4282f71c4385f03943546685422cac04430f64b042cab41b43d16d4043f0a83043249af4426418174381ab44433a45eb42fddf23430ebe6f429e1db142ea7e2342c04ade421f343b43ccee854295afcf4292f299424419194312a0574213a8c84249e9a742de0ded42dcfaec4255482643e01edc42d7f969434b24f242f95d4243f8ff9a424b42fe427ce9f3422f00924202aa5a4349ab2043b5d8fe428bb7444311df5b422c52a842891764433b44084371835343b4bc074397ff51433f9c5542f1378243185f1d42d450ee4281d63a43a92554439366564309db334368d3ee4290ef5c43d94d7943066e0643990661432173554276ef83428454ea421107404311c4dd427a3bbe425f081643f5fb4143630d2243ccc609432293fb425fedbb42081a7c43eefc4f43d00abe42251bdc42952529426ee851432004c142a89e8642edcec942a4b2164316c60a4395d1af424b6df742f70dfd428d3bb1428b72b14241a41e439e0101437c33f542912e2f4337d22743c00cd14273552b43b41ad842b9ed2743bee71d4353c4e9423d1817434b70b442e8cd50424685d542b3fa3c4349bd07438ba7274339d9044380f55043cd2c1e43a5e06a434124cb4225a0fd424093be42793c3c43e21bec42ad4036431d5a1f430794df422819674370c7614373dff542f8e78143b2ad0443581b724372770b429b641443faab0043ea153c431eb42c436e934a43218e9f4292e83643c3448242040b43435ffa2843703b6943b62e6b43cb28db4271109a427df245435ff48142ca978b4275d58f424b1814425581094393565543c59b674238ea4c43365189421154214358e87043e5ae39432f3b4a42332c5c42b21a09433636164325d02243500f1e43156d8443af1f4f43604ddc42c475a842e968fc423c8deb4228c0674301816943f21f1b42fc5bd542d3e3b242fae13143bfe4f242e97ea64259fdae42da274a43b7afe64261531343a2ff214365963443b53285423c071e43f11b5a43bbe868439dc9e1428a7ee44243ee1a43b515c342d393b742d9d1ee42211a2943fae4544364a39e42b20f3a431e8de5426b4a0d43d72c7943b41c4543db2a52427789c342131a534300c53343a16a704218be5f430d73614293f60d4315503143bd862a437dddd842bf1b28439aa94642bba62a438c494d43bda1454302078143c5261d43ad951b432d19854351627c426cb91b437927424271808d429bead8424d415d420e786743282c8143cc181543151381437e621543de1155425175df42dc1553429439a34264a82d43bcdaa34204cb3843efb2274313cc8243336abe42d480934294022342c2dda542387c03434e34eb42820ca742b8b6274301d43443000d0e439bd4ba423dd12042c3ab034371b00f43c349b242fd052243939fd642dc68984241402c4341f825437262394371044143bd5ac842af566c42774f2a43be177e427cde4e43c4fd0443ca4b0243dc6c5d4378d6ce42f4ccd642c60fc942b013a7420543c942725b8f42b93a0043174b40434e1bbf42f00f3543931417434969f14285730b43d84749423fff41435f8753426c3ad142d533ab420c31de42d0b6cb4240269e4203c201437cfc0e439671544345a2da429558c84202881e43beaebd42dd3a394317643a43f132a342a6febc42c8763743f68fad42126cf342bc220442348520433b073343113d7642f1c6324323c57442b14656435898bf42843959434ecf55434295a742f9dbc742570fed42f309a7425c8a0f43d7d2bf42fcb00543e1d2b142eb6670437e7626421510ac42275193429b353b439647be4209df3043fa25e9423ca6f3423e809d42ea750442e100eb420ff11843984d3d427b38ae424a224343deae85424833144231866943901cf942b68b2b42d13a0b43eab51643a41e59439f5a1843ef310143c679ec42697c174310e70e4348ff98427bcf09423e3f0243d9053a424378a142f04222430daf0842f862724348c396422cf230437356a442c5f446434ad5324214a08542dee60443ad701b4382bbf542ed37c442ab4218439aef494312487042061c2a42aa64814355fb6b42b251144327e9d242fe6286420c2d4a430368b742d916c642e948b84218ff7843b50c2243b3ea46433703bb426b964042a92f7943c44ef74220366e426dfefc42b1d18242686d3143b67ae04212feb842469b75425b75a0427136df42132d384349d5324304608142dbb47843bb264843404e79420fb08443675fb042335a1143c7a2c142f5c01f4328bd2e4285583a43f6f2e142762bf2420a82ad42d47361432b7a47422c10e742db3dfa4250fb4f4321843043926f804320f5684201f6dc42e1e7064214e2db4299b99842490e02432dc61b43ba236d42de7acd42ea6fd74241502a4375dc7b4394d65343d637734271a5e142614d9b417cbec9425b7a2f42c97dce41bbb33b430fa93c42ebe30b43e5512c42a14008425d33e84256c59342ee7a9c42d99baf42d4e05a437a385e422f0d57425c3e644309322443227c22435347ee420b02744284423643b9127842d4deea427e3752434b2eb142e3ba8b4286d9ef4272ffa442ff1a11439a44b0422711c942346c83434a6bb642cddd87424f2cd14232a14c430a6c0743e370214335a50d42649c2643e84ee0425a254243bc29ae420b4303432ab20d431815d342ab8d8d42f19d06438e57034256419d4224e3274270580843986a0443eb418f424b871a4348b1284360d17343fdd01a43fcff0b43ba6b304355b1e34280bdb442c99063439d3c474261fe9242cb243b43ef78d842c570ca42e6cfc44270ad1843c1ef98429f9f2c43fa16e842726ffc425752bd42d91633434f16614369931843ca254143fbff3142b1bbcb427354c042212037428a9e1843cd85d242c5533843275301420623d4428e9a9f429a9e3b423c9f83434fe601434a7329431d3ba84226d1b34267b44a431d830c42b1b514439764bf42bab6f8421f506a43862b9742e970af42c71b75422525424397328143b8148742ea35d542365dda42c9fa6d42e604df4289b09442d26bd0428b1ffe424c1b2b43bd036543c8359d42e76d1c433784a442b32c4542301ee642c361e84277836442dad6d042a8e23642c108e44285ef4743878cc2423de75843c1aec3427060a642433da8423e29a3422ab27e434676f242d5e83b43cdf3b34254c933431fb7c742cefaf541801419435c905b4385bae042f6e5334380ce9542e9aa6642545cd2423e067543e93d9142ded13143f9284b42461d5143590cd2420d392543135f474396cb09435761814310758b42cb824f4345fab242cc671143b11c5d438f4142424ee8cb42e7738d424259eb422c0f194364120743950c3443904d74424fdc0e431eacab424596ca429f972943597f5b420f261b43803b574327120b4306221e43f4de4f4353bda342acff1443f02db9426cb21b427be7c24285762b431b5b9e42cbfe1e43b6ff2043b06b0743f1a009436daa4b43e5244843f53cf5426cc4f54239a982434bc73a42b2581f43abd8c642829b1f43463fdd42ba69304311617843d3f97c426ffd0843631ba242e4a3b44203469042b672d94219fc5243f6c81043832f8243efb39a42da726f438d561342fe327f42f96d0242a0a55043d3f85f43fb8f7242c0b7cb422fd90443e1b738423b028543c69ec942e4f8574218289a421ff80b43681b5743df175443a18e8e42731584428fffaf4246cfa9420a8cb542f9612542f6c84a432cee1543d39aaa42b4ff47430a782543453c2943e270be4264ef00430def8442125a2642eb9bb242cba27c437e58ae42e9f47a4312cac142ca615b43bbf21c434d0675438a6ee64213a44e4366e6b742d0eb51433e9ac442562fc6426050cf427c6f0243536ac24230fa4343d3614242c6518443b39b0e431f8b30433aee5f4281704d43776b27428efb18439fb37b4392881e43abf31542daef2e43d3935c4254dcfd42064a47420b2b1a43a99d2f43d59b6a42b1c60843cad6054360ff7d426f975e432aee96423346c6426d9ead429ed50c43a40f0d423ff24a4346e852429ee8e0429ce95b43168dd5424e9372427be230438fb60943b2b62a427f8fcf4297b6f542cfaf0d43f7cb93422650e7424e623743bf882e4350632942cb13eb42a2baf042aeeb0d4357233b4337fcbd425c00174363cb8d42f4ba27436b58a24201fb0842dfe51a43c04367436dbdff42ab120442c2b6d142a7d29d4225a1a34208ac814397a775424c107843a18d9e42b64a314372c5074301400f435522e042c4af6d433b6080429d338543054991428f695f437e8d7d4297e39b426228884293e13a43b10cb042e6741943f21a1a430dcc6b4395f883424b444f42260f4b435b7231435cce4043acf1ce422f2b394300317243a623144326ad6643fe405e42dd23ab423bb4bd42baee35439c0720433fd71a4236100643824fa0423c900443cb550343816b9c426c371943b8cf81420518bf4284236c42a11b5043cdf739436357a94233268c428c23ed429fe5a442d0fc9c428e78dc42ffc08442e4efad424cd58a428772ef42bc027042b4771a42fa90bb42fcbf9542b4b0e142a2cca642482079431461884211f27543ad349a42d887af4273748b42393ae3424a37ba42b2e65043f41db7427e0938429ec31943022a004317a2194362a72443788a23433c29d34241ccff42e03e16435f5ba942c9f8aa42ac834e425f3948433537d042150653433f1faf4213c7b142b5eef842b8c11843005d03434ee66b4381e2384360b33f42c0581043a7b3524399fccd4277155c4269f9de420454434264572c4290ce11434fd5cf419de41343bbd2744213211343ac68cc42a217cf42d6559b424643d142214d6443f28e78433332d542a336bb4214ae4d431902f742552eaa42b3861d4345dcc542eaf81d43aee2c54287e33443efa25143745bcd4215ac81436847b342b39cfd421481b0420826a84291c10b431d838f424bad204394544e421ac4e842c3fcca4280e8ba42cc6b354395e7bd4279919942cee7814209eaa04223d5b1429bcead4253386942b8323d42de54594254720843a08d8e4256dace4239251a43fceb0e4329a0ab428b1a9e42dd63274274565b4255192c43edc6c84273167d43edefe042209e46431455714251502b4334dad242efca8243e0fdae4228b325435c28ac42d66a3e4328a9a9422cd16e43ba31fa429bf0d242abeedb42b1635b430a3f444344df674254a4a4422087734338600e43be480343d4eade425b191342e2a44c42dde21443f9d45343d38240424d7d04436a47294340918442043451437c6926431e62fb41b107034308773f42fc8c7d42ba2e6343a4f18c422b7b15430dcab642eaccd842477fc142c6b1f942a8882543edac80438908f542a256134398ed10430da34f42181787426a3a73439f0fb342208e1d43e7b121436c0f694309c7e44259ed02432477f5421908e242402eb542803f2e423edeaf42ba2b9942182d9a42e1153443fb48084355cf4143b5798b42aa7f93426ab68f42a3b7a34287cd3e43f2c6cc422b763943a9923f43a383a942fb36f6427a673443d69694424c758842331a0d42b3835d428aef3043b3cb4d437089db42e9da28430bd7394354a96d425c023a43cb596e42d40c7b4389a3a24265cff842136d9f425ac16f42a8829e424be7c542bb746743ef970a428329f042d5c86543898c8142d10a3642584a4643a50136425a374643a910664351ed214326a05b43400c22424ad47542dfce1a43e028a8426d1adc42c2d65443e27dab4246f20f43f411654289bc6343e1ec5d42528f84420d40ad42c0f00043306749438819f2423feb1b435d6e29434cc5d742983326433bd9de4295a41b42b2f360420400e942105be942471e624276b60f437ccd5643bd8e9342d26f1443b78ec342380b7f435fcd2b4204f2a34205a9c642c7fb4b430f7a9842f87b9c4216739842383a7143bfcfc14251b98c42f0ffb8428e653a43d0d2a142d4a9174392530d42f610874222097942122c1c42b06c4543e35c3e437126a4424cb4ae42c0909a42ad090843b69cfa42d6967b42001b1e430d3cb84298671743fc6dd142b5311b43b818f242ee9bca42d1a906431fe7d242aafb2c43f0cedd423b391843012f654289856943bea458429335174358b97942e6ee77439f710743363583437bece9421e70f9420a69db42c0521543899035427394f74251988043a1da024342cc2d42f08607433b9ba542a8c15d436b28b841ab311043de2b774382209a42740faa42b0088842bfcb8e425e423843332661429abe1a420135dd42c02a3443c162bf42502b594351eead42ffc7ed4201795e42183f2c420b372a4386308343bc451442964a6f421256434380674943d20e16437b909c4214f1de4240ee0543b2e066420068114325d42f42ae013042c4fb3843c5a6d741a375d242ef543e43920fa8421fb8af420f4c7b43a13c7943813cf042e8c37543f313df42fed125431fb4a34209bb25438eaecd426f41e542497e1343483e2742d2743b4337fd9f4288072f43ac337f42464f8e42ea8c1b43bdd3a742edda29439f44a442521b0943a1190743c5bedf42b5265f43d0081b43b7721f43c8378042a7328d421efa2843c0b6bc420206fe42cdd01343558d9842e51d6e4350120043fada9a42f9280543ee081243fa322143e5465e43aeb326434f0bbd42eb9b1a438a4be84284eced42c2cd7543f6411d439b0c9942a24b8e42b6e35742887d0643eacd1343d45d5f43b3e04743711ee642fea21c4359d92d438dda15437fd71043b5d82c43eaca40437f3d8e421a8daa42a2c74143419e3c428dd974422de10b43b43d97422c5d8943b563d842c720b74245d9a6428e196743cc4a03435146fb428806be42a8842043f94cdd42f00c614336d5744287af3843bc0166424576f4424694da42f1a37a434f31e34290f7dd421b70fe42e9952143eb5a1243f6fb5e43cd15024382ed1743c5f58b42c974c242000b1142b80dba421a770143902c064375ed8a42e883f3422e82de420d772d43a9eda242ea0f6b424cc58542074e86420f99e84268128d42aac54b42ea558d42bed24642023b0b431bef1243db8b234305393d43b575134377ff1c432210e042629e83439507d74233416143c7377343f16d1643e1602143c4d5004214778343d7861f43e1ce4643b2019c421ce93f4305fe824215f4ed42c5bdec42713a6442b74556429d109c42e8474e431027d842d0f047421115b642afc1e042ca845143c6a5dd42821c2d437b50ee416404ee428ca05c42845a83425067de42ee9236439c61a942ea6fea42a0d50f4243a80443582e274375bf5143180c0043d3a38a43c32711432f00f1428cf7b542aae46242e0704243c1372842ef65494235222743ac3dbe42bc7ed04284b37d4370891f435c7d4343f8e09d420314eb42e1d68443acbb4142ad476143e5eb5f4275520343201d7f435902bf42b42a5743f52d81431c613d42b00c4743d0b32f43ae251243ae7cda426dbd084366984b4286b575432761a54253da1a43135d4b42ef155743727d234380067e43da343f42b3b8e7426f952542434a0b420e9b51427232774373bd074399425e430fafef424424ff41e505454344e6524232f3d44225730143177ca642143e7b43029418426c161b4235760143c14a2d43ab94d642661b264366c8b842f4f582436e7d2c43cbdf714348e481424a83b1426360be42c04e464386e7f542b0536243e617d942c94b12430973d8421f159142a8505d439f2f2443182b004376c8a342b7ff87438a1151435cb98342693451439adb8442381758432d4c36435c4e32439808dc42722fe342fb041743ee902542127f4b428e7e0543736ae7425b70e942faa3b842dd04fb42e971f14221e59c420f5cdc428612d142d928a74232796c43aef8eb425ba05943734e9942f4bce642f2afc242716b0743d4aba3420c192a43ca927d4247cb4843bb99ca428fd53e43efa75042f6ca404375264e43f9b8384234933843751f2243f4e503433d795c430dab3e421f99ab429b716543843b144378dd3043060c8f42608d07438abc774352c2cf424ca615426ebe154326e1e34231ed804366928e42c3a7ac42f2cd534220e56d423bf82b431fe909434eea5c43530bc5428bbecb4291e3de42775f9642c6c2194388a75f4333c074422332e54282457543c31a7c4319fff742df235443bd62e64280f2d14291ca8542e84683431c006542ef235643553699425d003542dba97342ed161b43200d2b42fc14a3421e988742f4b70a43b58ff242251a97429e6f2e434323924289abb74227ff2743cb7f8a432d405743e5a99d422f1d3f43e5050f437dfdc142cb8435426d863f438fd2684331d263436a67f542922e0c43984bd4424b216942cc38f9421d993b432c8e114239330343664cb242ac9a8443cd150e42b8b61f43e26d0b42f4024043c7a01143ebd33643d54f2c43c9f78142a2883d43374309431b91bf421df2ba4270688d42aab31343fbb94a43e5d3924244346442b8679842238a5d42a7c6c3428686b942105bad42677d35434abd3542b39e43437655204390291642c2abb4423d35fc42ee9a23434578b64285ee864339fb09432fae0043b976b84200283643dd66e742827fdd427fe1d342cde905433355554209e72643198b0043a8e91a43c41ce842e8b42143461015439ccd6443c0d03b42ccf78343cc39ad425a28074388014642f93686437637d542e71c8142a2ce6643ca2133438d7722438f262e438a3073425ab068428d998142019951435dfe1943a6aba2426fcf38431c876a43d6442b43cbfa174321dd5142f7078642820bf642e14625427173d942e3341143d615f24248a96f430517f5425293f142cf6b4243de03fa42cbfd1e431e2f2043599ebf427132c6421aa0174355fa81432afa094331c1f142a400d3419c237a436023f8427e0aa342b3205343809dc84291cbfe424e4416426198f9424c372d439abee042415b4242db210d43bf19bb422f9eb0425cafd5426651c042ce1e384373ccfd419dde3943ae31014394610a42e6364a43a03d344330b6044360fa284359c7fd42b4056d4376356543d84d234307836c422b143943a8b3654269a68443ef98024303368f4279536043a56d84426931854238f1524347311343522a1f43b0def842bec2154231231f43eed72c4310d452432a7d8b43f82a1e4386482043a42ad542216497423ea1ca42124d0543d1e0a942768d80431fe7d3424415764399c4ef4230b6454306632943e6b544436b8e2943049a1343db3915437e03b7424c6d3e43b26c424227bae542b95169429fed354318732343197ea942b6cfdf427836204381069242afc24e4317c56e42d0d71643447a094349d4504396034e430b179a4224494e43acc99742abd00643d099fe42f24ee342b2b1ba4252f1224362a43743f66e354375d9a042db1ef6420560194332def4429c360f4354934243347b884206868342ae690a4399b56f425a68ca42c7e73f4376873643b3e11143b25a0943de254a43084e3743ec084f435b73a542f85024425bb98f4280416b428fe82043d9e8644361fc5c42c362814244d2e242eefb2f43d28ee84238a5294231220843f2f33243aee12c43c045b0422cf86243c0ac4b432f12ad427086f642e843cf42405a23432695ae4217df4643b1ece642214d9442481d1743dd2fe2424f292842ac169b429c29d04242fb224339b7ed4237f51b4335bc5e43c5c20e43886ef041f32b42430d70974235c608437ac58942f50df2424094244287d863428db90f43a9bdf942bf11294382327442c6e50e427679da425bc243433e01ec42435c7242a8612a43560d68431fd00443146830435c8e5b43f0146f430c5c53422580dd424eac7142b988f2422f6b674362ca164369239a42014b0743c89dfd427bb4b8426a9543420981ba42f8f314437f531c4282c75e43175acc42788171432a04ef429e1e21437c2b2242e822ca427dafab4242436243e3fee5429b140b43d9239c42ef62fa42ad6cad420c11654361a9e4425fa10d43a32dc842a17d0b430ab470421a363d423464a042d15826433478f542f3610743d845734312cf7e43a43c1642f42aa842fa1d8c42ef5d8e4219086f43f7bb80436f40e9422a8e9c42e4f8ef42d126d44282335043681a6b43c587f542ac12494327a60b431c8c3043ee4c12438035a842bfb1a84292fab542e71d6b439c2ff6426058fb429bb35343ff53584201bff642dae67b43476c1f43c4cb4342e8310b4301432843aae44e43df21ce42d5ca85433d096e4271292d43572e054298292f43d3cb9842ebfd77435244ee429bf802439fd1b54260bc10432b54ac42e1a63e432dab0c420e99834206436042424481437cb48942c2fd664380c8fe42c97c0043aabd64420d9ee34240971343ec69c04264b15543c09e694366217b4277a76943ab6c9b42a3fc7c439b24ce428fcf40439527c942c534fc4204550843a8131543ec8224435e2061439ed106438ba01f4360cc0843d4326e43ce7c7742d572d3428f020d427742ef42d8303c4205b3b442d6684a42e04bcb42398b71435fef8e42aa55a4420900654244c8f542638a1c437b237543609214430f166b436443e542e58f5243e0fea942c5e71c43333021421099a74270279f42055aa142cf587e4295cda1424787f1424a742f4324d78542b1e5884267e83c4326a623430f187c4278fbf542230f2943292a3f43870d4e43ac76fc42ef8d1f430b9e04434d99394220a9f442dd08104317c7cc4212040943bffc1a43f88a6f43963da04257226943f79e43425e6ed24220ab5d424469594313352e421546244308f8dc426c240943727efc42ee4fe242a89a304362846e43155e8d420ce31e4349841c438736064334825b422debc842a1ca524364a5a642a2191842642ddd42bd45ba426f9c1f43788c05437b3832430a235943ef020e4317e3cc421f9f71438dbd054370dd53437941d742c4a828434cfa4e4366a85d42abea3842583a0243f6b46d43e5f7db427296144359e6044387a8bd4236b3064238020543599c2a4370605942965667426358204382637c420e7c23432176054384866b431d050f43689b464234b15643f8de0a4381b837425ccb7e43f7bcee4287904442bf7a06436256a94295bae442563a7343d76e684242070043446c07437189bc420e5a6042f4b456430d8a1e439b3646429a3c4d439515aa4249fa75433af8fd42fe0b0a439f6f2e42e1618b42ab4c67435c6b2a43add3544288f9da42387787425ad4c042a44b9a427e094142290b2543f9563a43abf41542a6f3a242700f0143e200b442700d5642be4aef427c8d76426c385543944824432ea628431b729e42fea09c42920c1243c7006f43e3fa8a42468493420c278d420bbc95426a580743cb726443a644c042cbb4704317f9cd426844ee42b712ee427b950e430e368742208e3c433d682b43decb1843927a5942b51c49430bc0a4421ffead424a2ad4420a4a6b430a0109431c1333423af79242e5a40243fd220942473fc242ceddc442e741104259f227432b169342f73dfa422b281142f82b77423f522243953f1742e0ad244385962c430363954234e662432158cf425eaf4343e8e15742fa9002433feb0643db598e426aae2b42446009420cdabd4205998a42b3c9e4426d916b43e7729b42b1079b42df8197425cb72243c527214311c60a43f84583428b19d74265dc3b436c0522435e0e57425400aa42573a524357cb6c42627c1943d7d43743a43233433d732f4299682043596a9642b4948c42421fd8429c5c0a43e388df425aac7b4339e7ac42c1283143e6db4343ac965a43acced542fb165542673ce041cd079b429b11f842f8922f43c9a4344304aa4c4384db2b43273a45433bbc8f428f9d6243686362423053f54239fef5427867934284000f4307845443b3df8d4255510143fce1e642c1d42d4331ae8043222db94215ab30437cfd04434a90334337fc4b4338eda642584f90427ea70643e47438434f451643537a70430813464365f1f342170b1443f1e7b3420c819242a288254365e040430b846e4387c6a14230d837434bc72b4269c3b7429be8474348ef2c4381ff9a4285001e43073dc4427039214367d6b54254fcc542909a18434498d2429e14b442a06e3e4260195943497b6042ec3cd742c2990d43e2401542d0381743b49761430ae2ae42de2520433b752943b1ae2843bc0037435eccc94239fb544305b44143d71b3e433a8b5d42bbfb0843c561f242aa5f8f4254b0b5427253fa423bbc1d42a39f0d4321804f431cb4374305a0fb422fb3b34281e6f1424a09774363cc8042966477424820e14247946a43fa318342b79b5e437af314438c757c43c6043a424ad5384307ea70438a91fc422b9bd0429b2565434d39474285992d431c75a342259a09435560954291c01f4387d2294372376943581d5042daeb0443d64427421d6f654315b84142efcf3b436ced4e42ec5605432db5314372b23043c7ac7d43616c3143ab914a421c050843849589428a8d874202011143ffc5464288da3043c173464287463143e81a3f430f2196422aa01a43af2a0843053f0943d31347423646494307864943adeded42f08ff14267100c43a1add042a3114343c4b1334336647d439edc6f422f72664256a46142406b9042936e2f43de275643dc015b42960882433832d74274613243baf9b542d809d2424e7800437c6f6a4333d9d342171fd14260a8ec42faa21242290ea0421da64c437175eb423bb67142ac42f342b80533433bb097426abc3b43e84819436b30d54268894343b3c556432a44894273b26b430e1db0423748d242e1c28442c116ed42be015743b1b62b4338f9c34252bc2542a7b08443693d9242b740054362f0f342d258cc42de182e43cb10c142e826c442e1a6ad42dbb1fd422024aa42739bc3428224d942e3d65943419200437cef0c43ba08a8421543c142e7499c42a63b8043e3ccdb4253fc12430f310d433b935c4355270e431cf658430b430c43b528844363923a431bf9a4428fa70643940c2a4306cc0e43307062439f76db429770bc42efd3d6423db704431974f9417250694328143843a3ad1f432d4d9042fb95314358e50d435def7d4291c39f4207df8543242dee429716bd424a4f284355a45843c2cf374284a9fe42708f27423aa3dd4240330e4276a54f4390b75e420f4a244387322c4382c45f43f8b03d43565b6943a1a845422fde764317cb174286cadf42e9b473431929614267cb3043dadb37430b585d4368217542982af142408b4b438fec4642570d244326179b42107380436e5a6a4285b5a64287fce242539f0b43ef05704231614e433b130543084d694362a2a642c186784398bed142ac955d4366e7a842ef874c42ecea0a4212519942aa9345439c0a54428518c442391994420bccff42c7601b424e86c74276839a420fb0c84290d85343256bcc42b7941142cc000d43e41825423f13194214190c433a68b94212bd14421327ca4224355743bcd99942d240b442a4cce441b4b6d2421ce3d142cfb27d4311082d43989c0d43c6eb4543ee6f1643f58cea4255f615431704334351e02143ff7ad642d8861a4388f0e042f053d842f2390c43087b9e421c9584437d52254356cbee42aef51543087292426f764943b45d764352625c42008a9a42a6f37d424804234307a69c422c282d438cbf0d42b83230430816ee420839244354240043a6af03432ea0164386dbe7427939ca42fef58f42c884b642d3c9364308254c43fd49e7428f9862439d6ea9425f9af3420e6de342d585f0428f32794380d13e4300d9cc42f8ae5843955ade4250963543b17db4426f87054363794142694b8942c7f845433579fe42747ef3423cfb1e4224cf214375e6314320658942b5c4c042eeb42f4216115143ff3c4c42f26d9342d01c9e4236a7d842e9dbe242d56573430b1f1f4340e483427066c242f2989c4276f1a3420b201d43856ef142b74e7843dc7718430cea7943e8751e42a08aa642a240e24201fc3c43beb70d43f2810643c287a042046a434309720143aa277a42300df4427a5424431b2a0343e476ee422d45f842dc9bd842ebd2b242f37f1243a3aded424d45d542c5bb1d431d66534319e07042a5e527431149bd421d5814433c25ac42f9a8fa4225f1a642291c97424ab90c43211a094355a18443e9a1a642b9178a42515b8243c333de42d028df427bea18438b2ff042d43bae425d606e43865c0043c59daf426cc60343ed6cd242466798421b1a7543a5673d42bd997243d9afbb42e9b8644382d1d84252e70c4373acec41f6e23343265a3b4284feee4295164042e08f3e42a0084d4338737343f410174273cf2443fb265f42dd4cff4221cf5d43cc58cb42df6023426fc60642b04bac420ffe3843dfb91043c5b33b437b38cf427af4214329d34942d3c5d5421078a2423d843d43f3e6024339c0fc42483959430821404368014d4209f31842b922b142f3152c43edf762423608e042b09e7842619f1b43d2f18e427c9f8f428540a542e87fef420589bb42ad9a4642da97f44216180f43850e014398131f43fb5dd4420a738243ac6b5e42d73d8343abf475421cf0244378605f4234e2fb423288704252f369436a07df427c00a4426a505e43988856431abbe942703ff2426792ee42121208ac0210ac021d000080bf22054561727468121108ac0210e1011d000080bf220443616665121508ac0210c7011d000080bf22084b6579626f617264121308ac0210a9011d000080bf220657696e746572121008ac0210c8011d000080bf2203446f67121508ac0210c8011d000080bf2208436c6f7468696e67121308ac0210c8011d000080bf2206436f66666565121108fb0110ac021d000080bf220446697265121308ac0210e1011d000080bf2206456e67696e65121408e10110ac021d000080bf2207466c6f776572731ab8190001090300060004070408080201010105000702070709050608020301060005020800080108010900040003020008090300010000020103070600040309000001020008080401010108090800030403030708080204080906000901000809070402020003010409060200010609040002080000000706030600070008010306050900060608080600000100080005070200010700000900030906070609010003000803030000030204080508080004050901030001060800010308040807060300080508000807060108010200090809000909080602030305080506030908050901030009000309010002030104090000000303000204040804030909000000060200060006060406060700060701050800010207050706000901010103000101060609030707030800010000070609060105080009010007080001090902080009040104010000060001090308010909000008010905090707000701070804070701040309000000060903050006050309060008080603090905050001000600080900040402060104070106090102080909090005030905000102080209090606060008020709070001030007020001070101090100090307010900070207010200070906070908050101040606090907000103000506080204070503040908000106010101070303010807000400020901070909090009000104040603090106080302010108030705020808070702020904090201020100090804000404090301010903000409040009040703030701040505070702010109040404020702030000080109060909010501020601080405000500020806060501080603000508070802080700040101090409070301080400040807000008000707090407070109080508020001030306030904000803010208070002070500000409030600070607060401090900070007060100030300030501010709060609000704060002080005080008000100030901020105060804030308000308010300040700030609090301010100020603090102060607090908050003050805030001050800040500050303080102060803010607090009070002000305000904010609040904080906010309090205060101090401000701020208060404000300030300010200060002060806000708000909010009010907090106020307010008010701080100030608080000010900000906030609010406060900060409060906090809090200070901010000090000020100090108020007080807090001070803010007000002030106090101010800000909030700090003080101080009000107030000090300060602000201080808000104080901020109060209090802020107090705010900080306050606020001030104000102050608070207000208060101010102060709040007090903000709090909020300090101090901090102000108080601080008050506000308090409000000090001080600000701070307000206030704000103090409060403040405080303080500070800020208030803010903010201010504030906010002070101090902010003030001010201040004000108030001030104010703000809060902070100030006060300090306020108030505010606090507000007030109050902090802060901060002010905020500090000070508040707080108080300070505000400030700090007050205050001000604000809010002090906010703020100030000090100000800010301090505090600020301000209020401080308050206000602030602010708050303090006030005050407060108070608070005060800060705090401070001030709050009090907020002010300030102000602080806030206060608090004030803020101070502020206000600000503080008070703010906070007080600060706000606030309040909080802010903090400000508020001010007020005030509010102060105030709090701020500050601080700040004080200030302020006040906070801080803010208000401020802030002040308030007050605000903090009040401010101070103070701060709020108020101010100010106010507030801030900080004090506040600040003020804020308020407020301020109070907010203080002030008020808020805000006090205020503070303080801060400060000010402010104030308080800090003030800020601060405080008020209000004000503050600010603000207010504010009020600060007080803020204090800070000090305000009090306090109090606020101010601090400010000090809020005070500080605000007050404060005080301030308000806080801050106080100080300010200000604000004080107090805070301020500040201020601070107010904010001040101000906060300050000000603090605030000000809010403080900060808060806000905000809090903010202080902090302090001010909000203090803030505090502010008050806090904000208090201010701090700000400070000080600050907070102060709010905000707070006060707070300010102010807060307060607020705000009060509050701080603040000000808020007030207070707030701070404080708070709060606010806010202000007000009080205060909010901020305010501070007010300010409010004070206070304070002090507000000090805000609050309050809000703050500060605010607020907050003010003000001010901020503000200060003020609000209080001010000020003030609030901090108060706020300000709030303060008090100000701050403000307050505050808000102040506060806000102010701090001020606010109090606070000050000020102060901080809090809080901000901020908090800070209090902070005030000090703030809010605080109070900040004020801050504090607090001020007000902010004000200030107010701030709070802000606050000080306000000020702000306090600000501050504020206020703030007010205020902070200080901000609080308090108050200030403030204020708000009020804070900090602080203000803050500050303060001090903030105000909000003060909000900090309080505000704000309030909050405070007060906030503030805080901060109090905010609060208050108040800000602010600020602080804080403070005050600090900060707000601050403060307040208080400080103000202000802050400000203090202040406030603020206050005050609090208010806090908090803000908090307010805080401090101010100090104010003010701010902000100020707030705010203020906050009010907020501040309080500050502070107070101050806010509030201060302040807060503000306000906080200000601080806090206050803060108030505000000010800060909090706060000010300090004000300090300000000000506000100080809080905010107060902020201060301030808050905070009030109090503000608010402070100080709050308000400040500040401000403090905030207010506030106000900010000060001000209050405060005050009090307000505080001010101060601010100000901010909090303010107030107050908000800060307000900000709050806070802020207030502090009040708000700050400030005060308000706080003000109080902020003020700000809000803090807040201080808090305060103070705080804000100000202000909060907090708010602090806020708000004090003060202000006000200030000000103030001090108000607070909010704040007080006030308000602080803090602000406050109010601050100040301090900010203060700070300030600030903080706060705040806060708030400070102070704060707010602090000000705030901020300090001010701000100060605020702000106000603000100060600000402050709080608010100070500080608080201020204090801050004000009050300090207080908030104000102000705050104010005050102070600090104060100000101070107010102030605080600000309080903030206010508030504010901070905090705020003080700000703040901080900030105030908010003020801010201050208040206010301030103010508010906070503040104070701020306010209020507050802000508000708010009010204040305060606080800080922ad010a280801122439363261663032312d363561362d323936362d616165662d35626166346232663162616512280806122431626333336263662d383633372d323732362d613835652d3234376433313866656634361a280806122436313631656365362d383961342d323732362d616164342d31643566356364366461376522280806122439343738356132372d386138322d323732362d613933372d3135383463366663396333365203312e32a206f4fa010ac0cb010fd415e2cbb620ff902f35e10e840a558efac93e9b45785f35de2b93d524fd60014f035801cf5687c2eb88f91a70e5832c38821f380a2b9d005522456efafd42b673b316e685eb8495b75316b06f034f3db3e64f0bb27693bc31b4a0d53418f7a2b22e5e9a891a9100878c18b84354fa39421e85ea7ca4c8e533bea65ca4307558256993b039a2400ae488a56b50388cf890248229cd0ea0dd453180ed3a763fa9e309a4ec273d02fadbc61e7ed95b83f20e82af5613cc08474fe7a096fe83120c435a7055040c8a50353085293910a2db34a590bbccd84dd1d6753efd2e2a72013d794d54cdf165587e4def31500ba3f14e2fd0261ec2c32d843b4411cc25a4e37f5908670729710b17e0d74338a17bf3475f595cd17190e57eacdb7e0505f32f73f9283e97af34eb3ed497643220755a68e97e73587e789e9eff52654fce0ab5783f42a4b51787735ff477f6040b8f09f131bbef380a112fbb10cd9df04bf85863505c17d8530a758739d058876550afd89022863dec45305e9f506fb9a64d7b41f0f8d84f43e4b998c2e4d621f244ff9d3e27e9496e0b9619cad732398835ef1440b911adbd40c34d0f74154102c3297ab6e946209b4bd21f3a545a5ae8e32dc7cab50a2331619cbd85cc86bd420a2af26f23fa032ce6659ffa823bb18b20aa11f95566b53dcc39111c29ca9206fe31740eec62cf15c8db0954da9025761770fb3db3edd0dfd65d00858783fd0f78c11985e3088e2c08e121f32542f5c438cf76a9b509525a3f59d00a25e466abdf4227214f39781ad5dae7da0c56ba9b39d45b0e8112c880eef9483ef4050ff960bb8716929a090aa4279a2c5c6b2abc28786efd988627940429594d8040a75906df70e529876fb0e818fbf295693df2146d64c30944c39966a6cb71adf629999040f5643a1c233e7606a8871d969f6a072943734bdb94a2a09b868ef1ee3f4889e3ee19dcc5178dd7ea5634af34088a900345cb481c91c963c4d9262aba2a52d11fe6d658639581768b9296b9ed2c876e6c0e7489c5de2fc8954e8ed8bc492183ad89f10f4bded91b9e958337323d4f2d661f85d064045636c7cbc3459f75e890c012c0e465d04b9dc6fbe270f900664d2e2af4c4fa1343cf759ae3b7d058c1bd3e43d2407ec2ce4770b4ecefd60ed0b4cb8c0e2ac64c510342bb4b538513425304b7350b5040b2112204b2a0d9af968c5cc6b007e706e92c808b773e78254187bcf9c1046c6ff618961e3e6cc2297c03d72fe11bf37804790146328ff848665888de7334eadd19e8bc9ba902f6a5046e5bcd2e43ed8a7f3994c062f96a014beed18ea0f7273096abdd89089f6af3bb566b7b99d195f855b5dbd8bee242d689faabae3597a78a0c2100a6cacc3f80c64daf20a3063d9052be569251ea718757e5febfbd3eccf3d3575c49d1a3926a79f698233b0342026a884f6782605a9981bc5e0f539ed2d507a173580c32491028980e1182c2336e3a67c7ad23518a0a351355d2ec12c80528b9850ef47139034ae5ca990f3986b5393c27dedd4eba0e739f5f9af30ee41d7378f09bf3102ce9781be45958581d0ee838d614f52c5072ab50485423735c73c5b2aa4555927e63052076d30c0390ca27baf2c93e4ebe9422c09cf89524454ee58e2cd78957ab982bb799c5e7704ff1e0954283d9999d38ca686bfba917634715227091c2c97b270ee96453a9ce052065453162c20f1917123461928e30a24834f3d6d0093986d52f7953242ac2738ee409ff93cbe8b406e549a89e4a800c37f80a6e61555950ec18d6a91d951ebb84d9f4bbd599c26ead44d122af0db54736bf7da3177d068f928884879809c0804d64ca2e5a6b067170f6d9dc174b0838ac524057446e0ee199df80f055ebde49e1e030da3f044bdade993fbbd340447657db0ee7ab52c03551899094d19e55851244e25e88192c844813c5da80322cce48c59ebe180c35b926c9b0add70292f57a17527f01a68d358a1da3dedc3f4cbd91e67d53f2fc124a3e42d543f48f134076015bebd599cbf503e825a33f41974f8b8cec8f48ff9ede36f3d315e26bb9695a027cafb4fc1c604bae5aabd5656de107f85f4b4c9258ec4fea9b74073eb510384465309acb50e4955051b9416b500b0b42dc9accb1df90985f3fe85a89a3757238b3f6a6e324809281735aaa4c6311df13c5c7eb6e2d654f3f348778696989555357ec892b719de1d8fa0b89ee53f6b027bc5af666cb3c7807a81fb78699340a8df445d7c52a850ed18dd8d967c6906988c3cab0177da7d18e345670ab72822da7b1c34c4729f487007d675a7064cd348db2e4dea5a5a7d7e10793db2f49f23504ef6e1d44e71010ddf535d444318e40508d2946e966a4df75f96f2f47395f2efb3e064906cd64fa2c2cd5ec8cc1e6576758793772752907057865377cef688789565a50357e299b822e14608b9868069ee74c722bfdcf322ade5c357225900ffd156b2c3e28e967a74208a5a02ea6360cf86adf084784f4ac661c2f5d535fcb1bbcc07fd421e2932eafe300fd573f8e65b269ff4fa0dda0f02d5338cf76493ca13a67d904be9c093276c52857c9028d90ca3417aa7e4c3b005c5795790d0fcf59d3b36e0767694d3e3533676d075a025c1229f6c859c2563823f410d517c00cf45c564a3acc00dbfbb4b22c3cf97971502a9774dd402400c6e6488565037105f97368ede4fb6e481cb8b4a734d99e60040e6fb884fce43239509c240ddda3e95aef9230c18c29205040bfe3cbe1cf52dc534dbb0e81e69cca3854e2e3f15f5abfd8bdc1f37fb634e97c44117715b3327e4a0a5204b7ae5ded0e32c65c8bbbfa306dfd7864f93da4f72084eed093244c8c9bf67b65010e561deb8aec8c52291a7b7ce0b200f69e8371473c783bfa278b442c710451f3f380a99dfda891fdacf738779c24c8997498f9a76cbed2048971bc9011ebb84183af082ccef5893c025cd5706937385d86604a3804211f0dac88220903ba067ccae03a42575b0a3f28271e5482ed1eec51f3479e2a484652d48b433af504c94f537dc38f05ece8291218ebcc08b5d7a3883e24444d483b0bb8c4747b45bd3c6bdf35f9097c59013c0fb0e56791f206b3aad7d4745cd2a83eb6b31322f914f9994df18f35d377aa00684c622a6e2812e951a710ceb9b59947ff755402e3fe4f5fd3a95fc71e8f453b9af069f12fea1f27112f38e9533407b7177624752d1cf58e86e94c781377f0f9ceca090ee97bb90c0ef048538ba5dcebffef5ee1168308fece54cc8569f8b267629e3c6f5bdf80e6e8ee7238cd4a72a43a37c700a58531a0f7ab6b333b36fb6fe4a15686ac392bc9726c00497b3590e19de333d7a8d5136aab507e58583b759baaf6c286e74f364b3303e404b23fb7c96bd9b4073e7e4f7e3d9a4640ef1b9b8570aab071205ddbbb8d82b9d2a27bf3690bcb8dbcaf6f7cb33ae3186e70c59b480ec9c90008bd37528cf77a4eb83b29d1fb45c0802e1fdd8e472d824fd9e6322a67801089698ba392ab578fb192086781440b41f5e2aa9676f6ae85a83098bdddd8a5a2d5948d6d3b81422282d975ae7d7a6957f9694656641cb8093fd1b99d3d5bc967124c63170844d02fc318b19b680db43ff53ea08956d318545c6174c4c5c2fe357738c83e639e643b729cc3fe867f431c75f8b71cef6435638c617dae1f33e1dcdac9e2e4c5504a451bd87afe8f71663e992d82a9439bd7dd04d8fd2488eb7517f154122d329bc92922998a9ee68ab971ad61ecf733cb0306e3efae6d499b287671e76bd0fbc086bbc9ed428cdaab45f268305508b90fe875d97b9bd0eb996431dbeb526fc0de85cae80fa155cbe2e48d44e34539a4bff9465edb48b8eae4b3729a37b9bc7774436ab4f7884ae639959989b082824a99f5f3957592649f1eed29b4d80204b66839f37b280d2f59883c2547033e0c951deaf544e728bca3dd3374a1593001ff5d21de015d2de9040f4231b9b8cbbda63ca38f79767235ff245dad1ab57706869c89c95bd693cfc94e8f6e6b753be0bf6c7ffe75228639c6d0f5808f85112fa9188bfa6b95ebe1bfa6d99566d9a41400abff62a2dcaba675aa4b8b013b3186e35d9b3892fc246f8db752b92296438af64c7d7b2049d87eb3329308de8f495f7366c38c84030f5e9ba56d6c569d3283231573ff0727999aa4a88893a383b6a37f1b3e845ae835de294fdf9785004d89473606222f0300c65349ca09cb44fd76ac2099a5b94c1ab53db19d37554e9d7640f9d8fac19096dee3d92fc950123a3b9b0449adba26bedd261c126092b1d0cade9f8864bc919d55b9d128726185ed419e79df793a0b9b817ed3473927dd653fb74293b9877f60e74e404cd50c2bcce22ef4af2308c1585348bc35c45a7b5a6c8d46e4269810947a7736150c836506b16d7e71f8d575d7d8ef56846f7a1d2ae2d5eed848e2dfbb5b2c0eb24d024b960dec1cc201d454791eb75f7c6e823b3e8bef2d89600ae3fff5bbc81ae21433b108f033057622f1b3412ce1490873d00ecd0c4055ef21538b33a8755d663208f3039d4b456978adf33e1588c7a0fe5f9e2ff825044ccb3736b2ee4130eec7a6306d9d0de571e12af499fe93bbaba922225f9321843034f96b627dc4d3702b0a0305202e52b70023f19f2c867be48a2e310ac03af55b339187c95405908220a0a9ea30f617768eb1422dea512d8d28f8d9dc266641d68fdf09a38fb05b694032350194c7f937ef47b023fd5452359747947fea998c2ffe41f075a4598581046dd3884abf1f83e4d77875795b7ddf3370857ebeae5aea40971f0f722ce594633347a005e3ac1bb0872d723e37effe8e762d789eaef7c83de4f8f8332b3384ca287488bf069022c17332864fe3faf2698659d4d5a5f9b62fc3b5a2d2490a7431a0fb13613b0980a6dca0f9ba7545554c72e8f35234aeb012a39bc0131998d2680463c2970ce991a48f06658853e02dfd4d9bc4c879c490d4eedfc90d81e4b002490e896c0d11c4d35c501c9d747e85842cb6c0b85b91cb07dccc974daba12742bef601225829cbe59405a45a072373794e3b86225c7f55071205a05a44851209a1dc6595533e4ce792657445905e12593276f58e6339b3be1ef831ce00cd3a5327838d1acb73928ec9d490d600b51079a407cc948e23c70dd84f028977866684270053522d2c80da48934e2a27034b8218750c42e62226e1ff9ceeb7abb17d055f1ae79c7a53c96d01b9828d8ec2cfb7f1dc72e5e029bfc60c4aa23e54861818ddec612776cc2d479e3f82f503d7a13276260709d10029898d88489f10c66c483e2cd7ac42f54859061c2b647778bebe0f7fda655792955f7b0badf5767a89f32d8fd846d03a3bbb74b868723c87e54a330808c457f4a13478b57e34324f56c81601902936002d5011062a5809308d22f714df46028080816fccf188b506dc0b261124bf4e99e7599ed964127f8917909f1f2686cdd08bd343328c5f36db3f234ff4a50443b9319c9e5d92a44df24b4043e402dca01c45c784737c14043d7dc92b9124d80243d9459937ce523d980d39637bcba12683538e580eb065f9e4f02a10fcc7d4cfee11c60e543032de7c10c8527e07587e4b3b341e78b7dcc7baa5129fc73980905173598f23e216535860d2bd72b374421b6a9ee08ebbe0445b1f77f97501aa46d288f78f14ceecde0410b091d9bc16d515459e28d4d9afa03306faf4f7d95f2d05dbad5a7c3822b553900b5851e4db72d78cddd588f0f43843279a04de1225fbe18560db3243892a03388254bb99250f80df900c6165387933e5e84b2e844f451664787e82498ef59d9afaa0047576db4bc7849754f3ceefa253b83fd243578aa736152332e3342a4b98bcc733e7e86e84fa0598dc3c5e41ca41326b6c1085d56cc86910691d38a49ecb53d6e358485535b156dde7baad6481813f23e71474d5ef836417c9c5f09e02736b960589a4abf6f24e06630185cb558226d8e7dedb586f49a7750111832b3753bf386db0d69510d5109ee39d2c75b73fe15ad732041c533f51c81953e0370bdcccc74f73444d0c5a870e718da188e5415094698022536ecf0371e6cd52fbbfd377396e7785f2c04da2eae27703fcd02b710cf8eea358c9b044a929afec7a202bc6282d77e028335677692db227930bda4cb022fa59bb77aad5cf3f60e0732cca5acdfe0f2a490dc6999f221fa0b15764bebf3662b7c6d42fa1363e0b158f1db19803d7fb258fc358043bc2243b4af08d0d90c23d69ffe18552a9877a3039a29b507028fe04f5b14c82210b2813ce3069a96d7515812aec446c668f08634d03c295ddbd5008dbe1772a25080eb1b9c5b3adb261dbb57fa808262d99a00c00bebf747669908798f3ac8528880fed6f46c6a38f469c928526b35e562efca90509a24cfa41a8ec3a2f8aac784db2af4df25135c4712505105d18dcef4929859dc5799fe211212a0afd6f84a31f56e529f7e07ceafc587761eec25aa2564b200a79fda32ff98435f4951e3fe3041a2476ceb4577df53894496f4eba6432b5f9659bb3f07d6455f7d827445c571264258f5484b028e77a6bbbf622dda86226355bdfa226aaa660f832500446e1eb6ef90e3b98bf5ced8c453b4458136cdedc5f1b7012f8647ce25867fc337845396ca7a979851831842c3051aa8ad35bf4897f8f694525e46b3c313a6399130a3fb537d8b65c09526612247cc694d56c581289775b03330db3c44d4776b96e0b842505885e47234d084e71aeed0fe84101cf929857750096281a44979d2c69e02829d177b0cce855b9f219514e7c3bcda5d84c388412e6c0b6f3a2f31eaa13516c2f60542a8e90afb9cb1bad2c539990bfae10d0731516c00f8f3aea0a23313f2032e20f4056e5c0c122979a424fe8842644354732fbedc434ca19644fa67f8ab342e5758d1e81b31b250bd90cd132c99d70826a65f2599de8e3afa597837bb222fd1a372dc2c2f72623699fa65df04592d4f910b0612889e0e1603d898b8b4e3822310fff8f23a902ed858bf15f2af89721089ab44fd80ee9128050255ba948458aa8c3a509900488d80c7f9508e562ca8c92c64142a29d987fd11b38c6633d290b2d95fcaef9d53a6add6e90c57d36eedf089af43789d53fb4f1146d9956dabafccce1415b38d9203cee0b66442c7b0aaa0480f2fc403d385b289f7f0c78d591fc316d9d1fc065bee2d7cc99382dab407bc2d78c7a063b1349bd64d079e796399fa602e52128d627948e2c35dd3253587bb6de4f9f39388467d07f914a41f1c0f106dc7942d421c9f739c140fc0956d230b61e76d928684749204f1cbf42380003891fec0c27decafa7c5eaba6143209660d170cec485f23e53dec85ad3934821393b542758714b846220e24379d583344cf803d9f4589e202041ccb08cafe31c10a46457d55cc22f890b45d096bb7a5ff6b0ad433a7b14ddc3406b0f955ecba766121f0d260c5920320b34017424395faec9fa55b808a2809a946b70754e9d1c422c304968a24dee5b6d3038cc8ca6eea8df8bfea4bc5b2b8dfe134e9864becb20722f852a5952c48211dca499529dd8c30bd49e0e200ea288f3318348ba2009d05b3411a88ac0c58370df1600bdaa004a59c9d859614fac8fd6ce5686d4318a5a5a97628e92f5e8d2732166a1a1b2fa7d7a977e02f0470578d12154a105b3297213b354b1039055a29280c4be54d0743576bd5bc34cf8c36d0c18107204492e487d589420b106caeed9d66925dc34134e484a435cea138857e87d8d02f6d5496e31ec248e2b25afbb1650309340f34048b928ad8de8e3825fe72ef331ea08325ed5b69cc1044ea85be71620193025d4858fc1b5492737b3ed0364c4f4b41c485b6242de7eeae63775b9587d1e435dceaaadc2a836e776f32651329f39a3cf0d725531b0aff4f489010ec82b5adcfa892d80f86e7e5378c3e68b331c4b685e598b3f984ee81355956259334c90ba82e75868493b5f1eef05613e249892766c89a1147a7215933441a2556c24af2a67065641868f744f583758f3db9fc9abde2726f6219707aa0e08503f8497f4a82adf74da9357fe288e774d9261a807bd949379f3794b3a44760f655f0349a6a399b7d472f8b079e499d78b45c53a96dc666fe15e8781a2babea7542a0fccbe5c6831e990ddb45e1b922551d5900d3dd51332b518036ae8f92728ecc0a351867ebbb4291114eacb8ce1e8640b4d044f27908a5da0a99c50f33a584a132d7dc60b41d9edb08aa3d52440c285d239b3e42f6e90a946ec5cc38b2d8e80d0acdf5668221630096149e5eac8b91895ad18fc3672726ff7f0779bb8e2acdd4679751ae03040be51a86a63423f76674db88fd3842453d8c4f14a812d7abc634b8601025faa77c3326d1b31456fa4c075f28d024b324710c8d0c5cf43296662eb15fd06b3671c139d4d4977be24121481e35c34477a12e3d5f1f803c9e23e9c98a43d191922a894a02c9509ace76bc136daf8f3687ca1025c760c18c87798f0215e063d033e1f4289b085d89525035238af388f36658f41a0ae4a90a2be33a704e9f8080451e6627e3afd89c29982caf70a3e891644ec78a38a7822255c4e64605eb85ae622930b58c515ac20194f59ca3baa601461db395035f2db7d08ec3a9b945828dd71f243228ec18a49195e45741e5a283591d4b4924bc780051f96706b342dfa3597c165f0bc1643a0ffbcddcbd8c8b4e5ad8e0c090fb647830a492fc5836ee04439d3289a70527293f8d3dc68c787ac24023d0de05debf51c75a3405a5d5717253b2653005e7c2ead691e78a348277555808015efd2ce52532722473d993b4025baf3d84b81301df418f38339346c43838ab2e35791ed718cb2d9778b4cb87b2825b32927a3cc46ca327e81547ce849560fa5f1cdd7358d2ac9f4881a05be22145533e836be2f49bc8845bc23296f3c2af3ffe518914aef0279936c54b35880f2981cc9216ac2e5f2d5133a8166e077da59a38ee3ed65737bfb301f0bf8d1481207a0ba04578da48adf9fea0c382f8704de3957a7469b6f1083e1da22114935679f064a941384708cf196df38c946fa42fb2a209b592289b871db307979fc979402fc9573745807c7227ceb3768e63443ff4a4e0676e047f5627944fd0286981e0536908abde831cdf855995af1e73b182712793e08570675860861cc0ea07349733420a7e3358d04c4c2ae0792b79fe250fc846abdf97f1fe416936825c36c4f7d81eb6464993f49d31ef4a065f741e500bf52cf2dac0187539a7536cc45038736fa9641b5d69f821b84000e8401c19b85783442d2aec47ec257c8eb55fa8253ea3cca204b572a06dc889958b418c276351fb45534a385c83b3e790bae665ce4349ae835152af5e36f85443d0e41bbe7db13b77dea820303507cffe925426593cdfa3734ba4317e127fb42408d4e7709f6b8b902d0600c76e26c76d85665c8e000e4e35019020754e1f170e93530044801856608d29a25ae54292ce3bb950469c7e4f17440c992042be3f6ef60f5e8c7c566944093fb3334dd16b5e986b44830d97884dc1c2795f8760b338a327e01ff3d27262182b5bfe8144a2b4002b6760528f2fb492030287d777b544383c4997ff87096ffcee569588aeb75d60914183223cbb820f2948fbe020b72db874234d9a9bcba137c448ae532b120e4698090cf20202b754456b3083f3a5ae191204a9c28e024f90883faf80ea510a7a009c5599c26886170455efe578c42da45f4db19938ba47d064c374b726cbd506c7d2c3844720a56392aca783f08e668a5cdf780b34410947a6b3e1e9801d22f3b06af951c6a155b0d36e5b752bb0d5b9a7b8e3f34c7fd4301dc8101389cd2949eee1b24a10b8d84373d4c84a9ac050a82b9ce82b85c10cc42939d0401577d30857dd92e370bd8fca4e9cff320f08cc3b5538eca0844bbebff1933e06f8803772ebd21f434b1b39a640d21f26dd7135702858530d308fe165afdc90f2d4613420c369982e3ab0429ac0ab50e6de2934e8d9dcf1a63c4bcc6c080044b8a0d379708fc943412c8005513ccbf7ab010397d6c26b2e3e4a43b261891b93f90a982302fc4819fa424f415720aeb9b63e54cfeef8eb52c29d7e74ae4a5f3f5d5955bd38300a87cc81da50f03a8c394004445c09033d4b51d158853acabf9ff337024c6973585d96bb60eddf4099e5a92cc0d478c87215fd280cc995fb9400f86b43bd6db3c2306ab1e7d921b4ab573108dfbb2e6f009453f54a32b03bc2379b24c12f10ad7f1231547e13081a3bc29f63da4d295502b06ce268833bd887c4c86ceb124fa20bc6292617c50a2b45c28d110163b879da84597fd2e1ede3c5c69a977ff24f5157782d4c718d311de39b50b04d16b21643b84c02c3a8f3a76a42d55d34eff5b05f8cb4b94140bfeb24405447aa20452ce4c424a3d454e5c45a684cf3abbbd55f3b6d832d60a633cd5ede2c44a9f0faab45c65e34138bcaa1ca74a82c6b5b55ee5c0285f37245482dfeeb41b727a83c0d907aa684839c3ba08e7839b05c51814301e6f7522033f83227aea7fe92b82500b537eaf7ccf631b31413da975bafc59ee86788653442d241ac3ae49c186cc6c2aa0ce287b74851448a400d3495f1710a1263673627e115839807169287fe21e2105c299135bc7f55df65ae572d8321040c6d32492948ea1d5018ecad1127c6f05aa2455534e354daabe2fb954fd724921b75b692084645441499b66c2b03744f1497250e0cf6e8774b0aaef70bbc51a2897edefbfb429a4ec3510ec74ef5bf9273753d60f891ea57f8723ef6461cf48e491201c6da6fc6a16aab259e416c0a4207e1948c290c3cafd8876ed8ef12bb8b180060cc339205683ccd5550bc9c4a7d8a78c0fe99c24b0d5d8741d6e3390573b43a55e51c47cb00bbe052c733439b5e3f0b62d749281bb849691b44ab2f976c984af2c6602da2638325ba75c07cc9db35ee0a948bc0503d47b08026a0f6e1b92df804f4c259dc3d4a06fc4c83ae9e530826a09126ab13b0ecfd94164eac83734e1b0a827e943e8e892ec7d000681c036438837e8608085f5c110ed3f34a280b27c2a945b82ea4a4eb5efb6de6efbb0f42b8096b00a43ffddcf8f7d47024945b720e343ab304b1bac2a0559c97256d8c2891deafcfd4339dea61d2cf30521302c9d257e172cd0d1ac9f731fa1da89edc298e44bd290cfbefd104411444b3a9e880fc215205dea23415983a059b0540d6eb63378ed9c7d9e8a43d04588d862d03f04034d9ecdefa4c3d49b8aa954dfb129826e94652fb7514d56cc5b9ce0fbe42f66b9cc2c56c84d7238cd63998209cb5f45d4283c5a58f002006aef81b0c34d2639dd1933c9a509355a4e719b381b0aeb1e4a588b981bd0c8824e49402dac2d1e82f36eccc3079af96945745d232ac895f1d3d11ec283f325472fe9057e1b10fa324fe0bf50e6c47b20973dcf07f64df99fade865bc3d2ea8bf0745d27e769ee502327a792b5a9d46bdb7edacc58c484291ff6922bfcf61507380fd4f5994f28f3a15688b0799e643a11e6e3706c030e969d3c643bc0ac583f6eec09751fea2a84249093e3fd83bfe78d866e0ce0aa0f50e99c27fb55db57631298efeae45828851b43a70575ec04d387a8febb875defd917e2dad8ec7dccdcc70a0a4f9adb51463b9425a12e13ce2d2868b871eb23ffa676942a746505928a84db69ce7f7e48fb98e9a262da4cd7e8d930aa78cd1593a0c6e2307c4bab59c33a7848e24e7b3a44914c48a06e85b380badbefabded8e9ee8af34a04ca3630696361958295d594e6f1320ab704d822a26c4ee7f894c8b144c3d2812ccc1b5bf6bbdb3a351f633af5c401995b8f5a9db6108f040e031f914b447687f74a6189e629f888b914e055ed7fba98aff93ff5171789d3c539bf32605bc0bbdec03e344f10b8607e07dfbe8e017f7170d4697526b3a682ee6d15f3da48d00eae81727871834d1e24b8d970b55082233a0911f6330477403f92cc0eb65373b9442d8838f2605e6ff6006cc633f8d0ce693694b9fdb35c0aea40bc05b84ae498e6f2e8d930bbf382462931117497bc37030db65979b5a8834c3050fb308298b6bca5b9570b430b7d6d0b22b617916785659c29c3ee9f93b359423882b1a305ab6b0d6287130bc8eee51f95f5cae044a861d34326dcd92577e40723a4868cad472e20d3c0d44a2029ef9320460561b57d3155c8c191e2bfd4157cec72fec31873a55ccc76be2d768fa455d833f0badfe7ca7199bc373396788892f692bf911030368faf8907a0e24cf74be0f63d6dadf04055a562d5f68562ca1409d0255449dd1bb3791a2734377db7f4a50367e3724fb61b72c6be8efa5792253a327a46c231990772b5df22608ce2876df87c32bc4c517a7a6e95d9f52001c7bd581737326a87c681da598302fc8884f4456af697501367a873921b7f6e02093bf1781c7f15a226aa57b8a4673d97102349bf0e9bbf58f6fd188b8a8359befe076949d9b0f0690e86f7d78374f00c90cc0e40ef8acfbf455df7088abc6aa98f50c3ecf667223441a88239eb71ce90a399c892d57757a3b65ce5c375ce355b972c0cb2f1644c0b0abaaf40d80463b36f40251fb0b1daff050e2865ad69e4ea9747063235981f26c5897441d77b0fdf74866458a87b59b3832fd4021e0392f893f1087a615bf69b74bd8236ba6a1d2542979ff40fe2e42b83f5dc5f9e491342ee31795ba712ce03008a3d73bc2cb5970010104354418e27d406518a94030167f28be33c028cc91a680a9f349c7cc0bcf89d32ab8271442946a845744f9b963efce3198088d8b915a4998b8b384ad542625f4b8795c4791e56c57c0e9631736900aaa60e1ba3c1ed645c9b52658a94a4b4e050b1402279e5d71f562520fa491d7695e45953a5d7b2b5c8a56edbf281546fa08d0979a6887e1400fd064d23789b09c8a1550d03184384e619c757eabd739add35ea02843cf987ccc78384b9fe9231db9bc201659ef7cfe47b598ebfb59c721629638ce000712886c1f60cc3814c39276eb7892779e27d0ad17260e8791911f3977ff3757f483d87ec2ad7284b70b8025b586f67250daa259d70fd706914c2d4ff910814b6395fa7788ae3fe758cb97320a6487f4aec9e534079ad374b92b1b225651564409976ae2de3f88623dde403c1acb9330cd1f02e92b5649bea38ad18f427964928a48435f713654a2576d979b2bcf258052724e80b250d277abf7bfdbf78024a46cecf2f0a18082ad48e15e2d4cffd5a119225dc15addf0dbd46c852f40f90e2d1b58aa323516527de243f29adbab2471a15a35e92281fa2cb0a47c0c3271809c18a17e51bca0fefb28043d3634d841122805c1682cf743b2750323a8a813c2bc82695ff66c59c282a5abf07595ef0f00d55b9508410f0af35c41d722b8b1b183cc57895402f691576f212529dd493c178ed0d8e94c5373e4af5fda27cd5315fc51942cd58f82b7a10829fb9ee9dd84e55aa11a9049d021751ec92af2805e5ba0074dad778857a0cc5175cfff7c8423082e8b09f8b48c150f7c442e229205e93703abe66cac5cfd0d86d9248544054a4e89988f32434349ea857fd3b96036c9445f42172e9a4c611e6f8926fd85c911ff53507c8540793fb1f0eb3392d62c8e9e5d4f0d3aec0684011ad60839392c88409073b07dbb47ebb88cf879af4e5a05c557d7e64524846023d612b3e6855ed088feea440099dd9bc8a95b424c678779f4772bb1257c0f7703c8ca7ebf76bf945faa5b70f23ac207a8ac9bee8ecd375b0f323b5ec85f45d59d3735e928942759a5ba670fc008025e5910b59d2f0bb0a2e7262d01a50bb56cfcacd09ba4c52f848ca86cc999c6da0db25e6442377bc0034397e71ff1b55cc85051e70860153919c7cfe414383b600e39fcc5320cc402e83b9cca6bb69c74edd0337d4a67546de8c3eae8e175f542c7037850aaf641b57250b97e16c32247e13e90fbfe022d439b934717ca3a2a47b198c09e6dd805c809e243d69d427fd87be3ac2714a5dc03c23eeaf90ecb02e39559ea5a42d9726383061f8276018992c95c780bd6ede442cfd9c7eaf200f80205831a84d39fd3a75298a36d9a6ae618c031a039dd1faefa8674a6408b05e487299b863828e2ed13b0cc221b9d98b92a78aabb80934729ddd57ccfd99fb12a482138c48d3009e25a266c208282537580c08c1d386fc894252b5335e15d25fbc909a4c44384455532e80f0523f373735de939361903d31fb73833b7683060cf80e7e22a0f1aada0518d13f67863031e68cc77ddf700bc452ff02084e3474983a14092f4773ae8bcc18882bdc2dedcc6400918944ec3935224857347b7265d9a1897d05f052953d665e061cd16905d71d7bf49a3b3dd948ab746d7941872e449440efd693a5bd6328bf77eb165aae84fbdb722d6baeb4bd369ffb000018dfe05ae0496ff8a2204545c4408235036ba79c0282562ea145666c50c2df5322dfb445af41da0db999a72030b98b0528637553b2a42229537dd33fa730f258457e78aad8b8b38c6d24e4c97aede257b8d76892759614fa2629061a59a6248384b2f2fcb3b806ef899beaa545cbdc7e30220482321b644faa8d452a2d86b13045c485cc201013bff81f7035e0bf61be1064aa745782c095f5ef4598dac08f4a09ed5c550668fbf989d92142ff8a42be062b255e59a160df4bde7ee3979347fd4500d7efadd406b0b50b34c78dc9267509582e218db8c06395754e65e7c52b9c6fcc4c81d8e6aa29328c4c2ca49f6b7e001f97617ff77727518fd3bd989d1f2cf8c67ab1948d62a1a9cb18ff982e23bbf62b8fd34e48128982b45039f558cadea32107ed994884d734075b0734506679b804b345d9ed6c0f84150d20279b0d65e97555f6542a5275a82298a44b75350c5a2e7813992d6faa0ff804038db8e3e650079c8354fa0b0a4d9cad69f0924cf905cb4a494098e4763286ffce1396a2450ef749c52a623cd31423299b525518a621625c5109fa98c320c0baca97963c6054a119016ff88b4dc3713c6ca477123350652c821254ad7b3f630f16a9787fb42542049806f273832cbdc7e64d480bffd2fe73a49bc8fe7f7129de943e622847384d0ef2244ba652f513b4d4fecba58781bbe3c2788e4b9f036a4b792d9ca1d1990ffe654f86f20e9c873cef29524be227c9a3c13d96ffcc7935dc0c0b550f9be5ae6d3f154690e53b1f852283e70578f2d839e193b4cb314b4353fdeb0ed44084e2c86c88f1555444524d3c70c8397013dc0fdc0e2a0cda3a222132342cda8c40e055333580d1d821f39f805bec1b0b3b442dc4ffcca1de146d59086e9a2fdbd3430b2456d731842246171990e51908804768c582faf66f15f86f00a822bea2f85f39c6f3ef46defc71a2644da9e54d9a37f2ac290822442bcb4d319fd2ca5684d0e0dc9b376cae2fb55e054c95f4dc27c072e81142d49f4f17f12f5535815b67b5530e25c95c0b1064d129260ed565c31b239db156ef942f4099eef932f2bd982e836d49287d85e8c63e1908e1798933be29f2eb4034882a0332228da248e7a5e99b429344870f894d5e4e62cf8def8640864ed0910a0f2805ea92955420fe38b57caf6287f2fccd56a2bbe502a662a9b959046664848525f002b46eb488753a2cc203211dfa7238a294742bb44c1a98d189c1cc0d8a03d547615f2dda9ac39c75495c657a77a6277a7e75fd1fb3b49779577b12d7095127fb025802b9765343c5fd0b0dd14f7e075d76c77041e48a1d7bc8ab5a4d89402068debab9d59918f8642dbb58b7b2f06a8e685b86af9a3243ac4823c60a80c599a321ed306971434cb2c801a4129db19335c6d9698548055023fbf63472fd2322ad5ffd005c98f930483f33b226b5924495e8363c2f46019f81d950ca3b1385ab5ed88106c074b50c4d57b69998b8ba9f2ca5879fc82a979bfb0ea1518ee505e3a297a8060f873ed57a897b1ad9152e0b023739f2412ade69109f0538cc33cfc44292b8e485230fd4f45496d039f99531008bc04463070fc45885bce232355690a045322bc102b8b19dd220872086c6797af30b773d2ac8c5678445dae92685082a28920405b7e98de80c794be45c7ca0546034eadc5f8d84a25337e5583e8af106789410782f68520c9b1f2e3125a709ff6922931c03c300484c59c51420d2d2c0bf3c630f5535803330fd180fae4bf876f05bc58b7469355a04391a292e84d593ae28068d57c4d3cc086cd6673e4150b116fc145974b85cfdc683f0fe5e039a37d355c6e3063568cfdb94d31e3cd92ad78a1ac60ffd0225882439511b48355166f180c962378448b23058afebf7bb0fc075fe3836ca0a15b74fdcd7f632f55c9e6a3b275d3be993c9f1982fb9e9da3c3c291b3f8b4a6b70c51a9a3e4cc7a309e20707821e8f287d8562c4e089a628559abe2be890a7171a3ee2d2dbabf7aef64ab256a135f6966c0dcf48d73b1812c3efb1033352fd68e42989527e129d3ff07098d7a8cdb5ed11a3cc889273d54e310fb91926f8ed8cff46d10539a44859366e3c0a1bc8ba00f88bc83709db470b3cd6a85c662028f231a37232b077ffe31b23e9bf3ad521635a5082df776b2f8424342212d8743ca7459a9dcde94e2c8d2d35962a4ace8ca2d262237e556a835b5d2df41f2943ab3b723d42b80d85d88ecef5f215b22b83cff9deba332755bca043193925c8ffe2149a9342779d50dcdc04f6e929c6e70f602547f4e3007ae7d6f99d75070019ce47ae4d6622771906139d2d5322325083558d0544aaa29e0889fc98f80c5792b72913451fca4e4e1e549386068ebd0fde848870b8db0384d27843f44d1fc108f72342a1f251e6b7630559f5400fa00f595a74cfdedb8500b9c501007403500e784d6ff4834377c9ffb22e80078ac50c32d5dcae39c4d3affc558abb73ec8108ad0234d2430cf6fb82abd4c5721dc69c1925c9e9ac5d536964841ba72403ee8eb00f40ac20e68b5fb2f00aeece8d33c455cd44383e801c0c4d2ce9b586f3ca822f20bcda2d0b4afdf50f5b70bb62e2f4e8a0c54df49464e267238ea04bc4923accae8b4b442ad336c3e261a9d07730ae4fe5da81a9c208ad203c409f02a04e67cc34e7be89e1d2d8f3a034cd81fbfc778a8f80e9ec439d6d8cd08e16174f27d5d15252bd2fcd75ed47abf74b897bb53d4fb2126b52fdca7888c72742cc8c345f49558cc0700d454db8575a0112954f39c9af8f1b49f26a44962feadd85bd06cea502e3ffa26f192d24108e5d2fa08a33e3b5ba36d341a6a4a0b8ca995946a383e5a45634062cedb276285313089ab7183b4208f3ee31f8d2cf56862fa16734ad4d0b0c72e7ce591f01b80203903cde792445757fd9b3584f028f064d36e84a1ec15d5064d75960852c39e74f5ac93ea6f1d490c3513422078869955883d899e5c2148ebad9fefc3910089f23f3b7104d8007086d24e9c7d9bdd2c14a0e177ae93413f1a2ebab1fc96d0df235ad61b83b7f139351d471567f4d0e2a16e3c418207d5041e54cf111a4c32bc900388ac1470532ce346ff3544aeef2e72a60f4ece9c0bc4d400737dbd5e12789437e1ba2b98a92f0a66072e0c57f5bbec0b7eaf7c0a74007d3942b3da9c8ec40be3f39a5f9505341b3a0c6efe884b9ca55e3cc8e9e729173ef37087830ca63c6627885d2111b1727458afbcf22592feedead4329089fb038bbb880d22e5644ef26ae69002133e12f16c4241d2b238c125f754ddc1e54d50082a15f09590c3f840d4ef2ebda4f45fff06a203e2a4e2120e00332cb09cb332faef75e1d0b4c9c54705cb8622f34b69829d7951279170726458cf5b6dc8d9f3ac147c00baeba8037015decf221b0937ca2bb258e39bf3c5f60932123462e456a415551596afc822be58e1134be2f08d5a129eac0c9af5269d98b343a792c532fb1480279bb15350691d0661d0cd8f18a0d2f758965a0c56584e2ccc30470a539e369240c231b3d91fbcce33ce6752478db1e58b54105cb36b3c80620442e9f635804f29dbfb4a3a51d25c953742e4515edd9e64080baa852fa7a72b057eb34a9d3f19535324389b743384c13190927bf877d25a49cc4e4001934f5873b383b88e1805e833ab75dbf018ddc74e567957ec4a235e0940deafcf0e54306596d4990d0095683cbdd3fc8b9440397498027f49698ebcaaa7f53ded66717441aadf5394861833940f940540fcfd0be22c2fe333bbd5079e966bdd5a5328572d68927b7ebf67630e42d575eb60ae8e3c2f5e4c43fea5abc34b4201ceb2dca71a7aa47751571b68280735badaaf100c27d88953732869e48e4f5e9910647d85f7be2289eb9b78474dd21982ca5a3b37a5fccc9f1eb65b123189df2072d29b89784f203b6927e366971f1bf29a7f922986cc4ff483e88f90e8ede1b134787ca30875ccfb5cb0f255af98829b79133683d1eea847c59d76314af9fff87313241052b34a59c0e8275a524e9407d5faffca8892f41fd3f5d1cc9f8f7eb96598fb39f0e6f3b0705f7b1a8002a30d7b1df3a59d0aab0a2728d4e88095532c6df6c83f60e43e2f83806ad5892fa9245f6b45a67ebb548a7ae3deee1528bf2bea38ea7e265db04f9c124e92bf8bde14a8e735103203fa97036613cbfe2607e70ea20a52f3ee0ca6a8bcfc2dafb63053cd4fb2ce8eb3a92f6725e1507f7e1038a95e25db6e062685df06c6e334c9d3784b387d02ca1327ee1de192a09500072a42d33a1f7a922612e26d154a7321429de6a54e3462a483f386b6b0d235553be81eae132ba82c0dc270fab3909e4de2b787b93706d66568ad93f04a50c2546fefe81def15d231ec8ca2e9bdabc7005c5c1c9e4512102839a85fc3d728bf3f6731268a5d370b50c98cf985e021a9bb170219e8452ffe289aa1a295b0ad5795f1d15abdddb8e4d4a6145bb9106aad560b2f14dbba99f2208a91d95d62539a2061859cf98f26635b80551368e599752bcba21e6b4589588751605252f21a54c0d097ce1b812203496ef71b9c90956e19f4850680ed739eb05d475b23b322ac2ff1a76fb03607d2a71bc4355b7183c47437661451100b9bd0782fdedae36f88e3e8bde4a180b601e9d89702a23070635a118782ff0de4e75d97c380c079ad0b2e028ba51dfa9828a5674519a10b1718b5ae3bb4bfce3f66608127660b68ac294ac2984d1f9c886d3867d04b28d5373daf125526137780217a84048a64340dda13e3204a8bfa05f0028b2fdc403885d2618943d6283a2052c82cbc6cc39510553ea00f3a68b44a75bc1af9580db44f295963b366becd2316f12a31fb6391f4aafc7efe593f94c0a8bae38a820c8fd4758e504f415afc53c8379c5fb8edb9d4b73894e9af9ba52156ccb391d88ae447b22acfdbc2d4cfb47512f4a8d9bd4d2e59a1f4d72c0753533d0348986999c1a689206e7f946599c93e4897b4d4b034d5ed1ac9510cfaa1547bf4e2dc3fc1c2e6c721d28052a08cf8f8fcdd36ce2f4d9b0b8cd361098604d20fcad0acedd62b324e2d34300932878b953a8022c8dcc23cb9c58bb8ace022d3db8688a507dd36c6d8cb1250de81bfcbf73d54f8491f0c813403e7955417f6dd859f3a89c3f16f3e90912ebe2a358563eb087d7a00499a6f19cfd8640bad5386789e1799961b7f88b562740454e22898e81d6285b9cf83c05eb0ea89736c3348747e6baca34016000c8d70f73815779e985b350830a0ef490fa988306c3ba94ef7258fe89f2eeb0db07b3ea766b073e19f25a09b46915e8262ffc7f1317da458fff1727191724b3d5339d00710b35c3a4b55bb4a420408093fe11e2d78a3ff4d8decd72db99ffd7da608f8251278b7ab5be7159bebb5283964f3259e51c485809ee39325d007432de0ae8ce3e77ba044ca3cba5826e89428cfad94e51999599f49ff250b25b914acb5f14e3ae2042391a9a33ed1da5ac99a895b226d805b1963968c78d8f4cfbf30e3ef69815598b9a4d6e216a646f54d40551fece9eeab3a0850098fa95559c12e22ac842940c33ece58494ad9010f94970f40f84e54e70120f5ddcdb37afef528f5032d49010534f5432b6e95b4ce3413011df8cfd691d9330f6995e282097c4921284d5963ca8beea82123d25438546904182c4e72b3444c46d5fdb5ec248b2686c040460f272ae84d5189131be0b36f4634212595307859bc0841003804aa353519d3f4de4ce8290d565fdb1253fcb8cc66eb9657b6696c31df1104b2c9e9489f2e831efb833afece178c3bf2a0d6d7c1e59a340d1230495a95d60325e8fafad9ea50874dc229a423e779e84d56993cd33cebf571581799a4969e9929a91082ebb85670f84a283699dc54f9e8bf8dde112a9a30328c53f94e2c3ae49248b9a45b5801eea02540e97406f0f92043d234c626aa89e74e894ae12e008574914403051410024175c9fcc4009070595c4014e1e5a550a744315660c845016a422130ad12bd504ac4e0b501b904e47ca248c03e1aede088491e6fe42ed288191d2a2d69198a8673470048e48a4b45e2ab4d87389ccad55f2035d7714eda502b77bc8b77d6fa369dc7d410568f2a0eec3539263d257966629c5b12c25617d95d4c412f598f06da85975bd8bb88213de8a8b01688ecb35e24e0b23202ec2988220de931085bda52f34bec1949070f838c8b3b6849346633cc2601e50b352776e3e5918842e6d407c5413d804b20f35647bc4b76ebef7d09f2ed7ce22683a4a20fa5d61e2ac954d4e87fd5b71e9d53954a35880c6e2c0972cba391b22465a50c819ba399c4c3a2135217d0b2d73b6f5e11c5eb3d74f30889e848e38dd27744cb0878f5336552917a4c787b33043f65323a21528160ff037f5cd053a8e32f3dcea14ef626287cf058314f59db836d312134b0f59aff859bfa9f788881b49974f698d5c550cc2f7e1de18445d90b68f68702a2c565995fd72228119f65042db902c376d3f3254d2fc0319ad6143b2c89273a3b3d04b3f7830db38e2d378473fb93eb70b1515228012c7b34d1fc06174ce9dbf5e70aafbb13b674ab78ea2d09439fc83a01eb1d4bc83e035c34b10b1860d8af7a51618a9930f9f33675a3550785c06d1b8d40c982355433550898802c2efd392ee50af18a4c154025263354f4ec88d073ea158d73ec75861339284e750eaad18551b8c68a056485d789137209f2d8d4d8fc983bd1c037d507e27a7d42c29c3cfc56ba1fd8c9f90559f88c3e3d116b1eb8a6dd514404c087c0f324109c94343303efcd9b572e738973905f5ecddd2fb35061212584b7c7ed9368946f98d62312e887292fbdf1f2bfe0227a38552b0ae657740f0cd34494debf7ce8384a48044f093d6f68cb10f5f5bf7d5dbe658003853d01b27edc9c0478972448406985231ef938a99989e279bb9c22e566883d23104d32536261834406245aeb064ea6b2869d3594005b1375422238385c5f140979a943e7b252027afb6764c33d09c3e20f3afc859d25e2eafc5284b40a0652e7736148025c4f07e290a3c05d5e0a87e59513b9e9f26934a79267d787254d7112707ed9b29be5a3b57f0d809d6be17454452813f98e073ac942005367226ea84e719c948890141709969e908dfa00a6c48d2da62ab80d850286744e5dcc85d7322713a4be289cbf19d00d4f05a2999f902498f10061d9a9e4140c6d3c234c148c570dcdc2db7908420cb6c412724589798e21487d2e866d3bec7592be004063acec48184999d08624bf3ad7368862c989e011259a6acc23b22f69441a5049269be995921c139e038ce88f4597e97e28029d675835fc56b8bc9023cf9c9596953b026a3b2cab188ee29ae0a47294a8674e08422c95e2a5cf069c3a193004709f394665091ea073915b228a3de8c724d8bb0691ab0ee942cbfb2d4570ce0adad2b1cb1108a639bce6c349fd932ec645ea3016a64e65d9aadfa526c39652796aee3fec1b534abcd6691791b5a7502e5d59e566fd0b20d444597744c45b5d3f8d9e94b5e8903ec886902e57003a0c8e71d181b0d69689038a40151dab0360f9e04df59ce99325c8a43e0bd02f9ad933fd287ea973389b97c908e191a23d022ef03189348f4151e6f5d227f2bc5dd589b3fd95907583296227a9de0fd4d9747d5200bb53ec0f943f99b5fce2bdb0ac3aa62300cdb94204a3844ddc3e9f2b1963377fdeba392c8a55c76635629de59f26324cff69e365867d96a904783ea4904f424f7097c2e1f45b276249cc50414beb1836143a26aef5b020011813ad54af2f83049c7642083000f3b985f892f5819fbf05194a8d09507bb61ebaa0898abcccc00b3305dda59faa0b1a8c5edfff45037a38ac7e16814ae8bfbebe5b297834002e08d4c85934f7233ce5126ed58cb5eb56d98e564238908f900d593848cc664bb2b0b05e69abdfbef018f8a969549e744b985495535e8346b948b83b527bed367ea065217c3d02ac14d52fb518dc325f98b9afce099435191bff0e30cfc3aa56f02a05619873a19af1075f6701efb7dcc36a55626608e35789682549e7b6151b3e77954280f3551301a9bc91b569cce47e0e195277b7a042a946c604d42b4bf82cec263283bab2c124f918450d3d549122e04330e5717489d719748fff0f8622d713190195d140feb0bb2ee96f21e7f5438fe93952bc60445116fabf6dd4be2803e6c500254f9ad62eb4de836b71a2acae8ab59dc0ad4a23c523eb8f9d479242bf888409bbab259e416213f473cc17d2f8d1359755b81c846d24e883be3161f70d34f2fd40b8a9472a8f60518eae16fc822b29780017c990a08469788f70c36eba9ee5a97700ea2047083c2e74fbb49406d16b41fccc5137671d41ebc0be0607b2a6cebf59a1804640559028da71bc13897043887243bd35546f29fe5289652b627a418620c4cb86803e888599374e49bcfb052cc369b70910a18b0a342762956f13e5638f5b5006ba393b52a9acd9c14be62e84b4287f134b9e31344b2fc28b773d8554589a0a31450b775ef9a6b2f5a99d2b11cc450a7751941f3aaa0cf3c3130f74857b731dfc2b26e2039155f281cb4aad7e8f033282935fc676aada7b9611f1b686b42870ed72019a2e94e5386c2245939fc479226bd235862d50586367f501fefce37b4e0a7a505a700e2cb6012a6dce799166287773da085c9bda37bdc1e253885f67601ff9ab853533a2078fc9ea4a5cd1371246b85249875967ca94b902e11b3478920affadc110d89557ef324980f9dbe936089f654434f60060958dd4e372d8ac8a7a9dd440b1b21f558fb03300dd99d4a55acf9bdac9f0d8d40199aa56389f20183b86e7431c6f290296906978ea1269f71ea4fd28ca71b8239437bc5a64e735325e9c2cfaa19cff5ef233591e4509bab2031fa7234a6597ad9b3740f3ea8c804e44992d90096653d67f68395b9862682ee3e7807a6d0aae1dce2336953f7851f3c0125335442ac2f339839d9b54d0742118e5d5219f5838f490e6fd20f9c200585ccfb7aec3e55f7ffc85ab7996a098d77d6f6351ae9a1f1703cf995a1d6ac6b8da633883d2029ed5c0479b9192578f873f54cdd3041cd01210edad4e2314f45b4bae539214e4623007a39af3189c00b126211bde84887b65c2872efa7cd369b360463778e6d7d748d58a089d8f1daf18f6f9d72c0bad6d9b2cadb9c5e684237f4b9b0d454a88d1208c00f3e597ba5c7d1eeb2ab448c11cb13c42c9328d12b37b71d8135cc9b4d9090f1cf5223c52b6c01949fb094d01e08072761235b702de15abc8b7b5eb8264cccda9a554855f2134208cfd4bd815433c8e51ba42914ebfaec471224909828c934fa22df44528c348e0202941cec09b17f942ae82c324e40feb3255740b5df13c4cd69afca258bd9b9d362434bea24355f480f9ca3158df62f86a05350d5915bed96d18b4459b6cbe8d2bd49b22650abb238e475404a080dfa4c3b31238a2c364bd4b398b27284040cf2450d38f894d6f4a5047bc0bf09c8cf4c68089465ccf5bbb0e252f94eb235c8aa44784c89d34b69c81a5217613ae03606b17585286b1f48c055956d055e29626be346624e3356f212f9f436ad6613ba85dc727ccee730908c8c41109e8e442965c4a5440286d56251422067447492e4e8d57826868629b21006a394077220f65d52e93db5f3ea5459f73763e1211a41dd22a75f8a6554baa44b508c436d38c2cbaaf8438e5f031b8bfbfd393e685b027d3b0966e379595465130b835ffbc537910e24af8d808045985b668831e80829d0544822b4797a0400aaf1791b812fa1d4956624e63fc805ec5b8d8064090a4927c56d2bd1cff44e283e9e6f6286db2593b2cd45edbed805e19125806f0948c67d30abd0d0393f221355954347d2eca41829da490f4dfc9beba08282b48a7619893b468a6f369aee2ec7533d543fed496784261f05c53f135e5c28222f914196c734c6b925490921019db91f69c82f72890c76b66effe34fca90c093324ee17643ae3a2daf2ff579587019542bd41cd109500385c47b4a824c5d081c6995d55a41285bce61f84a5556b777c5cb442011c88d4912565a3600505a8be7ddb943deecc051691e4cdaf6b1e449ae0d4a930f0bcbe095a0017cb972ff49c806fda0437ac2f785331f23ed38d1e084b8dabeaa67a24858e66f7a8f64d1f0e6b29b2911d3f0b5293e10177cb96b7fc8999da97f35cd2d0b265e33987bd1d4e53592eb02ccff76113e336bb61327f5e4c0a838fe8251fa4e8250a2846600828adf68a20ad2d3a0c8caeec5d634ce4c59055aa07238845e6854935b947489c396b4c0864d49c9b90be345366174b762c3d810468e525fd54e53a2882cff3a7ee131b2479c38e06808ee56513fe02ea792d2ba1ad5d40f8986d1b379b3ec7e7f9ce52b8be2dfd182c47fcd568442b0335794fe5c522ff75d8312238fbf0d58007827111098e607dc7b83a8f1c51bded61d1f0a196ea08b0945589382994cc999815e6caa42e1ea05bd410e930ac6889b3cfacba76ad848361180ba99bc7c8ab03b48988bd5eab8a8654cd78086c4e39cdb8ed4b3e41c8955d33ff57480d1ee121bd790e54cf9484202a6824f9cd4fe5150991f8f12317fb5e947f094a4fd6592cf847957528eea6624fa03321989117d5370ad954831ad039d6756a4944605391dd76d2c474d649391dae8e704318439e314f135e97aeddb9c0e9c5e7c1471eb93c5423132a87549addda7c93d34dc38feb8cd25ca13054a53d5930910ad7079afd48066ef58be5883f39ef92fa45e604880db7830d0b38a9718c700899625791199c269e8a0eaf459d33844d0518f307473d3154e7e0362b653eb58933d31ee2d03ce4bfc8ef634a5ad69536f0dafc44c665116a0dc40b3c1a2a2f59c9d41097c3c55131dbb6161bc1c9cba4a145efb9f0a5e045a9b1875efe594216dac02280ef6475c6f4388140e1d9a6c92381012b1e62588b83784e48c7ec637b1fbb77e865554718d42573119f3ebe84e74bff67f31f2b36d6b2b9df3e333c13b83f33411b2d2b5aa91099ebc0b72f41d502e0494f4429c76dd51114743e548a4e044d42ead54f555cb36ee84503ce487518c3e608698b7f3c72606e3b1d5f0b5a205c08fb3c5a9f774d114b509507303be0092d021a64955e7603fb82cdb5b5d891d35582373cbc1fd591f48d0e24bf85f4aa720d31ec2944b381b85be25aa82e47bd6ecbd9f6b205078bfe34a02104a22cfabb59d4a5b8cdb636bc3b4efa5b5e8910848de9089c6eb9526695edacbb6f1027b042eb270d38c351d32e0db0e4488094c0fe07c8ad42fb9b466edeb800b68882fb77afd3d3e45e02718829af392d40ef8fae5a5a2a2871aeaf9f098f89755d251f03dbcfad1bc35a04d23a0ca3da84871bb881dc776ad8fa559daf53ea91386d033a0847bd19fa2aa78eb7d53b36930a00dce7a46e8807fb079bfd199e39607ab6a44f8c098ff2ee3c4aa299d959496c3895193cc3c393292a4e4ae3491d8365dcd0fdbbe52764b440f2040c2b41e5ee766632c385d77c7908ca8060d00f29fb1b80a9620e44f1717f4914f249f154443391e2d989a665fc443996e89321e9cfa68dc07b9596bbbab2b53523d926900004aac438e998ec62438a515a1b016bb5d2b90129f0e8ae3bdcb4904b22660f89982197f1a3acc28a7141009f5479f5bfc68af997de78e85fa195856e53591cca9de409ff808c6f761fb51e98ef0c3389452a189390c53dab00e56b0377ecfe0b7bcdc4fccf08ee183a3b45e9cf36ca937d2042344468238e499589c52d494db007c74548c6d4aecb09d873b44381508152991e5779f1e079b7e303f103164e0992ef8a14e69dd4ca34973c7632d04fe6a15df35a34a8751ab60c5a20d5ae3a3090d244a790415dbad242650914b0e49795820b78b48ee8d75d1a624c594cad674535687973340c6957333887f157a87a72a13653330d46791206215ecdcef0059ccf881f680ada479713b100b09e8565e209e5d53e4a57ec6b6269af844c5371e9260363d7bdf5957bb6e3ab34ff4d5b9f21443483e7624129b24038c2cf499d0db5b432a23fb6241fb09779801ef1bc2e7b2a5853d2f03179738039975001699eb0ec993804a99a692d52876a70bd005bb2a6e946e72c1a757ef8b14191975b4482b5fd69327d57e80acb5df167fc0ed0d82c5ee3f7e274210f890846bee50065c4aefc468988abd10151be8e057d442556849077376357af27058408d167e8011ea2422dc98ea36598aa7452c61bf311241c14fb38167f0990e055d7a51721951fafd3320829f14d0669104aaa96f1f76bf254133c4d84b3f518fb0d8ff7440c0d421513da4e4051cc030e2d2b17faab26b7902e7b533be4695014c94b9202787ef2d0d3b205b79172d13288d6f4c1603ac4a16f24fb5341b9c9345bc6fd5bbdb823f3592f160c631b78e45b2bb2f88af4eed88b37bd5a71947feb3d81a3ec8875852ace09aa0955f1515f30c402690f6d21f4b24952d7c504f3f3116513f5fc2749326795247b2bbc3403f80744751e96549bb173cdc82fc6f448580a9139f1330e1a5509529bfb4cb0babbd9e187da59bf6a87a53bfb787e34fb2962b029f1857477e3f4bf0b289b9a638b632be0d12e13e08b0eb964104ebc8176f4b9ccfefd96f82209414c6f0b0dafa834197a25f1cb97c1a9b768c59250c35ebe464e052c9e82c1d5120bfcc1a80366e422c9f00550d8c05a6e90abb35d2eb3b9354f40991851a8bd292c523fdc74e8405effc65d137faacd8c8406d339e0371ba8434001882f484dd2af08b6297f0081c6a2aff6a02c8fccb230a3038390cd4460bfd681ae60aeb4e90e05e99869394d65b92522a481363d99ca550f3e7ea02129280024063c9c65850b84088289e3854b9b35e7153bc49b6e7556ff91585fe345b39720e414eb751db5053032043309c093d603ac28a58710954f0902c37ea32990c2bfb76cd74e198394e10bdd4c524bf8487e3850995f7d523730d8e0c2ff42eb59ff98f55ed93745c467db2990449e57458be6e7c58c64d21026102a28560edf80ea83b08fff3bb7bda16485555fb727268155be0f209e46c2ddfc1eb37c09ff08fc487a00101c8d029130153e2252ed5e91c016023ff83db172c6b76cc3a22a9f33475ccf5f3729f780b757f7af1460e796403f92b09d3d13192243a5dd2b850837458aa7aed2984376e584078f14dbfaea6d23cd6312d887c33fecc0beaa85296276308f8830a406462a39ae3628b4296dad60ee7f218bfdd05deb946d37580df53fe7170662d8a97bd6f4104f2fc190ded2a4c64860d81831e3743291b9f44f53bc5cc0db9a4a40a90910c869b02067cbb4e010e15eda337ab2d46f963e9063270316cf2585210035cd01c8e2497ac5b1b53a05ded844e54c9dc8284b90029d57eb2bd92028103a7a253ae792ae8a03aa2bf229750ac804504861c904a566cb0499aa1209b184464cf2d7a849ff2e33d89714579bf8c4406b2e869fc998ca03dd13df7011d902c55ba6e3026309542f944746ce506bfa49de3317e62cbe481bc27ecf4315d7228b24e9d1aba1e6155645289c060b3f8c9e6711b96a75e485dab681c260d8e088c248120450403e9bf09296d392c837405be8e6079e3250befe1cf01222042643bf8096703615789186137289123dead04c1c83f8c54354e0f0240bcbd56b4501b7191ca997c653943c4bfc3e0a9d1d196ee86c6ac8f25cc75ed141155b6a0fc2a8b4f739f0fdccee7e2b656409d37868f25a26427d5558b440f63688d5867ca4320b6d4afc570e53ed3e8f591c61e9365e332c59b65c4ca2f4af128d288b44b8449d787ea84c2bbdea1f2142d419fe138ab0025c98d795384430e486700e7d85a225b8c240551ca4f0293b2fe16773552277aac902a6ee3e227d168502fa055c83d07438b6baf562a6fe31d239ec903a6f434f3554ff861403373a59b322cf5bbf00cc668e94f32b7d33750b3ac8c9c5c8500b74aeaaf38ab586bbf22898185d4c7159c77e41a6ed402580b38b2f12a7ca07cf2b432f1dab09780c73c9d84618be0230abf35ccfca52803aaa0cda60b2458bb1143cbb54892cfd8ec49a5f7a08a835475889627a2c5889fa1b2e04838091b8c402f626fbc745512c23c7813decbc2fdc014cb977369cca5cae68e4915cd09b3178d23be449c0d13856654c80035e514dc100cc9039e40149274e92bc9c9b9febcee71748c314c57c51805ca968b89a6da542817f0314f629602e801ae3a15c6f0f7c379cb6a757aa30e3e0493e302f9dcac09ba430290fa71c242c0010245a67ff253f507e611c4761b14b9bbcbb3564825b30afde0e57d805045c7b1c214003a04906fff5aad7f0c634d58639fe3e01c868408940b155abd004d432f044f1db1d91fff4d109c89197abf0fcc40ae6be612ec7031206092603fd27388997e6fe3a4458b2944f97405450a439981fe6109e6681fde2658ecf5e327303e974207f895829e808a4167c8ad2c922181d89860f3c94acee1af1d48522c9055c4bdbeb41b1990883af2ef2e6e902041a4f81fd94b8fd22a44ff44dcc18dfc87de28e23251301718c43540ba5433d9a8c1ae8be331ffb484e4a3083910c283dae241434e9cf37279ca3d93b304a9209e5ff3d8778d2f25b5e98ed9083f20ff845c7f2676ca398058793ab254b597b9f4051754c46f05e9572935ac9bffc3348d4225aefc9e407013980273bc9e6aaa6fd593d2df3dc985f0519000fc2abfbfb92ba576575a9f3d0e9b5504f023207dbbf873d02557d3a9b555a2881fa3b052b18bc29a113a7e217f4d4ab8790e99c881694e1c7714a458f50f865fee341d050cc55c19801a0099bd238f8dbbdbf5594d4788413706b0ca3444e92daac7082a614bf444959fa38ca9ce58bb394820f6136903225304b4949efdc9f055ca5876f8520d9d350bcb20b8f1431b8929db5e471e90ec055a8232cbce23184001556705f81c788a1429cec48884f6f402c50bcf2ef909926ea624cf384aef860ad173b4c8e51e67d57ad367f1ec8cee9a53bff3f8ce6f4ccf82f87fc915e27ddf5e5bb1b0556116b82fcff360f4ae96479cdbf89f17eb747c30c4e4993c7075d7b57b3f8d5ae2a361185babb3d5e78f9a49e26fcfd234d82f9780ec7b957b474423689aacf5318e74fe3456c8bf325d03e62b08166a9c13921a9d5329e50fb626d1c18b9524f30951a420769675c35b1af928861fba795074482c4df2967bf81dd095caa4d85b35483fd814fd6ad121f074e2006625ff41aef4b687cc75cc459655ed425a9ddbbe0f320f032c3588d3af5949b06050fcf1543b6d5c11a679831590415385e7664bcad953364f960bf0f410432c99614e225a925c449a60e8a6456358c70c7d0c7be614cd9e1352e1a5656cd3bfca7714b584ccc584459e17cb9dc8504b01cb2578754be8e48b3c9d2af71f4a6743ab766789c22ff2eede74264fe0d2f5b2557e93a52b724250805d21b54893b6b04c4b6798396abb9b5281cb9ed708f08d9e46672852d803b4c966f44572dff088f85027f22174375e0379e75a22ee447d1bce23a560e90075f1e329e2778dcab8806d7f5dfde95b8b3fd8483b56e62f9b91e365b54399ba09bbcf64a5d843b893a014ea8cb7898f4d38a8ba290ce90580d03fad9f18f4aba5289280cbf49908bcd31d70a5e43799b82487a2b8dad0040723e99b7683ff06319bbbe3e489af8019ab319ea48305ae9a541ea5e5fa8af7731d7ea481f0967752d03b341b3b9c3ae9107a0adc1cde8a2c39372ec6ec5f13f5229e101f967551e1337408485f9938915168315215e7a01584c093dafae85e79f406f038407b46e31f0a4d87198340098e01aefb66b2657f1360c0eb55c0e342a4736b1b31d4057a1992058445d25dbd4bc21abbddb8874c9101370d0c5c94d7f3353f0391b21778e330bcf1b0a1965c0d9bbec2327598c5d051367040c5d1e00b25595597bad101a4a8db91ac90730ffc3c2b0e37601884dccc295bf79c98969de659473720e5ae0f6b43dc758498241369a5430e06063a3aea93b689f47b8d10cb7edc2d56655328f8b4a60f47668eec80ee2f123bb9df0af6cb03a344f924813c91ade08f998a0afd4d9d4859903aa373125c163790532d08e09d43228fe21996251400670fc20fa5345f8084a605715437f4206a894542e7f1d11ac40b9816959ac8ed5b5b0274c408923d68b36c24bd40005b2c80c2b56af1c60b5ea89c3646820abb1b9a4fefeefb203212af50d1fc5cd04d01938d732a6a0ad9532206c3e6f80eb955f0fd82a8275da2cadd3c79c37c41a8f2935a7a262527b4032320894439dd0b46f8b405c31855f4f733f6443925489693a554beeed96fefa66c2d4bcf68e95e56995fc640f73d370e0737f841cfd3ca68dc58ba84e3e1c30cd6eed5593b3303d42e5f6381855d23a9f0f8e933e828bd0383c9f9039914f2f64cdaf1b97b7300a4ead9bd056fe9083bb5a022111c9453e89eac85d62e1d8cafbea090e4bf30428689da70908204c53e90df4c901862a0f9f894443e86a24e8a965b2481d60ceaacfda9828408fb35b7556bf7e36ca44c1f3c3a54b92ef88f2132fca8d670e951c4f50be9bf09248c5bdafe59f2814aaa5610841cb2623b99591ed25986335f801c005fea247a2689042e044fa40fe2bd63f6b5fdd693da6f6c10d37bf646b7d48ef9a59d3fb2752a9ef7a377ff6279e3dce2916b62c537eaebf6286c946c8d2bd33f133bc878513be33ffaacd358017e3c04906afbe8bd372a99107a0fecae4418f829944f28622394341b357dffd93430651c5c4d02759eb78f5264a1ceea3614b24e4fda0be8d01bdff742f44cc2a3d8e4eb35fe2203853085731938f0f2d4ce60f389eb28703d5b9ed774984ad88889e83c4f51e647339e381acb61458345ddc2375c4f6e3ea86864c0fe699594d28f773fa992c0323f5b8974acc242bb4ec739e07f6dc4e841ea2d9394152f2ec6999b2e46c388453bb8043b1ed41271d4353c95b163555c5a52e9921aec52cca80285f780635429e6008a26347187c1fff2355f27213b5bcaa5eef2ee02eabec9813a784fc7a5491c083b04cf513bcdb441148dc33000f699c5e728c19d803b556f05d4097400935256f5e08d75ae28c08015ad7d81e3e0332e62f2e448d84ce38173e5e029d8c44f8b72a274277489e3c9075a89ea8acad9492260255392132c3e608a05825fdcc45bc83367d8bf4990829f3205788d520ae13df7e2b38620372028d64c7729262d621cbf6970706cfa0dbd2bec38d52086e45a8002d05aafc0739b7ebed8250d84b5d64e7f853eb80d855ef2e2b80536e6e6e700848bf2131828885b617ed550c368b3cac7ff552bf92665a40a78c25f322052c9f9b6a6edb2e86e70489e0394c0e7a54a7a566130787b367777cefa92535307d1266d61e86b86a020b46df2e7e9b9b4a09c6df8cd028851dc7e899301f423be2c6b6526cd6aa6f9988dc909553bd6a702e38824e81b55805be84c3bb3c03924eea4000621066ffc7e25e1da196e382065e32db9253e7f9c75f20e85c64d64e8873f65aa105e8301bb639cb407f44df9cfc9b6087ae8a03844e2c2a6afc3e7830324a412333610a5ae45f845b0c32d2c139801c5c40fdac938683f06fb407864931516a682e051546ff7b4499fa2791e239590aa84018c334e6e8288d23428e25983e055c1cb7b014a3351f8eaf3895f0089e47c9dd5e7cb2cf784625690d10390ab9ba295d0c04bc37fd8545cf823f2860ec82314331228836d1a903dcc8a190f254c1fa0e436076eea9d20ed47614497f50e7d58c03a69cf529a53677fda1298593e641c62eaa09dd455b215f201fc026daa5908fa377574023ff54de13d531066233c00386bf233583b21ed294b8bd6397a3c00599b4d9e3ac8bbd278864c98224d7699d1686c4e9f5daef483d5da0261b7ef808f90d42e39421394b2271d45eaad89ec55f265c8ebedfbcd0a3a530449d53df36b893d40e9efdba19a8238d4404ee1cfaef00fc4f0fdbf8444b89b22c92500588a8d7891ffd95af0ca2e855405727aa073792b843b9c3aef2f5bcfaae63f54a5745ecc8903fc146ec83fdec95eff0210b48bdbab74810c23783772767a10635f25c276f8726f404c42b7de452a30059ffcd275368cbfe93c247b6d71bfb235930f23022d73e0dec8cdf7cdfdc9be4024d7010385b8c4de0934ec08f8bdac2e9062caf473bc4f4fa2891a6474ff0e0e2c2b0c9875d7713add5e67ba08c75e13de70d597993835b39f2529f572cfff2eceabe1594644419ac62fc6fa2d27138fcfd529c41b75d14d5fd3fb5893d500e3b51b38fc910f2928c820ca8c445b80d0ce3af3f83f330b1d4c4770ba7397c6494181decc440aac99e5a400d837004ec5405e8234d66a57955ece7e2c004e33d05e65ad358dbc40c2a54f7c3c6c54f9b8853076e7d9cbde025853f448dde8d686e7acc65542b8f863f87f13c2d7e3991f8bf8a70fe57029f3c91d8122e2ebbdc5a4457f23456edede81ccfabbfaf2a64ab1c301ae48980518223e8208f12e8a58664a039aea286bb2d0f70595be24cf48df0ff4384c00315f7c7f75cbeb17519b2a7304eb32acb46ac868a35a7052cf95065f28189e70ba382331c4b32689a8cacc70bd1c036962d56d84de503d7c5873f086102ee28f32957948adf272b518755cf1ffcaca1b95e60ac1e7f119fc0634ebf2944849c50f535c6868bc61b11d4d6a3ba3bca0a19426f251091f371d224642691880959740353c45fcf10800232b12110ad002201bb085905b8950bdd45860870e69fe38687cfd25827fa55df123bc1fed6552093e9bfdb0f83897bef57b888219004ea563900e3bb9f70987eb0381ed4ae43c1d269c99ace7f057ff43d60262e5820373f6e0f4a03ae92210b98842631e4d1989c114923140d30c2006c273f0df8f3a0012d93784a28a6f530584417782402510883eeee0833e1f5fb0c6df07c90e8f0397480aec2aed0fa411bc1bffd014615940d3b9598b331972f25c3824ef14808834ca92a3e093e245f990043490a4c5cd7cfbc27ce60f80e055aa9d4b9ac95484c9332b199558c09c79f756c19ff88a92ed38976e0fd62158eb3761135aa88b384f854933f31c508a5d6598d3160ef3969af1cad354734092626e81fcdd0373b73449f7caa06586a4636cd23befac99db095406ef9086989b4c08a53d0f66242f643812cf94a8cb9ba29698910fab20616d4de2b896fe5d49c0dfa7e1d0d9902b077234aadb5d56cdb36999650e6383afabb55184da2278a47022aa6c80595b269ce2d9392e9d309bf08dc608e84553050089995458e38e3e3993c8f33a1237903d1ec327a0856f87ce919ce38c4f0c3769a025f4cf3a1525005d07f1befc073b4c4c7b11c344794116e08a8bca16054318ac6bc008259de9e1999a0a0f767c5b584051c95109f81c000ae48840b538008630ea2078ea670ed85a49c901ffa213df4d46aa5f78b25fa5b4c01fa37bf1c3ade046970cfd8b76ca4d7059b47dd6251d4a8eadf2b5c3ee4cae0f3c89dd94b99e7038c7fe97bfc2642d49a09053d909f7ab1f235215d6c8fb5b2a199ed0a2674568c35899d605c324c63105c9ab818b50f096061ba8b5c28337836821071e431a902b9d42c256b943e62ea433c5827a3cd8fb1754a5fc05b78004e8f0617e69d3a3d23249ce4fa1b558a094403b9549ccfceaa442383c792828ef92300039654bd5efb61a16042fe916e488453547e499988c9485c6363c12500ebcb5c841ec462e932086dd93037b78e7957bf94efd18bc1595ad2bec99f5278023b268083df857b39492bb8a99f85c807429450ac34bcb7ba7af5b6d3807991441f857f68c9929a26d722255288c850006f98149a9a9a48b301582a8fd64754bdf3370fe9054d322f837b8a3232bc19c9825ec082fbc6b8a07024a9cf1b8084a83035f77683ed487e134639f3f8cf8d70f850eaf507a282af637086f1264d5275ca0f20fd411bc1a0963235bcc9d903459a56e5514d628640883ee2265600d5dd4237e60f3bdaa2ab32282b19cc1574f48970d95042a866c02f2f679e847bb04c7246b86d3839da1406f51491fe6f683e02bd90f036f79313360eb03131d28980c8ced4024c775d3c0504241254944afbf5d04ea24a6c87235001f883e6b3a39923d88352e0c62c99bad30ee742a970f419648407d8f309c9deb8c637590c29f5aee3b29b56cc0e5fc5d98317847c3ae6fd894f64e1f7a518efb855957498c8db0069b0e9069ac4aa55b7d39fcb53202a890f912fe485d159a8549345fae8c2b5292bd1bad6153d5afdeefa37d48e38ba254d07054e74b7a041773c9987c6224e4a828769d3bd125496044cb0c2541339f9b0e4f8520e812063335441b50eaeb79177a344b70ea4c490521f04d621df3fa321ac425d84ab31e3d20e918844ea1f23a5048050f1b95bce62ca1741db53694dd320fcd529aabc1d6a10bc22229db41480a2ff31d12adb0f89734253a63d2b9b8f3f72f8b9426d25bdb52fc428e32c36d0b0c53e68ef01b890dfb79b2c800a54d0ae32262ccbc5020d28a0865b9fdd69fd9451a0e87e00d88a2b30fc3fbac84f5f035c7325304103f2a21481be030503322e87ce7f3e8898eb333b0f2eb35ee150fe510140f33cb28024792688b5efb0a97a8adc53c40ffdf424190a8c0659e81fb53a4fb03c31e765d2344253b5bc9679a71d56b68887da28a807fc3295463c3432310822b483246e372bec913115f1c06e0440da3c9f3ec190059305d585ee6034529e9bbac71a12ae86599ed285cd234907163689e2581f4304f3709077c3f9ef33ca5022990a28ef407603600d085535d1dfd4c8f2dc348954f20dd426c83474157005a6b5e176e2014c1027f2324c11e15265f520278a8df9f8bd41bab5391d15faef49fb78049e089eb312e2458039293fea238348488ab463254ba426b8498921dcf2baf02ca7cbd86a9e825ce30b73cd9b8363850d4c337283b17cf3656e71e2f93aaca9b3d218c8ed9a57cf53044c63d0b5e3e149f83f3ed5a5c1fce4d1ecd2d4c5386f7fb45f2c55f5d01f1b49619b7e74b9e8b0354de999e0d38c300c7102055e539f476b85f9ce4995ef49ff3cb1d08264890a25aa58f03e7b0a5d228188c776e70ab9e7c42ec305935a072ef69b351290790a6317f931bc1d609a481ac98f0ad8a287448ab344f65246015bce328a1e8c8781d892ac55e7cba1fa59720d1e34b31647c208e118da76276c402117776e324c94dfd075f3434b9729498c64fefe5d91b92792c4cc975b73804a222c71b298fec91b290f8515624b009a064e19da4094ad4260d5c7fd82f8283a0c70af2081fd33d2092593b1f5de87d2293e2b0c114d5d94a52f721253a048b9568fa742a934f9d09ad8f7a2b36600d0500b745025e255279c3fe1912d853ac0426434df3b1e5302d68cd41787f52cd6c6e6b8a076018e55a44a1cae06b48b008087c3bf898445077b1a2cf03690e33f643a22ea455f1a23d400518690944790a84f27635008f594a0cc60c84a751dd5e7725925d17fb70570d8029c2a83e9dc82c6d30914f05807595033eb8ca89a6a208b114989e76b9c25379333da770f4e2554598b08588dc2be8c9890c7646a50c1545546a6dfa987a32aaa9d739046cc9092cd199325840b72e8525e3a28738c58fb7d108a2778841ed28e614a11f76c835168f7ba42411eef9d40bc387346526bc86f29a4a0737caf9cf9644f50b6570ccf3f4b28fed5e8e2c61c0c2e835d48bba88190a99c01974751c1be52d334195deff51e3c775be044024719445e2c67fe29645c5551914b45825c0c8e977c6f06dc327d8ea22842f60a84005799517723533ddbc84091bf096cf0bffdfe079a39dc835f350aff5bf5487b8d969b44af0617d15cd25f4d77432e982047ff585cce84dcb6027b01110591bdd8e5f1fe927405298b2f202ab577a257522eb765197c60b1f64e7adc8d8533314424a1a395b1346a8d4200e6bd72a5a7df6919c62a158cd9787801ae34dcd6ad5a97a084e431fb4e51307ba98999fd58f527ee9ec2e8a53001d938d61001f0141b64cb479d5b3d62ae3ff786086f6cb5441787186a9a0470ca7ad0f56569d7665584a869f0258657d1503869a6ab26ffd618012ad2f808004b8190603180342036803040562033803d601033a031403060304031a030803620326036e03be02035a0354037c032c030803580312032c03b001032403480304030e03080508071a031a030e0306032e030e031003240304031e0318030e05360304030336034a0308031e032003100314030403320305031803030c03260318031c0302031003280314050318036003060358035803180370030a031a0308038a010306034403034203340526032403a001031407120305880103360302031a032e030c033a032e0302032c0330031a03560324031e031e0318030a03680303100380010304039e0105740303080340050a031a0322033a030203080344032c0364034a0322031003400308030603a601031c030e050c03200322039801030e033a0308030a031c03260368033c030203200328031e03ac01032e0314030e034a03020354030c031403a402033c0320030a0336031403900105020306033003600316031c03031e032a032a0303060338035403280326031e03480346031603030203680302030c034e05033c035a033e03032a031203033003037003680306030c030a0303520302030c030205180308030a031203180306031603030c034203060304031e03200526030a050e0306032e0310030803b201030803032805040316031c03180320031803da010356034e030803580304032a03440340030a0318031203ce010334030c039a020322030a03020368033e05032803080316038001031c031203180312032a0322030314031a033a03120324031c031c0340032603280304034a03100318032e0330031403120318032c031a030a0308033a051603480330036803160320031803340332033603020308031c03030c03240326031a030362031e03140318030c030c03a801030c030334034403180304031a03360366032c033a0318032c0306030e0326031a030a0320033a0304032c03160302030e03036a030803120394010360052603200318050a030203920103140330037c03700302032803ba020360030a0346032803360330036603031c038001031e035a039801032403760346031e0386010326033e050e0326033e0326033e051603440380010328032a030e03080314036203180320031a0303160304031003020303100302031203780303200320030a0376033c032e03100384010316034803a40103140338031c0332031e03f60103bc01035c03160338031c03760316032c0322032e05c6010328030a032e0310033e031c031a033a035e0316030e034203700328032a031a030303080318030c037e0306030a03060330031603030c030a031403780312032c05200320030c050a031803ec01039e01037e030c030356034c0326070303440310030203160334034a031e0318054e0314032c031607360302030e03360364030c0366037c031e034403220346030a031403200316030e0302038a0103b801032a031a0330032203460318032803220308034e031003340336030203360304030c031c030203420378034c036a030c0508033c031a0320036e033e0303560336030e030203080342034c051803260376032a030a0306036203020590010336034e031803340308030e03030203300308031c0302032c05120316031a033e03220304054803200318032c030803ae0103140312030803300502050c034403260338031c03300304030c0314031e03900103580302032a0504031c0368033003580302030e036a031e032e0326031003020528030c0338032e0326034a03360330030c03560350051c0338031a03280304031a034c033203e40103020320030603040312030a031e030c031e0320052603080312030e03080326034405080304032403440518031e0312034e031e0324032e032c031003100308030203033a031a0338033203240303b2010328030e03400312031203200305760306036c032e03180302039a0203bc020304030a03120310051c03260304035e0378036e0334031a037605060302032403100312030c03030358053c0304033e0318031403080346033c03200364032003260324033a03240340055c030e0342031203180340032403100310034603120308032c0318031203080344031a032a03100306031e03260522030e0316037c03080324035c0318032c030e0302031e03120348031403100314031403080302032e030548030c0326033a0342031603060322030203100350032c052e0314036603a20203b6010324032403100308032a0316037a0302034803a80103400360030e0310031c030e031203040302031a05520314031e0326035403400314035203400398010348030a0308032a0302032203034a0302031203200318030203080302031403160332031a031a037403680354030a03bc010303320312030203040332030605b401030e03580326035a0338030310031e03020310050306030c030803240312031e0316030c03040308031a0322031a031a032e0396010316036e032a03032403260312032e0302032803be01030a0344032a03a201032e0338037e031e0318034a0320030c03600334033a03140316032203080354030a03800203120346033a032003040316050e03020316031803020306030a050803100310031c032a0312030e034003ac010338032a031a031003100352030e03200320032a034a031e0303100342031603200346034403052a052a033e03120338030c030a03040346031403e001035c033e05300510050a03ea01036a032c03b203033a0330032e0306035405060358032c03020308033a032e0326030e03440314031e0308031203180314030c03580338034803040314032003a001031a0312031e034e031c033e0305300308035203030203032a031405100302032403100308033a031603020320030308030c0314033a035c050403340310032c030a035a03200314038a0105140322033603400304034203c60103034a0316031a030a033e03240318033e03020316030c03260346032c03040362031a03160342031a030203120328030e030805360318031c038001031c03780320032403be01031403160328030a0306031e033e0312030a031e03540314030c0316033a051403fc010310035a0338036c0304039e010306035e0332050a05060322032803240304031c03220566031403260348031e0322030603220334031c037c030a0328034403320320030e030c031203c0010328030403600304030a032e030303160332030e030c030c03080318032003160318030a03060348031c030e032a033a032803140504030e03100308030403180320031a0322050c03020306030e0303320382020322030a033a034003360304032603020510031a052e070c03120320030203080334030803020302030c0322031e0306030c0304030c030304030a036a030c03220358030a0304032e0322032c031e0305d801030e0362033e03020302030c03380302033a0310030e0306032403060306039201032407c601030403f801039a01038e01030a032a0328032c0326033403160322031a038a010316031c0312030304030e03040306030c0320036a030a031e030c032e032003280318031803de0103340312030e03030a031003620326037203200330030a032a03400303360318031603220330031e032c03120302032403160304030603360350031a03b201032603100326033e0506031a030603380526034a03140306030c03260310031c03032a030203053003100344030a0302030a0306030a031c0706035a030e0318034e032a033c03ca01030e030e03060306030e0326030310032c03ae01030a030320030a030a03280304034a032c03240328030a030e030304034a033a031a0310032803300338034603580303200312031e0320031a03040326032e032e031a030a031c030403033c051e03340303400303040303033a030e03030603030c030a0534032a03180316031a032003033003600338033e032a031e0310033a050e033003060304031203160303020336036e05034003580332031c03020334030603031a03040344033e030318031e033c050c0344030312038a0203be01030a03a00103031003080312032a0334030e0506031c051403280306036403040312032805037e0303020308032203060314032e03e801036a03460324031c0382010312030316051603020324031e03140304030203180354031803600328031c031a032e031a03360354030603180304033a03080334038001030c03440344034a0324035e03035203020302053c051a032a034e034603040308031203220324032003740318037003120306033e03240352051003380320035a03160318030203031e037603460324031c03580360031a03320314033e034a0306034a031a031403600318035c03031c03038a01033803440302035e03031603100318056c05020308030e03060334050a03480346031c0332032e03180368035a05020308030316033a039801030312030a052a031c03640302030203040312030e03050603030203030302030a052c034805100314031203160308030e0366032e03260314031a032a05032a03080346037c035a030c0342035403ae01032e032a0362034003036a03340328031803a8010312036003720318030518036e03030a031e031c032603030302030c0330030203040328030a05160703260308030e0302050e03240324030c03160304032803040304031403440312032003140302030803180318030c030a0304030a030314034c034205080328031803220722031803030c030c030324051203020310051c03040304031a0310031807940103100550034e0304030a032a035c030603a001033803120374030a0302031a030a0306031803620302031e0303031a031c030c032403200334033e030a0304030403120546031c03020303180338032a03020318030803040328032e031a03031803440308031e03040302031e030e032e0318030e053003040330030c03120320031e0322032c034e034e03bc0103040316030c038a0105080366030e030e05260350031c033a034e033e031c031203120334030e0362033e03080322031a03031a030c030310033a03180328030e03120340031c032e03520542032803220308050c0312031c05880203400316032c03140302037603060303020322030e03600356033c03080310032003020318030322032e037003380322030603039e01030a03030a030c050320030e03a4010360030205200316034a0302031a03520354031a0506034a031c0302031e0302030e031c031803a00103060320031203440504035a034c039401030e0528030203220308050a030c030203060302030e03030a050c030a05220514030c030805060320053803640318030a0316033203be0103480302032e033203060308030e03100308030a035e032a03220336032c03060348033403020312037e032a031a031c035e031c030e03020318038401035e036a050e03e801034e032803b6010324032203a601050a0348030c034203140305100310030a03050203040322030803d80103032a03ae01030e032803260362033803160316034e032003080332031403680344032c030a032c0324032003540306036a030a036a0304031203080322050c0303031003020314031603060308032e03140308030a031e0304052a0318030e050e0312030e03033003080332035003b201032c03b60103d001031c033603f601033e0330032a032003030803060342033003620322030c033003560346033c0324039a010336032c03700332032c03040328031003d4030314031003040346039a0103020316030203031603420348031e0312031a0322031a032e032803020324038e0103a202030e03080310057e0308037603720350031003560304033a03030603180326034403580330033003740344030c031403280314052e0303280303480308031c032c03220310031203180304051203020344051a030326030a0344030e03120308030a0314030302072803060306031a03040302031003031e030a0344033a030c035003140322031a0318030a030c0308031e030c033e031a030c031c03b60103360304030a03080302030c03320322030a058a0103640316030e03020506031a030e030302031c030c057403035603160336030312033e03180512030c039a010506031c0302031a0305020302031a03140310033003120342052403080312034a030c03040310031c031405031a07020318030c038a01038a01031e031e033603280326030603220308030a053403020303031603160540051a030c0346032e03160350030318039001031803020332030a033203032605640318031603920103030c03220312036c03380304030c031e033403035e0318030a030603039e01030603340308035c0320033e030e0514030603060324030304053e031c03020304035a031e0316030e032a030e034203240336030203420312038c01033003035803140306030c032005080346031a035e035a030302033c05020320030c03400314031a032e0320033a0512030c050a0306050c030a031803b20103160304030303073003bc010318032403160360034403080318030203060310033a0502034a0320050e03360374070a034803580310032e031603d00103060332031205b202031a034203920103f401032403200318030324030e0328034603180530030203b201032a033a0312031205680336036603020302030a050803030c031e031003180302031e0514031a03380332031403200544030c030803640360033e030e030e032203080306032c0372032a038201030a033c0326033e03300352032e030e03080316030e0310032a039e01037403360326032c030e031003320306031e03240318037803d601032e0596010338030803660303100306030a038001052c031e030e030a031003060354036003800103980105d8010354038401032e031803020302030c0324030a0308030e0314030c030603620326031003240350033a03120318030e032c031c031c037e03040303680330033e030302031603260368030e03032a03037c0370035c03080340033003480302051c03052a031a03480320051403033a0326031403100302031c030508031203040322039401030326031403180328030203240316030c0332031403400708038001036a0303260366031a03360304034c031003860103032c035c034203320316038801033a050a0310032603160308030e03220303060342052c034e033e03035c031a031a050403200304034a03100342031e032e03060334050398010302031c036e033a0318032603580312030603200348053e03180302031003080314030c03520332032c033c033203540308031203840103030a0312033c03f2010302036a0344030e0326032a0304030803080308031003160512052a0304034c030c0318050a03040306050e0326032803360306032003060312033603640310031603080512031403400302030a03100352032a031a030c036403280328030e03080303560308031603d801030a03080334032c0304030e0302036003a6010306033e035003080354031e0344031a03480303060328031803640364032003040340030c03030a030e0320030c050a0380010334031a030403200332051a0338030803030c03340332030374032a0332032c030203080310032c030a0316030e031e033003480328037e03020316031a037e03140306033e03440312033c0334032003140352039601030c030a035a033c0336030a0320039e01033603030c0312038201030a0372030c03da020366032e030e039e0203260322030c030a030a0526036005052003040302032e0304032e0308031c0362030e0332030a030c030203020304050e0320033c030403280308034c0326030603080304050203040304031c030c03320306033e031603040302054c037c032c030803260314034a030322035e031a03060304031a05340348031e0304030c033a03060312032c03036203a601030a0312030306032e03200332033e0364034c03180330032e0306033c0354032c032a03100348032403200370032603420306030c03400308035a035e0336031e0306034c0368031c039a0103bc01033e03e00103120366036803880203220304030403060322031803320318038801031c032405020318031005040338032803d8010328031c0303560324030203460308030c031203030c032a03900103180330033c03a401031a036403020348033403300312036003030e031403300334053603160314050e038e01030e033603520392010316033c0316035a0304031e0332034003ce010338030203460330031203
+ _isRawDataDirty: 0
+ _cliVersion: 1.2
diff --git a/Assets/GoogleARCore/Examples/AugmentedImage/Scenes/AugmentedImage.unity b/Assets/GoogleARCore/Examples/AugmentedImage/Scenes/AugmentedImage.unity
index 27788b73..ace845e2 100644
--- a/Assets/GoogleARCore/Examples/AugmentedImage/Scenes/AugmentedImage.unity
+++ b/Assets/GoogleARCore/Examples/AugmentedImage/Scenes/AugmentedImage.unity
@@ -113,107 +113,7 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
---- !u!1 &364130651
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 732595306}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 364130652}
- - component: {fileID: 364130655}
- - component: {fileID: 364130654}
- - component: {fileID: 364130653}
- m_Layer: 0
- m_Name: First Person Camera
- m_TagString: MainCamera
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &364130652
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 732595306}
- m_GameObject: {fileID: 364130651}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 427370417}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &364130653
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 732595306}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
---- !u!114 &364130654
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 732595306}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Device: 0
- m_PoseSource: 6
- m_TrackingType: 0
- m_UpdateType: 1
- m_UseRelativeTransform: 1
---- !u!20 &364130655
-Camera:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 732595306}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- serializedVersion: 2
- m_ClearFlags: 2
- m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
- m_NormalizedViewPortRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
- near clip plane: 0.05
- far clip plane: 200
- field of view: 60
- orthographic: 0
- orthographic size: 5
- m_Depth: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingPath: -1
- m_TargetTexture: {fileID: 0}
- m_TargetDisplay: 0
- m_TargetEye: 3
- m_HDR: 1
- m_AllowMSAA: 1
- m_AllowDynamicResolution: 0
- m_ForceIntoRT: 0
- m_OcclusionCulling: 1
- m_StereoConvergence: 10
- m_StereoSeparation: 0.022
---- !u!1 &427370415
+--- !u!1 &268627364
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
@@ -221,8 +121,8 @@ GameObject:
m_PrefabInternal: {fileID: 732595306}
serializedVersion: 5
m_Component:
- - component: {fileID: 427370417}
- - component: {fileID: 427370416}
+ - component: {fileID: 268627366}
+ - component: {fileID: 268627365}
m_Layer: 0
m_Name: ARCore Device
m_TagString: Untagged
@@ -230,13 +130,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &427370416
+--- !u!114 &268627365
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114451889682527732, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 732595306}
- m_GameObject: {fileID: 427370415}
+ m_GameObject: {fileID: 268627364}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
@@ -245,18 +145,18 @@ MonoBehaviour:
DeviceCameraDirection: 0
SessionConfig: {fileID: 11400000, guid: e3a0819a20dbf48e0b82c8d8d31b9d68, type: 2}
CameraConfigFilter: {fileID: 11400000, guid: 200b4cba649e3413088e285251ccf44e, type: 2}
---- !u!4 &427370417
+--- !u!4 &268627366
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 732595306}
- m_GameObject: {fileID: 427370415}
+ m_GameObject: {fileID: 268627364}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 364130652}
+ - {fileID: 790926325}
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -312,8 +212,108 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- m_RootGameObject: {fileID: 427370415}
+ m_RootGameObject: {fileID: 268627364}
m_IsPrefabParent: 0
+--- !u!1 &790926324
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 732595306}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 790926325}
+ - component: {fileID: 790926328}
+ - component: {fileID: 790926327}
+ - component: {fileID: 790926326}
+ m_Layer: 0
+ m_Name: First Person Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &790926325
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 732595306}
+ m_GameObject: {fileID: 790926324}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 268627366}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &790926326
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 732595306}
+ m_GameObject: {fileID: 790926324}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
+--- !u!114 &790926327
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 732595306}
+ m_GameObject: {fileID: 790926324}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Device: 0
+ m_PoseSource: 6
+ m_TrackingType: 0
+ m_UpdateType: 1
+ m_UseRelativeTransform: 1
+--- !u!20 &790926328
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 732595306}
+ m_GameObject: {fileID: 790926324}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.05
+ far clip plane: 200
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
--- !u!1 &1338525102
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/GoogleARCore/Examples/AugmentedImage/Scripts/AugmentedImageExampleController.cs b/Assets/GoogleARCore/Examples/AugmentedImage/Scripts/AugmentedImageExampleController.cs
index 2e31ccab..0a73012f 100644
--- a/Assets/GoogleARCore/Examples/AugmentedImage/Scripts/AugmentedImageExampleController.cs
+++ b/Assets/GoogleARCore/Examples/AugmentedImage/Scripts/AugmentedImageExampleController.cs
@@ -50,10 +50,10 @@ public class AugmentedImageExampleController : MonoBehaviour
///
public GameObject FitToScanOverlay;
- private Dictionary m_Visualizers
+ private Dictionary _visualizers
= new Dictionary();
- private List m_TempAugmentedImages = new List();
+ private List _tempAugmentedImages = new List();
///
/// The Unity Awake() method.
@@ -88,14 +88,14 @@ public void Update()
// Get updated augmented images for this frame.
Session.GetTrackables(
- m_TempAugmentedImages, TrackableQueryFilter.Updated);
+ _tempAugmentedImages, TrackableQueryFilter.Updated);
// Create visualizers and anchors for updated augmented images that are tracking and do
// not previously have a visualizer. Remove visualizers for stopped images.
- foreach (var image in m_TempAugmentedImages)
+ foreach (var image in _tempAugmentedImages)
{
AugmentedImageVisualizer visualizer = null;
- m_Visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
+ _visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
if (image.TrackingState == TrackingState.Tracking && visualizer == null)
{
// Create an anchor to ensure that ARCore keeps tracking this augmented image.
@@ -103,17 +103,17 @@ public void Update()
visualizer = (AugmentedImageVisualizer)Instantiate(
AugmentedImageVisualizerPrefab, anchor.transform);
visualizer.Image = image;
- m_Visualizers.Add(image.DatabaseIndex, visualizer);
+ _visualizers.Add(image.DatabaseIndex, visualizer);
}
else if (image.TrackingState == TrackingState.Stopped && visualizer != null)
{
- m_Visualizers.Remove(image.DatabaseIndex);
+ _visualizers.Remove(image.DatabaseIndex);
GameObject.Destroy(visualizer.gameObject);
}
}
// Show the fit-to-scan overlay if there are no images that are Tracking.
- foreach (var visualizer in m_Visualizers.Values)
+ foreach (var visualizer in _visualizers.Values)
{
if (visualizer.Image.TrackingState == TrackingState.Tracking)
{
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Configurations/CloudAnchorsSessionConfig.asset b/Assets/GoogleARCore/Examples/CloudAnchors/Configurations/CloudAnchorsSessionConfig.asset
index d1f2ca8a..595ee55a 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Configurations/CloudAnchorsSessionConfig.asset
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Configurations/CloudAnchorsSessionConfig.asset
@@ -19,3 +19,4 @@ MonoBehaviour:
CameraFocusMode: 0
AugmentedFaceMode: 0
DepthMode: 0
+ InstantPlacementMode: 0
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Scenes/CloudAnchors.unity b/Assets/GoogleARCore/Examples/CloudAnchors/Scenes/CloudAnchors.unity
index 36cd13eb..d7e24ebd 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Scenes/CloudAnchors.unity
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Scenes/CloudAnchors.unity
@@ -330,36 +330,6 @@ CanvasRenderer:
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 140788285}
---- !u!1 &143967951
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1248447649449928, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 745775765}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 745775766}
- - component: {fileID: 143967952}
- m_Layer: 0
- m_Name: Environmental Light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &143967952
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114136752755502098, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 745775765}
- m_GameObject: {fileID: 143967951}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- DirectionalLight: {fileID: 749880506}
--- !u!1 &175133970
GameObject:
m_ObjectHideFlags: 0
@@ -562,7 +532,7 @@ Prefab:
- {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
m_ParentPrefab: {fileID: 100100000, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- m_RootGameObject: {fileID: 1915196247}
+ m_RootGameObject: {fileID: 1929782634}
m_IsPrefabParent: 0
--- !u!4 &261734896
Transform:
@@ -570,13 +540,13 @@ Transform:
m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 261734895}
- m_GameObject: {fileID: 1915196247}
+ m_GameObject: {fileID: 1929782634}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 1613649651}
- - {fileID: 1983187483}
+ - {fileID: 2041746352}
m_Father: {fileID: 1995596072}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -629,6 +599,74 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &268627364
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1995114164396524, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 745775765}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 268627365}
+ - component: {fileID: 268627366}
+ m_Layer: 0
+ m_Name: Directional light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!4 &268627365
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4926315969036930, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 745775765}
+ m_GameObject: {fileID: 268627364}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 745775766}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!108 &268627366
+Light:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 108886784190946772, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 745775765}
+ m_GameObject: {fileID: 268627364}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 1
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.3
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
--- !u!1 &318443683
GameObject:
m_ObjectHideFlags: 0
@@ -996,7 +1034,7 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
- m_RootGameObject: {fileID: 1983187482}
+ m_RootGameObject: {fileID: 2041746351}
m_IsPrefabParent: 0
--- !u!1 &407442070
GameObject:
@@ -1645,7 +1683,7 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: cf498fc35b538884db557f7a9a2c0ef9, type: 2}
- m_RootGameObject: {fileID: 143967951}
+ m_RootGameObject: {fileID: 790926324}
m_IsPrefabParent: 0
--- !u!4 &745775766
Transform:
@@ -1653,83 +1691,45 @@ Transform:
m_PrefabParentObject: {fileID: 4461716624848968, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
m_PrefabInternal: {fileID: 745775765}
- m_GameObject: {fileID: 143967951}
+ m_GameObject: {fileID: 790926324}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 749880505}
+ - {fileID: 268627365}
m_Father: {fileID: 1995596072}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &749880504
+--- !u!1 &790926324
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1995114164396524, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ m_PrefabParentObject: {fileID: 1248447649449928, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
m_PrefabInternal: {fileID: 745775765}
serializedVersion: 5
m_Component:
- - component: {fileID: 749880505}
- - component: {fileID: 749880506}
+ - component: {fileID: 745775766}
+ - component: {fileID: 790926325}
m_Layer: 0
- m_Name: Directional light
+ m_Name: Environmental Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!4 &749880505
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4926315969036930, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 745775765}
- m_GameObject: {fileID: 749880504}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 745775766}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
---- !u!108 &749880506
-Light:
+ m_IsActive: 1
+--- !u!114 &790926325
+MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 108886784190946772, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ m_PrefabParentObject: {fileID: 114136752755502098, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
m_PrefabInternal: {fileID: 745775765}
- m_GameObject: {fileID: 749880504}
+ m_GameObject: {fileID: 790926324}
m_Enabled: 1
- serializedVersion: 8
- m_Type: 1
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_Intensity: 1
- m_Range: 10
- m_SpotAngle: 30
- m_CookieSize: 10
- m_Shadows:
- m_Type: 2
- m_Resolution: -1
- m_CustomResolution: -1
- m_Strength: 1
- m_Bias: 0.05
- m_NormalBias: 0.3
- m_NearPlane: 0.2
- m_Cookie: {fileID: 0}
- m_DrawHalo: 0
- m_Flare: {fileID: 0}
- m_RenderMode: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_Lightmapping: 4
- m_AreaSize: {x: 1, y: 1}
- m_BounceIntensity: 1
- m_ColorTemperature: 6570
- m_UseColorTemperature: 0
- m_ShadowRadius: 0
- m_ShadowAngle: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ DirectionalLight: {fileID: 268627366}
--- !u!1 &816624477
GameObject:
m_ObjectHideFlags: 0
@@ -2814,40 +2814,6 @@ CanvasRenderer:
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1267567485}
---- !u!1 &1284409850
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 261734895}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1613649651}
- - component: {fileID: 1284409851}
- m_Layer: 0
- m_Name: First Person Camera
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1284409851
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 261734895}
- m_GameObject: {fileID: 1284409850}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Device: 0
- m_PoseSource: 6
- m_TrackingType: 0
- m_UpdateType: 1
- m_UseRelativeTransform: 1
--- !u!1 &1329858672
GameObject:
m_ObjectHideFlags: 0
@@ -3282,7 +3248,7 @@ Transform:
m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 261734895}
- m_GameObject: {fileID: 1284409850}
+ m_GameObject: {fileID: 1953405326}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -3572,7 +3538,7 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1915196247
+--- !u!1 &1929782634
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
@@ -3581,7 +3547,7 @@ GameObject:
serializedVersion: 5
m_Component:
- component: {fileID: 261734896}
- - component: {fileID: 1915196248}
+ - component: {fileID: 1929782635}
m_Layer: 0
m_Name: ARCore Device
m_TagString: Untagged
@@ -3589,13 +3555,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &1915196248
+--- !u!114 &1929782635
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114451889682527732, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 261734895}
- m_GameObject: {fileID: 1915196247}
+ m_GameObject: {fileID: 1929782634}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
@@ -3634,6 +3600,40 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1953405326
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 261734895}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1613649651}
+ - component: {fileID: 1953405327}
+ m_Layer: 0
+ m_Name: First Person Camera
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1953405327
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 261734895}
+ m_GameObject: {fileID: 1953405326}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Device: 0
+ m_PoseSource: 6
+ m_TrackingType: 0
+ m_UpdateType: 1
+ m_UseRelativeTransform: 1
--- !u!1 &1954092313
GameObject:
m_ObjectHideFlags: 0
@@ -3702,7 +3702,38 @@ CanvasRenderer:
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1954092313}
---- !u!1 &1983187482
+--- !u!1 &1995596071
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1995596072}
+ m_Layer: 0
+ m_Name: ARCore Root
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!4 &1995596072
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1995596071}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 261734896}
+ - {fileID: 745775766}
+ - {fileID: 635649538}
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &2041746351
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1536853937296922, guid: 26558ae1d2e7243728486d789f984c53,
@@ -3710,10 +3741,10 @@ GameObject:
m_PrefabInternal: {fileID: 392798715}
serializedVersion: 5
m_Component:
- - component: {fileID: 1983187483}
- - component: {fileID: 1983187486}
- - component: {fileID: 1983187485}
- - component: {fileID: 1983187484}
+ - component: {fileID: 2041746352}
+ - component: {fileID: 2041746355}
+ - component: {fileID: 2041746354}
+ - component: {fileID: 2041746353}
m_Layer: 0
m_Name: Point Cloud
m_TagString: Untagged
@@ -3721,13 +3752,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &1983187483
+--- !u!4 &2041746352
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 4205356930328266, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 392798715}
- m_GameObject: {fileID: 1983187482}
+ m_GameObject: {fileID: 2041746351}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -3735,13 +3766,13 @@ Transform:
m_Father: {fileID: 261734896}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1983187484
+--- !u!114 &2041746353
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114747870037459092, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 392798715}
- m_GameObject: {fileID: 1983187482}
+ m_GameObject: {fileID: 2041746351}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
@@ -3751,16 +3782,16 @@ MonoBehaviour:
EnablePopAnimation: 0
MaxPointsToAddPerFrame: 5
AnimationDuration: 0.3
- m_MaxPointCount: 1000
- m_DefaultSize: 5
- m_PopSize: 20
---- !u!23 &1983187485
+ _maxPointCount: 1000
+ _defaultSize: 5
+ _popSize: 20
+--- !u!23 &2041746354
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 23996811832949430, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 392798715}
- m_GameObject: {fileID: 1983187482}
+ m_GameObject: {fileID: 2041746351}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -3789,45 +3820,14 @@ MeshRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
---- !u!33 &1983187486
+--- !u!33 &2041746355
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 33561497906377476, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 392798715}
- m_GameObject: {fileID: 1983187482}
+ m_GameObject: {fileID: 2041746351}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
---- !u!1 &1995596071
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1995596072}
- m_Layer: 0
- m_Name: ARCore Root
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!4 &1995596072
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1995596071}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 261734896}
- - {fileID: 745775766}
- - {fileID: 635649538}
- m_Father: {fileID: 0}
- m_RootOrder: 5
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2062722301
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARCoreWorldOriginHelper.cs b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARCoreWorldOriginHelper.cs
index 3b073b7a..55acf99b 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARCoreWorldOriginHelper.cs
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARCoreWorldOriginHelper.cs
@@ -46,23 +46,23 @@ public class ARCoreWorldOriginHelper : MonoBehaviour
/// A list to hold new planes ARCore began tracking in the current frame. This object is
/// used across the application to avoid per-frame allocations.
///
- private List m_NewPlanes = new List();
+ private List _newPlanes = new List();
///
/// A list to hold the planes ARCore began tracking before the WorldOrigin was placed.
///
- private List m_PlanesBeforeOrigin = new List();
+ private List _planesBeforeOrigin = new List();
///
/// Indicates whether the Origin of the new World Coordinate System, i.e. the Cloud Anchor,
/// was placed.
///
- private bool m_IsOriginPlaced = false;
+ private bool _isOriginPlaced = false;
///
/// The Transform of the Anchor object representing the World Origin.
///
- private Transform m_AnchorTransform;
+ private Transform _anchorTransform;
///
/// The Unity Update() method.
@@ -75,23 +75,23 @@ public void Update()
return;
}
- Pose worldPose = _WorldToAnchorPose(Pose.identity);
+ Pose worldPose = WorldToAnchorPose(Pose.identity);
// Iterate over planes found in this frame and instantiate corresponding GameObjects to
// visualize them.
- Session.GetTrackables(m_NewPlanes, TrackableQueryFilter.New);
- for (int i = 0; i < m_NewPlanes.Count; i++)
+ Session.GetTrackables(_newPlanes, TrackableQueryFilter.New);
+ for (int i = 0; i < _newPlanes.Count; i++)
{
// Instantiate a plane visualization prefab and set it to track the new plane. The
// transform is set to the origin with an identity rotation since the mesh for our
// prefab is updated in Unity World coordinates.
GameObject planeObject = Instantiate(
DetectedPlanePrefab, worldPose.position, worldPose.rotation, transform);
- planeObject.GetComponent().Initialize(m_NewPlanes[i]);
+ planeObject.GetComponent().Initialize(_newPlanes[i]);
- if (!m_IsOriginPlaced)
+ if (!_isOriginPlaced)
{
- m_PlanesBeforeOrigin.Add(planeObject);
+ _planesBeforeOrigin.Add(planeObject);
}
}
}
@@ -108,21 +108,21 @@ public void SetWorldOrigin(Transform anchorTransform)
// Each client will store the anchorTransform, and will have to move the ARCoreDevice
// (and therefore also it's FirstPersonCamera child) and update other trakced poses
// (planes, anchors, etc.) so that they appear in the same position in the real world.
- if (m_IsOriginPlaced)
+ if (_isOriginPlaced)
{
Debug.LogWarning("The World Origin can be set only once.");
return;
}
- m_IsOriginPlaced = true;
+ _isOriginPlaced = true;
- m_AnchorTransform = anchorTransform;
+ _anchorTransform = anchorTransform;
- Pose worldPose = _WorldToAnchorPose(new Pose(ARCoreDeviceTransform.position,
+ Pose worldPose = WorldToAnchorPose(new Pose(ARCoreDeviceTransform.position,
ARCoreDeviceTransform.rotation));
ARCoreDeviceTransform.SetPositionAndRotation(worldPose.position, worldPose.rotation);
- foreach (GameObject plane in m_PlanesBeforeOrigin)
+ foreach (GameObject plane in _planesBeforeOrigin)
{
if (plane != null)
{
@@ -151,7 +151,7 @@ public bool Raycast(float x, float y, TrackableHitFlags filter, out TrackableHit
bool foundHit = Frame.Raycast(x, y, filter, out hitResult);
if (foundHit)
{
- Pose worldPose = _WorldToAnchorPose(hitResult.Pose);
+ Pose worldPose = WorldToAnchorPose(hitResult.Pose);
TrackableHit newHit = new TrackableHit(
worldPose, hitResult.Distance, hitResult.Flags, hitResult.Trackable);
hitResult = newHit;
@@ -165,15 +165,15 @@ public bool Raycast(float x, float y, TrackableHitFlags filter, out TrackableHit
///
/// A pose in Unity world space.
/// A pose in Anchor-relative space.
- private Pose _WorldToAnchorPose(Pose pose)
+ private Pose WorldToAnchorPose(Pose pose)
{
- if (!m_IsOriginPlaced)
+ if (!_isOriginPlaced)
{
return pose;
}
Matrix4x4 anchorTWorld = Matrix4x4.TRS(
- m_AnchorTransform.position, m_AnchorTransform.rotation, Vector3.one).inverse;
+ _anchorTransform.position, _anchorTransform.rotation, Vector3.one).inverse;
Vector3 position = anchorTWorld.MultiplyPoint(pose.position);
Quaternion rotation = pose.rotation * Quaternion.LookRotation(
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARKitHelper.cs b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARKitHelper.cs
index 4fd8461b..df60d862 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARKitHelper.cs
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/ARKitHelper.cs
@@ -36,7 +36,7 @@ namespace GoogleARCore.Examples.CloudAnchors
public class ARKitHelper
{
#if ARCORE_IOS_SUPPORT
- private List m_HitResultList = new List();
+ private List _hitResultList = new List();
#endif
///
/// Performs a Raycast against a plane.
@@ -59,23 +59,23 @@ public bool RaycastPlane(Camera camera, float x, float y, out Pose hitPose)
y = viewportPoint.y
};
- m_HitResultList = session.HitTest(arPoint, ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent);
- if (m_HitResultList.Count > 0)
+ _hitResultList = session.HitTest(arPoint, ARHitTestResultType.ARHitTestResultTypeExistingPlaneUsingExtent);
+ if (_hitResultList.Count > 0)
{
int minDistanceIndex = 0;
- for (int i = 1; i < m_HitResultList.Count; i++)
+ for (int i = 1; i < _hitResultList.Count; i++)
{
- if (m_HitResultList[i].distance < m_HitResultList[minDistanceIndex].distance)
+ if (_hitResultList[i].distance < _hitResultList[minDistanceIndex].distance)
{
minDistanceIndex = i;
}
}
- hitPose.position = UnityARMatrixOps.GetPosition(m_HitResultList[minDistanceIndex].worldTransform);
+ hitPose.position = UnityARMatrixOps.GetPosition(_hitResultList[minDistanceIndex].worldTransform);
// Original ARKit hit pose is the plane rotation.
Quaternion planeRotation = UnityARMatrixOps.GetRotation(
- m_HitResultList[minDistanceIndex].worldTransform);
+ _hitResultList[minDistanceIndex].worldTransform);
// Try to match the hit rotation to the one ARCore uses.
Vector3 planeNormal = planeRotation * Vector3.up;
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/AnchorController.cs b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/AnchorController.cs
index 859cc5a5..9aead7ef 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/AnchorController.cs
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/AnchorController.cs
@@ -24,6 +24,9 @@ namespace GoogleARCore.Examples.CloudAnchors
using GoogleARCore.CrossPlatform;
using UnityEngine;
using UnityEngine.Networking;
+#if ARCORE_IOS_SUPPORT
+ using UnityEngine.XR.iOS;
+#endif
///
/// A Controller for the Anchor object that handles hosting and resolving the Cloud Anchor.
@@ -36,61 +39,61 @@ public class AnchorController : NetworkBehaviour
/// The customized timeout duration for resolving request to prevent retrying to resolve
/// indefinitely.
///
- private const float k_ResolvingTimeout = 10.0f;
+ private const float _resolvingTimeout = 10.0f;
///
/// The Cloud Anchor ID that will be used to host and resolve the Cloud Anchor. This
/// variable will be syncrhonized over all clients.
///
#pragma warning disable 618
- [SyncVar(hook = "_OnChangeId")]
+ [SyncVar(hook = "OnChangeId")]
#pragma warning restore 618
- private string m_CloudAnchorId = string.Empty;
+ private string _cloudAnchorId = string.Empty;
///
/// Indicates whether this script is running in the Host.
///
- private bool m_IsHost = false;
+ private bool _isHost = false;
///
/// Indicates whether an attempt to resolve the Cloud Anchor should be made.
///
- private bool m_ShouldResolve = false;
+ private bool _shouldResolve = false;
///
/// Record the time since started resolving.
/// If it passed the resolving timeout, additional instruction displays.
///
- private float m_TimeSinceStartResolving = 0.0f;
+ private float _timeSinceStartResolving = 0.0f;
///
/// Indicates whether passes the resolving timeout duration or the anchor has been
/// successfully resolved.
///
- private bool m_PassedResolvingTimeout = false;
+ private bool _passedResolvingTimeout = false;
///
/// The anchor mesh object.
/// In order to avoid placing the Anchor on identity pose, the mesh object should
/// be disabled by default and enabled after hosted or resolved.
///
- private GameObject m_AnchorMesh;
+ private GameObject _anchorMesh;
///
/// The Cloud Anchors example controller.
///
- private CloudAnchorsExampleController m_CloudAnchorsExampleController;
+ private CloudAnchorsExampleController _cloudAnchorsExampleController;
///
/// The Unity Awake() method.
///
public void Awake()
{
- m_CloudAnchorsExampleController =
+ _cloudAnchorsExampleController =
GameObject.Find("CloudAnchorsExampleController")
.GetComponent();
- m_AnchorMesh = transform.Find("AnchorMesh").gameObject;
- m_AnchorMesh.SetActive(false);
+ _anchorMesh = transform.Find("AnchorMesh").gameObject;
+ _anchorMesh.SetActive(false);
}
///
@@ -98,9 +101,9 @@ public void Awake()
///
public override void OnStartClient()
{
- if (m_CloudAnchorId != string.Empty)
+ if (_cloudAnchorId != string.Empty)
{
- m_ShouldResolve = true;
+ _shouldResolve = true;
}
}
@@ -109,28 +112,28 @@ public override void OnStartClient()
///
public void Update()
{
- if (!m_ShouldResolve)
+ if (!_shouldResolve)
{
return;
}
- if (!m_CloudAnchorsExampleController.IsResolvingPrepareTimePassed())
+ if (!_cloudAnchorsExampleController.IsResolvingPrepareTimePassed())
{
return;
}
- if (!m_PassedResolvingTimeout)
+ if (!_passedResolvingTimeout)
{
- m_TimeSinceStartResolving += Time.deltaTime;
+ _timeSinceStartResolving += Time.deltaTime;
- if (m_TimeSinceStartResolving > k_ResolvingTimeout)
+ if (_timeSinceStartResolving > _resolvingTimeout)
{
- m_PassedResolvingTimeout = true;
- m_CloudAnchorsExampleController.OnResolvingTimeoutPassed();
+ _passedResolvingTimeout = true;
+ _cloudAnchorsExampleController.OnResolvingTimeoutPassed();
}
}
- _ResolveAnchorFromId(m_CloudAnchorId);
+ ResolveAnchorFromId(_cloudAnchorId);
}
///
@@ -142,7 +145,7 @@ public void Update()
#pragma warning restore 618
public void CmdSetCloudAnchorId(string cloudAnchorId)
{
- m_CloudAnchorId = cloudAnchorId;
+ _cloudAnchorId = cloudAnchorId;
}
///
@@ -151,7 +154,7 @@ public void CmdSetCloudAnchorId(string cloudAnchorId)
/// The Cloud Anchor Id.
public string GetCloudAnchorId()
{
- return m_CloudAnchorId;
+ return _cloudAnchorId;
}
///
@@ -160,13 +163,13 @@ public string GetCloudAnchorId()
/// The last placed anchor.
public void HostLastPlacedAnchor(Component lastPlacedAnchor)
{
- m_IsHost = true;
- m_AnchorMesh.SetActive(true);
+ _isHost = true;
+ _anchorMesh.SetActive(true);
#if !UNITY_IOS
var anchor = (Anchor)lastPlacedAnchor;
#elif ARCORE_IOS_SUPPORT
- var anchor = (UnityEngine.XR.iOS.UnityARUserAnchorComponent)lastPlacedAnchor;
+ var anchor = (UnityARUserAnchorComponent)lastPlacedAnchor;
#endif
#if !UNITY_IOS || ARCORE_IOS_SUPPORT
@@ -176,7 +179,7 @@ public void HostLastPlacedAnchor(Component lastPlacedAnchor)
{
Debug.Log(string.Format("Failed to host Cloud Anchor: {0}", result.Response));
- m_CloudAnchorsExampleController.OnAnchorHosted(
+ _cloudAnchorsExampleController.OnAnchorHosted(
false, result.Response.ToString());
return;
}
@@ -185,7 +188,7 @@ public void HostLastPlacedAnchor(Component lastPlacedAnchor)
"Cloud Anchor {0} was created and saved.", result.Anchor.CloudId));
CmdSetCloudAnchorId(result.Anchor.CloudId);
- m_CloudAnchorsExampleController.OnAnchorHosted(true, result.Response.ToString());
+ _cloudAnchorsExampleController.OnAnchorHosted(true, result.Response.ToString());
});
#endif
}
@@ -194,9 +197,9 @@ public void HostLastPlacedAnchor(Component lastPlacedAnchor)
/// Resolves an anchor id and instantiates an Anchor prefab on it.
///
/// Cloud anchor id to be resolved.
- private void _ResolveAnchorFromId(string cloudAnchorId)
+ private void ResolveAnchorFromId(string cloudAnchorId)
{
- m_CloudAnchorsExampleController.OnAnchorInstantiated(false);
+ _cloudAnchorsExampleController.OnAnchorInstantiated(false);
// If device is not tracking, let's wait to try to resolve the anchor.
if (Session.Status != SessionStatus.Tracking)
@@ -204,7 +207,7 @@ private void _ResolveAnchorFromId(string cloudAnchorId)
return;
}
- m_ShouldResolve = false;
+ _shouldResolve = false;
XPSession.ResolveCloudAnchor(cloudAnchorId).ThenAction(
(System.Action)(result =>
@@ -215,9 +218,9 @@ private void _ResolveAnchorFromId(string cloudAnchorId)
"Client could not resolve Cloud Anchor {0}: {1}",
cloudAnchorId, result.Response));
- m_CloudAnchorsExampleController.OnAnchorResolved(
+ _cloudAnchorsExampleController.OnAnchorResolved(
false, result.Response.ToString());
- m_ShouldResolve = true;
+ _shouldResolve = true;
return;
}
@@ -225,10 +228,10 @@ private void _ResolveAnchorFromId(string cloudAnchorId)
"Client successfully resolved Cloud Anchor {0}.",
cloudAnchorId));
- m_CloudAnchorsExampleController.OnAnchorResolved(
+ _cloudAnchorsExampleController.OnAnchorResolved(
true, result.Response.ToString());
- _OnResolved(result.Anchor.transform);
- m_AnchorMesh.SetActive(true);
+ OnResolved(result.Anchor.transform);
+ _anchorMesh.SetActive(true);
}));
}
@@ -236,26 +239,26 @@ private void _ResolveAnchorFromId(string cloudAnchorId)
/// Callback invoked once the Cloud Anchor is resolved.
///
/// Transform of the resolved Cloud Anchor.
- private void _OnResolved(Transform anchorTransform)
+ private void OnResolved(Transform anchorTransform)
{
var cloudAnchorController = GameObject.Find("CloudAnchorsExampleController")
.GetComponent();
cloudAnchorController.SetWorldOrigin(anchorTransform);
// Mark resolving timeout passed so it won't fire OnResolvingTimeoutPassed event.
- m_PassedResolvingTimeout = true;
+ _passedResolvingTimeout = true;
}
///
/// Callback invoked once the Cloud Anchor Id changes.
///
/// New identifier.
- private void _OnChangeId(string newId)
+ private void OnChangeId(string newId)
{
- if (!m_IsHost && newId != string.Empty)
+ if (!_isHost && newId != string.Empty)
{
- m_CloudAnchorId = newId;
- m_ShouldResolve = true;
+ _cloudAnchorId = newId;
+ _shouldResolve = true;
}
}
}
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/CloudAnchorsExampleController.cs b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/CloudAnchorsExampleController.cs
index 7db16715..ea23e204 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/CloudAnchorsExampleController.cs
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/CloudAnchorsExampleController.cs
@@ -95,70 +95,70 @@ public class CloudAnchorsExampleController : MonoBehaviour
/// The key name used in PlayerPrefs which indicates whether
/// the start info has displayed at least one time.
///
- private const string k_HasDisplayedStartInfoKey = "HasDisplayedStartInfo";
+ private const string _hasDisplayedStartInfoKey = "HasDisplayedStartInfo";
///
/// The time between room starts up and ARCore session starts resolving.
///
- private const float k_ResolvingPrepareTime = 3.0f;
+ private const float _resolvingPrepareTime = 3.0f;
///
/// Record the time since the room started. If it passed the resolving prepare time,
/// applications in resolving mode start resolving the anchor.
///
- private float m_TimeSinceStart = 0.0f;
+ private float _timeSinceStart = 0.0f;
///
/// Indicates whether passes the resolving prepare time.
///
- private bool m_PassedResolvingPreparedTime = false;
+ private bool _passedResolvingPreparedTime = false;
///
/// A helper object to ARKit functionality.
///
- private ARKitHelper m_ARKit = new ARKitHelper();
+ private ARKitHelper _arKit = new ARKitHelper();
///
/// Indicates whether the Anchor was already instantiated.
///
- private bool m_AnchorAlreadyInstantiated = false;
+ private bool _anchorAlreadyInstantiated = false;
///
/// Indicates whether the Cloud Anchor finished hosting.
///
- private bool m_AnchorFinishedHosting = false;
+ private bool _anchorFinishedHosting = false;
///
/// True if the app is in the process of quitting due to an ARCore connection error,
/// otherwise false.
///
- private bool m_IsQuitting = false;
+ private bool _isQuitting = false;
///
/// The anchor component that defines the shared world origin.
///
- private Component m_WorldOriginAnchor = null;
+ private Component _worldOriginAnchor = null;
///
/// The last pose of the hit point from AR hit test.
///
- private Pose? m_LastHitPose = null;
+ private Pose? _lastHitPose = null;
///
/// The current cloud anchor mode.
///
- private ApplicationMode m_CurrentMode = ApplicationMode.Ready;
+ private ApplicationMode _currentMode = ApplicationMode.Ready;
///
/// The current active UI screen.
///
- private ActiveScreen m_CurrentActiveScreen = ActiveScreen.LobbyScreen;
+ private ActiveScreen _currentActiveScreen = ActiveScreen.LobbyScreen;
///
/// The Network Manager.
///
#pragma warning disable 618
- private CloudAnchorsNetworkManager m_NetworkManager;
+ private CloudAnchorsNetworkManager _networkManager;
#pragma warning restore 618
///
@@ -214,7 +214,7 @@ public enum ActiveScreen
///
public void OnStartNowButtonClicked()
{
- _SwitchActiveScreen(ActiveScreen.ARScreen);
+ SwitchActiveScreen(ActiveScreen.ARScreen);
}
///
@@ -242,17 +242,17 @@ public void Awake()
public void Start()
{
#pragma warning disable 618
- m_NetworkManager = NetworkUIController.GetComponent();
+ _networkManager = NetworkUIController.GetComponent();
#pragma warning restore 618
- m_NetworkManager.OnClientConnected += _OnConnectedToServer;
- m_NetworkManager.OnClientDisconnected += _OnDisconnectedFromServer;
+ _networkManager.OnClientConnected += OnConnectedToServer;
+ _networkManager.OnClientDisconnected += OnDisconnectedFromServer;
// A Name is provided to the Game Object so it can be found by other Scripts
// instantiated as prefabs in the scene.
gameObject.name = "CloudAnchorsExampleController";
ARCoreRoot.SetActive(false);
ARKitRoot.SetActive(false);
- _ResetStatus();
+ ResetStatus();
}
///
@@ -260,29 +260,29 @@ public void Start()
///
public void Update()
{
- _UpdateApplicationLifecycle();
+ UpdateApplicationLifecycle();
- if (m_CurrentActiveScreen != ActiveScreen.ARScreen)
+ if (_currentActiveScreen != ActiveScreen.ARScreen)
{
return;
}
// If we are neither in hosting nor resolving mode then the update is complete.
- if (m_CurrentMode != ApplicationMode.Hosting &&
- m_CurrentMode != ApplicationMode.Resolving)
+ if (_currentMode != ApplicationMode.Hosting &&
+ _currentMode != ApplicationMode.Resolving)
{
return;
}
// Give ARCore session some time to prepare for resolving and update the UI message
// once the preparation time passed.
- if (m_CurrentMode == ApplicationMode.Resolving && !m_PassedResolvingPreparedTime)
+ if (_currentMode == ApplicationMode.Resolving && !_passedResolvingPreparedTime)
{
- m_TimeSinceStart += Time.deltaTime;
+ _timeSinceStart += Time.deltaTime;
- if (m_TimeSinceStart > k_ResolvingPrepareTime)
+ if (_timeSinceStart > _resolvingPrepareTime)
{
- m_PassedResolvingPreparedTime = true;
+ _passedResolvingPreparedTime = true;
NetworkUIController.ShowDebugMessage(
"Waiting for Cloud Anchor to be hosted...");
}
@@ -290,7 +290,7 @@ public void Update()
// If the origin anchor has not been placed yet, then update in resolving mode is
// complete.
- if (m_CurrentMode == ApplicationMode.Resolving && !IsOriginPlaced)
+ if (_currentMode == ApplicationMode.Resolving && !IsOriginPlaced)
{
return;
}
@@ -309,7 +309,7 @@ public void Update()
}
TrackableHit arcoreHitResult = new TrackableHit();
- m_LastHitPose = null;
+ _lastHitPose = null;
// Raycast against the location the player touched to search for planes.
if (Application.platform != RuntimePlatform.IPhonePlayer)
@@ -317,42 +317,42 @@ public void Update()
if (ARCoreWorldOriginHelper.Raycast(touch.position.x, touch.position.y,
TrackableHitFlags.PlaneWithinPolygon, out arcoreHitResult))
{
- m_LastHitPose = arcoreHitResult.Pose;
+ _lastHitPose = arcoreHitResult.Pose;
}
}
else
{
Pose hitPose;
- if (m_ARKit.RaycastPlane(
+ if (_arKit.RaycastPlane(
ARKitFirstPersonCamera, touch.position.x, touch.position.y, out hitPose))
{
- m_LastHitPose = hitPose;
+ _lastHitPose = hitPose;
}
}
// If there was an anchor placed, then instantiate the corresponding object.
- if (m_LastHitPose != null)
+ if (_lastHitPose != null)
{
// The first touch on the Hosting mode will instantiate the origin anchor. Any
// subsequent touch will instantiate a star, both in Hosting and Resolving modes.
- if (_CanPlaceStars())
+ if (CanPlaceStars())
{
- _InstantiateStar();
+ InstantiateStar();
}
- else if (!IsOriginPlaced && m_CurrentMode == ApplicationMode.Hosting)
+ else if (!IsOriginPlaced && _currentMode == ApplicationMode.Hosting)
{
if (Application.platform != RuntimePlatform.IPhonePlayer)
{
- m_WorldOriginAnchor =
+ _worldOriginAnchor =
arcoreHitResult.Trackable.CreateAnchor(arcoreHitResult.Pose);
}
else
{
- m_WorldOriginAnchor = m_ARKit.CreateAnchor(m_LastHitPose.Value);
+ _worldOriginAnchor = _arKit.CreateAnchor(_lastHitPose.Value);
}
- SetWorldOrigin(m_WorldOriginAnchor.transform);
- _InstantiateAnchor();
+ SetWorldOrigin(_worldOriginAnchor.transform);
+ InstantiateAnchor();
OnAnchorInstantiated(true);
}
}
@@ -366,8 +366,8 @@ public void Update()
///
public bool IsResolvingPrepareTimePassed()
{
- return m_CurrentMode != ApplicationMode.Ready &&
- m_TimeSinceStart > k_ResolvingPrepareTime;
+ return _currentMode != ApplicationMode.Ready &&
+ _timeSinceStart > _resolvingPrepareTime;
}
///
@@ -392,7 +392,7 @@ public void SetWorldOrigin(Transform anchorTransform)
}
else
{
- m_ARKit.SetWorldOrigin(anchorTransform);
+ _arKit.SetWorldOrigin(anchorTransform);
}
}
@@ -404,15 +404,15 @@ public void OnLobbyVisibilityChanged(bool visible)
{
if (visible)
{
- _SwitchActiveScreen(ActiveScreen.LobbyScreen);
+ SwitchActiveScreen(ActiveScreen.LobbyScreen);
}
- else if (PlayerPrefs.HasKey(k_HasDisplayedStartInfoKey))
+ else if (PlayerPrefs.HasKey(_hasDisplayedStartInfoKey))
{
- _SwitchActiveScreen(ActiveScreen.ARScreen);
+ SwitchActiveScreen(ActiveScreen.ARScreen);
}
else
{
- _SwitchActiveScreen(ActiveScreen.StartScreen);
+ SwitchActiveScreen(ActiveScreen.StartScreen);
}
}
@@ -421,7 +421,7 @@ public void OnLobbyVisibilityChanged(bool visible)
///
public void OnResolvingTimeoutPassed()
{
- if (m_CurrentMode != ApplicationMode.Resolving)
+ if (_currentMode != ApplicationMode.Resolving)
{
Debug.LogWarning("OnResolvingTimeoutPassed shouldn't be called" +
"when the application is not in resolving mode.");
@@ -439,14 +439,14 @@ public void OnResolvingTimeoutPassed()
///
public void OnEnterHostingModeClick()
{
- if (m_CurrentMode == ApplicationMode.Hosting)
+ if (_currentMode == ApplicationMode.Hosting)
{
- m_CurrentMode = ApplicationMode.Ready;
- _ResetStatus();
+ _currentMode = ApplicationMode.Ready;
+ ResetStatus();
Debug.Log("Reset ApplicationMode from Hosting to Ready.");
}
- m_CurrentMode = ApplicationMode.Hosting;
+ _currentMode = ApplicationMode.Hosting;
}
///
@@ -455,14 +455,14 @@ public void OnEnterHostingModeClick()
///
public void OnEnterResolvingModeClick()
{
- if (m_CurrentMode == ApplicationMode.Resolving)
+ if (_currentMode == ApplicationMode.Resolving)
{
- m_CurrentMode = ApplicationMode.Ready;
- _ResetStatus();
+ _currentMode = ApplicationMode.Ready;
+ ResetStatus();
Debug.Log("Reset ApplicationMode from Resolving to Ready.");
}
- m_CurrentMode = ApplicationMode.Resolving;
+ _currentMode = ApplicationMode.Resolving;
}
///
@@ -472,12 +472,12 @@ public void OnEnterResolvingModeClick()
/// Indicates whether this player is the host.
public void OnAnchorInstantiated(bool isHost)
{
- if (m_AnchorAlreadyInstantiated)
+ if (_anchorAlreadyInstantiated)
{
return;
}
- m_AnchorAlreadyInstantiated = true;
+ _anchorAlreadyInstantiated = true;
NetworkUIController.OnAnchorInstantiated(isHost);
}
@@ -489,7 +489,7 @@ public void OnAnchorInstantiated(bool isHost)
/// The response string received.
public void OnAnchorHosted(bool success, string response)
{
- m_AnchorFinishedHosting = success;
+ _anchorFinishedHosting = success;
NetworkUIController.OnAnchorHosted(success, response);
}
@@ -507,21 +507,21 @@ public void OnAnchorResolved(bool success, string response)
///
/// Callback that happens when the client successfully connected to the server.
///
- private void _OnConnectedToServer()
+ private void OnConnectedToServer()
{
- if (m_CurrentMode == ApplicationMode.Hosting)
+ if (_currentMode == ApplicationMode.Hosting)
{
NetworkUIController.ShowDebugMessage(
"Find a plane, tap to create a Cloud Anchor.");
}
- else if (m_CurrentMode == ApplicationMode.Resolving)
+ else if (_currentMode == ApplicationMode.Resolving)
{
NetworkUIController.ShowDebugMessage(
"Look at the same scene as the hosting phone.");
}
else
{
- _ReturnToLobbyWithReason(
+ ReturnToLobbyWithReason(
"Connected to server with neither Hosting nor Resolving" +
"mode. Please start the app again.");
}
@@ -530,37 +530,37 @@ private void _OnConnectedToServer()
///
/// Callback that happens when the client disconnected from the server.
///
- private void _OnDisconnectedFromServer()
+ private void OnDisconnectedFromServer()
{
- _ReturnToLobbyWithReason("Network session disconnected! " +
+ ReturnToLobbyWithReason("Network session disconnected! " +
"Please start the app again and try another room.");
}
///
- /// Instantiates the anchor object at the pose of the m_LastPlacedAnchor Anchor. This will
+ /// Instantiates the anchor object at the pose of the _lastPlacedAnchor Anchor. This will
/// host the Cloud Anchor.
///
- private void _InstantiateAnchor()
+ private void InstantiateAnchor()
{
// The anchor will be spawned by the host, so no networking Command is needed.
GameObject.Find("LocalPlayer").GetComponent()
- .SpawnAnchor(Vector3.zero, Quaternion.identity, m_WorldOriginAnchor);
+ .SpawnAnchor(Vector3.zero, Quaternion.identity, _worldOriginAnchor);
}
///
/// Instantiates a star object that will be synchronized over the network to other clients.
///
- private void _InstantiateStar()
+ private void InstantiateStar()
{
// Star must be spawned in the server so a networking Command is used.
GameObject.Find("LocalPlayer").GetComponent()
- .CmdSpawnStar(m_LastHitPose.Value.position, m_LastHitPose.Value.rotation);
+ .CmdSpawnStar(_lastHitPose.Value.position, _lastHitPose.Value.rotation);
}
///
/// Sets the corresponding platform active.
///
- private void _SetPlatformActive()
+ private void SetPlatformActive()
{
if (Application.platform != RuntimePlatform.IPhonePlayer)
{
@@ -578,16 +578,16 @@ private void _SetPlatformActive()
/// Indicates whether a star can be placed.
///
/// true, if stars can be placed, false otherwise.
- private bool _CanPlaceStars()
+ private bool CanPlaceStars()
{
- if (m_CurrentMode == ApplicationMode.Resolving)
+ if (_currentMode == ApplicationMode.Resolving)
{
return IsOriginPlaced;
}
- if (m_CurrentMode == ApplicationMode.Hosting)
+ if (_currentMode == ApplicationMode.Hosting)
{
- return IsOriginPlaced && m_AnchorFinishedHosting;
+ return IsOriginPlaced && _anchorFinishedHosting;
}
return false;
@@ -596,45 +596,45 @@ private bool _CanPlaceStars()
///
/// Resets the internal status.
///
- private void _ResetStatus()
+ private void ResetStatus()
{
// Reset internal status.
- m_CurrentMode = ApplicationMode.Ready;
- if (m_WorldOriginAnchor != null)
+ _currentMode = ApplicationMode.Ready;
+ if (_worldOriginAnchor != null)
{
- Destroy(m_WorldOriginAnchor.gameObject);
+ Destroy(_worldOriginAnchor.gameObject);
}
IsOriginPlaced = false;
- m_WorldOriginAnchor = null;
+ _worldOriginAnchor = null;
}
- private void _SwitchActiveScreen(ActiveScreen activeScreen)
+ private void SwitchActiveScreen(ActiveScreen activeScreen)
{
LobbyScreen.SetActive(activeScreen == ActiveScreen.LobbyScreen);
StatusScreen.SetActive(activeScreen != ActiveScreen.StartScreen);
StartScreen.SetActive(activeScreen == ActiveScreen.StartScreen);
ARScreen.SetActive(activeScreen == ActiveScreen.ARScreen);
- m_CurrentActiveScreen = activeScreen;
+ _currentActiveScreen = activeScreen;
- if (m_CurrentActiveScreen == ActiveScreen.StartScreen)
+ if (_currentActiveScreen == ActiveScreen.StartScreen)
{
- PlayerPrefs.SetInt(k_HasDisplayedStartInfoKey, 1);
+ PlayerPrefs.SetInt(_hasDisplayedStartInfoKey, 1);
}
- if (m_CurrentActiveScreen == ActiveScreen.ARScreen)
+ if (_currentActiveScreen == ActiveScreen.ARScreen)
{
// Set platform active when switching to AR Screen so the camera permission only
// shows after Start Screen.
- m_TimeSinceStart = 0.0f;
- _SetPlatformActive();
+ _timeSinceStart = 0.0f;
+ SetPlatformActive();
}
}
///
/// Check and update the application lifecycle.
///
- private void _UpdateApplicationLifecycle()
+ private void UpdateApplicationLifecycle()
{
// Exit the app when the 'back' button is pressed.
if (Input.GetKey(KeyCode.Escape))
@@ -654,7 +654,7 @@ private void _UpdateApplicationLifecycle()
Screen.sleepTimeout = sleepTimeout;
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
@@ -662,11 +662,11 @@ private void _UpdateApplicationLifecycle()
// Quit if ARCore is in error status.
if (Session.Status == SessionStatus.ErrorPermissionNotGranted)
{
- _ReturnToLobbyWithReason("Camera permission is needed to run this application.");
+ ReturnToLobbyWithReason("Camera permission is needed to run this application.");
}
else if (Session.Status.IsError())
{
- _QuitWithReason("ARCore encountered a problem connecting. " +
+ QuitWithReason("ARCore encountered a problem connecting. " +
"Please start the app again.");
}
}
@@ -675,38 +675,38 @@ private void _UpdateApplicationLifecycle()
/// Quits the application after 5 seconds for the toast to appear.
///
/// The reason of quitting the application.
- private void _QuitWithReason(string reason)
+ private void QuitWithReason(string reason)
{
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
NetworkUIController.ShowDebugMessage(reason);
- m_IsQuitting = true;
- Invoke("_DoQuit", 5.0f);
+ _isQuitting = true;
+ Invoke("DoQuit", 5.0f);
}
///
/// Returns to lobby after 3 seconds for the reason message to appear.
///
/// The reason of returning to lobby.
- private void _ReturnToLobbyWithReason(string reason)
+ private void ReturnToLobbyWithReason(string reason)
{
// No need to return if the application is currently quitting.
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
NetworkUIController.ShowDebugMessage(reason);
- Invoke("_DoReturnToLobby", 3.0f);
+ Invoke("DoReturnToLobby", 3.0f);
}
///
/// Actually quit the application.
///
- private void _DoQuit()
+ private void DoQuit()
{
Application.Quit();
}
@@ -714,7 +714,7 @@ private void _DoQuit()
///
/// Actually return to lobby scene.
///
- private void _DoReturnToLobby()
+ private void DoReturnToLobby()
{
#pragma warning disable 618
NetworkManager.Shutdown();
diff --git a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/NetworkManagerUIController.cs b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/NetworkManagerUIController.cs
index cbea2c51..c8615945 100644
--- a/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/NetworkManagerUIController.cs
+++ b/Assets/GoogleARCore/Examples/CloudAnchors/Scripts/NetworkManagerUIController.cs
@@ -74,24 +74,24 @@ public class NetworkManagerUIController : MonoBehaviour
///
/// The number of matches that will be shown.
///
- private const int k_MatchPageSize = 5;
+ private const int _matchPageSize = 5;
///
/// The Network Manager.
///
#pragma warning disable 618
- private CloudAnchorsNetworkManager m_Manager;
+ private CloudAnchorsNetworkManager _manager;
#pragma warning restore 618
///
/// The current room number.
///
- private string m_CurrentRoomNumber;
+ private string _currentRoomNumber;
///
/// The Join Room buttons.
///
- private List m_JoinRoomButtonsPool = new List();
+ private List _joinRoomButtonsPool = new List();
///
/// The Unity Awake() method.
@@ -99,7 +99,7 @@ public class NetworkManagerUIController : MonoBehaviour
public void Awake()
{
// Initialize the pool of Join Room buttons.
- for (int i = 0; i < k_MatchPageSize; i++)
+ for (int i = 0; i < _matchPageSize; i++)
{
GameObject button = Instantiate(JoinRoomListRowPrefab);
button.transform.SetParent(RoomListPanel.transform, false);
@@ -107,22 +107,22 @@ public void Awake()
new Vector2(0, -(100 * i));
button.SetActive(true);
button.GetComponentInChildren().text = string.Empty;
- m_JoinRoomButtonsPool.Add(button);
+ _joinRoomButtonsPool.Add(button);
}
#pragma warning disable 618
- m_Manager = GetComponent();
+ _manager = GetComponent();
#pragma warning restore 618
- m_Manager.StartMatchMaker();
- m_Manager.matchMaker.ListMatches(
+ _manager.StartMatchMaker();
+ _manager.matchMaker.ListMatches(
startPageNumber: 0,
- resultPageSize: k_MatchPageSize,
+ resultPageSize: _matchPageSize,
matchNameFilter: string.Empty,
filterOutPrivateMatchesFromResults: false,
eloScoreTarget: 0,
requestDomain: 0,
- callback: _OnMatchList);
- _ChangeLobbyUIVisibility(true);
+ callback: OnMatchList);
+ ChangeLobbyUIVisibility(true);
}
///
@@ -130,9 +130,9 @@ public void Awake()
///
public void OnCreateRoomClicked()
{
- m_Manager.matchMaker.CreateMatch(m_Manager.matchName, m_Manager.matchSize,
+ _manager.matchMaker.CreateMatch(_manager.matchName, _manager.matchSize,
true, string.Empty, string.Empty, string.Empty,
- 0, 0, _OnMatchCreate);
+ 0, 0, OnMatchCreate);
}
///
@@ -141,14 +141,14 @@ public void OnCreateRoomClicked()
public void OnReturnToLobbyClick()
{
ReturnButton.GetComponent
public void OnDisable()
{
- if (m_DepthBuffer != null)
+ if (_depthBuffer != null)
{
- m_Camera.RemoveCommandBuffer(CameraEvent.AfterForwardOpaque, m_DepthBuffer);
- m_Camera.RemoveCommandBuffer(CameraEvent.AfterGBuffer, m_DepthBuffer);
+ _camera.RemoveCommandBuffer(CameraEvent.AfterForwardOpaque, _depthBuffer);
+ _camera.RemoveCommandBuffer(CameraEvent.AfterGBuffer, _depthBuffer);
}
- if (m_BackgroundBuffer != null)
+ if (_backgroundBuffer != null)
{
- m_Camera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, m_BackgroundBuffer);
- m_Camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, m_BackgroundBuffer);
+ _camera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, _backgroundBuffer);
+ _camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, _backgroundBuffer);
}
}
@@ -229,21 +237,21 @@ private void OnRenderImage(RenderTexture source, RenderTexture destination)
}
// Pass #1 combines virtual and real cameras based on the occlusion map.
- Graphics.Blit(source, destination, m_DepthMaterial, /*pass=*/ 1);
+ Graphics.Blit(source, destination, _depthMaterial, /*pass=*/ 1);
}
///
/// Updates the screen orientation of the depth map.
///
- private void _UpdateScreenOrientationOnMaterial()
+ private void UpdateScreenOrientationOnMaterial()
{
var uvQuad = Frame.CameraImage.TextureDisplayUvs;
- m_DepthMaterial.SetVector(
- k_TopLeftRightPropertyName,
+ _depthMaterial.SetVector(
+ _topLeftRightPropertyName,
new Vector4(
uvQuad.TopLeft.x, uvQuad.TopLeft.y, uvQuad.TopRight.x, uvQuad.TopRight.y));
- m_DepthMaterial.SetVector(
- k_BottomLeftRightPropertyName,
+ _depthMaterial.SetVector(
+ _bottomLeftRightPropertyName,
new Vector4(uvQuad.BottomLeft.x, uvQuad.BottomLeft.y, uvQuad.BottomRight.x,
uvQuad.BottomRight.y));
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/DepthMenu.cs b/Assets/GoogleARCore/Examples/Common/Scripts/DepthMenu.cs
index 916d3845..88f1228c 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/DepthMenu.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/DepthMenu.cs
@@ -24,6 +24,7 @@ namespace GoogleARCore.Examples.Common
using GoogleARCore;
using GoogleARCore.Examples.Common;
using UnityEngine;
+ using UnityEngine.Serialization;
using UnityEngine.UI;
///
@@ -35,82 +36,112 @@ public class DepthMenu : MonoBehaviour
/// The plane discovery guide visuals that guide users to scan surroundings
/// and discover planes.
///
- [SerializeField] private PlaneDiscoveryGuide m_PlaneDiscoveryGuide = null;
+ [FormerlySerializedAs("m_PlaneDiscoveryGuide")]
+ [SerializeField]
+ private PlaneDiscoveryGuide _planeDiscoveryGuide = null;
///
/// Scene object for visualizing depth data.
///
- [SerializeField] private GameObject m_DebugVisualizer = null;
+ [FormerlySerializedAs("m_DebugVisualizer")]
+ [SerializeField]
+ private GameObject _debugVisualizer = null;
///
/// The first-person camera being used to render the passthrough camera image (i.e. AR
/// background).
///
- [SerializeField] private Camera m_Camera = null;
+ [FormerlySerializedAs("m_Camera")]
+ [SerializeField]
+ private Camera _camera = null;
///
/// The Menu Window shows the depth configurations.
///
- [SerializeField] private GameObject m_MenuWindow = null;
+ [FormerlySerializedAs("m_MenuWindow")]
+ [SerializeField]
+ private GameObject _menuWindow = null;
///
/// The Depth Card Window.
///
- [SerializeField] private GameObject m_DepthCardWindow = null;
+ [FormerlySerializedAs("m_DepthCardWindow")]
+ [SerializeField]
+ private GameObject _depthCardWindow = null;
///
/// The button to open the menu window.
///
- [SerializeField] private Button m_MenuButton = null;
+ [FormerlySerializedAs("m_MenuButton")]
+ [SerializeField]
+ private Button _menuButton = null;
///
/// The button to apply the config and close the menu window.
///
- [SerializeField] private Button m_ApplyButton = null;
+ [FormerlySerializedAs("m_ApplyButton")]
+ [SerializeField]
+ private Button _applyButton = null;
///
/// The button to cancel the changs and close the menu window.
///
- [SerializeField] private Button m_CancelButton = null;
+ [FormerlySerializedAs("m_CancelButton")]
+ [SerializeField]
+ private Button _cancelButton = null;
///
/// The button to enable depth.
///
- [SerializeField] private Button m_EnableDepthButton = null;
+ [FormerlySerializedAs("m_EnableDepthButton")]
+ [SerializeField]
+ private Button _enableDepthButton = null;
///
/// The button to disable depth.
///
- [SerializeField] private Button m_DisableDepthButton = null;
+ [FormerlySerializedAs("m_DisableDepthButton")]
+ [SerializeField]
+ private Button _disableDepthButton = null;
///
/// The menu text.
///
- [SerializeField] private Text m_MenuText = null;
+ [FormerlySerializedAs("m_MenuText")]
+ [SerializeField]
+ private Text _menuText = null;
///
/// The toggle to enable depth.
///
- [SerializeField] private Toggle m_EnableDepthToggle = null;
+ [FormerlySerializedAs("m_EnableDepthToggle")]
+ [SerializeField]
+ private Toggle _enableDepthToggle = null;
///
- /// The toggle label of m_EnableDepthToggle.
+ /// The toggle label of _enableDepthToggle.
///
- [SerializeField] private Text m_EnableDepthToggleLabel = null;
+ [FormerlySerializedAs("m_EnableDepthToggleLabel")]
+ [SerializeField]
+ private Text _enableDepthToggleLabel = null;
///
/// The toggle to switch to depth map.
///
- [SerializeField] private Toggle m_DepthMapToggle = null;
+ [FormerlySerializedAs("m_DepthMapToggle")]
+ [SerializeField]
+ private Toggle _depthMapToggle = null;
///
- /// The toggle label of m_DepthMapToggle.
+ /// The toggle label of _depthMapToggle.
///
- [SerializeField] private Text m_DepthMapToggleLabel = null;
+ [FormerlySerializedAs("m_DepthMapToggleLabel")]
+ [SerializeField]
+ private Text _depthMapToggleLabel = null;
- private bool m_DepthConfigured = false;
+ private bool _depthConfigured = false;
- private DepthState m_DepthState = DepthState.DepthNotAvailable;
+ private DepthState _depthState = DepthState.DepthNotAvailable;
///
/// Depth state of this sample.
@@ -143,16 +174,16 @@ public enum DepthState
///
public void Start()
{
- m_MenuButton.onClick.AddListener(_OnMenuButtonClicked);
- m_ApplyButton.onClick.AddListener(_OnApplyButtonClicked);
- m_CancelButton.onClick.AddListener(_OnCancelButtonClicked);
- m_EnableDepthButton.onClick.AddListener(_OnEnableDepthButtonClicked);
- m_DisableDepthButton.onClick.AddListener(_OnDisableDepthButtonClicked);
- m_EnableDepthToggle.onValueChanged.AddListener(_OnEnableDepthToggleValueChanged);
-
- m_MenuWindow.SetActive(false);
- m_DepthCardWindow.SetActive(false);
- m_DebugVisualizer.SetActive(false);
+ _menuButton.onClick.AddListener(OnMenuButtonClicked);
+ _applyButton.onClick.AddListener(OnApplyButtonClicked);
+ _cancelButton.onClick.AddListener(OnCancelButtonClicked);
+ _enableDepthButton.onClick.AddListener(OnEnableDepthButtonClicked);
+ _disableDepthButton.onClick.AddListener(OnDisableDepthButtonClicked);
+ _enableDepthToggle.onValueChanged.AddListener(OnEnableDepthToggleValueChanged);
+
+ _menuWindow.SetActive(false);
+ _depthCardWindow.SetActive(false);
+ _debugVisualizer.SetActive(false);
}
///
@@ -160,12 +191,12 @@ public void Start()
///
public void OnDestroy()
{
- m_MenuButton.onClick.RemoveListener(_OnMenuButtonClicked);
- m_ApplyButton.onClick.RemoveListener(_OnApplyButtonClicked);
- m_CancelButton.onClick.RemoveListener(_OnCancelButtonClicked);
- m_EnableDepthButton.onClick.RemoveListener(_OnEnableDepthButtonClicked);
- m_DisableDepthButton.onClick.RemoveListener(_OnDisableDepthButtonClicked);
- m_EnableDepthToggle.onValueChanged.RemoveListener(_OnEnableDepthToggleValueChanged);
+ _menuButton.onClick.RemoveListener(OnMenuButtonClicked);
+ _applyButton.onClick.RemoveListener(OnApplyButtonClicked);
+ _cancelButton.onClick.RemoveListener(OnCancelButtonClicked);
+ _enableDepthButton.onClick.RemoveListener(OnEnableDepthButtonClicked);
+ _disableDepthButton.onClick.RemoveListener(OnDisableDepthButtonClicked);
+ _enableDepthToggle.onValueChanged.RemoveListener(OnEnableDepthToggleValueChanged);
}
///
@@ -173,18 +204,18 @@ public void OnDestroy()
///
public void ConfigureDepthBeforePlacingFirstAsset()
{
- if (!m_DepthConfigured)
+ if (!_depthConfigured)
{
// Session might not be initialized when GameOject is inializing.
// Hence, it would be better NOT to call `IsDepthModeSupported` in start().
if (Session.IsDepthModeSupported(DepthMode.Automatic))
{
- m_DepthCardWindow.SetActive(true);
- m_PlaneDiscoveryGuide.EnablePlaneDiscoveryGuide(false);
+ _depthCardWindow.SetActive(true);
+ _planeDiscoveryGuide.EnablePlaneDiscoveryGuide(false);
}
else
{
- m_DepthConfigured = true;
+ _depthConfigured = true;
}
}
}
@@ -195,7 +226,7 @@ public void ConfigureDepthBeforePlacingFirstAsset()
/// Whether the user could place asset.
public bool CanPlaceAsset()
{
- return !m_DepthCardWindow.activeSelf & !m_MenuWindow.activeSelf;
+ return !_depthCardWindow.activeSelf & !_menuWindow.activeSelf;
}
///
@@ -204,133 +235,133 @@ public bool CanPlaceAsset()
/// Whether the depth is enabled.
public bool IsDepthEnabled()
{
- return m_DepthState == DepthState.DepthEnabled
- || m_DepthState == DepthState.DepthMap;
+ return _depthState == DepthState.DepthEnabled
+ || _depthState == DepthState.DepthMap;
}
- private void _OnMenuButtonClicked()
+ private void OnMenuButtonClicked()
{
- if (!m_DepthConfigured)
+ if (!_depthConfigured)
{
// Session might not be initialized when GameOject is inializing.
// Hence, it would be better NOT to call `IsDepthModeSupported` in start().
if (Session.IsDepthModeSupported(DepthMode.Automatic))
{
- m_DepthState = DepthState.DepthDisabled;
- m_MenuText.text = "Your device supports depth.";
+ _depthState = DepthState.DepthDisabled;
+ _menuText.text = "Your device supports depth.";
}
else
{
- _ConfigureDepth(false);
- m_DepthState = DepthState.DepthNotAvailable;
- m_MenuText.text = "Your device doesn't support depth.";
+ ConfigureDepth(false);
+ _depthState = DepthState.DepthNotAvailable;
+ _menuText.text = "Your device doesn't support depth.";
}
- _ResetToggle();
+ ResetToggle();
}
- m_MenuWindow.SetActive(true);
- m_PlaneDiscoveryGuide.EnablePlaneDiscoveryGuide(false);
+ _menuWindow.SetActive(true);
+ _planeDiscoveryGuide.EnablePlaneDiscoveryGuide(false);
}
- private void _OnApplyButtonClicked()
+ private void OnApplyButtonClicked()
{
- _ConfigureDepth(m_EnableDepthToggle.isOn);
- if (m_DepthMapToggle.isOn)
+ ConfigureDepth(_enableDepthToggle.isOn);
+ if (_depthMapToggle.isOn)
{
- m_DepthState = DepthState.DepthMap;
- m_DebugVisualizer.SetActive(true);
+ _depthState = DepthState.DepthMap;
+ _debugVisualizer.SetActive(true);
}
else
{
- m_DebugVisualizer.SetActive(false);
+ _debugVisualizer.SetActive(false);
}
- m_MenuWindow.SetActive(false);
- m_PlaneDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
+ _menuWindow.SetActive(false);
+ _planeDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
}
- private void _OnCancelButtonClicked()
+ private void OnCancelButtonClicked()
{
- _ResetToggle();
- m_MenuWindow.SetActive(false);
- m_PlaneDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
+ ResetToggle();
+ _menuWindow.SetActive(false);
+ _planeDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
}
- private void _OnEnableDepthButtonClicked()
+ private void OnEnableDepthButtonClicked()
{
- _ConfigureDepth(true);
- _ResetToggle();
- m_DepthCardWindow.SetActive(false);
- m_PlaneDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
+ ConfigureDepth(true);
+ ResetToggle();
+ _depthCardWindow.SetActive(false);
+ _planeDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
}
- private void _OnDisableDepthButtonClicked()
+ private void OnDisableDepthButtonClicked()
{
- _ConfigureDepth(false);
- _ResetToggle();
- m_DepthCardWindow.SetActive(false);
- m_PlaneDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
+ ConfigureDepth(false);
+ ResetToggle();
+ _depthCardWindow.SetActive(false);
+ _planeDiscoveryGuide.EnablePlaneDiscoveryGuide(true);
}
- private void _OnEnableDepthToggleValueChanged(bool enabled)
+ private void OnEnableDepthToggleValueChanged(bool enabled)
{
if (enabled)
{
- m_DepthMapToggle.interactable = true;
- m_DepthMapToggleLabel.color = Color.black;
+ _depthMapToggle.interactable = true;
+ _depthMapToggleLabel.color = Color.black;
}
else
{
- m_DepthMapToggle.interactable = false;
- m_DepthMapToggle.isOn = false;
- m_DepthMapToggleLabel.color = m_EnableDepthToggle.colors.disabledColor;
+ _depthMapToggle.interactable = false;
+ _depthMapToggle.isOn = false;
+ _depthMapToggleLabel.color = _enableDepthToggle.colors.disabledColor;
}
}
- private void _ConfigureDepth(bool depthEnabled)
+ private void ConfigureDepth(bool depthEnabled)
{
- (m_Camera.GetComponent(typeof(DepthEffect)) as MonoBehaviour).enabled = depthEnabled;
- m_DepthConfigured = true;
- m_DepthState = depthEnabled ? DepthState.DepthEnabled : DepthState.DepthDisabled;
+ (_camera.GetComponent(typeof(DepthEffect)) as MonoBehaviour).enabled = depthEnabled;
+ _depthConfigured = true;
+ _depthState = depthEnabled ? DepthState.DepthEnabled : DepthState.DepthDisabled;
}
- private void _ResetToggle()
+ private void ResetToggle()
{
- switch (m_DepthState)
+ switch (_depthState)
{
case DepthState.DepthEnabled:
- m_EnableDepthToggle.interactable = true;
- m_EnableDepthToggleLabel.color = Color.black;
- m_DepthMapToggle.interactable = true;
- m_DepthMapToggleLabel.color = Color.black;
- m_EnableDepthToggle.isOn = true;
- m_DepthMapToggle.isOn = false;
+ _enableDepthToggle.interactable = true;
+ _enableDepthToggleLabel.color = Color.black;
+ _depthMapToggle.interactable = true;
+ _depthMapToggleLabel.color = Color.black;
+ _enableDepthToggle.isOn = true;
+ _depthMapToggle.isOn = false;
break;
case DepthState.DepthDisabled:
- m_EnableDepthToggle.interactable = true;
- m_EnableDepthToggleLabel.color = Color.black;
- m_DepthMapToggle.interactable = false;
- m_DepthMapToggleLabel.color = m_EnableDepthToggle.colors.disabledColor;
- m_EnableDepthToggle.isOn = false;
- m_DepthMapToggle.isOn = false;
+ _enableDepthToggle.interactable = true;
+ _enableDepthToggleLabel.color = Color.black;
+ _depthMapToggle.interactable = false;
+ _depthMapToggleLabel.color = _enableDepthToggle.colors.disabledColor;
+ _enableDepthToggle.isOn = false;
+ _depthMapToggle.isOn = false;
break;
case DepthState.DepthMap:
- m_EnableDepthToggle.interactable = true;
- m_EnableDepthToggleLabel.color = Color.black;
- m_DepthMapToggle.interactable = true;
- m_DepthMapToggleLabel.color = Color.black;
- m_EnableDepthToggle.isOn = true;
- m_DepthMapToggle.isOn = true;
+ _enableDepthToggle.interactable = true;
+ _enableDepthToggleLabel.color = Color.black;
+ _depthMapToggle.interactable = true;
+ _depthMapToggleLabel.color = Color.black;
+ _enableDepthToggle.isOn = true;
+ _depthMapToggle.isOn = true;
break;
case DepthState.DepthNotAvailable:
default:
- m_EnableDepthToggle.interactable = false;
- m_EnableDepthToggleLabel.color = m_EnableDepthToggle.colors.disabledColor;
- m_DepthMapToggle.interactable = false;
- m_DepthMapToggleLabel.color = m_EnableDepthToggle.colors.disabledColor;
- m_EnableDepthToggle.isOn = false;
- m_DepthMapToggle.isOn = false;
+ _enableDepthToggle.interactable = false;
+ _enableDepthToggleLabel.color = _enableDepthToggle.colors.disabledColor;
+ _depthMapToggle.interactable = false;
+ _depthMapToggleLabel.color = _enableDepthToggle.colors.disabledColor;
+ _enableDepthToggle.isOn = false;
+ _depthMapToggle.isOn = false;
break;
}
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/DepthTexture.cs b/Assets/GoogleARCore/Examples/Common/Scripts/DepthTexture.cs
index 433e74ec..64e0573a 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/DepthTexture.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/DepthTexture.cs
@@ -29,11 +29,11 @@ namespace GoogleARCore.Examples.Common
[RequireComponent(typeof(Renderer))]
public class DepthTexture : MonoBehaviour
{
- private static readonly string k_CurrentDepthTexturePropertyName = "_CurrentDepthTexture";
- private static readonly string k_TopLeftRightPropertyName = "_UvTopLeftRight";
- private static readonly string k_BottomLeftRightPropertyName = "_UvBottomLeftRight";
- private Texture2D m_DepthTexture;
- private Material m_Material;
+ private static readonly string _currentDepthTexturePropertyName = "_CurrentDepthTexture";
+ private static readonly string _topLeftRightPropertyName = "_UvTopLeftRight";
+ private static readonly string _bottomLeftRightPropertyName = "_UvBottomLeftRight";
+ private Texture2D _depthTexture;
+ private Material _material;
///
/// Unity's Start() method.
@@ -41,13 +41,13 @@ public class DepthTexture : MonoBehaviour
public void Start()
{
// Default texture, will be updated each frame.
- m_DepthTexture = new Texture2D(2, 2);
- m_DepthTexture.filterMode = FilterMode.Bilinear;
+ _depthTexture = new Texture2D(2, 2);
+ _depthTexture.filterMode = FilterMode.Bilinear;
// Assign the texture to the material.
- m_Material = GetComponent().sharedMaterial;
- m_Material.SetTexture(k_CurrentDepthTexturePropertyName, m_DepthTexture);
- _UpdateScreenOrientationOnMaterial();
+ _material = GetComponent().sharedMaterial;
+ _material.SetTexture(_currentDepthTexturePropertyName, _depthTexture);
+ UpdateScreenOrientationOnMaterial();
}
///
@@ -55,7 +55,7 @@ public void Start()
///
public void Update()
{
- if (Frame.CameraImage.UpdateDepthTexture(ref m_DepthTexture) !=
+ if (Frame.CameraImage.UpdateDepthTexture(ref _depthTexture) !=
DepthStatus.Success)
{
// Rendering will use the most recently acquired depth image.
@@ -64,21 +64,21 @@ public void Update()
// or suggest behavior changes to the user.
}
- _UpdateScreenOrientationOnMaterial();
+ UpdateScreenOrientationOnMaterial();
}
///
/// Updates the screen orientation of the depth map.
///
- private void _UpdateScreenOrientationOnMaterial()
+ private void UpdateScreenOrientationOnMaterial()
{
var uvQuad = Frame.CameraImage.TextureDisplayUvs;
- m_Material.SetVector(
- k_TopLeftRightPropertyName,
+ _material.SetVector(
+ _topLeftRightPropertyName,
new Vector4(
uvQuad.TopLeft.x, uvQuad.TopLeft.y, uvQuad.TopRight.x, uvQuad.TopRight.y));
- m_Material.SetVector(
- k_BottomLeftRightPropertyName,
+ _material.SetVector(
+ _bottomLeftRightPropertyName,
new Vector4(uvQuad.BottomLeft.x, uvQuad.BottomLeft.y, uvQuad.BottomRight.x,
uvQuad.BottomRight.y));
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneGenerator.cs b/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneGenerator.cs
index b2616615..43065a45 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneGenerator.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneGenerator.cs
@@ -38,7 +38,7 @@ public class DetectedPlaneGenerator : MonoBehaviour
/// A list to hold new planes ARCore began tracking in the current frame. This object is
/// used across the application to avoid per-frame allocations.
///
- private List m_NewPlanes = new List();
+ private List _newPlanes = new List();
///
/// The Unity Update method.
@@ -53,15 +53,15 @@ public void Update()
// Iterate over planes found in this frame and instantiate corresponding GameObjects to
// visualize them.
- Session.GetTrackables(m_NewPlanes, TrackableQueryFilter.New);
- for (int i = 0; i < m_NewPlanes.Count; i++)
+ Session.GetTrackables(_newPlanes, TrackableQueryFilter.New);
+ for (int i = 0; i < _newPlanes.Count; i++)
{
// Instantiate a plane visualization prefab and set it to track the new plane. The
// transform is set to the origin with an identity rotation since the mesh for our
// prefab is updated in Unity World coordinates.
GameObject planeObject =
Instantiate(DetectedPlanePrefab, Vector3.zero, Quaternion.identity, transform);
- planeObject.GetComponent().Initialize(m_NewPlanes[i]);
+ planeObject.GetComponent().Initialize(_newPlanes[i]);
}
}
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneVisualizer.cs b/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneVisualizer.cs
index 1f73b773..7bf8acd3 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneVisualizer.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/DetectedPlaneVisualizer.cs
@@ -29,28 +29,28 @@ namespace GoogleARCore.Examples.Common
///
public class DetectedPlaneVisualizer : MonoBehaviour
{
- private DetectedPlane m_DetectedPlane;
+ private DetectedPlane _detectedPlane;
// Keep previous frame's mesh polygon to avoid mesh update every frame.
- private List m_PreviousFrameMeshVertices = new List();
- private List m_MeshVertices = new List();
- private Vector3 m_PlaneCenter = new Vector3();
+ private List _previousFrameMeshVertices = new List();
+ private List _meshVertices = new List();
+ private Vector3 _planeCenter = new Vector3();
- private List m_MeshColors = new List();
+ private List _meshColors = new List();
- private List m_MeshIndices = new List();
+ private List _meshIndices = new List();
- private Mesh m_Mesh;
+ private Mesh _mesh;
- private MeshRenderer m_MeshRenderer;
+ private MeshRenderer _meshRenderer;
///
/// The Unity Awake() method.
///
public void Awake()
{
- m_Mesh = GetComponent().mesh;
- m_MeshRenderer = GetComponent();
+ _mesh = GetComponent().mesh;
+ _meshRenderer = GetComponent();
}
///
@@ -58,24 +58,24 @@ public void Awake()
///
public void Update()
{
- if (m_DetectedPlane == null)
+ if (_detectedPlane == null)
{
return;
}
- else if (m_DetectedPlane.SubsumedBy != null)
+ else if (_detectedPlane.SubsumedBy != null)
{
Destroy(gameObject);
return;
}
- else if (m_DetectedPlane.TrackingState != TrackingState.Tracking)
+ else if (_detectedPlane.TrackingState != TrackingState.Tracking)
{
- m_MeshRenderer.enabled = false;
+ _meshRenderer.enabled = false;
return;
}
- m_MeshRenderer.enabled = true;
+ _meshRenderer.enabled = true;
- _UpdateMeshIfNeeded();
+ UpdateMeshIfNeeded();
}
///
@@ -84,9 +84,9 @@ public void Update()
/// The plane to vizualize.
public void Initialize(DetectedPlane plane)
{
- m_DetectedPlane = plane;
- m_MeshRenderer.material.SetColor("_GridColor", Color.white);
- m_MeshRenderer.material.SetFloat("_UvRotation", Random.Range(0.0f, 360.0f));
+ _detectedPlane = plane;
+ _meshRenderer.material.SetColor("_GridColor", Color.white);
+ _meshRenderer.material.SetFloat("_UvRotation", Random.Range(0.0f, 360.0f));
Update();
}
@@ -94,25 +94,25 @@ public void Initialize(DetectedPlane plane)
///
/// Update mesh with a list of Vector3 and plane's center position.
///
- private void _UpdateMeshIfNeeded()
+ private void UpdateMeshIfNeeded()
{
- m_DetectedPlane.GetBoundaryPolygon(m_MeshVertices);
+ _detectedPlane.GetBoundaryPolygon(_meshVertices);
- if (_AreVerticesListsEqual(m_PreviousFrameMeshVertices, m_MeshVertices))
+ if (AreVerticesListsEqual(_previousFrameMeshVertices, _meshVertices))
{
return;
}
- m_PreviousFrameMeshVertices.Clear();
- m_PreviousFrameMeshVertices.AddRange(m_MeshVertices);
+ _previousFrameMeshVertices.Clear();
+ _previousFrameMeshVertices.AddRange(_meshVertices);
- m_PlaneCenter = m_DetectedPlane.CenterPose.position;
+ _planeCenter = _detectedPlane.CenterPose.position;
- Vector3 planeNormal = m_DetectedPlane.CenterPose.rotation * Vector3.up;
+ Vector3 planeNormal = _detectedPlane.CenterPose.rotation * Vector3.up;
- m_MeshRenderer.material.SetVector("_PlaneNormal", planeNormal);
+ _meshRenderer.material.SetVector("_PlaneNormal", planeNormal);
- int planePolygonCount = m_MeshVertices.Count;
+ int planePolygonCount = _meshVertices.Count;
// The following code converts a polygon to a mesh with two polygons, inner polygon
// renders with 100% opacity and fade out to outter polygon with opacity 0%, as shown
@@ -124,12 +124,12 @@ private void _UpdateMeshIfNeeded()
// | | | | | |
// | | |7-----------6|
// --------------- 3---------------2
- m_MeshColors.Clear();
+ _meshColors.Clear();
// Fill transparent color to vertices 0 to 3.
for (int i = 0; i < planePolygonCount; ++i)
{
- m_MeshColors.Add(Color.clear);
+ _meshColors.Add(Color.clear);
}
// Feather distance 0.2 meters.
@@ -141,27 +141,27 @@ private void _UpdateMeshIfNeeded()
// Add vertex 4 to 7.
for (int i = 0; i < planePolygonCount; ++i)
{
- Vector3 v = m_MeshVertices[i];
+ Vector3 v = _meshVertices[i];
// Vector from plane center to current point
- Vector3 d = v - m_PlaneCenter;
+ Vector3 d = v - _planeCenter;
float scale = 1.0f - Mathf.Min(featherLength / d.magnitude, featherScale);
- m_MeshVertices.Add((scale * d) + m_PlaneCenter);
+ _meshVertices.Add((scale * d) + _planeCenter);
- m_MeshColors.Add(Color.white);
+ _meshColors.Add(Color.white);
}
- m_MeshIndices.Clear();
+ _meshIndices.Clear();
int firstOuterVertex = 0;
int firstInnerVertex = planePolygonCount;
// Generate triangle (4, 5, 6) and (4, 6, 7).
for (int i = 0; i < planePolygonCount - 2; ++i)
{
- m_MeshIndices.Add(firstInnerVertex);
- m_MeshIndices.Add(firstInnerVertex + i + 1);
- m_MeshIndices.Add(firstInnerVertex + i + 2);
+ _meshIndices.Add(firstInnerVertex);
+ _meshIndices.Add(firstInnerVertex + i + 1);
+ _meshIndices.Add(firstInnerVertex + i + 2);
}
// Generate triangle (0, 1, 4), (4, 1, 5), (5, 1, 2), (5, 2, 6), (6, 2, 3), (6, 3, 7)
@@ -173,22 +173,22 @@ private void _UpdateMeshIfNeeded()
int innerVertex1 = firstInnerVertex + i;
int innerVertex2 = firstInnerVertex + ((i + 1) % planePolygonCount);
- m_MeshIndices.Add(outerVertex1);
- m_MeshIndices.Add(outerVertex2);
- m_MeshIndices.Add(innerVertex1);
+ _meshIndices.Add(outerVertex1);
+ _meshIndices.Add(outerVertex2);
+ _meshIndices.Add(innerVertex1);
- m_MeshIndices.Add(innerVertex1);
- m_MeshIndices.Add(outerVertex2);
- m_MeshIndices.Add(innerVertex2);
+ _meshIndices.Add(innerVertex1);
+ _meshIndices.Add(outerVertex2);
+ _meshIndices.Add(innerVertex2);
}
- m_Mesh.Clear();
- m_Mesh.SetVertices(m_MeshVertices);
- m_Mesh.SetTriangles(m_MeshIndices, 0);
- m_Mesh.SetColors(m_MeshColors);
+ _mesh.Clear();
+ _mesh.SetVertices(_meshVertices);
+ _mesh.SetTriangles(_meshIndices, 0);
+ _mesh.SetColors(_meshColors);
}
- private bool _AreVerticesListsEqual(List firstList, List secondList)
+ private bool AreVerticesListsEqual(List firstList, List secondList)
{
if (firstList.Count != secondList.Count)
{
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/Editor/PointcloudVisualizerEditor.cs b/Assets/GoogleARCore/Examples/Common/Scripts/Editor/PointcloudVisualizerEditor.cs
index 26c6db43..b2dcb210 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/Editor/PointcloudVisualizerEditor.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/Editor/PointcloudVisualizerEditor.cs
@@ -31,28 +31,28 @@ namespace GoogleARCore.Examples.Common
[CanEditMultipleObjects]
public class PointcloudVisualizerEditor : Editor
{
- private SerializedProperty m_Script;
- private SerializedProperty m_PointColor;
- private SerializedProperty m_DefaultSize;
- private SerializedProperty m_MaxPointCount;
- private SerializedProperty m_EnablePopAnimation;
- private SerializedProperty m_MaxPointsToAddPerFrame;
- private SerializedProperty m_AnimationDuration;
- private SerializedProperty m_PopSize;
+ private SerializedProperty _script;
+ private SerializedProperty _pointColor;
+ private SerializedProperty _defaultSize;
+ private SerializedProperty _maxPointCount;
+ private SerializedProperty _enablePopAnimation;
+ private SerializedProperty _maxPointsToAddPerFrame;
+ private SerializedProperty _animationDuration;
+ private SerializedProperty _popSize;
///
/// The Unity OnEnable() method.
///
public void OnEnable()
{
- m_Script = serializedObject.FindProperty("m_Script");
- m_PointColor = serializedObject.FindProperty("PointColor");
- m_DefaultSize = serializedObject.FindProperty("m_DefaultSize");
- m_MaxPointCount = serializedObject.FindProperty("m_MaxPointCount");
- m_EnablePopAnimation = serializedObject.FindProperty("EnablePopAnimation");
- m_MaxPointsToAddPerFrame = serializedObject.FindProperty("MaxPointsToAddPerFrame");
- m_AnimationDuration = serializedObject.FindProperty("AnimationDuration");
- m_PopSize = serializedObject.FindProperty("m_PopSize");
+ _script = serializedObject.FindProperty("_script");
+ _pointColor = serializedObject.FindProperty("PointColor");
+ _defaultSize = serializedObject.FindProperty("_defaultSize");
+ _maxPointCount = serializedObject.FindProperty("_maxPointCount");
+ _enablePopAnimation = serializedObject.FindProperty("EnablePopAnimation");
+ _maxPointsToAddPerFrame = serializedObject.FindProperty("MaxPointsToAddPerFrame");
+ _animationDuration = serializedObject.FindProperty("AnimationDuration");
+ _popSize = serializedObject.FindProperty("_popSize");
}
///
@@ -63,34 +63,34 @@ public override void OnInspectorGUI()
serializedObject.Update();
GUI.enabled = false;
- EditorGUILayout.PropertyField(m_Script, true, new GUILayoutOption[0]);
+ EditorGUILayout.PropertyField(_script, true, new GUILayoutOption[0]);
GUI.enabled = true;
var pointcloudVisualizerScript = target as PointcloudVisualizer;
EditorGUILayout.PropertyField(
- m_PointColor,
+ _pointColor,
new GUIContent(
"Point Color",
- _GetTooltip(pointcloudVisualizerScript, "PointColor")));
+ GetTooltip(pointcloudVisualizerScript, "PointColor")));
EditorGUILayout.PropertyField(
- m_DefaultSize,
+ _defaultSize,
new GUIContent(
"Default Size",
- _GetTooltip(pointcloudVisualizerScript, "m_DefaultSize")));
+ GetTooltip(pointcloudVisualizerScript, "_defaultSize")));
EditorGUILayout.PropertyField(
- m_MaxPointCount,
+ _maxPointCount,
new GUIContent(
"Max Point Count",
- _GetTooltip(pointcloudVisualizerScript, "m_MaxPointCount")));
+ GetTooltip(pointcloudVisualizerScript, "_maxPointCount")));
EditorGUILayout.PropertyField(
- m_EnablePopAnimation,
+ _enablePopAnimation,
new GUIContent(
"Enable Pop Animation",
- _GetTooltip(pointcloudVisualizerScript, "EnablePopAnimation")));
+ GetTooltip(pointcloudVisualizerScript, "EnablePopAnimation")));
// Hide animation related fields if the pop animation is disabled.
using (var group = new EditorGUILayout.FadeGroupScope(
@@ -101,22 +101,22 @@ public override void OnInspectorGUI()
EditorGUI.indentLevel++;
EditorGUILayout.PropertyField(
- m_MaxPointsToAddPerFrame,
+ _maxPointsToAddPerFrame,
new GUIContent(
"Max Points To Add Per Frame",
- _GetTooltip(pointcloudVisualizerScript, "MaxPointsToAddPerFrame")));
+ GetTooltip(pointcloudVisualizerScript, "MaxPointsToAddPerFrame")));
EditorGUILayout.PropertyField(
- m_AnimationDuration,
+ _animationDuration,
new GUIContent(
"Animation Duration",
- _GetTooltip(pointcloudVisualizerScript, "AnimationDuration")));
+ GetTooltip(pointcloudVisualizerScript, "AnimationDuration")));
EditorGUILayout.PropertyField(
- m_PopSize,
+ _popSize,
new GUIContent(
"Pop Size",
- _GetTooltip(pointcloudVisualizerScript, "m_PopSize")));
+ GetTooltip(pointcloudVisualizerScript, "_popSize")));
EditorGUI.indentLevel--;
}
@@ -131,7 +131,7 @@ public override void OnInspectorGUI()
/// The string of the tooltip attribute.
/// The object containing the field.
/// The field name.
- private string _GetTooltip(object obj, string fieldName)
+ private string GetTooltip(object obj, string fieldName)
{
FieldInfo field =
obj.GetType().GetField(
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/PlaneDiscoveryGuide.cs b/Assets/GoogleARCore/Examples/Common/Scripts/PlaneDiscoveryGuide.cs
index 84c2a03f..5f7104dc 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/PlaneDiscoveryGuide.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/PlaneDiscoveryGuide.cs
@@ -23,6 +23,7 @@ namespace GoogleARCore.Examples.Common
using System.Collections.Generic;
using GoogleARCore;
using UnityEngine;
+ using UnityEngine.Serialization;
using UnityEngine.UI;
///
@@ -52,47 +53,57 @@ public class PlaneDiscoveryGuide : MonoBehaviour
///
/// The time to delay, after Unity Start, showing the plane discovery guide.
///
- private const float k_OnStartDelay = 1f;
+ private const float _onStartDelay = 1f;
///
/// The time to delay, after a at least one plane is tracked by ARCore, hiding the plane discovery guide.
///
- private const float k_HideGuideDelay = 0.75f;
+ private const float _hideGuideDelay = 0.75f;
///
/// The duration of the hand animation fades.
///
- private const float k_AnimationFadeDuration = 0.15f;
+ private const float _animationFadeDuration = 0.15f;
///
/// The Game Object that provides feature points visualization.
///
[Tooltip("The Game Object that provides feature points visualization.")]
- [SerializeField] private GameObject m_FeaturePoints = null;
+ [FormerlySerializedAs("m_FeaturePoints")]
+ [SerializeField]
+ private GameObject _featurePoints = null;
///
/// The RawImage that provides rotating hand animation.
///
[Tooltip("The RawImage that provides rotating hand animation.")]
- [SerializeField] private RawImage m_HandAnimation = null;
+ [FormerlySerializedAs("m_HandAnimation")]
+ [SerializeField]
+ private RawImage _handAnimation = null;
///
/// The snackbar Game Object.
///
[Tooltip("The snackbar Game Object.")]
- [SerializeField] private GameObject m_SnackBar = null;
+ [FormerlySerializedAs("m_SnackBar")]
+ [SerializeField]
+ private GameObject _snackBar = null;
///
/// The snackbar text.
///
[Tooltip("The snackbar text.")]
- [SerializeField] private Text m_SnackBarText = null;
+ [FormerlySerializedAs("m_SnackBarText")]
+ [SerializeField]
+ private Text _snackBarText = null;
///
/// The Game Object that contains the button to open the help window.
///
[Tooltip("The Game Object that contains the button to open the help window.")]
- [SerializeField] private GameObject m_OpenButton = null;
+ [FormerlySerializedAs("m_OpenButton")]
+ [SerializeField]
+ private GameObject _openButton = null;
///
/// The Game Object that contains the window with more instructions on how to find a plane.
@@ -100,46 +111,50 @@ public class PlaneDiscoveryGuide : MonoBehaviour
[Tooltip(
"The Game Object that contains the window with more instructions on how to find " +
"a plane.")]
- [SerializeField] private GameObject m_MoreHelpWindow = null;
+ [FormerlySerializedAs("m_MoreHelpWindow")]
+ [SerializeField]
+ private GameObject _moreHelpWindow = null;
///
/// The Game Object that contains the button to close the help window.
///
[Tooltip("The Game Object that contains the button to close the help window.")]
- [SerializeField] private Button m_GotItButton = null;
+ [FormerlySerializedAs("m_GotItButton")]
+ [SerializeField]
+ private Button _gotItButton = null;
///
/// The elapsed time ARCore has been detecting at least one plane.
///
- private float m_DetectedPlaneElapsed;
+ private float _detectedPlaneElapsed;
///
/// The elapsed time ARCore has been tracking but not detected any planes.
///
- private float m_NotDetectedPlaneElapsed;
+ private float _notDetectedPlaneElapsed;
///
/// Indicates whether a lost tracking reason is displayed.
///
- private bool m_IsLostTrackingDisplayed;
+ private bool _isLostTrackingDisplayed;
///
/// A list to hold detected planes ARCore is tracking in the current frame.
///
- private List m_DetectedPlanes = new List();
+ private List _detectedPlanes = new List();
///
/// Unity's Start() method.
///
public void Start()
{
- m_OpenButton.GetComponent().onClick.AddListener(_OnOpenButtonClicked);
- m_GotItButton.onClick.AddListener(_OnGotItButtonClicked);
+ _openButton.GetComponent().onClick.AddListener(OnOpenButtonClicked);
+ _gotItButton.onClick.AddListener(OnGotItButtonClicked);
- _CheckFieldsAreNotNull();
- m_MoreHelpWindow.SetActive(false);
- m_IsLostTrackingDisplayed = false;
- m_NotDetectedPlaneElapsed = DisplayGuideDelay - k_OnStartDelay;
+ CheckFieldsAreNotNull();
+ _moreHelpWindow.SetActive(false);
+ _isLostTrackingDisplayed = false;
+ _notDetectedPlaneElapsed = DisplayGuideDelay - _onStartDelay;
}
///
@@ -147,8 +162,8 @@ public void Start()
///
public void OnDestroy()
{
- m_OpenButton.GetComponent().onClick.RemoveListener(_OnOpenButtonClicked);
- m_GotItButton.onClick.RemoveListener(_OnGotItButtonClicked);
+ _openButton.GetComponent().onClick.RemoveListener(OnOpenButtonClicked);
+ _gotItButton.onClick.RemoveListener(OnGotItButtonClicked);
}
///
@@ -156,8 +171,8 @@ public void OnDestroy()
///
public void Update()
{
- _UpdateDetectedPlaneTrackingState();
- _UpdateUI();
+ UpdateDetectedPlaneTrackingState();
+ UpdateUI();
}
///
@@ -173,187 +188,187 @@ public void EnablePlaneDiscoveryGuide(bool guideEnabled)
else
{
enabled = false;
- m_FeaturePoints.SetActive(false);
- m_HandAnimation.enabled = false;
- m_SnackBar.SetActive(false);
+ _featurePoints.SetActive(false);
+ _handAnimation.enabled = false;
+ _snackBar.SetActive(false);
}
}
///
/// Callback executed when the open button has been clicked by the user.
///
- private void _OnOpenButtonClicked()
+ private void OnOpenButtonClicked()
{
- m_MoreHelpWindow.SetActive(true);
+ _moreHelpWindow.SetActive(true);
enabled = false;
- m_FeaturePoints.SetActive(false);
- m_HandAnimation.enabled = false;
- m_SnackBar.SetActive(false);
+ _featurePoints.SetActive(false);
+ _handAnimation.enabled = false;
+ _snackBar.SetActive(false);
}
///
/// Callback executed when the got-it button has been clicked by the user.
///
- private void _OnGotItButtonClicked()
+ private void OnGotItButtonClicked()
{
- m_MoreHelpWindow.SetActive(false);
+ _moreHelpWindow.SetActive(false);
enabled = true;
}
///
/// Checks whether at least one plane being actively tracked exists.
///
- private void _UpdateDetectedPlaneTrackingState()
+ private void UpdateDetectedPlaneTrackingState()
{
if (Session.Status != SessionStatus.Tracking)
{
return;
}
- Session.GetTrackables(m_DetectedPlanes, TrackableQueryFilter.All);
- foreach (DetectedPlane plane in m_DetectedPlanes)
+ Session.GetTrackables(_detectedPlanes, TrackableQueryFilter.All);
+ foreach (DetectedPlane plane in _detectedPlanes)
{
if (plane.TrackingState == TrackingState.Tracking)
{
- m_DetectedPlaneElapsed += Time.deltaTime;
- m_NotDetectedPlaneElapsed = 0f;
+ _detectedPlaneElapsed += Time.deltaTime;
+ _notDetectedPlaneElapsed = 0f;
return;
}
}
- m_DetectedPlaneElapsed = 0f;
- m_NotDetectedPlaneElapsed += Time.deltaTime;
+ _detectedPlaneElapsed = 0f;
+ _notDetectedPlaneElapsed += Time.deltaTime;
}
///
/// Hides or shows the UI based on the existence of a plane being currently tracked.
///
- private void _UpdateUI()
+ private void UpdateUI()
{
if (Session.Status == SessionStatus.LostTracking &&
Session.LostTrackingReason != LostTrackingReason.None)
{
// The session has lost tracking.
- m_FeaturePoints.SetActive(false);
- m_HandAnimation.enabled = false;
- m_SnackBar.SetActive(true);
+ _featurePoints.SetActive(false);
+ _handAnimation.enabled = false;
+ _snackBar.SetActive(true);
switch (Session.LostTrackingReason)
{
case LostTrackingReason.InsufficientLight:
- m_SnackBarText.text = "Too dark. Try moving to a well-lit area.";
+ _snackBarText.text = "Too dark. Try moving to a well-lit area.";
break;
case LostTrackingReason.InsufficientFeatures:
- m_SnackBarText.text = "Aim device at a surface with more texture or color.";
+ _snackBarText.text = "Aim device at a surface with more texture or color.";
break;
case LostTrackingReason.ExcessiveMotion:
- m_SnackBarText.text = "Moving too fast. Slow down.";
+ _snackBarText.text = "Moving too fast. Slow down.";
break;
case LostTrackingReason.CameraUnavailable:
- m_SnackBarText.text = "Another app is using the camera. Tap on this app " +
+ _snackBarText.text = "Another app is using the camera. Tap on this app " +
"or try closing the other one.";
break;
default:
- m_SnackBarText.text = "Motion tracking is lost.";
+ _snackBarText.text = "Motion tracking is lost.";
break;
}
- m_OpenButton.SetActive(false);
- m_IsLostTrackingDisplayed = true;
+ _openButton.SetActive(false);
+ _isLostTrackingDisplayed = true;
return;
}
- else if (m_IsLostTrackingDisplayed)
+ else if (_isLostTrackingDisplayed)
{
// The session has moved from the lost tracking state.
- m_SnackBar.SetActive(false);
- m_IsLostTrackingDisplayed = false;
+ _snackBar.SetActive(false);
+ _isLostTrackingDisplayed = false;
}
- if (m_NotDetectedPlaneElapsed > DisplayGuideDelay)
+ if (_notDetectedPlaneElapsed > DisplayGuideDelay)
{
// The session has been tracking but no planes have been found by
// 'DisplayGuideDelay'.
- m_FeaturePoints.SetActive(true);
+ _featurePoints.SetActive(true);
- if (!m_HandAnimation.enabled)
+ if (!_handAnimation.enabled)
{
- m_HandAnimation.GetComponent().SetAlpha(0f);
- m_HandAnimation.CrossFadeAlpha(1f, k_AnimationFadeDuration, false);
+ _handAnimation.GetComponent().SetAlpha(0f);
+ _handAnimation.CrossFadeAlpha(1f, _animationFadeDuration, false);
}
- m_HandAnimation.enabled = true;
- m_SnackBar.SetActive(true);
+ _handAnimation.enabled = true;
+ _snackBar.SetActive(true);
- if (m_NotDetectedPlaneElapsed > OfferDetailedInstructionsDelay)
+ if (_notDetectedPlaneElapsed > OfferDetailedInstructionsDelay)
{
- m_SnackBarText.text = "Need Help?";
- m_OpenButton.SetActive(true);
+ _snackBarText.text = "Need Help?";
+ _openButton.SetActive(true);
}
else
{
- m_SnackBarText.text = "Point your camera to where you want to place an object.";
- m_OpenButton.SetActive(false);
+ _snackBarText.text = "Point your camera to where you want to place an object.";
+ _openButton.SetActive(false);
}
}
- else if (m_NotDetectedPlaneElapsed > 0f || m_DetectedPlaneElapsed > k_HideGuideDelay)
+ else if (_notDetectedPlaneElapsed > 0f || _detectedPlaneElapsed > _hideGuideDelay)
{
// The session is tracking but no planes have been found in less than
// 'DisplayGuideDelay' or at least one plane has been tracking for more than
- // 'k_HideGuideDelay'.
- m_FeaturePoints.SetActive(false);
- m_SnackBar.SetActive(false);
- m_OpenButton.SetActive(false);
+ // '_hideGuideDelay'.
+ _featurePoints.SetActive(false);
+ _snackBar.SetActive(false);
+ _openButton.SetActive(false);
- if (m_HandAnimation.enabled)
+ if (_handAnimation.enabled)
{
- m_HandAnimation.GetComponent().SetAlpha(1f);
- m_HandAnimation.CrossFadeAlpha(0f, k_AnimationFadeDuration, false);
+ _handAnimation.GetComponent().SetAlpha(1f);
+ _handAnimation.CrossFadeAlpha(0f, _animationFadeDuration, false);
}
- m_HandAnimation.enabled = false;
+ _handAnimation.enabled = false;
}
}
///
/// Checks the required fields are not null, and logs a Warning otherwise.
///
- private void _CheckFieldsAreNotNull()
+ private void CheckFieldsAreNotNull()
{
- if (m_MoreHelpWindow == null)
+ if (_moreHelpWindow == null)
{
Debug.LogError("MoreHelpWindow is null");
}
- if (m_GotItButton == null)
+ if (_gotItButton == null)
{
Debug.LogError("GotItButton is null");
}
- if (m_SnackBarText == null)
+ if (_snackBarText == null)
{
Debug.LogError("SnackBarText is null");
}
- if (m_SnackBar == null)
+ if (_snackBar == null)
{
Debug.LogError("SnackBar is null");
}
- if (m_OpenButton == null)
+ if (_openButton == null)
{
Debug.LogError("OpenButton is null");
}
- else if (m_OpenButton.GetComponent() == null)
+ else if (_openButton.GetComponent() == null)
{
Debug.LogError("OpenButton does not have a Button Component.");
}
- if (m_HandAnimation == null)
+ if (_handAnimation == null)
{
Debug.LogError("HandAnimation is null");
}
- if (m_FeaturePoints == null)
+ if (_featurePoints == null)
{
Debug.LogError("FeaturePoints is null");
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/PointcloudVisualizer.cs b/Assets/GoogleARCore/Examples/Common/Scripts/PointcloudVisualizer.cs
index 67dd7322..a0cfa4e0 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/PointcloudVisualizer.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/PointcloudVisualizer.cs
@@ -22,6 +22,7 @@ namespace GoogleARCore.Examples.Common
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
+ using UnityEngine.Serialization;
///
/// Visualizes the feature points for spatial mapping, showing a pop animation when they appear.
@@ -58,91 +59,97 @@ public class PointcloudVisualizer : MonoBehaviour
/// The maximum number of points to show on the screen.
///
[Tooltip("The maximum number of points to show on the screen.")]
- [SerializeField] private int m_MaxPointCount = 1000;
+ [FormerlySerializedAs("m_MaxPointCount")]
+ [SerializeField]
+ private int _maxPointCount = 1000;
///
/// The default size of the points.
///
[Tooltip("The default size of the points.")]
- [SerializeField] private int m_DefaultSize = 10;
+ [FormerlySerializedAs("m_DefaultSize")]
+ [SerializeField]
+ private int _defaultSize = 10;
///
/// The maximum size that the points will have when they pop.
///
[Tooltip("The maximum size that the points will have when they pop.")]
- [SerializeField] private int m_PopSize = 50;
+ [FormerlySerializedAs("m_PopSize")]
+ [SerializeField]
+ private int _popSize = 50;
///
/// The mesh.
///
- private Mesh m_Mesh;
+ private Mesh _mesh;
///
/// The mesh renderer.
///
- private MeshRenderer m_MeshRenderer;
+ private MeshRenderer _meshRenderer;
///
/// The unique identifier for the shader _ScreenWidth property.
///
- private int m_ScreenWidthId;
+ private int _screenWidthId;
///
/// The unique identifier for the shader _ScreenHeight property.
///
- private int m_ScreenHeightId;
+ private int _screenHeightId;
///
/// The unique identifier for the shader _Color property.
///
- private int m_ColorId;
+ private int _colorId;
///
/// The property block.
///
- private MaterialPropertyBlock m_PropertyBlock;
+ private MaterialPropertyBlock _propertyBlock;
///
/// The cached resolution of the screen.
///
- private Resolution m_CachedResolution;
+ private Resolution _cachedResolution;
///
/// The cached color of the points.
///
- private Color m_CachedColor;
+ private Color _cachedColor;
///
/// The cached feature points.
///
- private LinkedList m_CachedPoints;
+ private LinkedList _cachedPoints;
///
/// The Unity Start() method.
///
public void Start()
{
- m_MeshRenderer = GetComponent();
- m_Mesh = GetComponent().mesh;
- if (m_Mesh == null)
+ _meshRenderer = GetComponent();
+ _mesh = GetComponent().mesh;
+ if (_mesh == null)
{
- m_Mesh = new Mesh();
+ _mesh = new Mesh();
}
- m_Mesh.Clear();
+ _mesh.Clear();
- m_CachedColor = PointColor;
+ _cachedColor = PointColor;
- m_ScreenWidthId = Shader.PropertyToID("_ScreenWidth");
- m_ScreenHeightId = Shader.PropertyToID("_ScreenHeight");
- m_ColorId = Shader.PropertyToID("_Color");
+ _screenWidthId = Shader.PropertyToID("_ScreenWidth");
+ _screenHeightId = Shader.PropertyToID("_ScreenHeight");
+ _colorId = Shader.PropertyToID("_Color");
- m_PropertyBlock = new MaterialPropertyBlock();
- m_MeshRenderer.GetPropertyBlock(m_PropertyBlock);
- m_PropertyBlock.SetColor(m_ColorId, m_CachedColor);
- m_MeshRenderer.SetPropertyBlock(m_PropertyBlock);
+ _propertyBlock = new MaterialPropertyBlock();
+ _meshRenderer.GetPropertyBlock(_propertyBlock);
+ _propertyBlock.SetColor(_colorId, _cachedColor);
+ _meshRenderer.SetPropertyBlock(_propertyBlock);
- m_CachedPoints = new LinkedList();
+ _cachedPoints = new LinkedList();
}
///
@@ -150,7 +157,7 @@ public void Start()
///
public void OnDisable()
{
- _ClearCachedPoints();
+ ClearCachedPoints();
}
///
@@ -161,73 +168,73 @@ public void Update()
// If ARCore is not tracking, clear the caches and don't update.
if (Session.Status != SessionStatus.Tracking)
{
- _ClearCachedPoints();
+ ClearCachedPoints();
return;
}
- if (Screen.currentResolution.height != m_CachedResolution.height
- || Screen.currentResolution.width != m_CachedResolution.width)
+ if (Screen.currentResolution.height != _cachedResolution.height
+ || Screen.currentResolution.width != _cachedResolution.width)
{
- _UpdateResolution();
+ UpdateResolution();
}
- if (m_CachedColor != PointColor)
+ if (_cachedColor != PointColor)
{
- _UpdateColor();
+ UpdateColor();
}
if (EnablePopAnimation)
{
- _AddPointsIncrementallyToCache();
- _UpdatePointSize();
+ AddPointsIncrementallyToCache();
+ UpdatePointSize();
}
else
{
- _AddAllPointsToCache();
+ AddAllPointsToCache();
}
- _UpdateMesh();
+ UpdateMesh();
}
///
/// Clears all cached feature points.
///
- private void _ClearCachedPoints()
+ private void ClearCachedPoints()
{
- m_CachedPoints.Clear();
- m_Mesh.Clear();
+ _cachedPoints.Clear();
+ _mesh.Clear();
}
///
/// Updates the screen resolution.
///
- private void _UpdateResolution()
+ private void UpdateResolution()
{
- m_CachedResolution = Screen.currentResolution;
- if (m_MeshRenderer != null)
+ _cachedResolution = Screen.currentResolution;
+ if (_meshRenderer != null)
{
- m_MeshRenderer.GetPropertyBlock(m_PropertyBlock);
- m_PropertyBlock.SetFloat(m_ScreenWidthId, m_CachedResolution.width);
- m_PropertyBlock.SetFloat(m_ScreenHeightId, m_CachedResolution.height);
- m_MeshRenderer.SetPropertyBlock(m_PropertyBlock);
+ _meshRenderer.GetPropertyBlock(_propertyBlock);
+ _propertyBlock.SetFloat(_screenWidthId, _cachedResolution.width);
+ _propertyBlock.SetFloat(_screenHeightId, _cachedResolution.height);
+ _meshRenderer.SetPropertyBlock(_propertyBlock);
}
}
///
/// Updates the color of the feature points.
///
- private void _UpdateColor()
+ private void UpdateColor()
{
- m_CachedColor = PointColor;
- m_MeshRenderer.GetPropertyBlock(m_PropertyBlock);
- m_PropertyBlock.SetColor("_Color", m_CachedColor);
- m_MeshRenderer.SetPropertyBlock(m_PropertyBlock);
+ _cachedColor = PointColor;
+ _meshRenderer.GetPropertyBlock(_propertyBlock);
+ _propertyBlock.SetColor("_Color", _cachedColor);
+ _meshRenderer.SetPropertyBlock(_propertyBlock);
}
///
/// Adds points incrementally to the cache, by selecting points at random each frame.
///
- private void _AddPointsIncrementallyToCache()
+ private void AddPointsIncrementallyToCache()
{
if (Frame.PointCloud.PointCount > 0 && Frame.PointCloud.IsUpdatedThisFrame)
{
@@ -237,7 +244,7 @@ private void _AddPointsIncrementallyToCache()
Vector3 point = Frame.PointCloud.GetPointAsStruct(
Random.Range(0, Frame.PointCloud.PointCount - 1));
- _AddPointToCache(point);
+ AddPointToCache(point);
}
}
}
@@ -245,13 +252,13 @@ private void _AddPointsIncrementallyToCache()
///
/// Adds all points from this frame's pointcloud to the cache.
///
- private void _AddAllPointsToCache()
+ private void AddAllPointsToCache()
{
if (Frame.PointCloud.IsUpdatedThisFrame)
{
for (int i = 0; i < Frame.PointCloud.PointCount; i++)
{
- _AddPointToCache(Frame.PointCloud.GetPointAsStruct(i));
+ AddPointToCache(Frame.PointCloud.GetPointAsStruct(i));
}
}
}
@@ -260,14 +267,14 @@ private void _AddAllPointsToCache()
/// Adds the specified point to cache.
///
/// A feature point to be added.
- private void _AddPointToCache(Vector3 point)
+ private void AddPointToCache(Vector3 point)
{
- if (m_CachedPoints.Count >= m_MaxPointCount)
+ if (_cachedPoints.Count >= _maxPointCount)
{
- m_CachedPoints.RemoveFirst();
+ _cachedPoints.RemoveFirst();
}
- m_CachedPoints.AddLast(new PointInfo(point, new Vector2(m_DefaultSize, m_DefaultSize),
+ _cachedPoints.AddLast(new PointInfo(point, new Vector2(_defaultSize, _defaultSize),
Time.time));
}
@@ -275,16 +282,16 @@ private void _AddPointToCache(Vector3 point)
/// Updates the size of the feature points, producing a pop animation where the size
/// increases to a maximum size and then goes back to the original size.
///
- private void _UpdatePointSize()
+ private void UpdatePointSize()
{
- if (m_CachedPoints.Count <= 0 || !EnablePopAnimation)
+ if (_cachedPoints.Count <= 0 || !EnablePopAnimation)
{
return;
}
LinkedListNode pointNode;
- for (pointNode = m_CachedPoints.First; pointNode != null; pointNode = pointNode.Next)
+ for (pointNode = _cachedPoints.First; pointNode != null; pointNode = pointNode.Next)
{
float timeSinceAdded = Time.time - pointNode.Value.CreationTime;
if (timeSinceAdded >= AnimationDuration)
@@ -297,11 +304,11 @@ private void _UpdatePointSize()
if (value < 0.5f)
{
- size = Mathf.Lerp(m_DefaultSize, m_PopSize, value * 2f);
+ size = Mathf.Lerp(_defaultSize, _popSize, value * 2f);
}
else
{
- size = Mathf.Lerp(m_PopSize, m_DefaultSize, (value - 0.5f) * 2f);
+ size = Mathf.Lerp(_popSize, _defaultSize, (value - 0.5f) * 2f);
}
pointNode.Value = new PointInfo(pointNode.Value.Position, new Vector2(size, size),
@@ -312,12 +319,12 @@ private void _UpdatePointSize()
///
/// Updates the mesh, adding the feature points.
///
- private void _UpdateMesh()
+ private void UpdateMesh()
{
- m_Mesh.Clear();
- m_Mesh.vertices = m_CachedPoints.Select(p => p.Position).ToArray();
- m_Mesh.uv = m_CachedPoints.Select(p => p.Size).ToArray();
- m_Mesh.SetIndices(Enumerable.Range(0, m_CachedPoints.Count).ToArray(),
+ _mesh.Clear();
+ _mesh.vertices = _cachedPoints.Select(p => p.Position).ToArray();
+ _mesh.uv = _cachedPoints.Select(p => p.Size).ToArray();
+ _mesh.SetIndices(Enumerable.Range(0, _cachedPoints.Count).ToArray(),
MeshTopology.Points, 0);
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/RawImageVideoPlayer.cs b/Assets/GoogleARCore/Examples/Common/Scripts/RawImageVideoPlayer.cs
index 7bcacb55..5998f430 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/RawImageVideoPlayer.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/RawImageVideoPlayer.cs
@@ -41,7 +41,7 @@ public class RawImageVideoPlayer : MonoBehaviour
///
public VideoPlayer VideoPlayer;
- private Texture m_RawImageTexture;
+ private Texture _rawImageTexture;
///
/// The Unity Start() method.
@@ -49,8 +49,8 @@ public class RawImageVideoPlayer : MonoBehaviour
public void Start()
{
VideoPlayer.enabled = false;
- m_RawImageTexture = RawImage.texture;
- VideoPlayer.prepareCompleted += _PrepareCompleted;
+ _rawImageTexture = RawImage.texture;
+ VideoPlayer.prepareCompleted += PrepareCompleted;
}
///
@@ -73,12 +73,12 @@ public void Update()
{
// Stop video playback to save power usage.
VideoPlayer.Stop();
- RawImage.texture = m_RawImageTexture;
+ RawImage.texture = _rawImageTexture;
VideoPlayer.enabled = false;
}
}
- private void _PrepareCompleted(VideoPlayer player)
+ private void PrepareCompleted(VideoPlayer player)
{
RawImage.texture = player.texture;
}
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/SafeAreaScaler.cs b/Assets/GoogleARCore/Examples/Common/Scripts/SafeAreaScaler.cs
index ac0e87f8..97bf2c37 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/SafeAreaScaler.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/SafeAreaScaler.cs
@@ -27,7 +27,7 @@ namespace GoogleARCore.Examples.Common
///
public class SafeAreaScaler : MonoBehaviour
{
- private Rect m_ScreenSafeArea = new Rect(0, 0, 0, 0);
+ private Rect _screenSafeArea = new Rect(0, 0, 0, 0);
///
/// Unity's Awake() method.
@@ -41,24 +41,24 @@ public void Update()
safeArea = new Rect(0, 0, Screen.width, Screen.height);
#endif
- if (m_ScreenSafeArea != safeArea)
+ if (_screenSafeArea != safeArea)
{
- m_ScreenSafeArea = safeArea;
- _MatchRectTransformToSafeArea();
+ _screenSafeArea = safeArea;
+ MatchRectTransformToSafeArea();
}
}
- private void _MatchRectTransformToSafeArea()
+ private void MatchRectTransformToSafeArea()
{
RectTransform rectTransform = GetComponent();
// lower left corner offset
- Vector2 offsetMin = new Vector2(m_ScreenSafeArea.xMin,
- Screen.height - m_ScreenSafeArea.yMax);
+ Vector2 offsetMin = new Vector2(_screenSafeArea.xMin,
+ Screen.height - _screenSafeArea.yMax);
// upper right corner offset
- Vector2 offsetMax = new Vector2(m_ScreenSafeArea.xMax - Screen.width,
- -m_ScreenSafeArea.yMin);
+ Vector2 offsetMax = new Vector2(_screenSafeArea.xMax - Screen.width,
+ -_screenSafeArea.yMin);
rectTransform.offsetMin = offsetMin;
rectTransform.offsetMax = offsetMax;
diff --git a/Assets/GoogleARCore/Examples/Common/Scripts/ShadowQuadHelper.cs b/Assets/GoogleARCore/Examples/Common/Scripts/ShadowQuadHelper.cs
index 7ead7135..fdafd149 100644
--- a/Assets/GoogleARCore/Examples/Common/Scripts/ShadowQuadHelper.cs
+++ b/Assets/GoogleARCore/Examples/Common/Scripts/ShadowQuadHelper.cs
@@ -30,20 +30,20 @@ public class ShadowQuadHelper : MonoBehaviour
///
/// The Depth Setting Menu.
///
- private DepthMenu m_DepthMenu;
+ private DepthMenu _depthMenu;
///
/// The GameObject of ShadowQuad.
///
- private GameObject m_ShadowQuad;
+ private GameObject _shadowQuad;
///
/// The Unity Start() method.
///
public void Start()
{
- m_ShadowQuad = this.gameObject.transform.Find("ShadowQuad").gameObject;
- m_DepthMenu = FindObjectOfType();
+ _shadowQuad = this.gameObject.transform.Find("ShadowQuad").gameObject;
+ _depthMenu = FindObjectOfType();
}
///
@@ -54,9 +54,9 @@ public void Update()
// Shadows are cast onto the light estimation shadow plane, which do not respect depth.
// Shadows are disabled when depth is enabled to prevent undesirable rendering
// artifacts.
- if (m_ShadowQuad.activeSelf == m_DepthMenu.IsDepthEnabled())
+ if (_shadowQuad.activeSelf == _depthMenu.IsDepthEnabled())
{
- m_ShadowQuad.SetActive(!m_DepthMenu.IsDepthEnabled());
+ _shadowQuad.SetActive(!_depthMenu.IsDepthEnabled());
}
}
}
diff --git a/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity b/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity
index 95f49998..2d170baf 100644
--- a/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity
+++ b/Assets/GoogleARCore/Examples/ComputerVision/Scenes/ComputerVision.unity
@@ -217,108 +217,8 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- m_RootGameObject: {fileID: 749880504}
+ m_RootGameObject: {fileID: 268627364}
m_IsPrefabParent: 0
---- !u!1 &143967951
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 143967952}
- - component: {fileID: 143967955}
- - component: {fileID: 143967954}
- - component: {fileID: 143967953}
- m_Layer: 0
- m_Name: First Person Camera
- m_TagString: MainCamera
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &143967952
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- m_GameObject: {fileID: 143967951}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 749880505}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &143967953
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- m_GameObject: {fileID: 143967951}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
---- !u!114 &143967954
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- m_GameObject: {fileID: 143967951}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Device: 0
- m_PoseSource: 6
- m_TrackingType: 0
- m_UpdateType: 1
- m_UseRelativeTransform: 1
---- !u!20 &143967955
-Camera:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- m_GameObject: {fileID: 143967951}
- m_Enabled: 1
- serializedVersion: 2
- m_ClearFlags: 2
- m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
- m_NormalizedViewPortRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
- near clip plane: 0.05
- far clip plane: 200
- field of view: 60
- orthographic: 0
- orthographic size: 5
- m_Depth: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingPath: -1
- m_TargetTexture: {fileID: 0}
- m_TargetDisplay: 0
- m_TargetEye: 3
- m_HDR: 1
- m_AllowMSAA: 1
- m_AllowDynamicResolution: 0
- m_ForceIntoRT: 0
- m_OcclusionCulling: 1
- m_StereoConvergence: 10
- m_StereoSeparation: 0.022
--- !u!1 &177518715
GameObject:
m_ObjectHideFlags: 0
@@ -455,13 +355,45 @@ CanvasRenderer:
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 250960331}
+--- !u!1 &268627364
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 268627365}
+ - component: {fileID: 273323148}
+ m_Layer: 0
+ m_Name: ARCore Device
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &268627365
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ m_GameObject: {fileID: 268627364}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 790926325}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &273323148
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114451889682527732, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 60865845}
- m_GameObject: {fileID: 749880504}
+ m_GameObject: {fileID: 268627364}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
@@ -824,38 +756,6 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &749880504
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 749880505}
- - component: {fileID: 273323148}
- m_Layer: 0
- m_Name: ARCore Device
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &749880505
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 60865845}
- m_GameObject: {fileID: 749880504}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 143967952}
- m_Father: {fileID: 0}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &771580495
GameObject:
m_ObjectHideFlags: 0
@@ -930,6 +830,106 @@ CanvasRenderer:
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 771580495}
+--- !u!1 &790926324
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 790926325}
+ - component: {fileID: 790926328}
+ - component: {fileID: 790926327}
+ - component: {fileID: 790926326}
+ m_Layer: 0
+ m_Name: First Person Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &790926325
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ m_GameObject: {fileID: 790926324}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 268627365}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &790926326
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ m_GameObject: {fileID: 790926324}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
+--- !u!114 &790926327
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ m_GameObject: {fileID: 790926324}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Device: 0
+ m_PoseSource: 6
+ m_TrackingType: 0
+ m_UpdateType: 1
+ m_UseRelativeTransform: 1
+--- !u!20 &790926328
+Camera:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 60865845}
+ m_GameObject: {fileID: 790926324}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 2
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.05
+ far clip plane: 200
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
--- !u!1 &830847048
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs b/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs
index 13e00074..4374a483 100644
--- a/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs
+++ b/Assets/GoogleARCore/Examples/ComputerVision/Scripts/ComputerVisionController.cs
@@ -81,41 +81,41 @@ public class ComputerVisionController : MonoBehaviour
///
/// The frame rate update interval.
///
- private static float s_FrameRateUpdateInterval = 2.0f;
+ private static float _frameRateUpdateInterval = 2.0f;
///
/// A buffer that stores the result of performing edge detection on the camera image each
/// frame.
///
- private byte[] m_EdgeDetectionResultImage = null;
+ private byte[] _edgeDetectionResultImage = null;
///
/// Texture created from the result of running edge detection on the camera image bytes.
///
- private Texture2D m_EdgeDetectionBackgroundTexture = null;
+ private Texture2D _edgeDetectionBackgroundTexture = null;
///
/// These UVs are applied to the background material to crop and rotate
- /// 'm_EdgeDetectionBackgroundTexture' to match the aspect ratio and rotation of the device
+ /// '_edgeDetectionBackgroundTexture' to match the aspect ratio and rotation of the device
/// display.
///
- private DisplayUvCoords m_CameraImageToDisplayUvTransformation;
+ private DisplayUvCoords _cameraImageToDisplayUvTransformation;
- private ScreenOrientation? m_CachedOrientation = null;
- private Vector2 m_CachedScreenDimensions = Vector2.zero;
- private bool m_IsQuitting = false;
- private bool m_UseHighResCPUTexture = false;
- private ARCoreSession.OnChooseCameraConfigurationDelegate m_OnChoseCameraConfiguration =
+ private ScreenOrientation? _cachedOrientation = null;
+ private Vector2 _cachedScreenDimensions = Vector2.zero;
+ private bool _isQuitting = false;
+ private bool _useHighResCPUTexture = false;
+ private ARCoreSession.OnChooseCameraConfigurationDelegate _onChoseCameraConfiguration =
null;
- private int m_HighestResolutionConfigIndex = 0;
- private int m_LowestResolutionConfigIndex = 0;
- private bool m_Resolutioninitialized = false;
- private Text m_ImageTextureToggleText;
- private float m_RenderingFrameRate = 0f;
- private float m_RenderingFrameTime = 0f;
- private int m_FrameCounter = 0;
- private float m_FramePassedTime = 0.0f;
+ private int _highestResolutionConfigIndex = 0;
+ private int _lowestResolutionConfigIndex = 0;
+ private bool _resolutioninitialized = false;
+ private Text _imageTextureToggleText;
+ private float _renderingFrameRate = 0f;
+ private float _renderingFrameTime = 0f;
+ private int _frameCounter = 0;
+ private float _framePassedTime = 0.0f;
///
/// The Unity Awake() method.
@@ -133,9 +133,9 @@ public void Awake()
Application.targetFrameRate = 60;
// Register the callback to set camera config before arcore session is enabled.
- m_OnChoseCameraConfiguration = _ChooseCameraConfiguration;
+ _onChoseCameraConfiguration = ChooseCameraConfiguration;
ARSessionManager.RegisterChooseCameraConfigurationCallback(
- m_OnChoseCameraConfiguration);
+ _onChoseCameraConfiguration);
}
///
@@ -145,9 +145,9 @@ public void Start()
{
Screen.sleepTimeout = SleepTimeout.NeverSleep;
- ImageTextureToggle.OnPointClickDetected += _OnBackgroundClicked;
+ ImageTextureToggle.OnPointClickDetected += OnBackgroundClicked;
- m_ImageTextureToggleText = ImageTextureToggle.GetComponentInChildren();
+ _imageTextureToggleText = ImageTextureToggle.GetComponentInChildren();
#if UNITY_EDITOR
AutoFocusToggle.GetComponentInChildren().text += "\n(Not supported in editor)";
HighResConfigToggle.GetComponentInChildren().text +=
@@ -170,13 +170,13 @@ public void Update()
Application.Quit();
}
- _QuitOnConnectionErrors();
- _UpdateFrameRate();
+ QuitOnConnectionErrors();
+ UpdateFrameRate();
// Change the CPU resolution checkbox visibility.
LowResConfigToggle.gameObject.SetActive(EdgeDetectionBackgroundImage.enabled);
HighResConfigToggle.gameObject.SetActive(EdgeDetectionBackgroundImage.enabled);
- m_ImageTextureToggleText.text = EdgeDetectionBackgroundImage.enabled ?
+ _imageTextureToggleText.text = EdgeDetectionBackgroundImage.enabled ?
"Switch to GPU Texture" : "Switch to CPU Image";
if (!Session.Status.IsValid())
@@ -191,7 +191,7 @@ public void Update()
return;
}
- _OnImageAvailable(image.Width, image.Height, image.YRowStride, image.Y, 0);
+ OnImageAvailable(image.Width, image.Height, image.YRowStride, image.Y, 0);
}
var cameraIntrinsics = EdgeDetectionBackgroundImage.enabled
@@ -199,7 +199,7 @@ public void Update()
string intrinsicsType =
EdgeDetectionBackgroundImage.enabled ? "CPU Image" : "GPU Texture";
CameraIntrinsicsOutput.text =
- _CameraIntrinsicsToString(cameraIntrinsics, intrinsicsType);
+ CameraIntrinsicsToString(cameraIntrinsics, intrinsicsType);
}
///
@@ -208,7 +208,7 @@ public void Update()
/// The new value for the checkbox.
public void OnLowResolutionCheckboxValueChanged(bool newValue)
{
- m_UseHighResCPUTexture = !newValue;
+ _useHighResCPUTexture = !newValue;
HighResConfigToggle.isOn = !newValue;
// Pause and resume the ARCore session to apply the camera configuration.
@@ -222,7 +222,7 @@ public void OnLowResolutionCheckboxValueChanged(bool newValue)
/// The new value for the checkbox.
public void OnHighResolutionCheckboxValueChanged(bool newValue)
{
- m_UseHighResCPUTexture = newValue;
+ _useHighResCPUTexture = newValue;
LowResConfigToggle.isOn = !newValue;
// Pause and resume the ARCore session to apply the camera configuration.
@@ -247,21 +247,21 @@ public void OnAutoFocusCheckboxValueChanged(bool autoFocusEnabled)
///
/// Function get called when the background image got clicked.
///
- private void _OnBackgroundClicked()
+ private void OnBackgroundClicked()
{
EdgeDetectionBackgroundImage.enabled = !EdgeDetectionBackgroundImage.enabled;
}
- private void _UpdateFrameRate()
+ private void UpdateFrameRate()
{
- m_FrameCounter++;
- m_FramePassedTime += Time.deltaTime;
- if (m_FramePassedTime > s_FrameRateUpdateInterval)
+ _frameCounter++;
+ _framePassedTime += Time.deltaTime;
+ if (_framePassedTime > _frameRateUpdateInterval)
{
- m_RenderingFrameTime = 1000 * m_FramePassedTime / m_FrameCounter;
- m_RenderingFrameRate = 1000 / m_RenderingFrameTime;
- m_FramePassedTime = 0f;
- m_FrameCounter = 0;
+ _renderingFrameTime = 1000 * _framePassedTime / _frameCounter;
+ _renderingFrameRate = 1000 / _renderingFrameTime;
+ _framePassedTime = 0f;
+ _frameCounter = 0;
}
}
@@ -273,7 +273,7 @@ private void _UpdateFrameRate()
/// Row stride of the image, in pixels.
/// Pointer to raw image buffer.
/// The size of the image buffer, in bytes.
- private void _OnImageAvailable(
+ private void OnImageAvailable(
int width, int height, int rowStride, IntPtr pixelBuffer, int bufferSize)
{
if (!EdgeDetectionBackgroundImage.enabled)
@@ -281,57 +281,57 @@ private void _OnImageAvailable(
return;
}
- if (m_EdgeDetectionBackgroundTexture == null ||
- m_EdgeDetectionResultImage == null ||
- m_EdgeDetectionBackgroundTexture.width != width ||
- m_EdgeDetectionBackgroundTexture.height != height)
+ if (_edgeDetectionBackgroundTexture == null ||
+ _edgeDetectionResultImage == null ||
+ _edgeDetectionBackgroundTexture.width != width ||
+ _edgeDetectionBackgroundTexture.height != height)
{
- m_EdgeDetectionBackgroundTexture =
+ _edgeDetectionBackgroundTexture =
new Texture2D(width, height, TextureFormat.R8, false, false);
- m_EdgeDetectionResultImage = new byte[width * height];
- m_CameraImageToDisplayUvTransformation = Frame.CameraImage.ImageDisplayUvs;
+ _edgeDetectionResultImage = new byte[width * height];
+ _cameraImageToDisplayUvTransformation = Frame.CameraImage.ImageDisplayUvs;
}
- if (m_CachedOrientation != Screen.orientation ||
- m_CachedScreenDimensions.x != Screen.width ||
- m_CachedScreenDimensions.y != Screen.height)
+ if (_cachedOrientation != Screen.orientation ||
+ _cachedScreenDimensions.x != Screen.width ||
+ _cachedScreenDimensions.y != Screen.height)
{
- m_CameraImageToDisplayUvTransformation = Frame.CameraImage.ImageDisplayUvs;
- m_CachedOrientation = Screen.orientation;
- m_CachedScreenDimensions = new Vector2(Screen.width, Screen.height);
+ _cameraImageToDisplayUvTransformation = Frame.CameraImage.ImageDisplayUvs;
+ _cachedOrientation = Screen.orientation;
+ _cachedScreenDimensions = new Vector2(Screen.width, Screen.height);
}
// Detect edges within the image.
if (EdgeDetector.Detect(
- m_EdgeDetectionResultImage, pixelBuffer, width, height, rowStride))
+ _edgeDetectionResultImage, pixelBuffer, width, height, rowStride))
{
// Update the rendering texture with the edge image.
- m_EdgeDetectionBackgroundTexture.LoadRawTextureData(m_EdgeDetectionResultImage);
- m_EdgeDetectionBackgroundTexture.Apply();
+ _edgeDetectionBackgroundTexture.LoadRawTextureData(_edgeDetectionResultImage);
+ _edgeDetectionBackgroundTexture.Apply();
EdgeDetectionBackgroundImage.material.SetTexture(
- "_ImageTex", m_EdgeDetectionBackgroundTexture);
+ "_ImageTex", _edgeDetectionBackgroundTexture);
const string TOP_LEFT_RIGHT = "_UvTopLeftRight";
const string BOTTOM_LEFT_RIGHT = "_UvBottomLeftRight";
EdgeDetectionBackgroundImage.material.SetVector(TOP_LEFT_RIGHT, new Vector4(
- m_CameraImageToDisplayUvTransformation.TopLeft.x,
- m_CameraImageToDisplayUvTransformation.TopLeft.y,
- m_CameraImageToDisplayUvTransformation.TopRight.x,
- m_CameraImageToDisplayUvTransformation.TopRight.y));
+ _cameraImageToDisplayUvTransformation.TopLeft.x,
+ _cameraImageToDisplayUvTransformation.TopLeft.y,
+ _cameraImageToDisplayUvTransformation.TopRight.x,
+ _cameraImageToDisplayUvTransformation.TopRight.y));
EdgeDetectionBackgroundImage.material.SetVector(BOTTOM_LEFT_RIGHT, new Vector4(
- m_CameraImageToDisplayUvTransformation.BottomLeft.x,
- m_CameraImageToDisplayUvTransformation.BottomLeft.y,
- m_CameraImageToDisplayUvTransformation.BottomRight.x,
- m_CameraImageToDisplayUvTransformation.BottomRight.y));
+ _cameraImageToDisplayUvTransformation.BottomLeft.x,
+ _cameraImageToDisplayUvTransformation.BottomLeft.y,
+ _cameraImageToDisplayUvTransformation.BottomRight.x,
+ _cameraImageToDisplayUvTransformation.BottomRight.y));
}
}
///
/// Quit the application if there was a connection error for the ARCore session.
///
- private void _QuitOnConnectionErrors()
+ private void QuitOnConnectionErrors()
{
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
@@ -340,16 +340,16 @@ private void _QuitOnConnectionErrors()
// appear.
if (Session.Status == SessionStatus.ErrorPermissionNotGranted)
{
- _ShowAndroidToastMessage("Camera permission is needed to run this application.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ ShowAndroidToastMessage("Camera permission is needed to run this application.");
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
else if (Session.Status == SessionStatus.FatalError)
{
- _ShowAndroidToastMessage(
+ ShowAndroidToastMessage(
"ARCore encountered a problem connecting. Please start the app again.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
}
@@ -357,7 +357,7 @@ private void _QuitOnConnectionErrors()
/// Show an Android toast message.
///
/// Message string to show in the toast.
- private void _ShowAndroidToastMessage(string message)
+ private void ShowAndroidToastMessage(string message)
{
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity =
@@ -379,7 +379,7 @@ private void _ShowAndroidToastMessage(string message)
///
/// Actually quit the application.
///
- private void _DoQuit()
+ private void DoQuit()
{
Application.Quit();
}
@@ -391,16 +391,16 @@ private void _DoQuit()
/// The string that describe the type of the
/// intrinsics.
/// The generated string.
- private string _CameraIntrinsicsToString(CameraIntrinsics intrinsics, string intrinsicsType)
+ private string CameraIntrinsicsToString(CameraIntrinsics intrinsics, string intrinsicsType)
{
float fovX = 2.0f * Mathf.Rad2Deg * Mathf.Atan2(
intrinsics.ImageDimensions.x, 2 * intrinsics.FocalLength.x);
float fovY = 2.0f * Mathf.Rad2Deg * Mathf.Atan2(
intrinsics.ImageDimensions.y, 2 * intrinsics.FocalLength.y);
- string frameRateTime = m_RenderingFrameRate < 1 ? "Calculating..." :
- string.Format("{0}ms ({1}fps)", m_RenderingFrameTime.ToString("0.0"),
- m_RenderingFrameRate.ToString("0.0"));
+ string frameRateTime = _renderingFrameRate < 1 ? "Calculating..." :
+ string.Format("{0}ms ({1}fps)", _renderingFrameTime.ToString("0.0"),
+ _renderingFrameRate.ToString("0.0"));
string message = string.Format(
"Unrotated Camera {4} Intrinsics:{0} Focal Length: {1}{0} " +
@@ -423,12 +423,12 @@ private string _CameraIntrinsicsToString(CameraIntrinsics intrinsics, string int
/// A list of all supported camera
/// configuration.
/// The desired configuration index.
- private int _ChooseCameraConfiguration(List supportedConfigurations)
+ private int ChooseCameraConfiguration(List supportedConfigurations)
{
- if (!m_Resolutioninitialized)
+ if (!_resolutioninitialized)
{
- m_HighestResolutionConfigIndex = 0;
- m_LowestResolutionConfigIndex = 0;
+ _highestResolutionConfigIndex = 0;
+ _lowestResolutionConfigIndex = 0;
CameraConfig maximalConfig = supportedConfigurations[0];
CameraConfig minimalConfig = supportedConfigurations[0];
for (int index = 1; index < supportedConfigurations.Count; index++)
@@ -440,7 +440,7 @@ private int _ChooseCameraConfiguration(List supportedConfiguration
config.ImageSize.y == maximalConfig.ImageSize.y &&
config.MaxFPS > maximalConfig.MaxFPS))
{
- m_HighestResolutionConfigIndex = index;
+ _highestResolutionConfigIndex = index;
maximalConfig = config;
}
@@ -450,7 +450,7 @@ private int _ChooseCameraConfiguration(List supportedConfiguration
config.ImageSize.y == minimalConfig.ImageSize.y &&
config.MaxFPS > minimalConfig.MaxFPS))
{
- m_LowestResolutionConfigIndex = index;
+ _lowestResolutionConfigIndex = index;
minimalConfig = config;
}
}
@@ -465,15 +465,15 @@ private int _ChooseCameraConfiguration(List supportedConfiguration
"Depth Sensor Usage: {4}",
maximalConfig.ImageSize.x, maximalConfig.ImageSize.y,
maximalConfig.MinFPS, maximalConfig.MaxFPS, maximalConfig.DepthSensorUsage);
- m_Resolutioninitialized = true;
+ _resolutioninitialized = true;
}
- if (m_UseHighResCPUTexture)
+ if (_useHighResCPUTexture)
{
- return m_HighestResolutionConfigIndex;
+ return _highestResolutionConfigIndex;
}
- return m_LowestResolutionConfigIndex;
+ return _lowestResolutionConfigIndex;
}
}
}
diff --git a/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs b/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs
index b28d094c..d827ba46 100644
--- a/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs
+++ b/Assets/GoogleARCore/Examples/ComputerVision/Scripts/EdgeDetector.cs
@@ -27,8 +27,8 @@ namespace GoogleARCore.Examples.ComputerVision
///
public class EdgeDetector
{
- private static byte[] s_ImageBuffer = new byte[0];
- private static int s_ImageBufferSize = 0;
+ private static byte[] _imageBuffer = new byte[0];
+ private static int _imageBufferSize = 0;
///
/// Detects edges from input grayscale image.
@@ -58,14 +58,14 @@ private static void Sobel(
{
// Adjust buffer size if necessary.
int bufferSize = rowStride * height;
- if (bufferSize != s_ImageBufferSize || s_ImageBuffer.Length == 0)
+ if (bufferSize != _imageBufferSize || _imageBuffer.Length == 0)
{
- s_ImageBufferSize = bufferSize;
- s_ImageBuffer = new byte[bufferSize];
+ _imageBufferSize = bufferSize;
+ _imageBuffer = new byte[bufferSize];
}
// Move raw data into managed buffer.
- System.Runtime.InteropServices.Marshal.Copy(inputImage, s_ImageBuffer, 0, bufferSize);
+ System.Runtime.InteropServices.Marshal.Copy(inputImage, _imageBuffer, 0, bufferSize);
// Detect edges.
int threshold = 128 * 128;
@@ -78,14 +78,14 @@ private static void Sobel(
int offset = (j * rowStride) + i;
// Neighbour pixels around the pixel at [i, j].
- int a00 = s_ImageBuffer[offset - rowStride - 1];
- int a01 = s_ImageBuffer[offset - rowStride];
- int a02 = s_ImageBuffer[offset - rowStride + 1];
- int a10 = s_ImageBuffer[offset - 1];
- int a12 = s_ImageBuffer[offset + 1];
- int a20 = s_ImageBuffer[offset + rowStride - 1];
- int a21 = s_ImageBuffer[offset + rowStride];
- int a22 = s_ImageBuffer[offset + rowStride + 1];
+ int a00 = _imageBuffer[offset - rowStride - 1];
+ int a01 = _imageBuffer[offset - rowStride];
+ int a02 = _imageBuffer[offset - rowStride + 1];
+ int a10 = _imageBuffer[offset - 1];
+ int a12 = _imageBuffer[offset + 1];
+ int a20 = _imageBuffer[offset + rowStride - 1];
+ int a21 = _imageBuffer[offset + rowStride];
+ int a22 = _imageBuffer[offset + rowStride + 1];
// Sobel X filter:
// -1, 0, 1,
diff --git a/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs b/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs
index 206153d2..67dc1beb 100644
--- a/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs
+++ b/Assets/GoogleARCore/Examples/ComputerVision/Scripts/TextureReader.cs
@@ -31,12 +31,12 @@ public class TextureReader : MonoBehaviour
///
/// Output image width, in pixels.
///
- public int ImageWidth = k_ARCoreTextureWidth;
+ public int ImageWidth = _arCoreTextureWidth;
///
/// Output image height, in pixels.
///
- public int ImageHeight = k_ARCoreTextureHeight;
+ public int ImageHeight = _arCoreTextureHeight;
///
/// Output image sampling option.
@@ -49,14 +49,14 @@ public class TextureReader : MonoBehaviour
public TextureReaderApi.ImageFormatType ImageFormat =
TextureReaderApi.ImageFormatType.ImageFormatGrayscale;
- private const int k_ARCoreTextureWidth = 1920;
- private const int k_ARCoreTextureHeight = 1080;
+ private const int _arCoreTextureWidth = 1920;
+ private const int _arCoreTextureHeight = 1080;
- private TextureReaderApi m_TextureReaderApi = null;
+ private TextureReaderApi _textureReaderApi = null;
- private CommandType m_Command = CommandType.None;
+ private CommandType _command = CommandType.None;
- private int m_ImageBufferIndex = -1;
+ private int _imageBufferIndex = -1;
///
/// Callback function type for receiving the output images.
@@ -107,11 +107,11 @@ private enum CommandType
///
public void Start()
{
- if (m_TextureReaderApi == null)
+ if (_textureReaderApi == null)
{
- m_TextureReaderApi = new TextureReaderApi();
- m_Command = CommandType.Create;
- m_ImageBufferIndex = -1;
+ _textureReaderApi = new TextureReaderApi();
+ _command = CommandType.Create;
+ _imageBufferIndex = -1;
}
}
@@ -120,7 +120,7 @@ public void Start()
///
public void Apply()
{
- m_Command = CommandType.Reset;
+ _command = CommandType.Reset;
}
///
@@ -134,11 +134,11 @@ public void Update()
}
// Process command.
- switch (m_Command)
+ switch (_command)
{
case CommandType.Create:
{
- m_TextureReaderApi.Create(
+ _textureReaderApi.Create(
ImageFormat, ImageWidth, ImageHeight,
ImageSampleMode == SampleMode.KeepAspectRatio);
break;
@@ -146,31 +146,31 @@ public void Update()
case CommandType.Reset:
{
- m_TextureReaderApi.ReleaseFrame(m_ImageBufferIndex);
- m_TextureReaderApi.Destroy();
- m_TextureReaderApi.Create(
+ _textureReaderApi.ReleaseFrame(_imageBufferIndex);
+ _textureReaderApi.Destroy();
+ _textureReaderApi.Create(
ImageFormat, ImageWidth, ImageHeight,
ImageSampleMode == SampleMode.KeepAspectRatio);
- m_ImageBufferIndex = -1;
+ _imageBufferIndex = -1;
break;
}
case CommandType.ReleasePreviousBuffer:
{
// Clear previously used buffer, and submits a new request.
- m_TextureReaderApi.ReleaseFrame(m_ImageBufferIndex);
- m_ImageBufferIndex = -1;
+ _textureReaderApi.ReleaseFrame(_imageBufferIndex);
+ _imageBufferIndex = -1;
break;
}
case CommandType.ProcessNextFrame:
{
- if (m_ImageBufferIndex >= 0)
+ if (_imageBufferIndex >= 0)
{
// Get image pixels from previously submitted request.
int bufferSize = 0;
IntPtr pixelBuffer =
- m_TextureReaderApi.AcquireFrame(m_ImageBufferIndex, ref bufferSize);
+ _textureReaderApi.AcquireFrame(_imageBufferIndex, ref bufferSize);
if (pixelBuffer != IntPtr.Zero && OnImageAvailableCallback != null)
{
@@ -179,7 +179,7 @@ public void Update()
}
// Release the texture reader internal buffer.
- m_TextureReaderApi.ReleaseFrame(m_ImageBufferIndex);
+ _textureReaderApi.ReleaseFrame(_imageBufferIndex);
}
break;
@@ -194,12 +194,12 @@ public void Update()
if (Frame.CameraImage.Texture != null)
{
int textureId = Frame.CameraImage.Texture.GetNativeTexturePtr().ToInt32();
- m_ImageBufferIndex = m_TextureReaderApi.SubmitFrame(
- textureId, k_ARCoreTextureWidth, k_ARCoreTextureHeight);
+ _imageBufferIndex = _textureReaderApi.SubmitFrame(
+ textureId, _arCoreTextureWidth, _arCoreTextureHeight);
}
// Set next command.
- m_Command = CommandType.ProcessNextFrame;
+ _command = CommandType.ProcessNextFrame;
}
///
@@ -207,10 +207,10 @@ public void Update()
///
private void OnDestroy()
{
- if (m_TextureReaderApi != null)
+ if (_textureReaderApi != null)
{
- m_TextureReaderApi.Destroy();
- m_TextureReaderApi = null;
+ _textureReaderApi.Destroy();
+ _textureReaderApi = null;
}
}
@@ -220,7 +220,7 @@ private void OnDestroy()
private void OnDisable()
{
// Force to release previously used buffer.
- m_Command = CommandType.ReleasePreviousBuffer;
+ _command = CommandType.ReleasePreviousBuffer;
}
}
}
diff --git a/Assets/GoogleARCore/Examples/HelloAR/HelloARSessionConfig.asset b/Assets/GoogleARCore/Examples/HelloAR/HelloARSessionConfig.asset
index f9b8311f..567e2c75 100644
--- a/Assets/GoogleARCore/Examples/HelloAR/HelloARSessionConfig.asset
+++ b/Assets/GoogleARCore/Examples/HelloAR/HelloARSessionConfig.asset
@@ -19,3 +19,4 @@ MonoBehaviour:
CameraFocusMode: 1
AugmentedFaceMode: 0
DepthMode: 1
+ InstantPlacementMode: 0
diff --git a/Assets/GoogleARCore/Examples/HelloAR/Scenes/HelloAR.unity b/Assets/GoogleARCore/Examples/HelloAR/Scenes/HelloAR.unity
index 51cbe453..cc764e80 100644
--- a/Assets/GoogleARCore/Examples/HelloAR/Scenes/HelloAR.unity
+++ b/Assets/GoogleARCore/Examples/HelloAR/Scenes/HelloAR.unity
@@ -113,39 +113,74 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
---- !u!1 &33178951
+--- !u!1 &29144151
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1026997606374626, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1995114164396524, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
- m_PrefabInternal: {fileID: 688001843}
+ m_PrefabInternal: {fileID: 1394164186}
serializedVersion: 5
m_Component:
- - component: {fileID: 33178952}
- - component: {fileID: 800275910}
+ - component: {fileID: 29144153}
+ - component: {fileID: 29144152}
m_Layer: 0
- m_Name: PlaneDiscovery
+ m_Name: Directional light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &33178952
+ m_IsActive: 0
+--- !u!108 &29144152
+Light:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 108886784190946772, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1394164186}
+ m_GameObject: {fileID: 29144151}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 1
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.3
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &29144153
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4430574757597842, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 4926315969036930, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 33178951}
+ m_PrefabInternal: {fileID: 1394164186}
+ m_GameObject: {fileID: 29144151}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 206329396}
- - {fileID: 1936303614}
- m_Father: {fileID: 0}
- m_RootOrder: 6
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_Children: []
+ m_Father: {fileID: 955589039}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
--- !u!1 &53379603
GameObject:
m_ObjectHideFlags: 0
@@ -193,6 +228,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
OcclusionShader: {fileID: 4800000, guid: 03006dde43e7f48eeae0f4fb17f43c7e, type: 3}
+ DepthMenu: {fileID: 1415240871}
BlurSize: 20
BlurDownsample: 2
OcclusionTransparency: 1
@@ -266,84 +302,6 @@ Camera:
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
---- !u!1 &145471881
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1096507120819496, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 145471882}
- - component: {fileID: 145471884}
- - component: {fileID: 145471883}
- m_Layer: 5
- m_Name: Text
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &145471882
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224045560955471334, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 145471881}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 736313404}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &145471883
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114716270761809112, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 145471881}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.15806337, g: 0.4309361, b: 0.9056604, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 50
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 5
- m_MaxSize: 60
- m_Alignment: 4
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: OPEN
---- !u!222 &145471884
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222014794675779164, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 145471881}
--- !u!1001 &150429108
Prefab:
m_ObjectHideFlags: 0
@@ -393,7 +351,7 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
- m_RootGameObject: {fileID: 816398299}
+ m_RootGameObject: {fileID: 840977562}
m_IsPrefabParent: 0
--- !u!1 &152492292
GameObject:
@@ -548,107 +506,6 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &206329395
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1132834895103378, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 206329396}
- - component: {fileID: 206329399}
- - component: {fileID: 206329398}
- - component: {fileID: 206329397}
- m_Layer: 5
- m_Name: Canvas
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &206329396
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224798383043448138, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 206329395}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0, y: 0, z: 0}
- m_Children:
- - {fileID: 748412745}
- - {fileID: 1948445449}
- - {fileID: 364130652}
- m_Father: {fileID: 33178952}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0, y: 0}
---- !u!114 &206329397
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114163356861035466, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 206329395}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreReversedGraphics: 1
- m_BlockingObjects: 0
- m_BlockingMask:
- serializedVersion: 2
- m_Bits: 4294967295
---- !u!114 &206329398
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114898409539304540, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 206329395}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_UiScaleMode: 1
- m_ReferencePixelsPerUnit: 100
- m_ScaleFactor: 1
- m_ReferenceResolution: {x: 800, y: 600}
- m_ScreenMatchMode: 0
- m_MatchWidthOrHeight: 0.5
- m_PhysicalUnit: 3
- m_FallbackScreenDPI: 96
- m_DefaultSpriteDPI: 96
- m_DynamicPixelsPerUnit: 1
---- !u!223 &206329399
-Canvas:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 223986510026342770, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 206329395}
- m_Enabled: 1
- serializedVersion: 3
- m_RenderMode: 0
- m_Camera: {fileID: 0}
- m_PlaneDistance: 100
- m_PixelPerfect: 0
- m_ReceivesEvents: 1
- m_OverrideSorting: 0
- m_OverridePixelPerfect: 0
- m_SortingBucketNormalizedSize: 0
- m_AdditionalShaderChannelsFlag: 0
- m_SortingLayerID: 0
- m_SortingOrder: 1
- m_TargetDisplay: 0
--- !u!1 &242180760
GameObject:
m_ObjectHideFlags: 0
@@ -803,132 +660,56 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 264318186}
---- !u!1 &299489519
+--- !u!1 &332451068
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1520766987342560, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- - component: {fileID: 299489520}
- - component: {fileID: 299489522}
- - component: {fileID: 299489521}
+ - component: {fileID: 332451069}
+ - component: {fileID: 332451070}
+ - component: {fileID: 332451071}
m_Layer: 5
- m_Name: Contents
+ m_Name: Label
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &299489520
+--- !u!224 &332451069
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224606223855309774, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 299489519}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 332451068}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
- m_Children:
- - {fileID: 496192902}
- - {fileID: 1937793033}
- - {fileID: 1844707689}
- - {fileID: 427370419}
- m_Father: {fileID: 748412745}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1593632912}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0.5}
- m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 733, y: 1100}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 400, y: 0}
+ m_SizeDelta: {x: 555, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &299489521
+--- !u!222 &332451070
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 332451068}
+--- !u!114 &332451071
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114499232208719540, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 299489519}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 332451068}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 21300000, guid: 209563986116240d6aaec5a6fb7786a7, type: 3}
- m_Type: 0
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &299489522
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222736752331366234, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 299489519}
---- !u!1 &332451068
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 332451069}
- - component: {fileID: 332451070}
- - component: {fileID: 332451071}
- m_Layer: 5
- m_Name: Label
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &332451069
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 332451068}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1593632912}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 400, y: 0}
- m_SizeDelta: {x: 555, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!222 &332451070
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 332451068}
---- !u!114 &332451071
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 332451068}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -953,108 +734,57 @@ MonoBehaviour:
m_VerticalOverflow: 0
m_LineSpacing: 1
m_Text: Enable depth
---- !u!1 &364130651
+--- !u!1 &412601019
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1134799989617770, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1520766987342560, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
serializedVersion: 5
m_Component:
- - component: {fileID: 364130652}
- - component: {fileID: 364130655}
- - component: {fileID: 364130656}
- - component: {fileID: 364130654}
- - component: {fileID: 364130653}
+ - component: {fileID: 412601020}
+ - component: {fileID: 412601022}
+ - component: {fileID: 412601021}
m_Layer: 5
- m_Name: Hand Animation
+ m_Name: Contents
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &364130652
+--- !u!224 &412601020
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224276631466487834, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224606223855309774, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 364130651}
+ m_GameObject: {fileID: 412601019}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1.0999999, y: 1.0999999, z: 1.0999999}
- m_Children: []
- m_Father: {fileID: 206329396}
- m_RootOrder: 2
+ m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+ m_Children:
+ - {fileID: 755086855}
+ - {fileID: 1270619584}
+ - {fileID: 742124853}
+ - {fileID: 1807210252}
+ m_Father: {fileID: 1087139837}
+ m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 250, y: 250}
+ m_SizeDelta: {x: 733, y: 1100}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &364130653
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114198791628043326, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: c46dafe9f93ea4a638b8f23c38039c63, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- RawImage: {fileID: 364130656}
- VideoPlayer: {fileID: 364130654}
---- !u!328 &364130654
-VideoPlayer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 328931233274937060, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- m_VideoClip: {fileID: 32900000, guid: 9070914d75707431c8ebef8b92960dda, type: 3}
- m_TargetCameraAlpha: 1
- m_TargetCamera3DLayout: 0
- m_TargetCamera: {fileID: 0}
- m_TargetTexture: {fileID: 8400000, guid: 4969ba0220e83c94a926ea4264cdff4a, type: 2}
- m_TimeReference: 0
- m_TargetMaterialRenderer: {fileID: 0}
- m_TargetMaterialProperty: _MainTex
- m_RenderMode: 4
- m_AspectRatio: 2
- m_DataSource: 0
- m_PlaybackSpeed: 1
- m_AudioOutputMode: 0
- m_TargetAudioSources: []
- m_DirectAudioVolumes: []
- m_Url:
- m_EnabledAudioTracks:
- m_DirectAudioMutes:
- m_ControlledAudioTrackCount: 0
- m_PlayOnAwake: 1
- m_SkipOnDrop: 1
- m_Looping: 1
- m_WaitForFirstFrame: 1
- m_FrameReadyEventEnabled: 0
---- !u!222 &364130655
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222653202546379244, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 364130651}
---- !u!114 &364130656
+--- !u!114 &412601021
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114376072597821902, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114499232208719540, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 364130651}
+ m_GameObject: {fileID: 412601019}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -1065,129 +795,116 @@ MonoBehaviour:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Texture: {fileID: 2800000, guid: 58f32fb24e9e04466845025d41f60e05, type: 3}
- m_UVRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
---- !u!1 &427370415
+ m_Sprite: {fileID: 21300000, guid: 209563986116240d6aaec5a6fb7786a7, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &412601022
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222736752331366234, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 412601019}
+--- !u!1 &459559558
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1521944159913020, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1947850325268790, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
serializedVersion: 5
m_Component:
- - component: {fileID: 427370419}
- - component: {fileID: 427370418}
- - component: {fileID: 427370417}
- - component: {fileID: 427370416}
- m_Layer: 5
- m_Name: Got It Button
+ - component: {fileID: 459559559}
+ - component: {fileID: 459559562}
+ - component: {fileID: 459559561}
+ - component: {fileID: 459559560}
+ m_Layer: 0
+ m_Name: Discovery Point Cloud
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &427370416
-MonoBehaviour:
+--- !u!4 &459559559
+Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114278378996577766, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 4522253342955840, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 427370415}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_SelectOnUp: {fileID: 0}
- m_SelectOnDown: {fileID: 0}
- m_SelectOnLeft: {fileID: 0}
- m_SelectOnRight: {fileID: 0}
- m_Transition: 1
- m_Colors:
- m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
- m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
- m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
- m_ColorMultiplier: 1
- m_FadeDuration: 0.1
- m_SpriteState:
- m_HighlightedSprite: {fileID: 0}
- m_PressedSprite: {fileID: 0}
- m_DisabledSprite: {fileID: 0}
- m_AnimationTriggers:
- m_NormalTrigger: Normal
- m_HighlightedTrigger: Highlighted
- m_PressedTrigger: Pressed
- m_DisabledTrigger: Disabled
- m_Interactable: 1
- m_TargetGraphic: {fileID: 427370417}
- m_OnClick:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
- Culture=neutral, PublicKeyToken=null
---- !u!114 &427370417
+ m_GameObject: {fileID: 459559558}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 947158426}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &459559560
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114269874898406420, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114677467912739828, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 427370415}
+ m_GameObject: {fileID: 459559558}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.2783019, g: 0.5949654, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &427370418
-CanvasRenderer:
+ PointColor: {r: 1, g: 1, b: 1, a: 0}
+ EnablePopAnimation: 1
+ MaxPointsToAddPerFrame: 1
+ AnimationDuration: 0.3
+ _maxPointCount: 1000
+ _defaultSize: 10
+ _popSize: 50
+--- !u!23 &459559561
+MeshRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222700447477476392, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 23202741898937940, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 427370415}
---- !u!224 &427370419
-RectTransform:
+ m_GameObject: {fileID: 459559558}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_Materials:
+ - {fileID: 2100000, guid: fb4fbd1b92e244df2bc6f43deb7a57a2, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 1
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &459559562
+MeshFilter:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224815438004130162, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 33799012446163236, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 427370415}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1558930686}
- m_Father: {fileID: 299489520}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 1, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: -180, y: 111}
- m_SizeDelta: {x: 230, y: 95}
- m_Pivot: {x: 0.5, y: 0.5}
+ m_GameObject: {fileID: 459559558}
+ m_Mesh: {fileID: 0}
--- !u!1 &471504155
GameObject:
m_ObjectHideFlags: 0
@@ -1262,78 +979,6 @@ RectTransform:
m_AnchoredPosition: {x: 400, y: 0}
m_SizeDelta: {x: 555, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &496192901
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1806357083306936, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 496192902}
- - component: {fileID: 496192904}
- - component: {fileID: 496192903}
- m_Layer: 5
- m_Name: Image
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &496192902
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224433948575544804, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 496192901}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 299489520}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -0.5, y: -158.89001}
- m_SizeDelta: {x: -23, y: 295}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &496192903
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114407642807697180, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 496192901}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 21300000, guid: a41c8e3a2c8914604bc66103fad54c24, type: 3}
- m_Type: 0
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &496192904
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222989402194974608, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 496192901}
--- !u!1 &627916101
GameObject:
m_ObjectHideFlags: 0
@@ -1382,6 +1027,84 @@ MonoBehaviour:
type: 2}
GameObjectPointPrefab: {fileID: 1513252861858756, guid: 8b604092cbb3d482da82845b61a6809b,
type: 2}
+--- !u!1 &629689609
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1254139920877974, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 629689610}
+ - component: {fileID: 629689611}
+ - component: {fileID: 629689612}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &629689610
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224596816357008206, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 629689609}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1186565320}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 0, y: 0.5}
+ m_AnchoredPosition: {x: 80, y: 0}
+ m_SizeDelta: {x: 1472.2, y: 100}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &629689611
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222876762692622444, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 629689609}
+--- !u!114 &629689612
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114675208815321770, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 629689609}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 46
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 0
+ m_MaxSize: 72
+ m_Alignment: 3
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "Searching for surfaces\u2026"
--- !u!1001 &688001843
Prefab:
m_ObjectHideFlags: 0
@@ -1423,7 +1146,7 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c539aa4fa1bac4b4da61761b0699b48b, type: 2}
- m_RootGameObject: {fileID: 33178951}
+ m_RootGameObject: {fileID: 947158425}
m_IsPrefabParent: 0
--- !u!1 &694941839
GameObject:
@@ -1465,76 +1188,7 @@ MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 694941839}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 21300000, guid: 79643bf935734452481be24a351a96ff, type: 3}
- m_Type: 0
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &694941842
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 694941839}
---- !u!1 &725826669
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 725826670}
- - component: {fileID: 725826672}
- - component: {fileID: 725826671}
- m_Layer: 5
- m_Name: Background
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &725826670
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 725826669}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1703534986}
- m_Father: {fileID: 1593632912}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0.5}
- m_AnchorMax: {x: 0, y: 0.5}
- m_AnchoredPosition: {x: 60, y: 0}
- m_SizeDelta: {x: 75, y: 75}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &725826671
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 725826669}
+ m_GameObject: {fileID: 694941839}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
@@ -1548,110 +1202,64 @@ MonoBehaviour:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
+ m_Sprite: {fileID: 21300000, guid: 79643bf935734452481be24a351a96ff, type: 3}
+ m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
---- !u!222 &725826672
+--- !u!222 &694941842
CanvasRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 725826669}
---- !u!1 &736313403
+ m_GameObject: {fileID: 694941839}
+--- !u!1 &725826669
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1620356295715200, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- - component: {fileID: 736313404}
- - component: {fileID: 736313407}
- - component: {fileID: 736313406}
- - component: {fileID: 736313405}
+ - component: {fileID: 725826670}
+ - component: {fileID: 725826672}
+ - component: {fileID: 725826671}
m_Layer: 5
- m_Name: Open Button
+ m_Name: Background
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &736313404
+ m_IsActive: 1
+--- !u!224 &725826670
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224429972709744798, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 736313403}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 725826669}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.94280225, y: 0.94280225, z: 0.94280225}
+ m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 145471882}
- m_Father: {fileID: 1948445449}
- m_RootOrder: 1
+ - {fileID: 1703534986}
+ m_Father: {fileID: 1593632912}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 1, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: -151, y: 82}
- m_SizeDelta: {x: 303.3, y: 113.7}
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 0, y: 0.5}
+ m_AnchoredPosition: {x: 60, y: 0}
+ m_SizeDelta: {x: 75, y: 75}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &736313405
+--- !u!114 &725826671
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114628222162657684, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 736313403}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 725826669}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_SelectOnUp: {fileID: 0}
- m_SelectOnDown: {fileID: 0}
- m_SelectOnLeft: {fileID: 0}
- m_SelectOnRight: {fileID: 0}
- m_Transition: 1
- m_Colors:
- m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
- m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
- m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
- m_ColorMultiplier: 1
- m_FadeDuration: 0.1
- m_SpriteState:
- m_HighlightedSprite: {fileID: 0}
- m_PressedSprite: {fileID: 0}
- m_DisabledSprite: {fileID: 0}
- m_AnimationTriggers:
- m_NormalTrigger: Normal
- m_HighlightedTrigger: Highlighted
- m_PressedTrigger: Pressed
- m_DisabledTrigger: Disabled
- m_Interactable: 1
- m_TargetGraphic: {fileID: 736313406}
- m_OnClick:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
- Culture=neutral, PublicKeyToken=null
---- !u!114 &736313406
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114079631928349614, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 736313403}
- m_Enabled: 0
- m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
@@ -1671,13 +1279,12 @@ MonoBehaviour:
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
---- !u!222 &736313407
+--- !u!222 &725826672
CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222612501244681524, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 736313403}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 725826669}
--- !u!1 &739323644
GameObject:
m_ObjectHideFlags: 0
@@ -1756,43 +1363,160 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 739323644}
---- !u!1 &748412744
+--- !u!1 &742124852
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1841743570407438, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1131732715277368, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
serializedVersion: 5
m_Component:
- - component: {fileID: 748412745}
+ - component: {fileID: 742124853}
+ - component: {fileID: 742124855}
+ - component: {fileID: 742124854}
m_Layer: 5
- m_Name: More Help Window
+ m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &748412745
+ m_IsActive: 1
+--- !u!224 &742124853
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224688444896684474, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224623644844817170, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 748412744}
+ m_GameObject: {fileID: 742124852}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 952537097}
- - {fileID: 299489520}
- m_Father: {fileID: 206329396}
+ m_Children: []
+ m_Father: {fileID: 412601020}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -0.000061035156, y: -658}
+ m_SizeDelta: {x: -100, y: 492.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &742124854
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114255811150471528, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 742124852}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.3207547, g: 0.3207547, b: 0.3207547, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 33
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 3
+ m_MaxSize: 60
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "In order to start the experience, the app needs to detect a flat, horizontal
+ surface.\n\nFinding a surface works best on well-lit, textured surfaces like wood,
+ concrete, tiles, and carpets.\n\nAim down at the floor or a tabletop, and move
+ your phone slowly in a circle.\n\nMake sure the lighting isn\u2019t too dark or
+ too bright.\n"
+--- !u!222 &742124855
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222283088058059044, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 742124852}
+--- !u!1 &755086854
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1806357083306936, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 755086855}
+ - component: {fileID: 755086857}
+ - component: {fileID: 755086856}
+ m_Layer: 5
+ m_Name: Image
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &755086855
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224433948575544804, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 755086854}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 412601020}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_AnchoredPosition: {x: -0.5, y: -158.89001}
+ m_SizeDelta: {x: -23, y: 295}
m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &755086856
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114407642807697180, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 755086854}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 21300000, guid: a41c8e3a2c8914604bc66103fad54c24, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &755086857
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222989402194974608, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 755086854}
--- !u!1 &793454576
GameObject:
m_ObjectHideFlags: 0
@@ -1949,25 +1673,97 @@ Prefab:
--- !u!114 &800275910
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114691982231484394, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114691982231484394, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 947158425}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ed4a6e647c8db3a4a804e5d955140644, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ DisplayGuideDelay: 3
+ OfferDetailedInstructionsDelay: 8
+ _featurePoints: {fileID: 459559558}
+ _handAnimation: {fileID: 1018052719}
+ _snackBar: {fileID: 1186565319}
+ _snackBarText: {fileID: 629689612}
+ _openButton: {fileID: 1616724069}
+ _moreHelpWindow: {fileID: 1087139836}
+ _gotItButton: {fileID: 1807210249}
+--- !u!1 &823022760
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1741401743084830, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 823022761}
+ - component: {fileID: 823022763}
+ - component: {fileID: 823022762}
+ m_Layer: 5
+ m_Name: Translucent Panel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &823022761
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224113101831220714, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 823022760}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
+ m_Children: []
+ m_Father: {fileID: 1391346053}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 558.3413, y: 629.10504}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &823022762
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114522933274058476, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 33178951}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 823022760}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: ed4a6e647c8db3a4a804e5d955140644, type: 3}
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
- DisplayGuideDelay: 3
- OfferDetailedInstructionsDelay: 8
- m_FeaturePoints: {fileID: 1936303613}
- m_HandAnimation: {fileID: 364130656}
- m_SnackBar: {fileID: 1948445448}
- m_SnackBarText: {fileID: 1557677659}
- m_OpenButton: {fileID: 736313403}
- m_MoreHelpWindow: {fileID: 748412744}
- m_GotItButton: {fileID: 427370416}
---- !u!1 &816398299
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.78431374}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &823022763
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222798098526634892, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 823022760}
+--- !u!1 &840977562
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1536853937296922, guid: 26558ae1d2e7243728486d789f984c53,
@@ -1975,10 +1771,10 @@ GameObject:
m_PrefabInternal: {fileID: 150429108}
serializedVersion: 5
m_Component:
- - component: {fileID: 816398303}
- - component: {fileID: 816398302}
- - component: {fileID: 816398301}
- - component: {fileID: 816398300}
+ - component: {fileID: 840977566}
+ - component: {fileID: 840977565}
+ - component: {fileID: 840977564}
+ - component: {fileID: 840977563}
m_Layer: 0
m_Name: Point Cloud
m_TagString: Untagged
@@ -1986,13 +1782,13 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &816398300
+--- !u!114 &840977563
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114747870037459092, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 150429108}
- m_GameObject: {fileID: 816398299}
+ m_GameObject: {fileID: 840977562}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
@@ -2002,16 +1798,16 @@ MonoBehaviour:
EnablePopAnimation: 0
MaxPointsToAddPerFrame: 5
AnimationDuration: 0.3
- m_MaxPointCount: 1000
- m_DefaultSize: 5
- m_PopSize: 20
---- !u!23 &816398301
+ _maxPointCount: 1000
+ _defaultSize: 5
+ _popSize: 20
+--- !u!23 &840977564
MeshRenderer:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 23996811832949430, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 150429108}
- m_GameObject: {fileID: 816398299}
+ m_GameObject: {fileID: 840977562}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -2040,21 +1836,21 @@ MeshRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
---- !u!33 &816398302
+--- !u!33 &840977565
MeshFilter:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 33561497906377476, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 150429108}
- m_GameObject: {fileID: 816398299}
+ m_GameObject: {fileID: 840977562}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
---- !u!4 &816398303
+--- !u!4 &840977566
Transform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 4205356930328266, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
m_PrefabInternal: {fileID: 150429108}
- m_GameObject: {fileID: 816398299}
+ m_GameObject: {fileID: 840977562}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
@@ -2062,78 +1858,6 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &823022760
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1741401743084830, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 823022761}
- - component: {fileID: 823022763}
- - component: {fileID: 823022762}
- m_Layer: 5
- m_Name: Translucent Panel
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &823022761
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224113101831220714, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 823022760}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
- m_Children: []
- m_Father: {fileID: 1391346053}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 558.3413, y: 629.10504}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &823022762
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114522933274058476, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 823022760}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.78431374}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &823022763
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222798098526634892, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 823022760}
--- !u!1 &902159483
GameObject:
m_ObjectHideFlags: 0
@@ -2181,78 +1905,84 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &952537096
+--- !u!1 &947158425
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1741401743084830, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1026997606374626, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
serializedVersion: 5
m_Component:
- - component: {fileID: 952537097}
- - component: {fileID: 952537099}
- - component: {fileID: 952537098}
- m_Layer: 5
- m_Name: Translucent Panel
+ - component: {fileID: 947158426}
+ - component: {fileID: 800275910}
+ m_Layer: 0
+ m_Name: PlaneDiscovery
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &952537097
-RectTransform:
+--- !u!4 &947158426
+Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224113101831220714, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 4430574757597842, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 952537096}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_GameObject: {fileID: 947158425}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
- m_Children: []
- m_Father: {fileID: 748412745}
- m_RootOrder: 0
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1892864296}
+ - {fileID: 459559559}
+ m_Father: {fileID: 0}
+ m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 558.3413, y: 629.10504}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &952537098
+--- !u!1 &955589037
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1248447649449928, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1394164186}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 955589039}
+ - component: {fileID: 955589038}
+ m_Layer: 0
+ m_Name: Environmental Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &955589038
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114522933274058476, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114136752755502098, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 952537096}
+ m_PrefabInternal: {fileID: 1394164186}
+ m_GameObject: {fileID: 955589037}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.78431374}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &952537099
-CanvasRenderer:
+ DirectionalLight: {fileID: 29144152}
+--- !u!4 &955589039
+Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222798098526634892, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 4461716624848968, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 952537096}
+ m_PrefabInternal: {fileID: 1394164186}
+ m_GameObject: {fileID: 955589037}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 29144153}
+ m_Father: {fileID: 0}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &959739917
GameObject:
m_ObjectHideFlags: 0
@@ -2452,11 +2182,130 @@ MeshRenderer:
--- !u!33 &1016635791
MeshFilter:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 33159271800066032, guid: b052e75d5f08f42b382a6ee760f850ca,
+ m_PrefabParentObject: {fileID: 33159271800066032, guid: b052e75d5f08f42b382a6ee760f850ca,
+ type: 2}
+ m_PrefabInternal: {fileID: 800275909}
+ m_GameObject: {fileID: 1016635787}
+ m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!1 &1018052714
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1134799989617770, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1018052715}
+ - component: {fileID: 1018052718}
+ - component: {fileID: 1018052719}
+ - component: {fileID: 1018052717}
+ - component: {fileID: 1018052716}
+ m_Layer: 5
+ m_Name: Hand Animation
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1018052715
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224276631466487834, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1018052714}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1.0999999, y: 1.0999999, z: 1.0999999}
+ m_Children: []
+ m_Father: {fileID: 1892864296}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 250, y: 250}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1018052716
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114198791628043326, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1018052714}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c46dafe9f93ea4a638b8f23c38039c63, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ RawImage: {fileID: 1018052719}
+ VideoPlayer: {fileID: 1018052717}
+--- !u!328 &1018052717
+VideoPlayer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 328931233274937060, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1018052714}
+ m_Enabled: 1
+ m_VideoClip: {fileID: 32900000, guid: 9070914d75707431c8ebef8b92960dda, type: 3}
+ m_TargetCameraAlpha: 1
+ m_TargetCamera3DLayout: 0
+ m_TargetCamera: {fileID: 0}
+ m_TargetTexture: {fileID: 8400000, guid: 4969ba0220e83c94a926ea4264cdff4a, type: 2}
+ m_TimeReference: 0
+ m_TargetMaterialRenderer: {fileID: 0}
+ m_TargetMaterialProperty: _MainTex
+ m_RenderMode: 4
+ m_AspectRatio: 2
+ m_DataSource: 0
+ m_PlaybackSpeed: 1
+ m_AudioOutputMode: 0
+ m_TargetAudioSources: []
+ m_DirectAudioVolumes: []
+ m_Url:
+ m_EnabledAudioTracks:
+ m_DirectAudioMutes:
+ m_ControlledAudioTrackCount: 0
+ m_PlayOnAwake: 1
+ m_SkipOnDrop: 1
+ m_Looping: 1
+ m_WaitForFirstFrame: 1
+ m_FrameReadyEventEnabled: 0
+--- !u!222 &1018052718
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222653202546379244, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 800275909}
- m_GameObject: {fileID: 1016635787}
- m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1018052714}
+--- !u!114 &1018052719
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114376072597821902, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1018052714}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Texture: {fileID: 2800000, guid: 58f32fb24e9e04466845025d41f60e05, type: 3}
+ m_UVRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
--- !u!1 &1036965034
GameObject:
m_ObjectHideFlags: 0
@@ -2535,6 +2384,78 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1036965034}
+--- !u!1 &1043423815
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1741401743084830, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1043423816}
+ - component: {fileID: 1043423818}
+ - component: {fileID: 1043423817}
+ m_Layer: 5
+ m_Name: Translucent Panel
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1043423816
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224113101831220714, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1043423815}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
+ m_Children: []
+ m_Father: {fileID: 1087139837}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 558.3413, y: 629.10504}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1043423817
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114522933274058476, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1043423815}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.78431374}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &1043423818
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222798098526634892, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1043423815}
--- !u!1 &1064538126
GameObject:
m_ObjectHideFlags: 0
@@ -2651,6 +2572,43 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1064538126}
+--- !u!1 &1087139836
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1841743570407438, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1087139837}
+ m_Layer: 5
+ m_Name: More Help Window
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &1087139837
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224688444896684474, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1087139836}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1043423816}
+ - {fileID: 412601020}
+ m_Father: {fileID: 1892864296}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1110022024
GameObject:
m_ObjectHideFlags: 0
@@ -2729,6 +2687,80 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1110022024}
+--- !u!1 &1186565319
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1628086211047416, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1186565320}
+ - component: {fileID: 1186565322}
+ - component: {fileID: 1186565321}
+ m_Layer: 5
+ m_Name: Snack Bar
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &1186565320
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224433849719476778, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1186565319}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.3608439, y: 0.3608439, z: 0.3608439}
+ m_Children:
+ - {fileID: 629689610}
+ - {fileID: 1616724070}
+ m_Father: {fileID: 1892864296}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 28.867554}
+ m_SizeDelta: {x: 920.38477, y: 160}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1186565321
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114405450150461852, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1186565319}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.74509805}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 0}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &1186565322
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222435448296670882, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1186565319}
--- !u!1 &1233457656
GameObject:
m_ObjectHideFlags: 0
@@ -2781,16 +2813,94 @@ MonoBehaviour:
--- !u!4 &1233457659
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1233457656}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 5
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1233457656}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1270619583
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1253402262083664, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1270619584}
+ - component: {fileID: 1270619586}
+ - component: {fileID: 1270619585}
+ m_Layer: 5
+ m_Name: Title
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1270619584
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224103090575334000, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1270619583}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 412601020}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 50, y: -379}
+ m_SizeDelta: {x: -100, y: 100}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &1270619585
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114632337368380536, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1270619583}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 50
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 5
+ m_MaxSize: 70
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: How to find a surface
+--- !u!222 &1270619586
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222350485964238294, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1270619583}
--- !u!1 &1272866944
GameObject:
m_ObjectHideFlags: 0
@@ -3025,7 +3135,7 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: cf498fc35b538884db557f7a9a2c0ef9, type: 2}
- m_RootGameObject: {fileID: 1404106861}
+ m_RootGameObject: {fileID: 955589037}
m_IsPrefabParent: 0
--- !u!1 &1399039452
GameObject:
@@ -3096,51 +3206,6 @@ CanvasRenderer:
m_PrefabParentObject: {fileID: 0}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1399039452}
---- !u!1 &1404106861
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1248447649449928, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1394164186}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1404106863}
- - component: {fileID: 1404106862}
- m_Layer: 0
- m_Name: Environmental Light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1404106862
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114136752755502098, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1394164186}
- m_GameObject: {fileID: 1404106861}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- DirectionalLight: {fileID: 1833494956}
---- !u!4 &1404106863
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4461716624848968, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1394164186}
- m_GameObject: {fileID: 1404106861}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1833494957}
- m_Father: {fileID: 0}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1415240870
GameObject:
m_ObjectHideFlags: 0
@@ -3169,21 +3234,21 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a0549dd967206485b822a2a2fc61919b, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_PlaneDiscoveryGuide: {fileID: 800275910}
- m_DebugVisualizer: {fileID: 1016635787}
- m_Camera: {fileID: 53379610}
- m_MenuWindow: {fileID: 203965840}
- m_DepthCardWindow: {fileID: 1391346052}
- m_MenuButton: {fileID: 1713961900}
- m_ApplyButton: {fileID: 1064538128}
- m_CancelButton: {fileID: 1708266261}
- m_EnableDepthButton: {fileID: 152492296}
- m_DisableDepthButton: {fileID: 959739921}
- m_MenuText: {fileID: 1036965036}
- m_EnableDepthToggle: {fileID: 1593632913}
- m_EnableDepthToggleLabel: {fileID: 332451071}
- m_DepthMapToggle: {fileID: 1793234865}
- m_DepthMapToggleLabel: {fileID: 471504156}
+ _planeDiscoveryGuide: {fileID: 800275910}
+ _debugVisualizer: {fileID: 1016635787}
+ _camera: {fileID: 53379610}
+ _menuWindow: {fileID: 203965840}
+ _depthCardWindow: {fileID: 1391346052}
+ _menuButton: {fileID: 1713961900}
+ _applyButton: {fileID: 1064538128}
+ _cancelButton: {fileID: 1708266261}
+ _enableDepthButton: {fileID: 152492296}
+ _disableDepthButton: {fileID: 959739921}
+ _menuText: {fileID: 1036965036}
+ _enableDepthToggle: {fileID: 1593632913}
+ _enableDepthToggleLabel: {fileID: 332451071}
+ _depthMapToggle: {fileID: 1793234865}
+ _depthMapToggleLabel: {fileID: 471504156}
--- !u!4 &1415240872
Transform:
m_ObjectHideFlags: 0
@@ -3356,162 +3421,6 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 1481078941}
---- !u!1 &1557677656
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1254139920877974, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1557677657}
- - component: {fileID: 1557677658}
- - component: {fileID: 1557677659}
- m_Layer: 5
- m_Name: Text
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1557677657
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224596816357008206, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1557677656}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1948445449}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0.5}
- m_AnchorMax: {x: 0, y: 0.5}
- m_AnchoredPosition: {x: 80, y: 0}
- m_SizeDelta: {x: 1472.2, y: 100}
- m_Pivot: {x: 0, y: 0.5}
---- !u!222 &1557677658
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222876762692622444, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1557677656}
---- !u!114 &1557677659
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114675208815321770, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1557677656}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 46
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 0
- m_MaxSize: 72
- m_Alignment: 3
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: "Searching for surfaces\u2026"
---- !u!1 &1558930685
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1494932783218128, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1558930686}
- - component: {fileID: 1558930688}
- - component: {fileID: 1558930687}
- m_Layer: 5
- m_Name: Text
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1558930686
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224149726896389198, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1558930685}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 427370419}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1558930687
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114697064341765078, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1558930685}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 38
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 0
- m_MaxSize: 60
- m_Alignment: 4
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: Got it
---- !u!222 &1558930688
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222373998948977954, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1558930685}
--- !u!1 &1593632911
GameObject:
m_ObjectHideFlags: 0
@@ -3590,9 +3499,125 @@ MonoBehaviour:
onValueChanged:
m_PersistentCalls:
m_Calls: []
- m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
+ m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+ m_IsOn: 0
+--- !u!1 &1616724069
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1620356295715200, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1616724070}
+ - component: {fileID: 1616724073}
+ - component: {fileID: 1616724072}
+ - component: {fileID: 1616724071}
+ m_Layer: 5
+ m_Name: Open Button
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &1616724070
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224429972709744798, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1616724069}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.94280225, y: 0.94280225, z: 0.94280225}
+ m_Children:
+ - {fileID: 2069706918}
+ m_Father: {fileID: 1186565320}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -151, y: 82}
+ m_SizeDelta: {x: 303.3, y: 113.7}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1616724071
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114628222162657684, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1616724069}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1616724072}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null
- m_IsOn: 0
+--- !u!114 &1616724072
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114079631928349614, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1616724069}
+ m_Enabled: 0
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &1616724073
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222612501244681524, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1616724069}
--- !u!1 &1643204059
GameObject:
m_ObjectHideFlags: 0
@@ -4114,85 +4139,17 @@ MonoBehaviour:
m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0,
Culture=neutral, PublicKeyToken=null
m_IsOn: 0
---- !u!1 &1833494955
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1995114164396524, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1394164186}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1833494957}
- - component: {fileID: 1833494956}
- m_Layer: 0
- m_Name: Directional light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!108 &1833494956
-Light:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 108886784190946772, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1394164186}
- m_GameObject: {fileID: 1833494955}
- m_Enabled: 1
- serializedVersion: 8
- m_Type: 1
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_Intensity: 1
- m_Range: 10
- m_SpotAngle: 30
- m_CookieSize: 10
- m_Shadows:
- m_Type: 2
- m_Resolution: -1
- m_CustomResolution: -1
- m_Strength: 1
- m_Bias: 0.05
- m_NormalBias: 0.3
- m_NearPlane: 0.2
- m_Cookie: {fileID: 0}
- m_DrawHalo: 0
- m_Flare: {fileID: 0}
- m_RenderMode: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_Lightmapping: 4
- m_AreaSize: {x: 1, y: 1}
- m_BounceIntensity: 1
- m_ColorTemperature: 6570
- m_UseColorTemperature: 0
- m_ShadowRadius: 0
- m_ShadowAngle: 0
---- !u!4 &1833494957
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4926315969036930, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1394164186}
- m_GameObject: {fileID: 1833494955}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1404106863}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
---- !u!1 &1844707688
+--- !u!1 &1807140560
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1131732715277368, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1494932783218128, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
serializedVersion: 5
m_Component:
- - component: {fileID: 1844707689}
- - component: {fileID: 1844707691}
- - component: {fileID: 1844707690}
+ - component: {fileID: 1807140561}
+ - component: {fileID: 1807140563}
+ - component: {fileID: 1807140562}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
@@ -4200,216 +4157,39 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &1844707689
+--- !u!224 &1807140561
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224623644844817170, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224149726896389198, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1844707688}
+ m_GameObject: {fileID: 1807140560}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 299489520}
- m_RootOrder: 2
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -0.000061035156, y: -658}
- m_SizeDelta: {x: -100, y: 492.3}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1844707690
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114255811150471528, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1844707688}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.3207547, g: 0.3207547, b: 0.3207547, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 33
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 3
- m_MaxSize: 60
- m_Alignment: 0
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: "In order to start the experience, the app needs to detect a flat, horizontal
- surface.\n\nFinding a surface works best on well-lit, textured surfaces like wood,
- concrete, tiles, and carpets.\n\nAim down at the floor or a tabletop, and move
- your phone slowly in a circle.\n\nMake sure the lighting isn\u2019t too dark or
- too bright.\n"
---- !u!222 &1844707691
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222283088058059044, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1844707688}
---- !u!1 &1936303613
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1947850325268790, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1936303614}
- - component: {fileID: 1936303617}
- - component: {fileID: 1936303616}
- - component: {fileID: 1936303615}
- m_Layer: 0
- m_Name: Discovery Point Cloud
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &1936303614
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4522253342955840, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1936303613}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 33178952}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1936303615
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114677467912739828, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1936303613}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- PointColor: {r: 1, g: 1, b: 1, a: 0}
- EnablePopAnimation: 1
- MaxPointsToAddPerFrame: 1
- AnimationDuration: 0.3
- m_MaxPointCount: 1000
- m_DefaultSize: 10
- m_PopSize: 50
---- !u!23 &1936303616
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 23202741898937940, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1936303613}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_DynamicOccludee: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 2100000, guid: fb4fbd1b92e244df2bc6f43deb7a57a2, type: 2}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &1936303617
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 33799012446163236, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1936303613}
- m_Mesh: {fileID: 0}
---- !u!1 &1937793032
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1253402262083664, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1937793033}
- - component: {fileID: 1937793035}
- - component: {fileID: 1937793034}
- m_Layer: 5
- m_Name: Title
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1937793033
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224103090575334000, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1937793032}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 299489520}
- m_RootOrder: 1
+ m_Father: {fileID: 1807210252}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 50, y: -379}
- m_SizeDelta: {x: -100, y: 100}
- m_Pivot: {x: 0, y: 0.5}
---- !u!114 &1937793034
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1807140562
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114632337368380536, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114697064341765078, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1937793032}
+ m_GameObject: {fileID: 1807140560}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0, g: 0, b: 0, a: 1}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
@@ -4418,99 +4198,242 @@ MonoBehaviour:
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
m_FontData:
m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 50
+ m_FontSize: 38
m_FontStyle: 0
m_BestFit: 0
- m_MinSize: 5
- m_MaxSize: 70
- m_Alignment: 0
+ m_MinSize: 0
+ m_MaxSize: 60
+ m_Alignment: 4
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
- m_Text: How to find a surface
---- !u!222 &1937793035
+ m_Text: Got it
+--- !u!222 &1807140563
CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222350485964238294, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 222373998948977954, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1937793032}
---- !u!1 &1948445448
+ m_GameObject: {fileID: 1807140560}
+--- !u!1 &1807210248
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1628086211047416, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1521944159913020, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
serializedVersion: 5
m_Component:
- - component: {fileID: 1948445449}
- - component: {fileID: 1948445451}
- - component: {fileID: 1948445450}
+ - component: {fileID: 1807210252}
+ - component: {fileID: 1807210251}
+ - component: {fileID: 1807210250}
+ - component: {fileID: 1807210249}
m_Layer: 5
- m_Name: Snack Bar
+ m_Name: Got It Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &1948445449
-RectTransform:
+ m_IsActive: 1
+--- !u!114 &1807210249
+MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224433849719476778, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114278378996577766, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1948445448}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.3608439, y: 0.3608439, z: 0.3608439}
- m_Children:
- - {fileID: 1557677657}
- - {fileID: 736313404}
- m_Father: {fileID: 206329396}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: 0, y: 28.867554}
- m_SizeDelta: {x: 920.38477, y: 160}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1948445450
+ m_GameObject: {fileID: 1807210248}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1807210250}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+--- !u!114 &1807210250
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114405450150461852, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114269874898406420, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1948445448}
+ m_GameObject: {fileID: 1807210248}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.74509805}
+ m_Color: {r: 0.2783019, g: 0.5949654, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 0}
- m_Type: 0
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
---- !u!222 &1948445451
+--- !u!222 &1807210251
CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222435448296670882, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 222700447477476392, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1807210248}
+--- !u!224 &1807210252
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224815438004130162, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1807210248}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1807140561}
+ m_Father: {fileID: 412601020}
+ m_RootOrder: 3
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -180, y: 111}
+ m_SizeDelta: {x: 230, y: 95}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1892864295
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1132834895103378, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1892864296}
+ - component: {fileID: 1892864299}
+ - component: {fileID: 1892864298}
+ - component: {fileID: 1892864297}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1892864296
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224798383043448138, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1892864295}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_Children:
+ - {fileID: 1087139837}
+ - {fileID: 1186565320}
+ - {fileID: 1018052715}
+ m_Father: {fileID: 947158426}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
+--- !u!114 &1892864297
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114163356861035466, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1892864295}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1892864298
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114898409539304540, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 1892864295}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 800, y: 600}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0.5
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+--- !u!223 &1892864299
+Canvas:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 223986510026342770, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 688001843}
- m_GameObject: {fileID: 1948445448}
+ m_GameObject: {fileID: 1892864295}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_AdditionalShaderChannelsFlag: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 1
+ m_TargetDisplay: 0
--- !u!1 &2008512434
GameObject:
m_ObjectHideFlags: 0
@@ -4589,6 +4512,84 @@ CanvasRenderer:
type: 2}
m_PrefabInternal: {fileID: 0}
m_GameObject: {fileID: 2008512434}
+--- !u!1 &2069706917
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1096507120819496, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 2069706918}
+ - component: {fileID: 2069706920}
+ - component: {fileID: 2069706919}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &2069706918
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224045560955471334, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 2069706917}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1616724070}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &2069706919
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114716270761809112, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 2069706917}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.15806337, g: 0.4309361, b: 0.9056604, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 50
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 5
+ m_MaxSize: 60
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: OPEN
+--- !u!222 &2069706920
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222014794675779164, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 688001843}
+ m_GameObject: {fileID: 2069706917}
--- !u!1 &2083512464
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/GoogleARCore/Examples/HelloAR/Scripts/HelloARController.cs b/Assets/GoogleARCore/Examples/HelloAR/Scripts/HelloARController.cs
index 5b29e617..80a64ce3 100644
--- a/Assets/GoogleARCore/Examples/HelloAR/Scripts/HelloARController.cs
+++ b/Assets/GoogleARCore/Examples/HelloAR/Scripts/HelloARController.cs
@@ -65,13 +65,13 @@ public class HelloARController : MonoBehaviour
///
/// The rotation in degrees need to apply to prefab when it is placed.
///
- private const float k_PrefabRotation = 180.0f;
+ private const float _prefabRotation = 180.0f;
///
/// True if the app is in the process of quitting due to an ARCore connection error,
/// otherwise false.
///
- private bool m_IsQuitting = false;
+ private bool _isQuitting = false;
///
/// The Unity Awake() method.
@@ -88,7 +88,7 @@ public void Awake()
///
public void Update()
{
- _UpdateApplicationLifecycle();
+ UpdateApplicationLifecycle();
if (DepthMenu != null && !DepthMenu.CanPlaceAsset())
{
@@ -113,6 +113,21 @@ public void Update()
TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon |
TrackableHitFlags.FeaturePointWithSurfaceNormal;
+ // To use Instant Placement, which supports frame by frame 2D tracking and
+ // automatically switches to 6DOF tracking once it's available, follow these steps:
+ // 1. Use InstantPlacementMode.LocalYUp in ARCoreSessionConfig.
+ // 2. Use Frame.RaycastInstantPlacement(float, float, float, out TrackableHit) method
+ // with an approximate distance in meters.
+ // 3. Create anchor with the hit result from previous step by:
+ // hit.Trackable.CreateAnchor(hit.Pose).
+ //
+ // An anchor will be created at the approximate pose if there has been no Trackable
+ // detected yet, and updates its pose to attach to the real world.
+ // Note: there may be a noticeable jump in position during this tracking method change.
+ // Use InstantPlacementPoint.TrackingMethod to customize pose update logic.
+ //
+ // See the Instant Placement Developer's Guide at:
+ // https://developers.google.com/ar/develop/unity/instant-placement.
if (Frame.Raycast(touch.position.x, touch.position.y, raycastFilter, out hit))
{
// Use hit pose and camera pose to check if hittest is from the
@@ -159,7 +174,7 @@ public void Update()
// Compensate for the hitPose rotation facing away from the raycast (i.e.
// camera).
- gameObject.transform.Rotate(0, k_PrefabRotation, 0, Space.Self);
+ gameObject.transform.Rotate(0, _prefabRotation, 0, Space.Self);
// Create an anchor to allow ARCore to track the hitpoint as understanding of
// the physical world evolves.
@@ -174,7 +189,7 @@ public void Update()
///
/// Check and update the application lifecycle.
///
- private void _UpdateApplicationLifecycle()
+ private void UpdateApplicationLifecycle()
{
// Exit the app when the 'back' button is pressed.
if (Input.GetKey(KeyCode.Escape))
@@ -192,7 +207,7 @@ private void _UpdateApplicationLifecycle()
Screen.sleepTimeout = SleepTimeout.NeverSleep;
}
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
@@ -201,23 +216,23 @@ private void _UpdateApplicationLifecycle()
// appear.
if (Session.Status == SessionStatus.ErrorPermissionNotGranted)
{
- _ShowAndroidToastMessage("Camera permission is needed to run this application.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ ShowAndroidToastMessage("Camera permission is needed to run this application.");
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
else if (Session.Status.IsError())
{
- _ShowAndroidToastMessage(
+ ShowAndroidToastMessage(
"ARCore encountered a problem connecting. Please start the app again.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
}
///
/// Actually quit the application.
///
- private void _DoQuit()
+ private void DoQuit()
{
Application.Quit();
}
@@ -226,7 +241,7 @@ private void _DoQuit()
/// Show an Android toast message.
///
/// Message string to show in the toast.
- private void _ShowAndroidToastMessage(string message)
+ private void ShowAndroidToastMessage(string message)
{
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity =
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scenes/ObjectManipulation.unity b/Assets/GoogleARCore/Examples/ObjectManipulation/Scenes/ObjectManipulation.unity
index d79d4257..7a53a063 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scenes/ObjectManipulation.unity
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scenes/ObjectManipulation.unity
@@ -113,51 +113,51 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
---- !u!1 &33178951
+--- !u!1 &29144151
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1947850325268790, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1536853937296922, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
- m_PrefabInternal: {fileID: 1947274363}
+ m_PrefabInternal: {fileID: 1521940042}
serializedVersion: 5
m_Component:
- - component: {fileID: 33178955}
- - component: {fileID: 33178954}
- - component: {fileID: 33178953}
- - component: {fileID: 33178952}
+ - component: {fileID: 29144155}
+ - component: {fileID: 29144154}
+ - component: {fileID: 29144153}
+ - component: {fileID: 29144152}
m_Layer: 0
- m_Name: Discovery Point Cloud
+ m_Name: Point Cloud
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &33178952
+--- !u!114 &29144152
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114677467912739828, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114747870037459092, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 33178951}
+ m_PrefabInternal: {fileID: 1521940042}
+ m_GameObject: {fileID: 29144151}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
m_Name:
m_EditorClassIdentifier:
- PointColor: {r: 1, g: 1, b: 1, a: 0}
- EnablePopAnimation: 1
- MaxPointsToAddPerFrame: 1
+ PointColor: {r: 0.12156863, g: 0.7372549, b: 0.8235294, a: 1}
+ EnablePopAnimation: 0
+ MaxPointsToAddPerFrame: 5
AnimationDuration: 0.3
- m_MaxPointCount: 1000
- m_DefaultSize: 10
- m_PopSize: 50
---- !u!23 &33178953
+ _maxPointCount: 1000
+ _defaultSize: 5
+ _popSize: 20
+--- !u!23 &29144153
MeshRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 23202741898937940, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 23996811832949430, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 33178951}
+ m_PrefabInternal: {fileID: 1521940042}
+ m_GameObject: {fileID: 29144151}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
@@ -186,130 +186,75 @@ MeshRenderer:
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
---- !u!33 &33178954
+--- !u!33 &29144154
MeshFilter:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 33799012446163236, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 33561497906377476, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 33178951}
- m_Mesh: {fileID: 0}
---- !u!4 &33178955
+ m_PrefabInternal: {fileID: 1521940042}
+ m_GameObject: {fileID: 29144151}
+ m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &29144155
Transform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4522253342955840, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 4205356930328266, guid: 26558ae1d2e7243728486d789f984c53,
type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 33178951}
+ m_PrefabInternal: {fileID: 1521940042}
+ m_GameObject: {fileID: 29144151}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 427370417}
- m_RootOrder: 1
+ m_Father: {fileID: 0}
+ m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &145471881
+--- !u!1 &412601019
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1134799989617770, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1806357083306936, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 145471882}
- - component: {fileID: 145471885}
- - component: {fileID: 145471886}
- - component: {fileID: 145471884}
- - component: {fileID: 145471883}
+ - component: {fileID: 412601020}
+ - component: {fileID: 412601022}
+ - component: {fileID: 412601021}
m_Layer: 5
- m_Name: Hand Animation
+ m_Name: Image
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &145471882
+--- !u!224 &412601020
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224276631466487834, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224433948575544804, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 145471881}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_GameObject: {fileID: 412601019}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1.0999999, y: 1.0999999, z: 1.0999999}
+ m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 952537097}
- m_RootOrder: 2
+ m_Father: {fileID: 1807140561}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0.5}
- m_AnchorMax: {x: 0.5, y: 0.5}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 250, y: 250}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -0.5, y: -158.89001}
+ m_SizeDelta: {x: -23, y: 295}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &145471883
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114198791628043326, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 145471881}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: c46dafe9f93ea4a638b8f23c38039c63, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- RawImage: {fileID: 145471886}
- VideoPlayer: {fileID: 145471884}
---- !u!328 &145471884
-VideoPlayer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 328931233274937060, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 145471881}
- m_Enabled: 1
- m_VideoClip: {fileID: 32900000, guid: 9070914d75707431c8ebef8b92960dda, type: 3}
- m_TargetCameraAlpha: 1
- m_TargetCamera3DLayout: 0
- m_TargetCamera: {fileID: 0}
- m_TargetTexture: {fileID: 8400000, guid: 4969ba0220e83c94a926ea4264cdff4a, type: 2}
- m_TimeReference: 0
- m_TargetMaterialRenderer: {fileID: 0}
- m_TargetMaterialProperty: _MainTex
- m_RenderMode: 4
- m_AspectRatio: 2
- m_DataSource: 0
- m_PlaybackSpeed: 1
- m_AudioOutputMode: 0
- m_TargetAudioSources: []
- m_DirectAudioVolumes: []
- m_Url:
- m_EnabledAudioTracks:
- m_DirectAudioMutes:
- m_ControlledAudioTrackCount: 0
- m_PlayOnAwake: 1
- m_SkipOnDrop: 1
- m_Looping: 1
- m_WaitForFirstFrame: 1
- m_FrameReadyEventEnabled: 0
---- !u!222 &145471885
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222653202546379244, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 145471881}
---- !u!114 &145471886
+--- !u!114 &412601021
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114376072597821902, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114407642807697180, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 145471881}
+ m_GameObject: {fileID: 412601019}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -320,149 +265,126 @@ MonoBehaviour:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Texture: {fileID: 2800000, guid: 58f32fb24e9e04466845025d41f60e05, type: 3}
- m_UVRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
---- !u!1 &206329395
-GameObject:
+ m_Sprite: {fileID: 21300000, guid: a41c8e3a2c8914604bc66103fad54c24, type: 3}
+ m_Type: 0
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &412601022
+CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1254139920877974, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 222989402194974608, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 412601019}
+--- !u!1 &448760140
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1248447649449928, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1796857611}
serializedVersion: 5
m_Component:
- - component: {fileID: 206329396}
- - component: {fileID: 206329397}
- - component: {fileID: 206329398}
- m_Layer: 5
- m_Name: Text
+ - component: {fileID: 448760142}
+ - component: {fileID: 448760141}
+ m_Layer: 0
+ m_Name: Environmental Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &206329396
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224596816357008206, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 206329395}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1936303614}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0.5}
- m_AnchorMax: {x: 0, y: 0.5}
- m_AnchoredPosition: {x: 80, y: 0}
- m_SizeDelta: {x: 1472.2, y: 100}
- m_Pivot: {x: 0, y: 0.5}
---- !u!222 &206329397
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222876762692622444, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 206329395}
---- !u!114 &206329398
+--- !u!114 &448760141
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114675208815321770, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114136752755502098, guid: cf498fc35b538884db557f7a9a2c0ef9,
type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 206329395}
+ m_PrefabInternal: {fileID: 1796857611}
+ m_GameObject: {fileID: 448760140}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 46
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 0
- m_MaxSize: 72
- m_Alignment: 3
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: "Searching for surfaces\u2026"
---- !u!1 &299489519
+ DirectionalLight: {fileID: 717967902}
+--- !u!4 &448760142
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4461716624848968, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1796857611}
+ m_GameObject: {fileID: 448760140}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 717967903}
+ m_Father: {fileID: 0}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &459559558
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1806357083306936, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1628086211047416, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 299489520}
- - component: {fileID: 299489522}
- - component: {fileID: 299489521}
+ - component: {fileID: 459559559}
+ - component: {fileID: 459559561}
+ - component: {fileID: 459559560}
m_Layer: 5
- m_Name: Image
+ m_Name: Snack Bar
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &299489520
+ m_IsActive: 0
+--- !u!224 &459559559
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224433948575544804, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224433849719476778, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 299489519}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_GameObject: {fileID: 459559558}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1558930686}
- m_RootOrder: 0
+ m_LocalScale: {x: 0.3608439, y: 0.3608439, z: 0.3608439}
+ m_Children:
+ - {fileID: 1892864296}
+ - {fileID: 1186565320}
+ m_Father: {fileID: 1043423816}
+ m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -0.5, y: -158.89001}
- m_SizeDelta: {x: -23, y: 295}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: 0, y: 28.867554}
+ m_SizeDelta: {x: 920.38477, y: 160}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &299489521
+--- !u!114 &459559560
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114407642807697180, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114405450150461852, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 299489519}
+ m_GameObject: {fileID: 459559558}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.74509805}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 21300000, guid: a41c8e3a2c8914604bc66103fad54c24, type: 3}
+ m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
@@ -470,330 +392,35 @@ MonoBehaviour:
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
---- !u!222 &299489522
+--- !u!222 &459559561
CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222989402194974608, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 222435448296670882, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 299489519}
---- !u!1 &331482572
+ m_GameObject: {fileID: 459559558}
+--- !u!1 &557169198
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 646831370}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
serializedVersion: 5
m_Component:
- - component: {fileID: 331482573}
- - component: {fileID: 331482574}
+ - component: {fileID: 557169200}
+ - component: {fileID: 557169199}
m_Layer: 0
- m_Name: ARCore Device
+ m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &331482573
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 646831370}
- m_GameObject: {fileID: 331482572}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1404106864}
- m_Father: {fileID: 0}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &331482574
-MonoBehaviour:
+--- !u!108 &557169199
+Light:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114451889682527732, guid: c10877f7cd5764de18d46d7b777d1faa,
- type: 2}
- m_PrefabInternal: {fileID: 646831370}
- m_GameObject: {fileID: 331482572}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- DeviceCameraDirection: 0
- SessionConfig: {fileID: 11400000, guid: 9586a84d6c32f46b6ab7aeb6042f160d, type: 2}
- CameraConfigFilter: {fileID: 11400000, guid: 200b4cba649e3413088e285251ccf44e, type: 2}
---- !u!1 &364130651
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1521944159913020, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 364130655}
- - component: {fileID: 364130654}
- - component: {fileID: 364130653}
- - component: {fileID: 364130652}
- m_Layer: 5
- m_Name: Got It Button
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &364130652
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114278378996577766, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_SelectOnUp: {fileID: 0}
- m_SelectOnDown: {fileID: 0}
- m_SelectOnLeft: {fileID: 0}
- m_SelectOnRight: {fileID: 0}
- m_Transition: 1
- m_Colors:
- m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
- m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
- m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
- m_ColorMultiplier: 1
- m_FadeDuration: 0.1
- m_SpriteState:
- m_HighlightedSprite: {fileID: 0}
- m_PressedSprite: {fileID: 0}
- m_DisabledSprite: {fileID: 0}
- m_AnimationTriggers:
- m_NormalTrigger: Normal
- m_HighlightedTrigger: Highlighted
- m_PressedTrigger: Pressed
- m_DisabledTrigger: Disabled
- m_Interactable: 1
- m_TargetGraphic: {fileID: 364130653}
- m_OnClick:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
- Culture=neutral, PublicKeyToken=null
---- !u!114 &364130653
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114269874898406420, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 364130651}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.2783019, g: 0.5949654, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &364130654
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222700447477476392, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 364130651}
---- !u!224 &364130655
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224815438004130162, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 364130651}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 748412745}
- m_Father: {fileID: 1558930686}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 1, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: -180, y: 111}
- m_SizeDelta: {x: 230, y: 95}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &427370415
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1026997606374626, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 427370417}
- - component: {fileID: 427370416}
- m_Layer: 0
- m_Name: PlaneDiscovery
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &427370416
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114691982231484394, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 427370415}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: ed4a6e647c8db3a4a804e5d955140644, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- DisplayGuideDelay: 3
- OfferDetailedInstructionsDelay: 8
- m_FeaturePoints: {fileID: 33178951}
- m_HandAnimation: {fileID: 145471886}
- m_SnackBar: {fileID: 1936303613}
- m_SnackBarText: {fileID: 206329398}
- m_OpenButton: {fileID: 1948445448}
- m_MoreHelpWindow: {fileID: 736313403}
- m_GotItButton: {fileID: 364130652}
---- !u!4 &427370417
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4430574757597842, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 427370415}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 952537097}
- - {fileID: 33178955}
- m_Father: {fileID: 0}
- m_RootOrder: 9
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &496192901
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1253402262083664, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 496192902}
- - component: {fileID: 496192904}
- - component: {fileID: 496192903}
- m_Layer: 5
- m_Name: Title
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &496192902
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224103090575334000, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 496192901}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1558930686}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 50, y: -379}
- m_SizeDelta: {x: -100, y: 100}
- m_Pivot: {x: 0, y: 0.5}
---- !u!114 &496192903
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114632337368380536, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 496192901}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0, g: 0, b: 0, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 50
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 5
- m_MaxSize: 70
- m_Alignment: 0
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: How to find a surface
---- !u!222 &496192904
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222350485964238294, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 496192901}
---- !u!1 &557169198
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 557169200}
- - component: {fileID: 557169199}
- m_Layer: 0
- m_Name: Directional Light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!108 &557169199
-Light:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 557169198}
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 557169198}
m_Enabled: 1
serializedVersion: 8
m_Type: 1
@@ -877,29 +504,107 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 8e616f59911754ba5b89ee5cbaea6171, type: 3}
m_Name:
m_EditorClassIdentifier:
---- !u!1001 &646831370
-Prefab:
+--- !u!1 &629689609
+GameObject:
m_ObjectHideFlags: 0
- serializedVersion: 2
- m_Modification:
- m_TransformParent: {fileID: 0}
- m_Modifications:
- - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- propertyPath: m_LocalPosition.x
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- propertyPath: m_LocalPosition.y
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- propertyPath: m_LocalPosition.z
- value: 0
- objectReference: {fileID: 0}
- - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- propertyPath: m_LocalRotation.x
- value: 0
- objectReference: {fileID: 0}
+ m_PrefabParentObject: {fileID: 1096507120819496, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 629689610}
+ - component: {fileID: 629689612}
+ - component: {fileID: 629689611}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &629689610
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224045560955471334, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 629689609}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1186565320}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &629689611
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114716270761809112, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 629689609}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.15806337, g: 0.4309361, b: 0.9056604, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 50
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 5
+ m_MaxSize: 60
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: OPEN
+--- !u!222 &629689612
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222014794675779164, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 629689609}
+--- !u!1001 &646831370
+Prefab:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_Modification:
+ m_TransformParent: {fileID: 0}
+ m_Modifications:
+ - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
+ propertyPath: m_LocalPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
+ propertyPath: m_LocalPosition.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
+ propertyPath: m_LocalPosition.z
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
+ propertyPath: m_LocalRotation.x
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
propertyPath: m_LocalRotation.y
value: 0
@@ -918,7 +623,7 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c10877f7cd5764de18d46d7b777d1faa, type: 2}
- m_RootGameObject: {fileID: 331482572}
+ m_RootGameObject: {fileID: 1000531616}
m_IsPrefabParent: 0
--- !u!20 &646831371
Camera:
@@ -926,7 +631,7 @@ Camera:
m_PrefabParentObject: {fileID: 20155940112608238, guid: c10877f7cd5764de18d46d7b777d1faa,
type: 2}
m_PrefabInternal: {fileID: 646831370}
- m_GameObject: {fileID: 1404106861}
+ m_GameObject: {fileID: 955589037}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 2
@@ -1002,167 +707,591 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c0107a62880924f8cb2526c6800a70ab, type: 2}
- m_RootGameObject: {fileID: 816398299}
+ m_RootGameObject: {fileID: 840977562}
m_IsPrefabParent: 0
---- !u!1 &736313403
+--- !u!1 &717967901
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1841743570407438, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1995114164396524, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1796857611}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 717967903}
+ - component: {fileID: 717967902}
+ m_Layer: 0
+ m_Name: Directional light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!108 &717967902
+Light:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 108886784190946772, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1796857611}
+ m_GameObject: {fileID: 717967901}
+ m_Enabled: 1
+ serializedVersion: 8
+ m_Type: 1
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.3
+ m_NearPlane: 0.2
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_Lightmapping: 4
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+--- !u!4 &717967903
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4926315969036930, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ type: 2}
+ m_PrefabInternal: {fileID: 1796857611}
+ m_GameObject: {fileID: 717967901}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 448760142}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &742124852
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1741401743084830, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 736313404}
+ - component: {fileID: 742124853}
+ - component: {fileID: 742124855}
+ - component: {fileID: 742124854}
m_Layer: 5
- m_Name: More Help Window
+ m_Name: Translucent Panel
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &736313404
+ m_IsActive: 1
+--- !u!224 &742124853
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224688444896684474, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224113101831220714, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 736313403}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_GameObject: {fileID: 742124852}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1844707689}
- - {fileID: 1558930686}
- m_Father: {fileID: 952537097}
+ m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
+ m_Children: []
+ m_Father: {fileID: 1616724070}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
+ m_SizeDelta: {x: 558.3413, y: 629.10504}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!1 &748412744
+--- !u!114 &742124854
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114522933274058476, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 742124852}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.78431374}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &742124855
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222798098526634892, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 742124852}
+--- !u!1 &755086854
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1253402262083664, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 755086855}
+ - component: {fileID: 755086857}
+ - component: {fileID: 755086856}
+ m_Layer: 5
+ m_Name: Title
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &755086855
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224103090575334000, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 755086854}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1807140561}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 50, y: -379}
+ m_SizeDelta: {x: -100, y: 100}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!114 &755086856
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114632337368380536, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 755086854}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0, g: 0, b: 0, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 50
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 5
+ m_MaxSize: 70
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: How to find a surface
+--- !u!222 &755086857
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222350485964238294, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 755086854}
+--- !u!1 &840977562
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1049131573482648, guid: c0107a62880924f8cb2526c6800a70ab,
+ type: 2}
+ m_PrefabInternal: {fileID: 690995859}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 840977564}
+ - component: {fileID: 840977563}
+ m_Layer: 0
+ m_Name: Manipulation System
+ m_TagString: ManipulationSystem
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &840977563
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114403323308239524, guid: c0107a62880924f8cb2526c6800a70ab,
+ type: 2}
+ m_PrefabInternal: {fileID: 690995859}
+ m_GameObject: {fileID: 840977562}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 77a3e5043b3b44e4887d5a6be8f0aeda, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!4 &840977564
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4700483784480040, guid: c0107a62880924f8cb2526c6800a70ab,
+ type: 2}
+ m_PrefabInternal: {fileID: 690995859}
+ m_GameObject: {fileID: 840977562}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 8
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &947158425
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1947850325268790, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 947158429}
+ - component: {fileID: 947158428}
+ - component: {fileID: 947158427}
+ - component: {fileID: 947158426}
+ m_Layer: 0
+ m_Name: Discovery Point Cloud
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &947158426
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114677467912739828, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 947158425}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ PointColor: {r: 1, g: 1, b: 1, a: 0}
+ EnablePopAnimation: 1
+ MaxPointsToAddPerFrame: 1
+ AnimationDuration: 0.3
+ _maxPointCount: 1000
+ _defaultSize: 10
+ _popSize: 50
+--- !u!23 &947158427
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 23202741898937940, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 947158425}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_Materials:
+ - {fileID: 2100000, guid: fb4fbd1b92e244df2bc6f43deb7a57a2, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_PreserveUVs: 1
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 0
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+--- !u!33 &947158428
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 33799012446163236, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 947158425}
+ m_Mesh: {fileID: 0}
+--- !u!4 &947158429
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4522253342955840, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 947158425}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1807210250}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &955589037
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 955589040}
+ - component: {fileID: 646831371}
+ - component: {fileID: 955589039}
+ - component: {fileID: 955589038}
+ m_Layer: 0
+ m_Name: First Person Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &955589038
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ m_GameObject: {fileID: 955589037}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
+--- !u!114 &955589039
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ m_GameObject: {fileID: 955589037}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Device: 0
+ m_PoseSource: 6
+ m_TrackingType: 0
+ m_UpdateType: 1
+ m_UseRelativeTransform: 1
+--- !u!4 &955589040
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ m_GameObject: {fileID: 955589037}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1000531617}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1000531616
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1772147192650458, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1000531617}
+ - component: {fileID: 1000531618}
+ m_Layer: 0
+ m_Name: ARCore Device
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1000531617
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4442908887562770, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ m_GameObject: {fileID: 1000531616}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 955589040}
+ m_Father: {fileID: 0}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1000531618
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114451889682527732, guid: c10877f7cd5764de18d46d7b777d1faa,
+ type: 2}
+ m_PrefabInternal: {fileID: 646831370}
+ m_GameObject: {fileID: 1000531616}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d4ca0c6a3af6b4635b7e98c6ea0a0cf9, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ DeviceCameraDirection: 0
+ SessionConfig: {fileID: 11400000, guid: 9586a84d6c32f46b6ab7aeb6042f160d, type: 2}
+ CameraConfigFilter: {fileID: 11400000, guid: 200b4cba649e3413088e285251ccf44e, type: 2}
+--- !u!1 &1018052714
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1494932783218128, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1521944159913020, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 748412745}
- - component: {fileID: 748412747}
- - component: {fileID: 748412746}
+ - component: {fileID: 1018052718}
+ - component: {fileID: 1018052717}
+ - component: {fileID: 1018052716}
+ - component: {fileID: 1018052715}
m_Layer: 5
- m_Name: Text
+ m_Name: Got It Button
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &748412745
-RectTransform:
+--- !u!114 &1018052715
+MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224149726896389198, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114278378996577766, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 748412744}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 364130655}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &748412746
+ m_GameObject: {fileID: 1018052714}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1018052716}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+--- !u!114 &1018052716
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114697064341765078, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114269874898406420, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 748412744}
+ m_GameObject: {fileID: 1018052714}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_Color: {r: 0.2783019, g: 0.5949654, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 38
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 0
- m_MaxSize: 60
- m_Alignment: 4
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: Got it
---- !u!222 &748412747
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &1018052717
CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222373998948977954, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 222700447477476392, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 748412744}
---- !u!1 &816398299
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1049131573482648, guid: c0107a62880924f8cb2526c6800a70ab,
- type: 2}
- m_PrefabInternal: {fileID: 690995859}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 816398301}
- - component: {fileID: 816398300}
- m_Layer: 0
- m_Name: Manipulation System
- m_TagString: ManipulationSystem
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &816398300
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114403323308239524, guid: c0107a62880924f8cb2526c6800a70ab,
- type: 2}
- m_PrefabInternal: {fileID: 690995859}
- m_GameObject: {fileID: 816398299}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 77a3e5043b3b44e4887d5a6be8f0aeda, type: 3}
- m_Name:
- m_EditorClassIdentifier:
---- !u!4 &816398301
-Transform:
+ m_GameObject: {fileID: 1018052714}
+--- !u!224 &1018052718
+RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4700483784480040, guid: c0107a62880924f8cb2526c6800a70ab,
+ m_PrefabParentObject: {fileID: 224815438004130162, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 690995859}
- m_GameObject: {fileID: 816398299}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1018052714}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 8
+ m_Children:
+ - {fileID: 1087139837}
+ m_Father: {fileID: 1807140561}
+ m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &952537096
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -180, y: 111}
+ m_SizeDelta: {x: 230, y: 95}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!1 &1043423815
GameObject:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 1132834895103378, guid: c539aa4fa1bac4b4da61761b0699b48b,
@@ -1170,10 +1299,10 @@ GameObject:
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 952537097}
- - component: {fileID: 952537100}
- - component: {fileID: 952537099}
- - component: {fileID: 952537098}
+ - component: {fileID: 1043423816}
+ - component: {fileID: 1043423819}
+ - component: {fileID: 1043423818}
+ - component: {fileID: 1043423817}
m_Layer: 5
m_Name: Canvas
m_TagString: Untagged
@@ -1181,21 +1310,21 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &952537097
+--- !u!224 &1043423816
RectTransform:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 224798383043448138, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 952537096}
+ m_GameObject: {fileID: 1043423815}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_Children:
- - {fileID: 736313404}
- - {fileID: 1936303614}
- - {fileID: 145471882}
- m_Father: {fileID: 427370417}
+ - {fileID: 1616724070}
+ - {fileID: 459559559}
+ - {fileID: 2069706918}
+ m_Father: {fileID: 1807210250}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -1203,13 +1332,13 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
---- !u!114 &952537098
+--- !u!114 &1043423817
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114163356861035466, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 952537096}
+ m_GameObject: {fileID: 1043423815}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}
@@ -1220,13 +1349,13 @@ MonoBehaviour:
m_BlockingMask:
serializedVersion: 2
m_Bits: 4294967295
---- !u!114 &952537099
+--- !u!114 &1043423818
MonoBehaviour:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 114898409539304540, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 952537096}
+ m_GameObject: {fileID: 1043423815}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}
@@ -1242,13 +1371,13 @@ MonoBehaviour:
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
m_DynamicPixelsPerUnit: 1
---- !u!223 &952537100
+--- !u!223 &1043423819
Canvas:
m_ObjectHideFlags: 0
m_PrefabParentObject: {fileID: 223986510026342770, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 952537096}
+ m_GameObject: {fileID: 1043423815}
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
@@ -1263,119 +1392,200 @@ Canvas:
m_SortingLayerID: 0
m_SortingOrder: 1
m_TargetDisplay: 0
---- !u!1 &1045121336
+--- !u!1 &1087139836
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1248447649449928, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ m_PrefabParentObject: {fileID: 1494932783218128, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 1796857611}
+ m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 1045121338}
- - component: {fileID: 1045121337}
- m_Layer: 0
- m_Name: Environmental Light
+ - component: {fileID: 1087139837}
+ - component: {fileID: 1087139839}
+ - component: {fileID: 1087139838}
+ m_Layer: 5
+ m_Name: Text
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &1045121337
+--- !u!224 &1087139837
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224149726896389198, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1087139836}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1018052718}
+ m_RootOrder: 0
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1087139838
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114697064341765078, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1087139836}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 38
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 0
+ m_MaxSize: 60
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Got it
+--- !u!222 &1087139839
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222373998948977954, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1087139836}
+--- !u!1 &1186565319
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1620356295715200, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1186565320}
+ - component: {fileID: 1186565323}
+ - component: {fileID: 1186565322}
+ - component: {fileID: 1186565321}
+ m_Layer: 5
+ m_Name: Open Button
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 0
+--- !u!224 &1186565320
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 224429972709744798, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1186565319}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0.94280225, y: 0.94280225, z: 0.94280225}
+ m_Children:
+ - {fileID: 629689610}
+ m_Father: {fileID: 459559559}
+ m_RootOrder: 1
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 1, y: 0}
+ m_AnchorMax: {x: 1, y: 0}
+ m_AnchoredPosition: {x: -151, y: 82}
+ m_SizeDelta: {x: 303.3, y: 113.7}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1186565321
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114628222162657684, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1186565319}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1186565322}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
+ Culture=neutral, PublicKeyToken=null
+--- !u!114 &1186565322
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114136752755502098, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ m_PrefabParentObject: {fileID: 114079631928349614, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 1796857611}
- m_GameObject: {fileID: 1045121336}
- m_Enabled: 1
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1186565319}
+ m_Enabled: 0
m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 92a4cf446a0c7334aaceb5457be27894, type: 3}
+ m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
- DirectionalLight: {fileID: 1206251214}
---- !u!4 &1045121338
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4461716624848968, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1796857611}
- m_GameObject: {fileID: 1045121336}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1206251215}
- m_Father: {fileID: 0}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1206251213
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1995114164396524, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1796857611}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1206251215}
- - component: {fileID: 1206251214}
- m_Layer: 0
- m_Name: Directional light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!108 &1206251214
-Light:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 108886784190946772, guid: cf498fc35b538884db557f7a9a2c0ef9,
- type: 2}
- m_PrefabInternal: {fileID: 1796857611}
- m_GameObject: {fileID: 1206251213}
- m_Enabled: 1
- serializedVersion: 8
- m_Type: 1
+ m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_Intensity: 1
- m_Range: 10
- m_SpotAngle: 30
- m_CookieSize: 10
- m_Shadows:
- m_Type: 2
- m_Resolution: -1
- m_CustomResolution: -1
- m_Strength: 1
- m_Bias: 0.05
- m_NormalBias: 0.3
- m_NearPlane: 0.2
- m_Cookie: {fileID: 0}
- m_DrawHalo: 0
- m_Flare: {fileID: 0}
- m_RenderMode: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_Lightmapping: 4
- m_AreaSize: {x: 1, y: 1}
- m_BounceIntensity: 1
- m_ColorTemperature: 6570
- m_UseColorTemperature: 0
- m_ShadowRadius: 0
- m_ShadowAngle: 0
---- !u!4 &1206251215
-Transform:
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+--- !u!222 &1186565323
+CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4926315969036930, guid: cf498fc35b538884db557f7a9a2c0ef9,
+ m_PrefabParentObject: {fileID: 222612501244681524, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 1796857611}
- m_GameObject: {fileID: 1206251213}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1045121338}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1186565319}
--- !u!1 &1233457656
GameObject:
m_ObjectHideFlags: 0
@@ -1438,69 +1648,88 @@ Transform:
m_Father: {fileID: 0}
m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1404106861
+--- !u!1 &1270619583
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1637996540812124, guid: c10877f7cd5764de18d46d7b777d1faa,
+ m_PrefabParentObject: {fileID: 1131732715277368, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 646831370}
+ m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 1404106864}
- - component: {fileID: 646831371}
- - component: {fileID: 1404106863}
- - component: {fileID: 1404106862}
- m_Layer: 0
- m_Name: First Person Camera
- m_TagString: MainCamera
+ - component: {fileID: 1270619584}
+ - component: {fileID: 1270619586}
+ - component: {fileID: 1270619585}
+ m_Layer: 5
+ m_Name: Text
+ m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!114 &1404106862
-MonoBehaviour:
+--- !u!224 &1270619584
+RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114876698896786350, guid: c10877f7cd5764de18d46d7b777d1faa,
+ m_PrefabParentObject: {fileID: 224623644844817170, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 646831370}
- m_GameObject: {fileID: 1404106861}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: eb172c260d42e4f62945afda50892c0c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- BackgroundMaterial: {fileID: 2100000, guid: 03ad0130a037647aeb60218f61aca114, type: 2}
---- !u!114 &1404106863
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1270619583}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 1807140561}
+ m_RootOrder: 2
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: -0.000061035156, y: -658}
+ m_SizeDelta: {x: -100, y: 492.3}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1270619585
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114963366853050710, guid: c10877f7cd5764de18d46d7b777d1faa,
+ m_PrefabParentObject: {fileID: 114255811150471528, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 646831370}
- m_GameObject: {fileID: 1404106861}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1270619583}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 1742909100, guid: 3a84de5cd0624681b6b6dcd8921d912a, type: 3}
+ m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Device: 0
- m_PoseSource: 6
- m_TrackingType: 0
- m_UpdateType: 1
- m_UseRelativeTransform: 1
---- !u!4 &1404106864
-Transform:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.3207547, g: 0.3207547, b: 0.3207547, a: 1}
+ m_RaycastTarget: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+ Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+ m_FontData:
+ m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
+ m_FontSize: 33
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 3
+ m_MaxSize: 60
+ m_Alignment: 0
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: "In order to start the experience, the app needs to detect a flat, horizontal
+ surface.\n\nFinding a surface works best on well-lit, textured surfaces like wood,
+ concrete, tiles, and carpets.\n\nAim down at the floor or a tabletop, and move
+ your phone slowly in a circle.\n\nMake sure the lighting isn\u2019t too dark or
+ too bright.\n"
+--- !u!222 &1270619586
+CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4497055787654456, guid: c10877f7cd5764de18d46d7b777d1faa,
+ m_PrefabParentObject: {fileID: 222283088058059044, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
- m_PrefabInternal: {fileID: 646831370}
- m_GameObject: {fileID: 1404106861}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 331482573}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1270619583}
--- !u!1001 &1521940042
Prefab:
m_ObjectHideFlags: 0
@@ -1538,170 +1767,53 @@ Prefab:
objectReference: {fileID: 0}
- target: {fileID: 4205356930328266, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
propertyPath: m_RootOrder
- value: 4
- objectReference: {fileID: 0}
- - target: {fileID: 1536853937296922, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
- propertyPath: m_Name
- value: Point Cloud
- objectReference: {fileID: 0}
- m_RemovedComponents: []
- m_ParentPrefab: {fileID: 100100000, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
- m_RootGameObject: {fileID: 1833494955}
- m_IsPrefabParent: 0
---- !u!1 &1557677656
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1096507120819496, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1557677657}
- - component: {fileID: 1557677659}
- - component: {fileID: 1557677658}
- m_Layer: 5
- m_Name: Text
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1557677657
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224045560955471334, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1557677656}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 1948445449}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1557677658
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114716270761809112, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1557677656}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.15806337, g: 0.4309361, b: 0.9056604, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_FontData:
- m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 50
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 5
- m_MaxSize: 60
- m_Alignment: 4
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: OPEN
---- !u!222 &1557677659
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222014794675779164, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1557677656}
---- !u!1 &1558930685
+ value: 4
+ objectReference: {fileID: 0}
+ - target: {fileID: 1536853937296922, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
+ propertyPath: m_Name
+ value: Point Cloud
+ objectReference: {fileID: 0}
+ m_RemovedComponents: []
+ m_ParentPrefab: {fileID: 100100000, guid: 26558ae1d2e7243728486d789f984c53, type: 2}
+ m_RootGameObject: {fileID: 29144151}
+ m_IsPrefabParent: 0
+--- !u!1 &1616724069
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1520766987342560, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1841743570407438, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 1558930686}
- - component: {fileID: 1558930688}
- - component: {fileID: 1558930687}
+ - component: {fileID: 1616724070}
m_Layer: 5
- m_Name: Contents
+ m_Name: More Help Window
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &1558930686
+ m_IsActive: 0
+--- !u!224 &1616724070
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224606223855309774, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224688444896684474, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1558930685}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_GameObject: {fileID: 1616724069}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
+ m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- - {fileID: 299489520}
- - {fileID: 496192902}
- - {fileID: 1937793033}
- - {fileID: 364130655}
- m_Father: {fileID: 736313404}
- m_RootOrder: 1
+ - {fileID: 742124853}
+ - {fileID: 1807140561}
+ m_Father: {fileID: 1043423816}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0.5, y: 0.5}
- m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 733, y: 1100}
+ m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1558930687
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114499232208719540, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1558930685}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 21300000, guid: 209563986116240d6aaec5a6fb7786a7, type: 3}
- m_Type: 0
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &1558930688
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222736752331366234, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1558930685}
--- !u!1001 &1796857611
Prefab:
m_ObjectHideFlags: 0
@@ -1743,279 +1855,70 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: cf498fc35b538884db557f7a9a2c0ef9, type: 2}
- m_RootGameObject: {fileID: 1045121336}
+ m_RootGameObject: {fileID: 448760140}
m_IsPrefabParent: 0
---- !u!1 &1812720041
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1812720043}
- - component: {fileID: 1812720042}
- m_Layer: 0
- m_Name: Pawn Generator
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1812720042
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1812720041}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: cde3903c79dee45ccb64c95e1265efcc, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- FirstPersonCamera: {fileID: 646831371}
- PawnPrefab: {fileID: 1513252861858756, guid: 8b604092cbb3d482da82845b61a6809b, type: 2}
- ManipulatorPrefab: {fileID: 1122865395318488, guid: 24556cd4924884d9aaa3d80135c8021d,
- type: 2}
---- !u!4 &1812720043
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1812720041}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 5
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1833494955
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1536853937296922, guid: 26558ae1d2e7243728486d789f984c53,
- type: 2}
- m_PrefabInternal: {fileID: 1521940042}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1833494959}
- - component: {fileID: 1833494958}
- - component: {fileID: 1833494957}
- - component: {fileID: 1833494956}
- m_Layer: 0
- m_Name: Point Cloud
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1833494956
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114747870037459092, guid: 26558ae1d2e7243728486d789f984c53,
- type: 2}
- m_PrefabInternal: {fileID: 1521940042}
- m_GameObject: {fileID: 1833494955}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 4d5645b79cc5e4251827ffe171ed4658, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- PointColor: {r: 0.12156863, g: 0.7372549, b: 0.8235294, a: 1}
- EnablePopAnimation: 0
- MaxPointsToAddPerFrame: 5
- AnimationDuration: 0.3
- m_MaxPointCount: 1000
- m_DefaultSize: 5
- m_PopSize: 20
---- !u!23 &1833494957
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 23996811832949430, guid: 26558ae1d2e7243728486d789f984c53,
- type: 2}
- m_PrefabInternal: {fileID: 1521940042}
- m_GameObject: {fileID: 1833494955}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_DynamicOccludee: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 2100000, guid: fb4fbd1b92e244df2bc6f43deb7a57a2, type: 2}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &1833494958
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 33561497906377476, guid: 26558ae1d2e7243728486d789f984c53,
- type: 2}
- m_PrefabInternal: {fileID: 1521940042}
- m_GameObject: {fileID: 1833494955}
- m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
---- !u!4 &1833494959
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 4205356930328266, guid: 26558ae1d2e7243728486d789f984c53,
- type: 2}
- m_PrefabInternal: {fileID: 1521940042}
- m_GameObject: {fileID: 1833494955}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 4
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1844707688
+--- !u!1 &1807140560
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1741401743084830, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1520766987342560, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 1844707689}
- - component: {fileID: 1844707691}
- - component: {fileID: 1844707690}
+ - component: {fileID: 1807140561}
+ - component: {fileID: 1807140563}
+ - component: {fileID: 1807140562}
m_Layer: 5
- m_Name: Translucent Panel
+ m_Name: Contents
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &1844707689
-RectTransform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224113101831220714, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1844707688}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1.1, y: 1.1, z: 1.1}
- m_Children: []
- m_Father: {fileID: 736313404}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 558.3413, y: 629.10504}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1844707690
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114522933274058476, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1844707688}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.78431374}
- m_RaycastTarget: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
- Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &1844707691
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222798098526634892, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1844707688}
---- !u!1 &1936303613
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1628086211047416, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1936303614}
- - component: {fileID: 1936303616}
- - component: {fileID: 1936303615}
- m_Layer: 5
- m_Name: Snack Bar
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &1936303614
+--- !u!224 &1807140561
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224433849719476778, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224606223855309774, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1936303613}
+ m_GameObject: {fileID: 1807140560}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.3608439, y: 0.3608439, z: 0.3608439}
+ m_LocalScale: {x: 0.5, y: 0.5, z: 0.5}
m_Children:
- - {fileID: 206329396}
- - {fileID: 1948445449}
- m_Father: {fileID: 952537097}
+ - {fileID: 412601020}
+ - {fileID: 755086855}
+ - {fileID: 1270619584}
+ - {fileID: 1018052718}
+ m_Father: {fileID: 1616724070}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: 0, y: 28.867554}
- m_SizeDelta: {x: 920.38477, y: 160}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 733, y: 1100}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1936303615
+--- !u!114 &1807140562
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114405450150461852, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114499232208719540, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1936303613}
+ m_GameObject: {fileID: 1807140560}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.74509805}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 0}
+ m_Sprite: {fileID: 21300000, guid: 209563986116240d6aaec5a6fb7786a7, type: 3}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
@@ -2023,24 +1926,122 @@ MonoBehaviour:
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
---- !u!222 &1936303616
+--- !u!222 &1807140563
CanvasRenderer:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222435448296670882, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 222736752331366234, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1936303613}
---- !u!1 &1937793032
+ m_GameObject: {fileID: 1807140560}
+--- !u!1 &1807210248
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1131732715277368, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1026997606374626, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1807210250}
+ - component: {fileID: 1807210249}
+ m_Layer: 0
+ m_Name: PlaneDiscovery
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1807210249
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 114691982231484394, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1807210248}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ed4a6e647c8db3a4a804e5d955140644, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ DisplayGuideDelay: 3
+ OfferDetailedInstructionsDelay: 8
+ _featurePoints: {fileID: 947158425}
+ _handAnimation: {fileID: 2069706922}
+ _snackBar: {fileID: 459559558}
+ _snackBarText: {fileID: 1892864298}
+ _openButton: {fileID: 1186565319}
+ _moreHelpWindow: {fileID: 1616724069}
+ _gotItButton: {fileID: 1018052715}
+--- !u!4 &1807210250
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 4430574757597842, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1807210248}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children:
+ - {fileID: 1043423816}
+ - {fileID: 947158429}
+ m_Father: {fileID: 0}
+ m_RootOrder: 9
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1812720041
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ serializedVersion: 5
+ m_Component:
+ - component: {fileID: 1812720043}
+ - component: {fileID: 1812720042}
+ m_Layer: 0
+ m_Name: Pawn Generator
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1812720042
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1812720041}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: cde3903c79dee45ccb64c95e1265efcc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ FirstPersonCamera: {fileID: 646831371}
+ PawnPrefab: {fileID: 1513252861858756, guid: 8b604092cbb3d482da82845b61a6809b, type: 2}
+ ManipulatorPrefab: {fileID: 1122865395318488, guid: 24556cd4924884d9aaa3d80135c8021d,
+ type: 2}
+--- !u!4 &1812720043
+Transform:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 0}
+ m_PrefabInternal: {fileID: 0}
+ m_GameObject: {fileID: 1812720041}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_RootOrder: 5
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1892864295
+GameObject:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 1254139920877974, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 1937793033}
- - component: {fileID: 1937793035}
- - component: {fileID: 1937793034}
+ - component: {fileID: 1892864296}
+ - component: {fileID: 1892864297}
+ - component: {fileID: 1892864298}
m_Layer: 5
m_Name: Text
m_TagString: Untagged
@@ -2048,39 +2049,46 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!224 &1937793033
+--- !u!224 &1892864296
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224623644844817170, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224596816357008206, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1937793032}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_GameObject: {fileID: 1892864295}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
- m_Father: {fileID: 1558930686}
- m_RootOrder: 2
+ m_Father: {fileID: 459559559}
+ m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 1}
- m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -0.000061035156, y: -658}
- m_SizeDelta: {x: -100, y: 492.3}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1937793034
+ m_AnchorMin: {x: 0, y: 0.5}
+ m_AnchorMax: {x: 0, y: 0.5}
+ m_AnchoredPosition: {x: 80, y: 0}
+ m_SizeDelta: {x: 1472.2, y: 100}
+ m_Pivot: {x: 0, y: 0.5}
+--- !u!222 &1892864297
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222876762692622444, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 1892864295}
+--- !u!114 &1892864298
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114255811150471528, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114675208815321770, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1937793032}
+ m_GameObject: {fileID: 1892864295}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
- m_Color: {r: 0.3207547, g: 0.3207547, b: 0.3207547, a: 1}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_OnCullStateChanged:
m_PersistentCalls:
@@ -2089,29 +2097,18 @@ MonoBehaviour:
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
m_FontData:
m_Font: {fileID: 12800000, guid: f66655b38428d40769e9e41ee237cbdc, type: 3}
- m_FontSize: 33
+ m_FontSize: 46
m_FontStyle: 0
m_BestFit: 0
- m_MinSize: 3
- m_MaxSize: 60
- m_Alignment: 0
+ m_MinSize: 0
+ m_MaxSize: 72
+ m_Alignment: 3
m_AlignByGeometry: 0
m_RichText: 1
m_HorizontalOverflow: 0
m_VerticalOverflow: 0
m_LineSpacing: 1
- m_Text: "In order to start the experience, the app needs to detect a flat, horizontal
- surface.\n\nFinding a surface works best on well-lit, textured surfaces like wood,
- concrete, tiles, and carpets.\n\nAim down at the floor or a tabletop, and move
- your phone slowly in a circle.\n\nMake sure the lighting isn\u2019t too dark or
- too bright.\n"
---- !u!222 &1937793035
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222283088058059044, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1937793032}
+ m_Text: "Searching for surfaces\u2026"
--- !u!1001 &1947274363
Prefab:
m_ObjectHideFlags: 0
@@ -2153,99 +2150,110 @@ Prefab:
objectReference: {fileID: 0}
m_RemovedComponents: []
m_ParentPrefab: {fileID: 100100000, guid: c539aa4fa1bac4b4da61761b0699b48b, type: 2}
- m_RootGameObject: {fileID: 427370415}
+ m_RootGameObject: {fileID: 1807210248}
m_IsPrefabParent: 0
---- !u!1 &1948445448
+--- !u!1 &2069706917
GameObject:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 1620356295715200, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 1134799989617770, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
serializedVersion: 5
m_Component:
- - component: {fileID: 1948445449}
- - component: {fileID: 1948445452}
- - component: {fileID: 1948445451}
- - component: {fileID: 1948445450}
+ - component: {fileID: 2069706918}
+ - component: {fileID: 2069706921}
+ - component: {fileID: 2069706922}
+ - component: {fileID: 2069706920}
+ - component: {fileID: 2069706919}
m_Layer: 5
- m_Name: Open Button
+ m_Name: Hand Animation
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 0
---- !u!224 &1948445449
+ m_IsActive: 1
+--- !u!224 &2069706918
RectTransform:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 224429972709744798, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 224276631466487834, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1948445448}
+ m_GameObject: {fileID: 2069706917}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0.94280225, y: 0.94280225, z: 0.94280225}
- m_Children:
- - {fileID: 1557677657}
- m_Father: {fileID: 1936303614}
- m_RootOrder: 1
+ m_LocalScale: {x: 1.0999999, y: 1.0999999, z: 1.0999999}
+ m_Children: []
+ m_Father: {fileID: 1043423816}
+ m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 1, y: 0}
- m_AnchorMax: {x: 1, y: 0}
- m_AnchoredPosition: {x: -151, y: 82}
- m_SizeDelta: {x: 303.3, y: 113.7}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 250, y: 250}
m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &1948445450
+--- !u!114 &2069706919
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114628222162657684, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114198791628043326, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1948445448}
+ m_GameObject: {fileID: 2069706917}
m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: 11500000, guid: c46dafe9f93ea4a638b8f23c38039c63, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Navigation:
- m_Mode: 3
- m_SelectOnUp: {fileID: 0}
- m_SelectOnDown: {fileID: 0}
- m_SelectOnLeft: {fileID: 0}
- m_SelectOnRight: {fileID: 0}
- m_Transition: 1
- m_Colors:
- m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
- m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
- m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
- m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
- m_ColorMultiplier: 1
- m_FadeDuration: 0.1
- m_SpriteState:
- m_HighlightedSprite: {fileID: 0}
- m_PressedSprite: {fileID: 0}
- m_DisabledSprite: {fileID: 0}
- m_AnimationTriggers:
- m_NormalTrigger: Normal
- m_HighlightedTrigger: Highlighted
- m_PressedTrigger: Pressed
- m_DisabledTrigger: Disabled
- m_Interactable: 1
- m_TargetGraphic: {fileID: 1948445451}
- m_OnClick:
- m_PersistentCalls:
- m_Calls: []
- m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
- Culture=neutral, PublicKeyToken=null
---- !u!114 &1948445451
+ RawImage: {fileID: 2069706922}
+ VideoPlayer: {fileID: 2069706920}
+--- !u!328 &2069706920
+VideoPlayer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 328931233274937060, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 2069706917}
+ m_Enabled: 1
+ m_VideoClip: {fileID: 32900000, guid: 9070914d75707431c8ebef8b92960dda, type: 3}
+ m_TargetCameraAlpha: 1
+ m_TargetCamera3DLayout: 0
+ m_TargetCamera: {fileID: 0}
+ m_TargetTexture: {fileID: 8400000, guid: 4969ba0220e83c94a926ea4264cdff4a, type: 2}
+ m_TimeReference: 0
+ m_TargetMaterialRenderer: {fileID: 0}
+ m_TargetMaterialProperty: _MainTex
+ m_RenderMode: 4
+ m_AspectRatio: 2
+ m_DataSource: 0
+ m_PlaybackSpeed: 1
+ m_AudioOutputMode: 0
+ m_TargetAudioSources: []
+ m_DirectAudioVolumes: []
+ m_Url:
+ m_EnabledAudioTracks:
+ m_DirectAudioMutes:
+ m_ControlledAudioTrackCount: 0
+ m_PlayOnAwake: 1
+ m_SkipOnDrop: 1
+ m_Looping: 1
+ m_WaitForFirstFrame: 1
+ m_FrameReadyEventEnabled: 0
+--- !u!222 &2069706921
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_PrefabParentObject: {fileID: 222653202546379244, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ type: 2}
+ m_PrefabInternal: {fileID: 1947274363}
+ m_GameObject: {fileID: 2069706917}
+--- !u!114 &2069706922
MonoBehaviour:
m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 114079631928349614, guid: c539aa4fa1bac4b4da61761b0699b48b,
+ m_PrefabParentObject: {fileID: 114376072597821902, guid: c539aa4fa1bac4b4da61761b0699b48b,
type: 2}
m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1948445448}
- m_Enabled: 0
+ m_GameObject: {fileID: 2069706917}
+ m_Enabled: 1
m_EditorHideFlags: 0
- m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+ m_Script: {fileID: -98529514, guid: f70555f144d8491a825f0804e09c671c, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
@@ -2256,21 +2264,13 @@ MonoBehaviour:
m_Calls: []
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
- m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
- m_Type: 1
- m_PreserveAspect: 0
- m_FillCenter: 1
- m_FillMethod: 4
- m_FillAmount: 1
- m_FillClockwise: 1
- m_FillOrigin: 0
---- !u!222 &1948445452
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 222612501244681524, guid: c539aa4fa1bac4b4da61761b0699b48b,
- type: 2}
- m_PrefabInternal: {fileID: 1947274363}
- m_GameObject: {fileID: 1948445448}
+ m_Texture: {fileID: 2800000, guid: 58f32fb24e9e04466845025d41f60e05, type: 3}
+ m_UVRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
--- !u!1 &2083512464
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGesture.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGesture.cs
index 9101efe5..993b2514 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGesture.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGesture.cs
@@ -95,8 +95,7 @@ protected internal override bool CanStart()
{
Vector2 pos = touch.position;
float diff = (pos - StartPosition).magnitude;
- if (GestureTouchesUtility.PixelsToInches(diff) >=
- (Recognizer as DragGestureRecognizer).SlopInches)
+ if (GestureTouchesUtility.PixelsToInches(diff) >= DragGestureRecognizer._slopInches)
{
return true;
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGestureRecognizer.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGestureRecognizer.cs
index e25e07b3..c299d52e 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGestureRecognizer.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/DragGestureRecognizer.cs
@@ -28,15 +28,7 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class DragGestureRecognizer : GestureRecognizer
{
- private const float k_SlopInches = 0.1f;
-
- internal float SlopInches
- {
- get
- {
- return k_SlopInches;
- }
- }
+ internal const float _slopInches = 0.1f;
///
/// Creates a Drag gesture with the given touch.
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/Gesture.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/Gesture.cs
index 0f9f15a7..2e565248 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/Gesture.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/Gesture.cs
@@ -34,7 +34,7 @@ namespace GoogleARCore.Examples.ObjectManipulationInternal
/// The actual gesture.
public abstract class Gesture where T : Gesture
{
- private bool m_HasStarted;
+ private bool _hasStarted;
///
/// Constructs a Gesture with a given recognizer.
@@ -42,7 +42,7 @@ public abstract class Gesture where T : Gesture
/// The gesture recognizer.
internal Gesture(GestureRecognizer recognizer)
{
- Recognizer = recognizer;
+ _recognizer = recognizer;
}
///
@@ -73,20 +73,20 @@ internal Gesture(GestureRecognizer recognizer)
///
/// Gets the gesture recognizer.
///
- protected internal GestureRecognizer Recognizer { get; private set; }
+ protected internal GestureRecognizer _recognizer { get; private set; }
///
/// Updates this gesture.
///
internal void Update()
{
- if (!m_HasStarted && CanStart())
+ if (!_hasStarted && CanStart())
{
Start();
return;
}
- if (m_HasStarted)
+ if (_hasStarted)
{
if (UpdateGesture() && onUpdated != null)
{
@@ -146,7 +146,7 @@ protected internal void Complete()
private void Start()
{
- m_HasStarted = true;
+ _hasStarted = true;
OnStart();
if (onStart != null)
{
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureRecognizer.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureRecognizer.cs
index 4d78faad..f18d52d4 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureRecognizer.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureRecognizer.cs
@@ -44,7 +44,7 @@ public abstract class GestureRecognizer where T : Gesture
///
/// List of current active gestures.
///
- protected List m_Gestures = new List();
+ protected List _gestures = new List();
///
/// Event fired when a gesture is started.
@@ -65,9 +65,9 @@ public void Update()
TryCreateGestures();
// Update gestures and determine if they should start.
- for (int i = 0; i < m_Gestures.Count; i++)
+ for (int i = 0; i < _gestures.Count; i++)
{
- Gesture gesture = m_Gestures[i];
+ Gesture gesture = _gestures[i];
gesture.Update();
}
@@ -96,7 +96,7 @@ protected internal void TryCreateOneFingerGestureOnTouchBegan(
T gesture = createGestureFunction(touch);
gesture.onStart += OnStart;
gesture.onFinished += OnFinished;
- m_Gestures.Add(gesture);
+ _gestures.Add(gesture);
}
}
}
@@ -160,7 +160,7 @@ private void TryCreateGestureTwoFingerGestureOnTouchBeganForTouchIndex(
T gesture = createGestureFunction(touch, otherTouch);
gesture.onStart += OnStart;
gesture.onFinished += OnFinished;
- m_Gestures.Add(gesture);
+ _gestures.Add(gesture);
}
}
@@ -174,7 +174,7 @@ private void OnStart(T gesture)
private void OnFinished(T gesture)
{
- m_Gestures.Remove(gesture);
+ _gestures.Remove(gesture);
}
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureTouchesUtility.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureTouchesUtility.cs
index f508e249..49589274 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureTouchesUtility.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/GestureTouchesUtility.cs
@@ -39,10 +39,10 @@ namespace GoogleARCore.Examples.ObjectManipulationInternal
///
internal class GestureTouchesUtility
{
- private const float k_EdgeThresholdInches = 0.1f;
- private static GestureTouchesUtility s_Instance;
+ private const float _edgeThresholdInches = 0.1f;
+ private static GestureTouchesUtility _instance;
- private HashSet m_RetainedFingerIds = new HashSet();
+ private HashSet _retainedFingerIds = new HashSet();
///
/// Initializes a new instance of the GestureTouchesUtility class. Intended for private use
@@ -102,7 +102,7 @@ public static float InchesToPixels(float inches)
/// True if the touch is off screen edge.
public static bool IsTouchOffScreenEdge(Touch touch)
{
- float slopPixels = InchesToPixels(k_EdgeThresholdInches);
+ float slopPixels = InchesToPixels(_edgeThresholdInches);
bool result = touch.position.x <= slopPixels;
result |= touch.position.y <= slopPixels;
@@ -146,7 +146,7 @@ public static void LockFingerId(int fingerId)
{
if (!IsFingerIdRetained(fingerId))
{
- _GetInstance().m_RetainedFingerIds.Add(fingerId);
+ GetInstance()._retainedFingerIds.Add(fingerId);
}
}
@@ -158,7 +158,7 @@ public static void ReleaseFingerId(int fingerId)
{
if (IsFingerIdRetained(fingerId))
{
- _GetInstance().m_RetainedFingerIds.Remove(fingerId);
+ GetInstance()._retainedFingerIds.Remove(fingerId);
}
}
@@ -169,21 +169,21 @@ public static void ReleaseFingerId(int fingerId)
/// True if the finger is retained.
public static bool IsFingerIdRetained(int fingerId)
{
- return _GetInstance().m_RetainedFingerIds.Contains(fingerId);
+ return GetInstance()._retainedFingerIds.Contains(fingerId);
}
///
/// Initializes the GestureTouchesUtility singleton if needed and returns a valid instance.
///
/// The instance of GestureTouchesUtility.
- private static GestureTouchesUtility _GetInstance()
+ private static GestureTouchesUtility GetInstance()
{
- if (s_Instance == null)
+ if (_instance == null)
{
- s_Instance = new GestureTouchesUtility();
+ _instance = new GestureTouchesUtility();
}
- return s_Instance;
+ return _instance;
}
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGesture.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGesture.cs
index ec91c6be..808ecad6 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGesture.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGesture.cs
@@ -103,13 +103,11 @@ protected internal override bool CanStart()
return false;
}
- PinchGestureRecognizer pinchRecognizer = Recognizer as PinchGestureRecognizer;
-
Vector3 firstToSecondDirection = (StartPosition1 - StartPosition2).normalized;
float dot1 = Vector3.Dot(touch1.deltaPosition.normalized, -firstToSecondDirection);
float dot2 = Vector3.Dot(touch2.deltaPosition.normalized, firstToSecondDirection);
float dotThreshold =
- Mathf.Cos(pinchRecognizer.SlopMotionDirectionDegrees * Mathf.Deg2Rad);
+ Mathf.Cos(PinchGestureRecognizer._slopMotionDirectionDegrees * Mathf.Deg2Rad);
// Check angle of motion for the first touch.
if (touch1.deltaPosition != Vector2.zero && Mathf.Abs(dot1) < dotThreshold)
@@ -126,7 +124,7 @@ protected internal override bool CanStart()
float startgap = (StartPosition1 - StartPosition2).magnitude;
Gap = (touch1.position - touch2.position).magnitude;
float separation = GestureTouchesUtility.PixelsToInches(Mathf.Abs(Gap - startgap));
- if (separation < pinchRecognizer.SlopInches)
+ if (separation < PinchGestureRecognizer._slopInches)
{
return false;
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGestureRecognizer.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGestureRecognizer.cs
index c72345e8..56c46472 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGestureRecognizer.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/PinchGestureRecognizer.cs
@@ -28,24 +28,8 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class PinchGestureRecognizer : GestureRecognizer
{
- private const float k_SlopInches = 0.05f;
- private const float k_SlopMotionDirectionDegrees = 30.0f;
-
- internal float SlopInches
- {
- get
- {
- return k_SlopInches;
- }
- }
-
- internal float SlopMotionDirectionDegrees
- {
- get
- {
- return k_SlopMotionDirectionDegrees;
- }
- }
+ internal const float _slopInches = 0.05f;
+ internal const float _slopMotionDirectionDegrees = 30.0f;
///
/// Creates a Pinch gesture with the given touches.
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGesture.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGesture.cs
index bbca300f..e0e4d08b 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGesture.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGesture.cs
@@ -28,7 +28,7 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class TapGesture : Gesture
{
- private float m_ElapsedTime = 0.0f;
+ private float _elapsedTime = 0.0f;
///
/// Constructs a Tap gesture.
@@ -91,9 +91,8 @@ protected internal override bool UpdateGesture()
Touch touch;
if (GestureTouchesUtility.TryFindTouch(FingerId, out touch))
{
- TapGestureRecognizer tapRecognizer = Recognizer as TapGestureRecognizer;
- m_ElapsedTime += touch.deltaTime;
- if (m_ElapsedTime > tapRecognizer.TimeSeconds)
+ _elapsedTime += touch.deltaTime;
+ if (_elapsedTime > TapGestureRecognizer._timeSeconds)
{
Cancel();
}
@@ -101,7 +100,7 @@ protected internal override bool UpdateGesture()
{
float diff = (touch.position - StartPosition).magnitude;
float diffInches = GestureTouchesUtility.PixelsToInches(diff);
- if (diffInches > tapRecognizer.SlopInches)
+ if (diffInches > TapGestureRecognizer._slopInches)
{
Cancel();
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGestureRecognizer.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGestureRecognizer.cs
index d1219ae1..f0fb9db4 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGestureRecognizer.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TapGestureRecognizer.cs
@@ -28,30 +28,8 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class TapGestureRecognizer : GestureRecognizer
{
- private const float k_SlopInches = 0.1f;
- private const float k_TimeSeconds = 0.3f;
-
- ///
- /// Gets the edge slop distance to filter tap gestures.
- ///
- internal float SlopInches
- {
- get
- {
- return k_SlopInches;
- }
- }
-
- ///
- /// Gets the max time to be considered a Tap gesture.
- ///
- internal float TimeSeconds
- {
- get
- {
- return k_TimeSeconds;
- }
- }
+ internal const float _slopInches = 0.1f;
+ internal const float _timeSeconds = 0.3f;
///
/// Creates a Tap gesture with the given touch.
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TransformationUtility.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TransformationUtility.cs
index facd3ee9..3d347a87 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TransformationUtility.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TransformationUtility.cs
@@ -32,20 +32,20 @@ public static class TransformationUtility
/// Slight offset of the down ray used in GetBestPlacementPosition to ensure that the
/// current groundingPlane is included in the hit results.
///
- private const float k_DownRayOffset = 0.01f;
+ private const float _downRayOffset = 0.01f;
///
/// Max amount (inches) to offset the screen touch in GetBestPlacementPosition.
/// The actual amount if dependent on the angle of the camera relative.
/// The further downward the camera is angled, the more the screen touch is offset.
///
- private const float k_MaxScreenTouchOffset = 0.4f;
+ private const float _maxScreenTouchOffset = 0.4f;
///
/// In GetBestPlacementPosition, when the camera is closer than this value to the object,
/// reduce how much the object hovers.
///
- private const float k_HoverDistanceThreshold = 1.0f;
+ private const float _hoverDistanceThreshold = 1.0f;
///
/// Translation mode.
@@ -108,14 +108,14 @@ public static Placement GetBestPlacementPosition(
angle = 90.0f - angle;
float touchOffsetRatio = Mathf.Clamp01(angle / 90.0f);
- float screenTouchOffset = touchOffsetRatio * k_MaxScreenTouchOffset;
+ float screenTouchOffset = touchOffsetRatio * _maxScreenTouchOffset;
screenPos.y += GestureTouchesUtility.InchesToPixels(screenTouchOffset);
float hoverRatio = Mathf.Clamp01(angle / 45.0f);
hoverOffset *= hoverRatio;
float distance = (Camera.main.transform.position - currentAnchorPosition).magnitude;
- float distanceHoverRatio = Mathf.Clamp01(distance / k_HoverDistanceThreshold);
+ float distanceHoverRatio = Mathf.Clamp01(distance / _hoverDistanceThreshold);
hoverOffset *= distanceHoverRatio;
// The best estimate of the point in the plane where the object will be placed:
@@ -236,7 +236,7 @@ public static Placement GetBestPlacementPosition(
// Cast straight down onto AR planes that are lower than the current grounding plane.
if (Frame.Raycast(
- groundingPoint + (Vector3.up * k_DownRayOffset), Vector3.down,
+ groundingPoint + (Vector3.up * _downRayOffset), Vector3.down,
out hit, Mathf.Infinity, TrackableHitFlags.PlaneWithinBounds))
{
result.PlacementPosition = hit.Pose.position;
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGesture.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGesture.cs
index 58ea16ed..bf400716 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGesture.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGesture.cs
@@ -28,8 +28,8 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class TwistGesture : Gesture
{
- private Vector2 m_PreviousPosition1;
- private Vector2 m_PreviousPosition2;
+ private Vector2 _previousPosition1;
+ private Vector2 _previousPosition2;
///
/// Constructs a PinchGesture gesture.
@@ -101,11 +101,9 @@ protected internal override bool CanStart()
return false;
}
- TwistGestureRecognizer twistRecognizer = Recognizer as TwistGestureRecognizer;
-
float rotation = CalculateDeltaRotation(
touch1.position, touch2.position, StartPosition1, StartPosition2);
- if (Mathf.Abs(rotation) < twistRecognizer.SlopRotation)
+ if (Mathf.Abs(rotation) < TwistGestureRecognizer._slopRotation)
{
return false;
}
@@ -124,8 +122,8 @@ protected internal override void OnStart()
Touch touch1, touch2;
GestureTouchesUtility.TryFindTouch(FingerId1, out touch1);
GestureTouchesUtility.TryFindTouch(FingerId2, out touch2);
- m_PreviousPosition1 = touch1.position;
- m_PreviousPosition2 = touch2.position;
+ _previousPosition1 = touch1.position;
+ _previousPosition2 = touch2.position;
}
///
@@ -162,17 +160,17 @@ protected internal override bool UpdateGesture()
float rotation = CalculateDeltaRotation(
touch1.position,
touch2.position,
- m_PreviousPosition1,
- m_PreviousPosition2);
+ _previousPosition1,
+ _previousPosition2);
DeltaRotation = rotation;
- m_PreviousPosition1 = touch1.position;
- m_PreviousPosition2 = touch2.position;
+ _previousPosition1 = touch1.position;
+ _previousPosition2 = touch2.position;
return true;
}
- m_PreviousPosition1 = touch1.position;
- m_PreviousPosition2 = touch2.position;
+ _previousPosition1 = touch1.position;
+ _previousPosition2 = touch2.position;
DeltaRotation = 0.0f;
return false;
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGestureRecognizer.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGestureRecognizer.cs
index 22b7670f..542683ec 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGestureRecognizer.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwistGestureRecognizer.cs
@@ -28,15 +28,7 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class TwistGestureRecognizer : GestureRecognizer
{
- private const float k_SlopRotation = 10.0f;
-
- internal float SlopRotation
- {
- get
- {
- return k_SlopRotation;
- }
- }
+ internal const float _slopRotation = 10.0f;
///
/// Creates a Twist gesture with the given touches.
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGesture.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGesture.cs
index c8f0fad7..faddaeff 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGesture.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGesture.cs
@@ -109,20 +109,17 @@ protected internal override bool CanStart()
float diff1 = (pos1 - StartPosition1).magnitude;
Vector2 pos2 = touch2.position;
float diff2 = (pos2 - StartPosition2).magnitude;
- float slopInches = (Recognizer as TwoFingerDragGestureRecognizer).SlopInches;
+ float slopInches = TwoFingerDragGestureRecognizer._slopInches;
if (GestureTouchesUtility.PixelsToInches(diff1) < slopInches ||
GestureTouchesUtility.PixelsToInches(diff2) < slopInches)
{
return false;
}
- TwoFingerDragGestureRecognizer recognizer =
- Recognizer as TwoFingerDragGestureRecognizer;
-
// Check both fingers move in the same direction.
float dot =
Vector3.Dot(touch1.deltaPosition.normalized, touch2.deltaPosition.normalized);
- if (dot < Mathf.Cos(recognizer.AngleThresholdRadians))
+ if (dot < Mathf.Cos(TwoFingerDragGestureRecognizer._angleThresholdRadians))
{
return false;
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGestureRecognizer.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGestureRecognizer.cs
index 9b1733f5..2f26e7ba 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGestureRecognizer.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Gestures/TwoFingerDragGestureRecognizer.cs
@@ -28,24 +28,8 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class TwoFingerDragGestureRecognizer : GestureRecognizer
{
- private const float k_SlopInches = 0.1f;
- private const float k_AngleThresholdRadians = Mathf.PI / 6;
-
- internal float SlopInches
- {
- get
- {
- return k_SlopInches;
- }
- }
-
- internal float AngleThresholdRadians
- {
- get
- {
- return k_AngleThresholdRadians;
- }
- }
+ internal const float _slopInches = 0.1f;
+ internal const float _angleThresholdRadians = Mathf.PI / 6;
///
/// Creates a two finger drag gesture with the given touches.
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ManipulationSystem.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ManipulationSystem.cs
index dfae8004..b4ba7cee 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ManipulationSystem.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ManipulationSystem.cs
@@ -32,18 +32,18 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class ManipulationSystem : MonoBehaviour
{
- private static ManipulationSystem s_Instance = null;
+ private static ManipulationSystem _instance = null;
- private DragGestureRecognizer m_DragGestureRecognizer = new DragGestureRecognizer();
+ private DragGestureRecognizer _dragGestureRecognizer = new DragGestureRecognizer();
- private PinchGestureRecognizer m_PinchGestureRecognizer = new PinchGestureRecognizer();
+ private PinchGestureRecognizer _pinchGestureRecognizer = new PinchGestureRecognizer();
- private TwoFingerDragGestureRecognizer m_TwoFingerDragGestureRecognizer =
+ private TwoFingerDragGestureRecognizer _twoFingerDragGestureRecognizer =
new TwoFingerDragGestureRecognizer();
- private TapGestureRecognizer m_TapGestureRecognizer = new TapGestureRecognizer();
+ private TapGestureRecognizer _tapGestureRecognizer = new TapGestureRecognizer();
- private TwistGestureRecognizer m_TwistGestureRecognizer = new TwistGestureRecognizer();
+ private TwistGestureRecognizer _twistGestureRecognizer = new TwistGestureRecognizer();
///
/// Gets the ManipulationSystem instance.
@@ -52,12 +52,12 @@ public static ManipulationSystem Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
var manipulationSystems = FindObjectsOfType();
if (manipulationSystems.Length > 0)
{
- s_Instance = manipulationSystems[0];
+ _instance = manipulationSystems[0];
}
else
{
@@ -65,7 +65,7 @@ public static ManipulationSystem Instance
}
}
- return s_Instance;
+ return _instance;
}
}
@@ -76,7 +76,7 @@ public DragGestureRecognizer DragGestureRecognizer
{
get
{
- return m_DragGestureRecognizer;
+ return _dragGestureRecognizer;
}
}
@@ -87,7 +87,7 @@ public PinchGestureRecognizer PinchGestureRecognizer
{
get
{
- return m_PinchGestureRecognizer;
+ return _pinchGestureRecognizer;
}
}
@@ -98,7 +98,7 @@ public TwoFingerDragGestureRecognizer TwoFingerDragGestureRecognizer
{
get
{
- return m_TwoFingerDragGestureRecognizer;
+ return _twoFingerDragGestureRecognizer;
}
}
@@ -109,7 +109,7 @@ public TapGestureRecognizer TapGestureRecognizer
{
get
{
- return m_TapGestureRecognizer;
+ return _tapGestureRecognizer;
}
}
@@ -120,7 +120,7 @@ public TwistGestureRecognizer TwistGestureRecognizer
{
get
{
- return m_TwistGestureRecognizer;
+ return _twistGestureRecognizer;
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ElevationManipulator.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ElevationManipulator.cs
index ab4f8201..8c7585e6 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ElevationManipulator.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ElevationManipulator.cs
@@ -35,7 +35,7 @@ public class ElevationManipulator : Manipulator
///
public LineRenderer LineRenderer;
- private Vector3 m_Origin;
+ private Vector3 _origin;
///
/// Returns true if the transformation can be started for the given gesture.
@@ -69,10 +69,10 @@ protected override bool CanStartManipulationForGesture(TwoFingerDragGesture gest
/// The current gesture.
protected override void OnStartManipulation(TwoFingerDragGesture gesture)
{
- m_Origin = transform.localPosition;
- m_Origin.y = transform.InverseTransformPoint(transform.parent.position).y;
- m_Origin = transform.TransformPoint(m_Origin);
- OnStartElevationVisualization(m_Origin, transform.position);
+ _origin = transform.localPosition;
+ _origin.y = transform.InverseTransformPoint(transform.parent.position).y;
+ _origin = transform.TransformPoint(_origin);
+ OnStartElevationVisualization(_origin, transform.position);
}
///
@@ -90,17 +90,17 @@ protected override void OnContinueManipulation(TwoFingerDragGesture gesture)
transform.Translate(0.0f, elevationAmount, 0.0f);
// We cannot move it below the original position.
- if (transform.localPosition.y < transform.parent.InverseTransformPoint(m_Origin).y)
+ if (transform.localPosition.y < transform.parent.InverseTransformPoint(_origin).y)
{
transform.position = transform.parent.TransformPoint(
new Vector3(
transform.localPosition.x,
- transform.parent.InverseTransformPoint(m_Origin).y,
+ transform.parent.InverseTransformPoint(_origin).y,
transform.localPosition.z));
}
GetComponent().OnElevationChangedScaled(
- Mathf.Abs(transform.position.y - m_Origin.y));
+ Mathf.Abs(transform.position.y - _origin.y));
OnContinueElevationVisualization(transform.position);
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/Manipulator.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/Manipulator.cs
index 6dcad901..bc7e4ed7 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/Manipulator.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/Manipulator.cs
@@ -27,9 +27,9 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public abstract class Manipulator : MonoBehaviour
{
- private bool m_IsManipulating;
+ private bool _isManipulating;
- private GameObject m_SelectedObject;
+ private GameObject _selectedObject;
///
/// Makes this game object become the Selected Object.
@@ -56,7 +56,7 @@ public void Deselect()
/// true, if this is the Selected Object, false otherwise.
public bool IsSelected()
{
- return m_SelectedObject == gameObject;
+ return _selectedObject == gameObject;
}
///
@@ -281,21 +281,21 @@ protected virtual void OnDisable()
///
protected virtual void Update()
{
- if (m_SelectedObject == gameObject &&
+ if (_selectedObject == gameObject &&
ManipulationSystem.Instance.SelectedObject != gameObject)
{
- m_SelectedObject = ManipulationSystem.Instance.SelectedObject;
+ _selectedObject = ManipulationSystem.Instance.SelectedObject;
OnDeselected();
}
- else if (m_SelectedObject != gameObject &&
+ else if (_selectedObject != gameObject &&
ManipulationSystem.Instance.SelectedObject == gameObject)
{
- m_SelectedObject = ManipulationSystem.Instance.SelectedObject;
+ _selectedObject = ManipulationSystem.Instance.SelectedObject;
OnSelected();
}
else
{
- m_SelectedObject = ManipulationSystem.Instance.SelectedObject;
+ _selectedObject = ManipulationSystem.Instance.SelectedObject;
}
}
@@ -389,14 +389,14 @@ private void DisconnectFromRecognizers()
private void OnGestureStarted(DragGesture gesture)
{
- if (m_IsManipulating)
+ if (_isManipulating)
{
return;
}
if (CanStartManipulationForGesture(gesture))
{
- m_IsManipulating = true;
+ _isManipulating = true;
gesture.onUpdated += OnUpdated;
gesture.onFinished += OnFinished;
OnStartManipulation(gesture);
@@ -405,14 +405,14 @@ private void OnGestureStarted(DragGesture gesture)
private void OnGestureStarted(PinchGesture gesture)
{
- if (m_IsManipulating)
+ if (_isManipulating)
{
return;
}
if (CanStartManipulationForGesture(gesture))
{
- m_IsManipulating = true;
+ _isManipulating = true;
gesture.onUpdated += OnUpdated;
gesture.onFinished += OnFinished;
OnStartManipulation(gesture);
@@ -421,14 +421,14 @@ private void OnGestureStarted(PinchGesture gesture)
private void OnGestureStarted(TapGesture gesture)
{
- if (m_IsManipulating)
+ if (_isManipulating)
{
return;
}
if (CanStartManipulationForGesture(gesture))
{
- m_IsManipulating = true;
+ _isManipulating = true;
gesture.onUpdated += OnUpdated;
gesture.onFinished += OnFinished;
OnStartManipulation(gesture);
@@ -437,14 +437,14 @@ private void OnGestureStarted(TapGesture gesture)
private void OnGestureStarted(TwistGesture gesture)
{
- if (m_IsManipulating)
+ if (_isManipulating)
{
return;
}
if (CanStartManipulationForGesture(gesture))
{
- m_IsManipulating = true;
+ _isManipulating = true;
gesture.onUpdated += OnUpdated;
gesture.onFinished += OnFinished;
OnStartManipulation(gesture);
@@ -453,14 +453,14 @@ private void OnGestureStarted(TwistGesture gesture)
private void OnGestureStarted(TwoFingerDragGesture gesture)
{
- if (m_IsManipulating)
+ if (_isManipulating)
{
return;
}
if (CanStartManipulationForGesture(gesture))
{
- m_IsManipulating = true;
+ _isManipulating = true;
gesture.onUpdated += OnUpdated;
gesture.onFinished += OnFinished;
OnStartManipulation(gesture);
@@ -469,7 +469,7 @@ private void OnGestureStarted(TwoFingerDragGesture gesture)
private void OnUpdated(DragGesture gesture)
{
- if (!m_IsManipulating)
+ if (!_isManipulating)
{
return;
}
@@ -477,7 +477,7 @@ private void OnUpdated(DragGesture gesture)
// Can only transform selected Items.
if (ManipulationSystem.Instance.SelectedObject != gameObject)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
return;
}
@@ -487,7 +487,7 @@ private void OnUpdated(DragGesture gesture)
private void OnUpdated(PinchGesture gesture)
{
- if (!m_IsManipulating)
+ if (!_isManipulating)
{
return;
}
@@ -495,7 +495,7 @@ private void OnUpdated(PinchGesture gesture)
// Can only transform selected Items.
if (ManipulationSystem.Instance.SelectedObject != gameObject)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
return;
}
@@ -505,7 +505,7 @@ private void OnUpdated(PinchGesture gesture)
private void OnUpdated(TapGesture gesture)
{
- if (!m_IsManipulating)
+ if (!_isManipulating)
{
return;
}
@@ -513,7 +513,7 @@ private void OnUpdated(TapGesture gesture)
// Can only transform selected Items.
if (ManipulationSystem.Instance.SelectedObject != gameObject)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
return;
}
@@ -523,7 +523,7 @@ private void OnUpdated(TapGesture gesture)
private void OnUpdated(TwistGesture gesture)
{
- if (!m_IsManipulating)
+ if (!_isManipulating)
{
return;
}
@@ -531,7 +531,7 @@ private void OnUpdated(TwistGesture gesture)
// Can only transform selected Items.
if (ManipulationSystem.Instance.SelectedObject != gameObject)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
return;
}
@@ -541,7 +541,7 @@ private void OnUpdated(TwistGesture gesture)
private void OnUpdated(TwoFingerDragGesture gesture)
{
- if (!m_IsManipulating)
+ if (!_isManipulating)
{
return;
}
@@ -549,7 +549,7 @@ private void OnUpdated(TwoFingerDragGesture gesture)
// Can only transform selected Items.
if (ManipulationSystem.Instance.SelectedObject != gameObject)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
return;
}
@@ -559,31 +559,31 @@ private void OnUpdated(TwoFingerDragGesture gesture)
private void OnFinished(DragGesture gesture)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
}
private void OnFinished(PinchGesture gesture)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
}
private void OnFinished(TapGesture gesture)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
}
private void OnFinished(TwistGesture gesture)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
}
private void OnFinished(TwoFingerDragGesture gesture)
{
- m_IsManipulating = false;
+ _isManipulating = false;
OnEndManipulation(gesture);
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/RotationManipulator.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/RotationManipulator.cs
index 59e6c6c5..d05fef34 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/RotationManipulator.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/RotationManipulator.cs
@@ -29,8 +29,8 @@ namespace GoogleARCore.Examples.ObjectManipulation
///
public class RotationManipulator : Manipulator
{
- private const float k_RotationRateDegreesDrag = 100.0f;
- private const float k_RotationRateDegreesTwist = 2.5f;
+ private const float _rotationRateDegreesDrag = 100.0f;
+ private const float _rotationRateDegreesTwist = 2.5f;
///
/// Returns true if the manipulation can be started for the given Drag gesture.
@@ -85,7 +85,7 @@ protected override void OnContinueManipulation(DragGesture gesture)
Quaternion DeviceToWorld = Camera.main.transform.rotation;
Vector3 rotatedDelta = WorldToVerticalOrientedDevice * DeviceToWorld * gesture.Delta;
- float rotationAmount = sign * (rotatedDelta.x / Screen.dpi) * k_RotationRateDegreesDrag;
+ float rotationAmount = sign * (rotatedDelta.x / Screen.dpi) * _rotationRateDegreesDrag;
transform.Rotate(0.0f, rotationAmount, 0.0f);
}
@@ -95,7 +95,7 @@ protected override void OnContinueManipulation(DragGesture gesture)
/// The current twist gesture.
protected override void OnContinueManipulation(TwistGesture gesture)
{
- float rotationAmount = -gesture.DeltaRotation * k_RotationRateDegreesTwist;
+ float rotationAmount = -gesture.DeltaRotation * _rotationRateDegreesTwist;
transform.Rotate(0.0f, rotationAmount, 0.0f);
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ScaleManipulator.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ScaleManipulator.cs
index a6de5822..c6627277 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ScaleManipulator.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/ScaleManipulator.cs
@@ -42,14 +42,14 @@ public class ScaleManipulator : Manipulator
[Range(0.1f, 10.0f)]
public float MaxScale = 1.75f;
- private const float k_ElasticRatioLimit = 0.8f;
- private const float k_Sensitivity = 0.75f;
- private const float k_Elasticity = 0.15f;
+ private const float _elasticRatioLimit = 0.8f;
+ private const float _sensitivity = 0.75f;
+ private const float _elasticity = 0.15f;
- private float m_CurrentScaleRatio;
- private bool m_IsScaling;
+ private float _currentScaleRatio;
+ private bool _isScaling;
- private float ScaleDelta
+ private float _scaleDelta
{
get
{
@@ -63,20 +63,20 @@ private float ScaleDelta
}
}
- private float ClampedScaleRatio
+ private float _clampedScaleRatio
{
get
{
- return Mathf.Clamp01(m_CurrentScaleRatio);
+ return Mathf.Clamp01(_currentScaleRatio);
}
}
- private float CurrentScale
+ private float _currentScale
{
get
{
- float elasticScaleRatio = ClampedScaleRatio + ElasticDelta();
- float elasticScale = MinScale + (elasticScaleRatio * ScaleDelta);
+ float elasticScaleRatio = _clampedScaleRatio + ElasticDelta();
+ float elasticScale = MinScale + (elasticScaleRatio * _scaleDelta);
return elasticScale;
}
}
@@ -87,7 +87,7 @@ private float CurrentScale
protected override void OnEnable()
{
base.OnEnable();
- m_CurrentScaleRatio = (transform.localScale.x - MinScale) / ScaleDelta;
+ _currentScaleRatio = (transform.localScale.x - MinScale) / _scaleDelta;
}
///
@@ -116,8 +116,8 @@ protected override bool CanStartManipulationForGesture(PinchGesture gesture)
/// The gesture that started this transformation.
protected override void OnStartManipulation(PinchGesture gesture)
{
- m_IsScaling = true;
- m_CurrentScaleRatio = (transform.localScale.x - MinScale) / ScaleDelta;
+ _isScaling = true;
+ _currentScaleRatio = (transform.localScale.x - MinScale) / _scaleDelta;
}
///
@@ -126,16 +126,16 @@ protected override void OnStartManipulation(PinchGesture gesture)
/// The current gesture.
protected override void OnContinueManipulation(PinchGesture gesture)
{
- m_CurrentScaleRatio +=
- k_Sensitivity * GestureTouchesUtility.PixelsToInches(gesture.GapDelta);
+ _currentScaleRatio +=
+ _sensitivity * GestureTouchesUtility.PixelsToInches(gesture.GapDelta);
- float currentScale = CurrentScale;
+ float currentScale = _currentScale;
transform.localScale = new Vector3(currentScale, currentScale, currentScale);
// If we've tried to scale too far beyond the limit, then cancel the gesture
// to snap back within the scale range.
- if (m_CurrentScaleRatio < -k_ElasticRatioLimit
- || m_CurrentScaleRatio > (1.0f + k_ElasticRatioLimit))
+ if (_currentScaleRatio < -_elasticRatioLimit
+ || _currentScaleRatio > (1.0f + _elasticRatioLimit))
{
gesture.Cancel();
}
@@ -147,36 +147,36 @@ protected override void OnContinueManipulation(PinchGesture gesture)
/// The current gesture.
protected override void OnEndManipulation(PinchGesture gesture)
{
- m_IsScaling = false;
+ _isScaling = false;
}
private float ElasticDelta()
{
float overRatio = 0.0f;
- if (m_CurrentScaleRatio > 1.0f)
+ if (_currentScaleRatio > 1.0f)
{
- overRatio = m_CurrentScaleRatio - 1.0f;
+ overRatio = _currentScaleRatio - 1.0f;
}
- else if (m_CurrentScaleRatio < 0.0f)
+ else if (_currentScaleRatio < 0.0f)
{
- overRatio = m_CurrentScaleRatio;
+ overRatio = _currentScaleRatio;
}
else
{
return 0.0f;
}
- return (1.0f - (1.0f / ((Mathf.Abs(overRatio) * k_Elasticity) + 1.0f)))
+ return (1.0f - (1.0f / ((Mathf.Abs(overRatio) * _elasticity) + 1.0f)))
* Mathf.Sign(overRatio);
}
private void LateUpdate()
{
- if (!m_IsScaling)
+ if (!_isScaling)
{
- m_CurrentScaleRatio =
- Mathf.Lerp(m_CurrentScaleRatio, ClampedScaleRatio, Time.deltaTime * 8.0f);
- float currentScale = CurrentScale;
+ _currentScaleRatio =
+ Mathf.Lerp(_currentScaleRatio, _clampedScaleRatio, Time.deltaTime * 8.0f);
+ float currentScale = _currentScale;
transform.localScale = new Vector3(currentScale, currentScale, currentScale);
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/SelectionManipulator.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/SelectionManipulator.cs
index 9a9ed39d..b78a7e19 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/SelectionManipulator.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/SelectionManipulator.cs
@@ -32,7 +32,7 @@ public class SelectionManipulator : Manipulator
///
public GameObject SelectionVisualization;
- private float m_ScaledElevation;
+ private float _scaledElevation;
///
/// Should be called when the object elevation changes, to make sure that the Selection
@@ -42,7 +42,7 @@ public class SelectionManipulator : Manipulator
/// The current object's elevation.
public void OnElevationChanged(float elevation)
{
- m_ScaledElevation = elevation * transform.localScale.y;
+ _scaledElevation = elevation * transform.localScale.y;
SelectionVisualization.transform.localPosition = new Vector3(0, -elevation, 0);
}
@@ -55,7 +55,7 @@ public void OnElevationChanged(float elevation)
/// scale.
public void OnElevationChangedScaled(float scaledElevation)
{
- m_ScaledElevation = scaledElevation;
+ _scaledElevation = scaledElevation;
SelectionVisualization.transform.localPosition =
new Vector3(0, -scaledElevation / transform.localScale.y, 0);
}
@@ -68,7 +68,7 @@ protected override void Update()
base.Update();
if (transform.hasChanged)
{
- float height = -m_ScaledElevation / transform.localScale.y;
+ float height = -_scaledElevation / transform.localScale.y;
SelectionVisualization.transform.localPosition = new Vector3(0, height, 0);
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/TranslationManipulator.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/TranslationManipulator.cs
index 0f1c2e1a..5de0f839 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/TranslationManipulator.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/Manipulators/TranslationManipulator.cs
@@ -40,22 +40,22 @@ public class TranslationManipulator : Manipulator
///
public float MaxTranslationDistance;
- private const float k_PositionSpeed = 12.0f;
- private const float k_DiffThreshold = 0.0001f;
+ private const float _positionSpeed = 12.0f;
+ private const float _diffThreshold = 0.0001f;
- private bool m_IsActive = false;
- private Vector3 m_DesiredAnchorPosition;
- private Vector3 m_DesiredLocalPosition;
- private Quaternion m_DesiredRotation;
- private float m_GroundingPlaneHeight;
- private TrackableHit m_LastHit;
+ private bool _isActive = false;
+ private Vector3 _desiredAnchorPosition;
+ private Vector3 _desiredLocalPosition;
+ private Quaternion _desiredRotation;
+ private float _groundingPlaneHeight;
+ private TrackableHit _lastHit;
///
/// The Unity's Start method.
///
protected void Start()
{
- m_DesiredLocalPosition = new Vector3(0, 0, 0);
+ _desiredLocalPosition = new Vector3(0, 0, 0);
}
///
@@ -97,7 +97,7 @@ protected override bool CanStartManipulationForGesture(DragGesture gesture)
/// The current gesture.
protected override void OnStartManipulation(DragGesture gesture)
{
- m_GroundingPlaneHeight = transform.parent.position.y;
+ _groundingPlaneHeight = transform.parent.position.y;
}
///
@@ -106,11 +106,11 @@ protected override void OnStartManipulation(DragGesture gesture)
/// The current gesture.
protected override void OnContinueManipulation(DragGesture gesture)
{
- m_IsActive = true;
+ _isActive = true;
TransformationUtility.Placement desiredPlacement =
TransformationUtility.GetBestPlacementPosition(
- transform.parent.position, gesture.Position, m_GroundingPlaneHeight, 0.03f,
+ transform.parent.position, gesture.Position, _groundingPlaneHeight, 0.03f,
MaxTranslationDistance, ObjectTranslationMode);
if (desiredPlacement.HoveringPosition.HasValue &&
@@ -118,30 +118,30 @@ protected override void OnContinueManipulation(DragGesture gesture)
{
// If desired position is lower than current position, don't drop it until it's
// finished.
- m_DesiredLocalPosition = transform.parent.InverseTransformPoint(
+ _desiredLocalPosition = transform.parent.InverseTransformPoint(
desiredPlacement.HoveringPosition.Value);
- m_DesiredAnchorPosition = desiredPlacement.PlacementPosition.Value;
+ _desiredAnchorPosition = desiredPlacement.PlacementPosition.Value;
- m_GroundingPlaneHeight = desiredPlacement.UpdatedGroundingPlaneHeight;
+ _groundingPlaneHeight = desiredPlacement.UpdatedGroundingPlaneHeight;
if (desiredPlacement.PlacementRotation.HasValue)
{
// Rotate if the plane direction has changed.
if (((desiredPlacement.PlacementRotation.Value * Vector3.up) - transform.up)
- .magnitude > k_DiffThreshold)
+ .magnitude > _diffThreshold)
{
- m_DesiredRotation = desiredPlacement.PlacementRotation.Value;
+ _desiredRotation = desiredPlacement.PlacementRotation.Value;
}
else
{
- m_DesiredRotation = transform.rotation;
+ _desiredRotation = transform.rotation;
}
}
if (desiredPlacement.PlacementPlane.HasValue)
{
- m_LastHit = desiredPlacement.PlacementPlane.Value;
+ _lastHit = desiredPlacement.PlacementPlane.Value;
}
}
}
@@ -154,7 +154,7 @@ protected override void OnEndManipulation(DragGesture gesture)
{
GameObject oldAnchor = transform.parent.gameObject;
- Pose desiredPose = new Pose(m_DesiredAnchorPosition, m_LastHit.Pose.rotation);
+ Pose desiredPose = new Pose(_desiredAnchorPosition, _lastHit.Pose.rotation);
Vector3 desiredLocalPosition =
transform.parent.InverseTransformPoint(desiredPose.position);
@@ -166,30 +166,30 @@ protected override void OnEndManipulation(DragGesture gesture)
desiredPose.position = transform.parent.TransformPoint(desiredLocalPosition);
- Anchor newAnchor = m_LastHit.Trackable.CreateAnchor(desiredPose);
+ Anchor newAnchor = _lastHit.Trackable.CreateAnchor(desiredPose);
transform.parent = newAnchor.transform;
Destroy(oldAnchor);
- m_DesiredLocalPosition = Vector3.zero;
+ _desiredLocalPosition = Vector3.zero;
// Rotate if the plane direction has changed.
- if (((desiredPose.rotation * Vector3.up) - transform.up).magnitude > k_DiffThreshold)
+ if (((desiredPose.rotation * Vector3.up) - transform.up).magnitude > _diffThreshold)
{
- m_DesiredRotation = desiredPose.rotation;
+ _desiredRotation = desiredPose.rotation;
}
else
{
- m_DesiredRotation = transform.rotation;
+ _desiredRotation = transform.rotation;
}
// Make sure position is updated one last time.
- m_IsActive = true;
+ _isActive = true;
}
private void UpdatePosition()
{
- if (!m_IsActive)
+ if (!_isActive)
{
return;
}
@@ -197,13 +197,13 @@ private void UpdatePosition()
// Lerp position.
Vector3 oldLocalPosition = transform.localPosition;
Vector3 newLocalPosition = Vector3.Lerp(
- oldLocalPosition, m_DesiredLocalPosition, Time.deltaTime * k_PositionSpeed);
+ oldLocalPosition, _desiredLocalPosition, Time.deltaTime * _positionSpeed);
- float diffLenght = (m_DesiredLocalPosition - newLocalPosition).magnitude;
- if (diffLenght < k_DiffThreshold)
+ float diffLenght = (_desiredLocalPosition - newLocalPosition).magnitude;
+ if (diffLenght < _diffThreshold)
{
- newLocalPosition = m_DesiredLocalPosition;
- m_IsActive = false;
+ newLocalPosition = _desiredLocalPosition;
+ _isActive = false;
}
transform.localPosition = newLocalPosition;
@@ -211,13 +211,13 @@ private void UpdatePosition()
// Lerp rotation.
Quaternion oldRotation = transform.rotation;
Quaternion newRotation =
- Quaternion.Lerp(oldRotation, m_DesiredRotation, Time.deltaTime * k_PositionSpeed);
+ Quaternion.Lerp(oldRotation, _desiredRotation, Time.deltaTime * _positionSpeed);
transform.rotation = newRotation;
// Avoid placing the selection higher than the object if the anchor is higher than the
// object.
float newElevation =
- Mathf.Max(0, -transform.InverseTransformPoint(m_DesiredAnchorPosition).y);
+ Mathf.Max(0, -transform.InverseTransformPoint(_desiredAnchorPosition).y);
GetComponent().OnElevationChanged(newElevation);
}
}
diff --git a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ObjectManipulationController.cs b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ObjectManipulationController.cs
index 80a69c1f..141b7c3f 100644
--- a/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ObjectManipulationController.cs
+++ b/Assets/GoogleARCore/Examples/ObjectManipulation/Scripts/ObjectManipulationController.cs
@@ -38,14 +38,14 @@ public class ObjectManipulationController : MonoBehaviour
/// True if the app is in the process of quitting due to an ARCore connection error,
/// otherwise false.
///
- private bool m_IsQuitting = false;
+ private bool _isQuitting = false;
///
/// The Unity Update() method.
///
public void Update()
{
- _UpdateApplicationLifecycle();
+ UpdateApplicationLifecycle();
}
///
@@ -61,7 +61,7 @@ public void Awake()
///
/// Check and update the application lifecycle.
///
- private void _UpdateApplicationLifecycle()
+ private void UpdateApplicationLifecycle()
{
// Exit the app when the 'back' button is pressed.
if (Input.GetKey(KeyCode.Escape))
@@ -79,7 +79,7 @@ private void _UpdateApplicationLifecycle()
Screen.sleepTimeout = SleepTimeout.NeverSleep;
}
- if (m_IsQuitting)
+ if (_isQuitting)
{
return;
}
@@ -88,23 +88,23 @@ private void _UpdateApplicationLifecycle()
// appear.
if (Session.Status == SessionStatus.ErrorPermissionNotGranted)
{
- _ShowAndroidToastMessage("Camera permission is needed to run this application.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ ShowAndroidToastMessage("Camera permission is needed to run this application.");
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
else if (Session.Status.IsError())
{
- _ShowAndroidToastMessage(
+ ShowAndroidToastMessage(
"ARCore encountered a problem connecting. Please start the app again.");
- m_IsQuitting = true;
- Invoke("_DoQuit", 0.5f);
+ _isQuitting = true;
+ Invoke("DoQuit", 0.5f);
}
}
///
/// Actually quit the application.
///
- private void _DoQuit()
+ private void DoQuit()
{
Application.Quit();
}
@@ -113,7 +113,7 @@ private void _DoQuit()
/// Show an Android toast message.
///
/// Message string to show in the toast.
- private void _ShowAndroidToastMessage(string message)
+ private void ShowAndroidToastMessage(string message)
{
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity =
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/Info.plist b/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/Info.plist
index d38d26d1..0edc94db 100644
Binary files a/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/Info.plist and b/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/Info.plist differ
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/MacOS/arcore_instant_preview_unity_plugin b/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/MacOS/arcore_instant_preview_unity_plugin
index 9372fc43..47577484 100644
Binary files a/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/MacOS/arcore_instant_preview_unity_plugin and b/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.bundle/Contents/MacOS/arcore_instant_preview_unity_plugin differ
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.dll b/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.dll
index 5a383a2d..692e84d9 100644
Binary files a/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.dll and b/Assets/GoogleARCore/SDK/InstantPreview/Plugins/x86_64/arcore_instant_preview_unity_plugin.dll differ
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/Editor/InstantPreviewBugReport.cs b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/Editor/InstantPreviewBugReport.cs
index 85432626..5a523c8c 100644
--- a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/Editor/InstantPreviewBugReport.cs
+++ b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/Editor/InstantPreviewBugReport.cs
@@ -29,7 +29,7 @@ namespace GoogleARCoreInternal
internal static class InstantPreviewBugReport
{
- private const string k_FileNamePrefix = "arcore_unity_editor_bug_report_";
+ private const string _fileNamePrefix = "arcore_unity_editor_bug_report_";
[MenuItem("Help/Capture ARCore Bug Report")]
private static void CaptureBugReport()
@@ -39,7 +39,7 @@ private static void CaptureBugReport()
DateTime timeStamp = DateTime.Now;
string fileNameTimestamp = timeStamp.ToString("yyyyMMdd_hhmmss");
string filePath = Path.Combine(
- desktopPath, k_FileNamePrefix + fileNameTimestamp + ".txt");
+ desktopPath, _fileNamePrefix + fileNameTimestamp + ".txt");
StreamWriter writer;
// Operating system and hardware info have to be handled separately based on OS
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreview.apk b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreview.apk
index bc24b20c..f4760ed2 100644
Binary files a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreview.apk and b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreview.apk differ
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs
index 8731546a..29f60abb 100644
--- a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs
+++ b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewInput.cs
@@ -33,14 +33,14 @@ namespace GoogleARCore
///
public static class InstantPreviewInput
{
- private static Touch[] s_Touches = new Touch[0];
- private static List s_TouchList = new List();
+ private static Touch[] _touches = new Touch[0];
+ private static List _touchList = new List();
///
/// Gets the inputString from Instant Preview since the last update.
///
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overridden field.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overridden field.")]
public static string inputString
{
get
@@ -53,14 +53,14 @@ public static string inputString
/// Gets the available touch inputs from Instant Preview since the last
/// update.
///
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overridden field.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overridden field.")]
public static Touch[] touches
{
get
{
NativeApi.UnityGotTouches();
- return s_Touches;
+ return _touches;
}
}
@@ -68,8 +68,8 @@ public static Touch[] touches
/// Gets the number of touches available from Instant preview since the
/// last update.
///
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overridden field.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overridden field.")]
public static int touchCount
{
get
@@ -81,8 +81,8 @@ public static int touchCount
///
/// Gets return value of Input.mousePosition.
///
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overridden field.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overridden field.")]
public static Vector3 mousePosition
{
get
@@ -94,8 +94,8 @@ public static Vector3 mousePosition
///
/// Gets a value indicating whether a mouse device is detected.
///
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overridden field.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overridden field.")]
public static bool mousePresent
{
get
@@ -166,19 +166,19 @@ public static void Update()
}
// Removes ended touches, and converts moves to stationary.
- for (int i = 0; i < s_TouchList.Count; ++i)
+ for (int i = 0; i < _touchList.Count; ++i)
{
- if (s_TouchList[i].phase == TouchPhase.Ended)
+ if (_touchList[i].phase == TouchPhase.Ended)
{
- s_TouchList.RemoveAt(i);
+ _touchList.RemoveAt(i);
--i;
continue;
}
- var curTouch = s_TouchList[i];
+ var curTouch = _touchList[i];
curTouch.phase = TouchPhase.Stationary;
curTouch.deltaPosition = Vector2.zero;
- s_TouchList[i] = curTouch;
+ _touchList[i] = curTouch;
}
// Updates touches.
@@ -206,22 +206,22 @@ public static void Update()
Screen.width * nativeTouch.X, Screen.height * (1f - nativeTouch.Y)),
};
- var index = s_TouchList.FindIndex(touch => touch.fingerId == newTouch.fingerId);
+ var index = _touchList.FindIndex(touch => touch.fingerId == newTouch.fingerId);
// Adds touch if not found, otherwise updates it.
if (index < 0)
{
- s_TouchList.Add(newTouch);
+ _touchList.Add(newTouch);
}
else
{
- var prevTouch = s_TouchList[index];
+ var prevTouch = _touchList[index];
newTouch.deltaPosition += newTouch.position - prevTouch.position;
- s_TouchList[index] = newTouch;
+ _touchList[index] = newTouch;
}
}
- s_Touches = s_TouchList.ToArray();
+ _touches = _touchList.ToArray();
}
private struct NativeTouch
diff --git a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs
index 195ca98f..234d5015 100644
--- a/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs
+++ b/Assets/GoogleARCore/SDK/InstantPreview/Scripts/InstantPreviewManager.cs
@@ -56,33 +56,33 @@ public static class InstantPreviewManager
public const string InstantPreviewNativeApi = "arcore_instant_preview_unity_plugin";
// Guid is taken from meta file and should never change.
- private const string k_ApkGuid = "cf7b10762fe921e40a18151a6c92a8a6";
- private const string k_NoDevicesFoundAdbResult = "error: no devices/emulators found";
- private const float k_MaxTolerableAspectRatioDifference = 0.1f;
- private const string k_MismatchedAspectRatioWarningFormatString =
+ private const string _apkGuid = "cf7b10762fe921e40a18151a6c92a8a6";
+ private const string _noDevicesFoundAdbResult = "error: no devices/emulators found";
+ private const float _maxTolerableAspectRatioDifference = 0.1f;
+ private const string _mismatchedAspectRatioWarningFormatString =
"Instant Preview camera texture aspect ratio ({0}) is different than Game view " +
"aspect ratio ({1}).\n" +
" To avoid distorted preview while using Instant Preview, set the Game view Aspect " +
"to match the camera texture resolution ({2}x{3}).";
- private const string k_InstantPreviewInputWarning =
+ private const string _instantPreviewInputWarning =
"Touch ignored. Make sure your script contains `using Input = InstantPreviewInput;` " +
"when using editor Play mode.\nTo learn more, see " +
"https://developers.google.com/ar/develop/unity/instant-preview";
- private const string k_WarningToastFormat = "Instant Preview is not able to {0}. See " +
+ private const string _warningToastFormat = "Instant Preview is not able to {0}. See " +
"Unity console.";
- private const int k_WarningThrottleTimeSeconds = 5;
+ private const int _warningThrottleTimeSeconds = 5;
- private const float k_UnknownGameViewScale = (float)Single.MinValue;
+ private const float _unknownGameViewScale = (float)Single.MinValue;
- private static readonly WaitForEndOfFrame k_WaitForEndOfFrame = new WaitForEndOfFrame();
+ private static readonly WaitForEndOfFrame _waitForEndOfFrame = new WaitForEndOfFrame();
- private static Dictionary s_SentWarnings =
+ private static Dictionary _sentWarnings =
new Dictionary();
- private static HashSet s_OneTimeWarnings = new HashSet();
+ private static HashSet _oneTimeWarnings = new HashSet();
///
/// Gets a value indicating whether Instant Preview is providing the ARCore platform for the
@@ -136,6 +136,12 @@ public static bool ValidateSessionConfig(ARCoreSessionConfig config)
isValid = false;
}
+ if (config.InstantPlacementMode != InstantPlacementMode.Disabled)
+ {
+ LogLimitedSupportMessage("enable 'Instant Placement'", true);
+ isValid = false;
+ }
+
return isValid;
}
@@ -163,6 +169,7 @@ public static ARCoreSessionConfig GenerateInstantPreviewSupportedConfig(
newConfig.LightEstimationMode = LightEstimationMode.Disabled;
newConfig.AugmentedImageDatabase = null;
newConfig.AugmentedFaceMode = AugmentedFaceMode.Disabled;
+ newConfig.InstantPlacementMode = InstantPlacementMode.Disabled;
return newConfig;
}
@@ -178,20 +185,20 @@ public static void LogLimitedSupportMessage(string featureName, bool logOnce = f
"Attempted to {0} which is not yet supported by Instant Preview.\n" +
"Please build and run on device to use this feature.", featureName);
- if (logOnce && !s_OneTimeWarnings.Contains(featureName))
+ if (logOnce && !_oneTimeWarnings.Contains(featureName))
{
- string warning = string.Format(k_WarningToastFormat, featureName);
+ string warning = string.Format(_warningToastFormat, featureName);
NativeApi.SendToast(warning);
- s_OneTimeWarnings.Add(featureName);
+ _oneTimeWarnings.Add(featureName);
}
- if (!logOnce && (!s_SentWarnings.ContainsKey(featureName) ||
- (DateTime.UtcNow - s_SentWarnings[featureName]).TotalSeconds >=
- k_WarningThrottleTimeSeconds))
+ if (!logOnce && (!_sentWarnings.ContainsKey(featureName) ||
+ (DateTime.UtcNow - _sentWarnings[featureName]).TotalSeconds >=
+ _warningThrottleTimeSeconds))
{
- string warning = string.Format(k_WarningToastFormat, featureName);
+ string warning = string.Format(_warningToastFormat, featureName);
NativeApi.SendToast(warning);
- s_SentWarnings[featureName] = DateTime.UtcNow;
+ _sentWarnings[featureName] = DateTime.UtcNow;
}
}
@@ -226,7 +233,7 @@ public static IEnumerator InitializeIfNeeded()
float minGameViewScale = GetMinGameViewScaleOrUnknown();
if (minGameViewScale != 1.0)
{
- String viewScaleText = minGameViewScale == k_UnknownGameViewScale ?
+ String viewScaleText = minGameViewScale == _unknownGameViewScale ?
"" : string.Format("{0}x", minGameViewScale);
Debug.LogWarningFormat(
"Instant Preview disabled, {0} minimum Game view scale unsupported for " +
@@ -350,7 +357,7 @@ private static IEnumerator UpdateLoop(string adbPath)
// Waits until the end of the first frame until capturing the screen size,
// because it might be incorrect when first querying it.
- yield return k_WaitForEndOfFrame;
+ yield return _waitForEndOfFrame;
var currentWidth = 0;
var currentHeight = 0;
@@ -365,7 +372,7 @@ private static IEnumerator UpdateLoop(string adbPath)
// ARCoreSession component it's called from is destroyed.
for (;;)
{
- yield return k_WaitForEndOfFrame;
+ yield return _waitForEndOfFrame;
var curFrameLandscape = Screen.width > Screen.height;
if (prevFrameLandscape != curFrameLandscape)
@@ -413,7 +420,7 @@ private static IEnumerator UpdateLoop(string adbPath)
if (NativeApi.AppShowedTouchWarning())
{
- Debug.LogWarning(k_InstantPreviewInputWarning);
+ Debug.LogWarning(_instantPreviewInputWarning);
NativeApi.UnityLoggedTouchWarning();
}
@@ -437,10 +444,10 @@ private static IEnumerator UpdateLoop(string adbPath)
var destinationAspectRatio = (float)destinationWidth / destinationHeight;
if (Mathf.Abs(sourceAspectRatio - destinationAspectRatio) >
- k_MaxTolerableAspectRatioDifference)
+ _maxTolerableAspectRatioDifference)
{
Debug.LogWarningFormat(
- k_MismatchedAspectRatioWarningFormatString, sourceAspectRatio,
+ _mismatchedAspectRatioWarningFormatString, sourceAspectRatio,
destinationAspectRatio, sourceWidth, sourceHeight);
loggedAspectRatioWarning = true;
}
@@ -478,7 +485,7 @@ private static IEnumerator InstallApkAndRunIfConnected(string adbPath, string lo
string apkPath = null;
#if UNITY_EDITOR
- apkPath = UnityEditor.AssetDatabase.GUIDToAssetPath(k_ApkGuid);
+ apkPath = UnityEditor.AssetDatabase.GUIDToAssetPath(_apkGuid);
#endif // !UNITY_EDITOR
// Early outs if set to install but the apk can't be found.
@@ -486,7 +493,7 @@ private static IEnumerator InstallApkAndRunIfConnected(string adbPath, string lo
{
Debug.LogErrorFormat(
"Trying to install Instant Preview APK but reference to InstantPreview.apk " +
- "is broken. Couldn't find an asset with .meta file guid={0}.", k_ApkGuid);
+ "is broken. Couldn't find an asset with .meta file guid={0}.", _apkGuid);
yield break;
}
@@ -509,7 +516,7 @@ private static IEnumerator InstallApkAndRunIfConnected(string adbPath, string lo
}
// Early outs if no device is connected.
- if (string.Compare(errors, k_NoDevicesFoundAdbResult) == 0)
+ if (string.Compare(errors, _noDevicesFoundAdbResult) == 0)
{
return;
}
@@ -621,8 +628,8 @@ private static bool PromptToRebuildAugmentedImagesDatabase()
private static bool StartServer(string adbPath, out string version)
{
// Tries to start server.
- const int k_InstantPreviewVersionStringMaxLength = 64;
- var versionStringBuilder = new StringBuilder(k_InstantPreviewVersionStringMaxLength);
+ const int _instantPreviewVersionStringMaxLength = 64;
+ var versionStringBuilder = new StringBuilder(_instantPreviewVersionStringMaxLength);
var started = NativeApi.InitializeInstantPreview(
adbPath, versionStringBuilder, versionStringBuilder.Capacity);
if (!started)
@@ -654,14 +661,14 @@ private static float GetMinGameViewScaleOrUnknown()
var gameViewType = Type.GetType("UnityEditor.GameView,UnityEditor");
if (gameViewType == null)
{
- return k_UnknownGameViewScale;
+ return _unknownGameViewScale;
}
UnityEngine.Object[] gameViewObjects =
UnityEngine.Resources.FindObjectsOfTypeAll(gameViewType);
if (gameViewObjects == null || gameViewObjects.Length == 0)
{
- return k_UnknownGameViewScale;
+ return _unknownGameViewScale;
}
PropertyInfo minScaleProperty =
@@ -669,14 +676,14 @@ private static float GetMinGameViewScaleOrUnknown()
"minScale", BindingFlags.Instance | BindingFlags.NonPublic);
if (minScaleProperty == null)
{
- return k_UnknownGameViewScale;
+ return _unknownGameViewScale;
}
return (float)minScaleProperty.GetValue(gameViewObjects[0], null);
}
catch
{
- return k_UnknownGameViewScale;
+ return _unknownGameViewScale;
}
}
diff --git a/Assets/GoogleARCore/SDK/Materials/ARCoreDepth.cginc b/Assets/GoogleARCore/SDK/Materials/ARCoreDepth.cginc
index b041052b..d935a14f 100644
--- a/Assets/GoogleARCore/SDK/Materials/ARCoreDepth.cginc
+++ b/Assets/GoogleARCore/SDK/Materials/ARCoreDepth.cginc
@@ -76,7 +76,17 @@ inline float _ArCoreDepth_GetBlendedAlpha(float2 uv, float3 virtualDepth, float2
// We choose N=8. To center these points around 0 we need to subctract 7/16.
//
// For the triangular weighting, we take weights from the matrix:
- // https://screenshot.googleplex.com/74BdsbEgxn1
+ //
+ // +-- --+
+ // | 1 2 3 4 4 3 2 1 |
+ // | 2 4 6 8 8 6 4 2 |
+ // | 3 6 9 12 12 9 6 3 |
+ // | 4 8 12 16 16 12 8 4 |
+ // | 4 8 12 16 16 12 8 4 |
+ // | 3 6 9 12 12 9 6 3 |
+ // | 2 4 6 8 8 6 4 2 |
+ // | 1 2 3 4 4 3 2 1 |
+ // +-- --+
const float2 center_bias = float2(7.0/16.0, 7.0/16.0);
diff --git a/Assets/GoogleARCore/SDK/Plugins/arcore_arkit_integration.mm b/Assets/GoogleARCore/SDK/Plugins/arcore_arkit_integration.mm
index e5faee72..62c29831 100644
--- a/Assets/GoogleARCore/SDK/Plugins/arcore_arkit_integration.mm
+++ b/Assets/GoogleARCore/SDK/Plugins/arcore_arkit_integration.mm
@@ -1,3 +1,16 @@
+// Copyright 2018 Google LLC. 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.
#import
@interface ARSessionCast : NSObject
diff --git a/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar b/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar
index cce00613..35d0db89 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar and b/Assets/GoogleARCore/SDK/Plugins/arcore_client.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/arcore_rendering_utils.aar b/Assets/GoogleARCore/SDK/Plugins/arcore_rendering_utils.aar
index 7fc340a8..7599dfbb 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/arcore_rendering_utils.aar and b/Assets/GoogleARCore/SDK/Plugins/arcore_rendering_utils.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/arcore_unity.aar b/Assets/GoogleARCore/SDK/Plugins/arcore_unity.aar
index 2d23e374..f85dfb79 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/arcore_unity.aar and b/Assets/GoogleARCore/SDK/Plugins/arcore_unity.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/customized_manifest.aar b/Assets/GoogleARCore/SDK/Plugins/customized_manifest.aar
new file mode 100644
index 00000000..796d5284
Binary files /dev/null and b/Assets/GoogleARCore/SDK/Plugins/customized_manifest.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/customized_manifest.aar.meta b/Assets/GoogleARCore/SDK/Plugins/customized_manifest.aar.meta
new file mode 100644
index 00000000..90f470f4
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Plugins/customized_manifest.aar.meta
@@ -0,0 +1,29 @@
+fileFormatVersion: 2
+guid: 7b9c17b47f68b4892b65639d69208c3e
+PluginImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ iconMap: {}
+ executionOrder: {}
+ isPreloaded: 0
+ isOverridable: 0
+ platformData:
+ - first:
+ Android: Android
+ second:
+ enabled: 1
+ settings: {}
+ - first:
+ Any:
+ second:
+ enabled: 0
+ settings: {}
+ - first:
+ Editor: Editor
+ second:
+ enabled: 0
+ settings:
+ DefaultValueInitialized: true
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar b/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar
index b6458b76..0048f343 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar and b/Assets/GoogleARCore/SDK/Plugins/google_ar_optional.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar b/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar
index bc86665b..56e70ff0 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar and b/Assets/GoogleARCore/SDK/Plugins/google_ar_required.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar b/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar
index d7bb67ac..e43cf3fa 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar and b/Assets/GoogleARCore/SDK/Plugins/unityandroidpermissions.aar differ
diff --git a/Assets/GoogleARCore/SDK/Plugins/unitygar.aar b/Assets/GoogleARCore/SDK/Plugins/unitygar.aar
index 36cc8e7d..f0527b0d 100644
Binary files a/Assets/GoogleARCore/SDK/Plugins/unitygar.aar and b/Assets/GoogleARCore/SDK/Plugins/unitygar.aar differ
diff --git a/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs b/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs
index 7282f620..c96884e9 100644
--- a/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/ARCoreBackgroundRenderer.cs
@@ -44,25 +44,25 @@ public class ARCoreBackgroundRenderer : MonoBehaviour
[Tooltip("A material used to render the AR background image.")]
public Material BackgroundMaterial;
- private static readonly float k_BlackScreenDuration = 0.5f;
+ private static readonly float _blackScreenDuration = 0.5f;
- private static readonly float k_FadingInDuration = 0.5f;
+ private static readonly float _fadingInDuration = 0.5f;
- private Camera m_Camera;
+ private Camera _camera;
- private Texture m_TransitionImageTexture;
+ private Texture _transitionImageTexture;
- private BackgroundTransitionState m_TransitionState = BackgroundTransitionState.BlackScreen;
+ private BackgroundTransitionState _transitionState = BackgroundTransitionState.BlackScreen;
- private float m_CurrentStateElapsed = 0.0f;
+ private float _currentStateElapsed = 0.0f;
- private bool m_SessionEnabled = false;
+ private bool _sessionEnabled = false;
- private bool m_UserInvertCullingValue = false;
+ private bool _userInvertCullingValue = false;
- private CameraClearFlags m_CameraClearFlags = CameraClearFlags.Skybox;
+ private CameraClearFlags _cameraClearFlags = CameraClearFlags.Skybox;
- private CommandBuffer m_CommandBuffer = null;
+ private CommandBuffer _commandBuffer = null;
private enum BackgroundTransitionState
{
@@ -79,30 +79,30 @@ private void OnEnable()
return;
}
- LifecycleManager.Instance.OnSessionSetEnabled += _OnSessionSetEnabled;
+ LifecycleManager.Instance.OnSessionSetEnabled += OnSessionSetEnabled;
- m_Camera = GetComponent();
+ _camera = GetComponent();
- m_TransitionImageTexture = Resources.Load("ViewInARIcon");
- BackgroundMaterial.SetTexture("_TransitionIconTex", m_TransitionImageTexture);
+ _transitionImageTexture = Resources.Load("ViewInARIcon");
+ BackgroundMaterial.SetTexture("_TransitionIconTex", _transitionImageTexture);
EnableARBackgroundRendering();
}
private void OnDisable()
{
- LifecycleManager.Instance.OnSessionSetEnabled -= _OnSessionSetEnabled;
- m_TransitionState = BackgroundTransitionState.BlackScreen;
- m_CurrentStateElapsed = 0.0f;
+ LifecycleManager.Instance.OnSessionSetEnabled -= OnSessionSetEnabled;
+ _transitionState = BackgroundTransitionState.BlackScreen;
+ _currentStateElapsed = 0.0f;
- m_Camera.ResetProjectionMatrix();
+ _camera.ResetProjectionMatrix();
DisableARBackgroundRendering();
}
private void OnPreRender()
{
- m_UserInvertCullingValue = GL.invertCulling;
+ _userInvertCullingValue = GL.invertCulling;
var sessionComponent = LifecycleManager.Instance.SessionComponent;
if (sessionComponent != null &&
sessionComponent.DeviceCameraDirection == DeviceCameraDirection.FrontFacing)
@@ -113,51 +113,51 @@ private void OnPreRender()
private void OnPostRender()
{
- GL.invertCulling = m_UserInvertCullingValue;
+ GL.invertCulling = _userInvertCullingValue;
}
private void Update()
{
- m_CurrentStateElapsed += Time.deltaTime;
- _UpdateState();
- _UpdateShaderVariables();
+ _currentStateElapsed += Time.deltaTime;
+ UpdateState();
+ UpdateShaderVariables();
}
- private void _UpdateState()
+ private void UpdateState()
{
- if (!m_SessionEnabled && m_TransitionState != BackgroundTransitionState.BlackScreen)
+ if (!_sessionEnabled && _transitionState != BackgroundTransitionState.BlackScreen)
{
- m_TransitionState = BackgroundTransitionState.BlackScreen;
- m_CurrentStateElapsed = 0.0f;
+ _transitionState = BackgroundTransitionState.BlackScreen;
+ _currentStateElapsed = 0.0f;
}
- else if (m_SessionEnabled &&
- m_TransitionState == BackgroundTransitionState.BlackScreen &&
- m_CurrentStateElapsed > k_BlackScreenDuration)
+ else if (_sessionEnabled &&
+ _transitionState == BackgroundTransitionState.BlackScreen &&
+ _currentStateElapsed > _blackScreenDuration)
{
- m_TransitionState = BackgroundTransitionState.FadingIn;
- m_CurrentStateElapsed = 0.0f;
+ _transitionState = BackgroundTransitionState.FadingIn;
+ _currentStateElapsed = 0.0f;
}
- else if (m_SessionEnabled &&
- m_TransitionState == BackgroundTransitionState.FadingIn &&
- m_CurrentStateElapsed > k_FadingInDuration)
+ else if (_sessionEnabled &&
+ _transitionState == BackgroundTransitionState.FadingIn &&
+ _currentStateElapsed > _fadingInDuration)
{
- m_TransitionState = BackgroundTransitionState.CameraImage;
- m_CurrentStateElapsed = 0.0f;
+ _transitionState = BackgroundTransitionState.CameraImage;
+ _currentStateElapsed = 0.0f;
}
}
- private void _UpdateShaderVariables()
+ private void UpdateShaderVariables()
{
const string brightnessVar = "_Brightness";
- if (m_TransitionState == BackgroundTransitionState.BlackScreen)
+ if (_transitionState == BackgroundTransitionState.BlackScreen)
{
BackgroundMaterial.SetFloat(brightnessVar, 0.0f);
}
- else if (m_TransitionState == BackgroundTransitionState.FadingIn)
+ else if (_transitionState == BackgroundTransitionState.FadingIn)
{
BackgroundMaterial.SetFloat(
brightnessVar,
- _CosineLerp(m_CurrentStateElapsed, k_FadingInDuration));
+ CosineLerp(_currentStateElapsed, _fadingInDuration));
}
else
{
@@ -167,11 +167,11 @@ private void _UpdateShaderVariables()
// Set transform of the transition image texture, it may be visible or invisible based
// on lerp value.
const string transformVar = "_TransitionIconTexTransform";
- BackgroundMaterial.SetVector(transformVar, _TextureTransform());
+ BackgroundMaterial.SetVector(transformVar, TextureTransform());
// Background texture should not be rendered when the session is disabled or
// there is no camera image texture available.
- if (m_TransitionState == BackgroundTransitionState.BlackScreen ||
+ if (_transitionState == BackgroundTransitionState.BlackScreen ||
Frame.CameraImage.Texture == null)
{
return;
@@ -193,21 +193,21 @@ private void _UpdateShaderVariables()
new Vector4(uvQuad.BottomLeft.x, uvQuad.BottomLeft.y, uvQuad.BottomRight.x,
uvQuad.BottomRight.y));
- m_Camera.projectionMatrix = Frame.CameraImage.GetCameraProjectionMatrix(
- m_Camera.nearClipPlane, m_Camera.farClipPlane);
+ _camera.projectionMatrix = Frame.CameraImage.GetCameraProjectionMatrix(
+ _camera.nearClipPlane, _camera.farClipPlane);
}
- private void _OnSessionSetEnabled(bool sessionEnabled)
+ private void OnSessionSetEnabled(bool sessionEnabled)
{
- m_SessionEnabled = sessionEnabled;
- if (!m_SessionEnabled)
+ _sessionEnabled = sessionEnabled;
+ if (!_sessionEnabled)
{
- _UpdateState();
- _UpdateShaderVariables();
+ UpdateState();
+ UpdateShaderVariables();
}
}
- private float _CosineLerp(float elapsed, float duration)
+ private float CosineLerp(float elapsed, float duration)
{
float clampedElapsed = Mathf.Clamp(elapsed, 0.0f, duration);
return Mathf.Cos(((clampedElapsed / duration) - 1) * (Mathf.PI / 2));
@@ -221,35 +221,35 @@ private float _CosineLerp(float elapsed, float duration)
/// textureUv.y = transform[2] * screenUv.y + transform[3].
///
/// The transform.
- private Vector4 _TextureTransform()
+ private Vector4 TextureTransform()
{
- float transitionWidthTransform = (m_TransitionImageTexture.width - Screen.width) /
- (2.0f * m_TransitionImageTexture.width);
- float transitionHeightTransform = (m_TransitionImageTexture.height - Screen.height) /
- (2.0f * m_TransitionImageTexture.height);
+ float transitionWidthTransform = (_transitionImageTexture.width - Screen.width) /
+ (2.0f * _transitionImageTexture.width);
+ float transitionHeightTransform = (_transitionImageTexture.height - Screen.height) /
+ (2.0f * _transitionImageTexture.height);
return new Vector4(
- (float)Screen.width / m_TransitionImageTexture.width,
+ (float)Screen.width / _transitionImageTexture.width,
transitionWidthTransform,
- (float)Screen.height / m_TransitionImageTexture.height,
+ (float)Screen.height / _transitionImageTexture.height,
transitionHeightTransform);
}
private void EnableARBackgroundRendering()
{
- if (BackgroundMaterial == null || m_Camera == null)
+ if (BackgroundMaterial == null || _camera == null)
{
return;
}
- m_CameraClearFlags = m_Camera.clearFlags;
- m_Camera.clearFlags = CameraClearFlags.Depth;
+ _cameraClearFlags = _camera.clearFlags;
+ _camera.clearFlags = CameraClearFlags.Depth;
- m_CommandBuffer = new CommandBuffer();
+ _commandBuffer = new CommandBuffer();
#if UNITY_ANDROID
if (SystemInfo.graphicsMultiThreaded && !InstantPreviewManager.IsProvidingPlatform)
{
- m_CommandBuffer.IssuePluginEvent(ExternApi.ARCoreRenderingUtils_GetRenderEventFunc(),
+ _commandBuffer.IssuePluginEvent(ExternApi.ARCoreRenderingUtils_GetRenderEventFunc(),
(int)ApiRenderEvent.WaitOnPostUpdateFence);
#if UNITY_2018_2_OR_NEWER
// There is a bug in Unity that IssuePluginEvent will reset the opengl state but it
@@ -260,30 +260,30 @@ private void EnableARBackgroundRendering()
if (sessionComponent != null &&
sessionComponent.DeviceCameraDirection == DeviceCameraDirection.FrontFacing)
{
- m_CommandBuffer.SetInvertCulling(true);
+ _commandBuffer.SetInvertCulling(true);
}
#endif
}
#endif
- m_CommandBuffer.Blit(null,
+ _commandBuffer.Blit(null,
BuiltinRenderTextureType.CameraTarget, BackgroundMaterial);
- m_Camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, m_CommandBuffer);
- m_Camera.AddCommandBuffer(CameraEvent.BeforeGBuffer, m_CommandBuffer);
+ _camera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, _commandBuffer);
+ _camera.AddCommandBuffer(CameraEvent.BeforeGBuffer, _commandBuffer);
}
private void DisableARBackgroundRendering()
{
- if (m_CommandBuffer == null || m_Camera == null)
+ if (_commandBuffer == null || _camera == null)
{
return;
}
- m_Camera.clearFlags = m_CameraClearFlags;
+ _camera.clearFlags = _cameraClearFlags;
- m_Camera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, m_CommandBuffer);
- m_Camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, m_CommandBuffer);
+ _camera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, _commandBuffer);
+ _camera.RemoveCommandBuffer(CameraEvent.BeforeGBuffer, _commandBuffer);
}
#if UNITY_ANDROID
diff --git a/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs b/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs
index a43075bf..f8b68756 100644
--- a/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/ARCoreSession.cs
@@ -53,7 +53,7 @@ public class ARCoreSession : MonoBehaviour
[Tooltip("Configuration options to select the camera mode and features.")]
public ARCoreCameraConfigFilter CameraConfigFilter;
- private OnChooseCameraConfigurationDelegate m_OnChooseCameraConfiguration;
+ private OnChooseCameraConfigurationDelegate _onChooseCameraConfiguration;
///
/// Selects a camera configuration for the ARCore session being resumed.
@@ -192,12 +192,12 @@ public void OnValidate()
public void RegisterChooseCameraConfigurationCallback(
OnChooseCameraConfigurationDelegate onChooseCameraConfiguration)
{
- m_OnChooseCameraConfiguration = onChooseCameraConfiguration;
+ _onChooseCameraConfiguration = onChooseCameraConfiguration;
}
internal OnChooseCameraConfigurationDelegate GetChooseCameraConfigurationCallback()
{
- return m_OnChooseCameraConfiguration;
+ return _onChooseCameraConfiguration;
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs b/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs
index 8bdf092e..c401be0a 100644
--- a/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/ARCoreSessionConfig.cs
@@ -138,6 +138,14 @@ public class ARCoreSessionConfig : ScriptableObject
///
[Tooltip("Chooses which DepthMode will be used in the ARCore session.")]
public DepthMode DepthMode = DepthMode.Disabled;
+ [Header("Instant Placement")]
+
+ ///
+ /// Chooses the desired Instant Placement mode.
+ ///
+ [Tooltip("Chooses the desired Instant Placement mode.")]
+ public InstantPlacementMode InstantPlacementMode = InstantPlacementMode.Disabled;
+
///
/// Gets or sets a value indicating whether PlaneFinding is enabled.
///
@@ -222,6 +230,7 @@ public override bool Equals(object other)
AugmentedImageDatabase != otherConfig.AugmentedImageDatabase ||
CameraFocusMode != otherConfig.CameraFocusMode ||
DepthMode != otherConfig.DepthMode ||
+ InstantPlacementMode != otherConfig.InstantPlacementMode ||
AugmentedFaceMode != otherConfig.AugmentedFaceMode)
{
return false;
@@ -253,6 +262,7 @@ public void CopyFrom(ARCoreSessionConfig other)
CameraFocusMode = other.CameraFocusMode;
AugmentedFaceMode = other.AugmentedFaceMode;
DepthMode = other.DepthMode;
+ InstantPlacementMode = other.InstantPlacementMode;
}
///
diff --git a/Assets/GoogleARCore/SDK/Scripts/Anchor.cs b/Assets/GoogleARCore/SDK/Scripts/Anchor.cs
index 7ace3ef4..c4943e30 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Anchor.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Anchor.cs
@@ -34,12 +34,12 @@ namespace GoogleARCore
[HelpURL("https://developers.google.com/ar/reference/unity/class/GoogleARCore/Anchor")]
public class Anchor : MonoBehaviour
{
- private static Dictionary s_AnchorDict =
+ private static Dictionary _anchorDict =
new Dictionary(new IntPtrEqualityComparer());
- private TrackingState m_LastFrameTrackingState = TrackingState.Stopped;
+ private TrackingState _lastFrameTrackingState = TrackingState.Stopped;
- private bool m_IsSessionDestroyed = false;
+ private bool _isSessionDestroyed = false;
///
/// Gets the tracking state of the anchor.
@@ -48,19 +48,19 @@ public TrackingState TrackingState
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
// Anchors from another session are considered stopped.
return TrackingState.Stopped;
}
- return NativeSession.AnchorApi.GetTrackingState(NativeHandle);
+ return _nativeSession.AnchorApi.GetTrackingState(_nativeHandle);
}
}
- internal NativeSession NativeSession { get; private set; }
+ internal NativeSession _nativeSession { get; private set; }
- internal IntPtr NativeHandle { get; private set; }
+ internal IntPtr _nativeHandle { get; private set; }
internal static Anchor Factory(NativeSession nativeApi, IntPtr anchorNativeHandle,
bool isCreate = true)
@@ -71,7 +71,7 @@ internal static Anchor Factory(NativeSession nativeApi, IntPtr anchorNativeHandl
}
Anchor result;
- if (s_AnchorDict.TryGetValue(anchorNativeHandle, out result))
+ if (_anchorDict.TryGetValue(anchorNativeHandle, out result))
{
// Release acquired handle and return cached result
AnchorApi.Release(anchorNativeHandle);
@@ -82,11 +82,11 @@ internal static Anchor Factory(NativeSession nativeApi, IntPtr anchorNativeHandl
{
Anchor anchor = (new GameObject()).AddComponent();
anchor.gameObject.name = "Anchor";
- anchor.NativeHandle = anchorNativeHandle;
- anchor.NativeSession = nativeApi;
+ anchor._nativeHandle = anchorNativeHandle;
+ anchor._nativeSession = nativeApi;
anchor.Update();
- s_AnchorDict.Add(anchorNativeHandle, anchor);
+ _anchorDict.Add(anchorNativeHandle, anchor);
return anchor;
}
@@ -98,7 +98,7 @@ internal static Anchor Factory(NativeSession nativeApi, IntPtr anchorNativeHandl
///
internal void Update()
{
- if (NativeHandle == IntPtr.Zero)
+ if (_nativeHandle == IntPtr.Zero)
{
Debug.LogError(
"Anchor components instantiated outside of ARCore are not supported. " +
@@ -106,17 +106,17 @@ internal void Update()
return;
}
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
return;
}
- var pose = NativeSession.AnchorApi.GetPose(NativeHandle);
+ var pose = _nativeSession.AnchorApi.GetPose(_nativeHandle);
transform.position = pose.position;
transform.rotation = pose.rotation;
TrackingState currentFrameTrackingState = TrackingState;
- if (m_LastFrameTrackingState != currentFrameTrackingState)
+ if (_lastFrameTrackingState != currentFrameTrackingState)
{
bool isAnchorTracking = currentFrameTrackingState == TrackingState.Tracking;
foreach (Transform child in transform)
@@ -124,42 +124,42 @@ internal void Update()
child.gameObject.SetActive(isAnchorTracking);
}
- m_LastFrameTrackingState = currentFrameTrackingState;
+ _lastFrameTrackingState = currentFrameTrackingState;
}
}
private void OnDestroy()
{
- if (NativeHandle == IntPtr.Zero)
+ if (_nativeHandle == IntPtr.Zero)
{
return;
}
- if (NativeSession != null && !NativeSession.IsDestroyed)
+ if (_nativeSession != null && !_nativeSession.IsDestroyed)
{
- NativeSession.AnchorApi.Detach(NativeHandle);
+ _nativeSession.AnchorApi.Detach(_nativeHandle);
}
- s_AnchorDict.Remove(NativeHandle);
- AnchorApi.Release(NativeHandle);
+ _anchorDict.Remove(_nativeHandle);
+ AnchorApi.Release(_nativeHandle);
}
- private bool _IsSessionDestroyed()
+ private bool IsSessionDestroyed()
{
- if (!m_IsSessionDestroyed)
+ if (!_isSessionDestroyed)
{
var nativeSession = LifecycleManager.Instance.NativeSession;
- if (nativeSession != NativeSession)
+ if (nativeSession != _nativeSession)
{
Debug.LogErrorFormat(
"The session which created this anchor has been destroyed. " +
"The anchor on GameObject {0} can no longer update.",
this.gameObject != null ? this.gameObject.name : "Unknown");
- m_IsSessionDestroyed = true;
+ _isSessionDestroyed = true;
}
}
- return m_IsSessionDestroyed;
+ return _isSessionDestroyed;
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs b/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs
index 3a5f6aad..a864b50b 100644
--- a/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/AndroidPermissionsManager.cs
@@ -29,11 +29,11 @@ namespace GoogleARCore
///
public class AndroidPermissionsManager : AndroidJavaProxy, IAndroidPermissionsCheck
{
- private static AndroidPermissionsManager s_Instance;
- private static AndroidJavaObject s_Activity;
- private static AndroidJavaObject s_PermissionService;
- private static AsyncTask s_CurrentRequest = null;
- private static Action s_OnPermissionsRequestFinished;
+ private static AndroidPermissionsManager _instance;
+ private static AndroidJavaObject _activity;
+ private static AndroidJavaObject _permissionService;
+ private static AsyncTask _currentRequest = null;
+ private static Action _onPermissionsRequestFinished;
/// @cond EXCLUDE_FROM_DOXYGEN
///
@@ -87,7 +87,7 @@ public static AsyncTask RequestPermission(
new string[] { permissionName }, new bool[] { true }));
}
- if (s_CurrentRequest != null)
+ if (_currentRequest != null)
{
ARDebug.LogError("Attempted to make simultaneous Android permissions requests.");
return null;
@@ -95,10 +95,10 @@ public static AsyncTask RequestPermission(
GetPermissionsService().Call("RequestPermissionAsync", GetUnityActivity(),
new[] { permissionName }, GetInstance());
- s_CurrentRequest =
- new AsyncTask(out s_OnPermissionsRequestFinished);
+ _currentRequest =
+ new AsyncTask(out _onPermissionsRequestFinished);
- return s_CurrentRequest;
+ return _currentRequest;
}
///
@@ -125,7 +125,7 @@ public AsyncTask RequestAndroidPermission(
IsWarning = true, Reason = "Implements java object interface.")]
public virtual void OnPermissionGranted(string permissionName)
{
- _OnPermissionResult(permissionName, true);
+ OnPermissionResult(permissionName, true);
}
/// @endcond
@@ -139,7 +139,7 @@ public virtual void OnPermissionGranted(string permissionName)
IsWarning = true, Reason = "Implements java object interface.")]
public virtual void OnPermissionDenied(string permissionName)
{
- _OnPermissionResult(permissionName, false);
+ OnPermissionResult(permissionName, false);
}
/// @endcond
@@ -157,35 +157,35 @@ public virtual void OnActivityResult()
internal static AndroidPermissionsManager GetInstance()
{
- if (s_Instance == null)
+ if (_instance == null)
{
- s_Instance = new AndroidPermissionsManager();
+ _instance = new AndroidPermissionsManager();
}
- return s_Instance;
+ return _instance;
}
private static AndroidJavaObject GetUnityActivity()
{
- if (s_Activity == null)
+ if (_activity == null)
{
AndroidJavaClass unityPlayer =
new AndroidJavaClass("com.unity3d.player.UnityPlayer");
- s_Activity = unityPlayer.GetStatic("currentActivity");
+ _activity = unityPlayer.GetStatic("currentActivity");
}
- return s_Activity;
+ return _activity;
}
private static AndroidJavaObject GetPermissionsService()
{
- if (s_PermissionService == null)
+ if (_permissionService == null)
{
- s_PermissionService =
+ _permissionService =
new AndroidJavaObject("com.unity3d.plugin.UnityAndroidPermissions");
}
- return s_PermissionService;
+ return _permissionService;
}
/// @endcond
@@ -195,9 +195,9 @@ private static AndroidJavaObject GetPermissionsService()
///
/// The name of the permission.
/// If permission is granted or not.
- private void _OnPermissionResult(string permissionName, bool granted)
+ private void OnPermissionResult(string permissionName, bool granted)
{
- if (s_OnPermissionsRequestFinished == null)
+ if (_onPermissionsRequestFinished == null)
{
Debug.LogErrorFormat(
"AndroidPermissionsManager received an unexpected permissions result {0}",
@@ -206,9 +206,9 @@ private void _OnPermissionResult(string permissionName, bool granted)
}
// Cache completion method and reset request state.
- var onRequestFinished = s_OnPermissionsRequestFinished;
- s_CurrentRequest = null;
- s_OnPermissionsRequestFinished = null;
+ var onRequestFinished = _onPermissionsRequestFinished;
+ _currentRequest = null;
+ _onPermissionsRequestFinished = null;
onRequestFinished(new AndroidPermissionsRequestResult(new string[] { permissionName },
new bool[] { granted }));
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/NativeSession.cs b/Assets/GoogleARCore/SDK/Scripts/Api/NativeSession.cs
index f36cc604..0878b96a 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/NativeSession.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/NativeSession.cs
@@ -28,21 +28,17 @@ namespace GoogleARCoreInternal
internal class NativeSession
{
-#pragma warning disable 414
- private static bool s_ReportedEngineType = false;
-#pragma warning restore 414
+ private PointCloudManager _pointCloudManager = null;
- private PointCloudManager m_PointCloudManager = null;
-
- private TrackableManager m_TrackableManager = null;
+ private TrackableManager _trackableManager = null;
public NativeSession(IntPtr sessionHandle, IntPtr frameHandle)
{
IsDestroyed = false;
SessionHandle = sessionHandle;
FrameHandle = frameHandle;
- m_PointCloudManager = new PointCloudManager(this);
- m_TrackableManager = new TrackableManager(this);
+ _pointCloudManager = new PointCloudManager(this);
+ _trackableManager = new TrackableManager(this);
AnchorApi = new AnchorApi(this);
AugmentedFaceApi = new AugmentedFaceApi(this);
@@ -67,11 +63,9 @@ public NativeSession(IntPtr sessionHandle, IntPtr frameHandle)
TrackableListApi = new TrackableListApi(this);
#if !UNITY_EDITOR
- if (!s_ReportedEngineType)
- {
- SessionApi.ReportEngineType();
- s_ReportedEngineType = true;
- }
+ // Engine type is per session. Hence setting it for each
+ // native session.
+ SessionApi.ReportEngineType();
#endif
}
@@ -85,7 +79,7 @@ public IntPtr PointCloudHandle
{
get
{
- return m_PointCloudManager.PointCloudHandle;
+ return _pointCloudManager.PointCloudHandle;
}
}
@@ -93,7 +87,7 @@ public bool IsPointCloudNew
{
get
{
- return m_PointCloudManager.IsPointCloudNew;
+ return _pointCloudManager.IsPointCloudNew;
}
}
@@ -141,19 +135,19 @@ public bool IsPointCloudNew
public Trackable TrackableFactory(IntPtr nativeHandle)
{
- return m_TrackableManager.TrackableFactory(nativeHandle);
+ return _trackableManager.TrackableFactory(nativeHandle);
}
public void GetTrackables(List trackables, TrackableQueryFilter filter)
where T : Trackable
{
- m_TrackableManager.GetTrackables(trackables, filter);
+ _trackableManager.GetTrackables(trackables, filter);
}
public void OnUpdate(IntPtr frameHandle)
{
FrameHandle = frameHandle;
- m_PointCloudManager.OnUpdate();
+ _pointCloudManager.OnUpdate();
}
public void MarkDestroyed()
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Types/ApiTrackableType.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Types/ApiTrackableType.cs
index fd384f54..456e1657 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Types/ApiTrackableType.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Types/ApiTrackableType.cs
@@ -28,5 +28,6 @@ internal enum ApiTrackableType
Point = 0x41520102,
AugmentedImage = 0x41520104,
AugmentedFace = 0x41520105,
+ InstantPlacementPoint = 0x41520112,
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AnchorApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AnchorApi.cs
index bb7b088e..2371bb36 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AnchorApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AnchorApi.cs
@@ -29,11 +29,11 @@ namespace GoogleARCoreInternal
internal class AnchorApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public AnchorApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public static void Release(IntPtr anchorHandle)
@@ -43,17 +43,17 @@ public static void Release(IntPtr anchorHandle)
public Pose GetPose(IntPtr anchorHandle)
{
- var poseHandle = m_NativeSession.PoseApi.Create();
- ExternApi.ArAnchor_getPose(m_NativeSession.SessionHandle, anchorHandle, poseHandle);
- Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ var poseHandle = _nativeSession.PoseApi.Create();
+ ExternApi.ArAnchor_getPose(_nativeSession.SessionHandle, anchorHandle, poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return resultPose;
}
public TrackingState GetTrackingState(IntPtr anchorHandle)
{
ApiTrackingState trackingState = ApiTrackingState.Stopped;
- ExternApi.ArAnchor_getTrackingState(m_NativeSession.SessionHandle, anchorHandle,
+ ExternApi.ArAnchor_getTrackingState(_nativeSession.SessionHandle, anchorHandle,
ref trackingState);
return trackingState.ToTrackingState();
}
@@ -62,7 +62,7 @@ public ApiCloudAnchorState GetCloudAnchorState(IntPtr anchorHandle)
{
ApiCloudAnchorState cloudState = ApiCloudAnchorState.None;
ExternApi.ArAnchor_getCloudAnchorState(
- m_NativeSession.SessionHandle, anchorHandle, ref cloudState);
+ _nativeSession.SessionHandle, anchorHandle, ref cloudState);
return cloudState;
}
@@ -70,7 +70,7 @@ public string GetCloudAnchorId(IntPtr anchorHandle)
{
IntPtr cloudIdHandle = IntPtr.Zero;
ExternApi.ArAnchor_acquireCloudAnchorId(
- m_NativeSession.SessionHandle, anchorHandle, ref cloudIdHandle);
+ _nativeSession.SessionHandle, anchorHandle, ref cloudIdHandle);
var result = Marshal.PtrToStringAnsi(cloudIdHandle);
ExternApi.ArString_release(cloudIdHandle);
@@ -79,16 +79,16 @@ public string GetCloudAnchorId(IntPtr anchorHandle)
public void Detach(IntPtr anchorHandle)
{
- if (LifecycleManager.Instance.NativeSession == m_NativeSession)
+ if (LifecycleManager.Instance.NativeSession == _nativeSession)
{
- ExternApi.ArAnchor_detach(m_NativeSession.SessionHandle, anchorHandle);
+ ExternApi.ArAnchor_detach(_nativeSession.SessionHandle, anchorHandle);
}
}
public IntPtr CreateList()
{
IntPtr listHandle = IntPtr.Zero;
- ExternApi.ArAnchorList_create(m_NativeSession.SessionHandle, ref listHandle);
+ ExternApi.ArAnchorList_create(_nativeSession.SessionHandle, ref listHandle);
return listHandle;
}
@@ -96,7 +96,7 @@ public int GetListSize(IntPtr anchorListHandle)
{
int size = 0;
ExternApi.ArAnchorList_getSize(
- m_NativeSession.SessionHandle, anchorListHandle, ref size);
+ _nativeSession.SessionHandle, anchorListHandle, ref size);
return size;
}
@@ -104,7 +104,7 @@ public IntPtr AcquireListItem(IntPtr anchorListHandle, int index)
{
IntPtr anchorHandle = IntPtr.Zero;
ExternApi.ArAnchorList_acquireItem(
- m_NativeSession.SessionHandle, anchorListHandle, index, ref anchorHandle);
+ _nativeSession.SessionHandle, anchorListHandle, index, ref anchorHandle);
return anchorHandle;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedFaceApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedFaceApi.cs
index 4556afba..312e3263 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedFaceApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedFaceApi.cs
@@ -36,34 +36,34 @@ namespace GoogleARCoreInternal
internal class AugmentedFaceApi
{
- private NativeSession m_NativeSession;
- private float[] m_TempVertices;
- private float[] m_TempNormals;
- private float[] m_TempUVs;
- private short[] m_TempIndices;
+ private NativeSession _nativeSession;
+ private float[] _tempVertices;
+ private float[] _tempNormals;
+ private float[] _tempUVs;
+ private short[] _tempIndices;
public AugmentedFaceApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public Pose GetCenterPose(IntPtr faceHandle)
{
- var poseHandle = m_NativeSession.PoseApi.Create();
+ var poseHandle = _nativeSession.PoseApi.Create();
ExternApi.ArAugmentedFace_getCenterPose(
- m_NativeSession.SessionHandle, faceHandle, poseHandle);
- Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, faceHandle, poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return resultPose;
}
public Pose GetRegionPose(IntPtr faceHandle, ApiAugmentedFaceRegionType regionType)
{
- var poseHandle = m_NativeSession.PoseApi.Create();
+ var poseHandle = _nativeSession.PoseApi.Create();
ExternApi.ArAugmentedFace_getRegionPose(
- m_NativeSession.SessionHandle, faceHandle, regionType, poseHandle);
- Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, faceHandle, regionType, poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return resultPose;
}
@@ -71,22 +71,22 @@ public void GetVertices(IntPtr faceHandle, List vertices)
{
IntPtr verticesHandle = IntPtr.Zero;
int verticesNum = 0;
- ExternApi.ArAugmentedFace_getMeshVertices(m_NativeSession.SessionHandle, faceHandle,
+ ExternApi.ArAugmentedFace_getMeshVertices(_nativeSession.SessionHandle, faceHandle,
ref verticesHandle, ref verticesNum);
int floatNum = verticesNum * 3;
- if (m_TempVertices == null || m_TempVertices.Length != floatNum)
+ if (_tempVertices == null || _tempVertices.Length != floatNum)
{
- m_TempVertices = new float[floatNum];
+ _tempVertices = new float[floatNum];
}
- Marshal.Copy(verticesHandle, m_TempVertices, 0, floatNum);
+ Marshal.Copy(verticesHandle, _tempVertices, 0, floatNum);
vertices.Clear();
vertices.Capacity = verticesNum;
for (int i = 0; i < floatNum; i += 3)
{
vertices.Add(
- new Vector3(m_TempVertices[i], m_TempVertices[i + 1], -m_TempVertices[i + 2]));
+ new Vector3(_tempVertices[i], _tempVertices[i + 1], -_tempVertices[i + 2]));
}
}
@@ -94,22 +94,22 @@ public void GetNormals(IntPtr faceHandle, List normals)
{
IntPtr normalsHandle = IntPtr.Zero;
int verticesNum = 0;
- ExternApi.ArAugmentedFace_getMeshNormals(m_NativeSession.SessionHandle, faceHandle,
+ ExternApi.ArAugmentedFace_getMeshNormals(_nativeSession.SessionHandle, faceHandle,
ref normalsHandle, ref verticesNum);
int floatNum = verticesNum * 3;
- if (m_TempNormals == null || m_TempNormals.Length != floatNum)
+ if (_tempNormals == null || _tempNormals.Length != floatNum)
{
- m_TempNormals = new float[floatNum];
+ _tempNormals = new float[floatNum];
}
- Marshal.Copy(normalsHandle, m_TempNormals, 0, floatNum);
+ Marshal.Copy(normalsHandle, _tempNormals, 0, floatNum);
normals.Clear();
normals.Capacity = verticesNum;
for (int i = 0; i < floatNum; i += 3)
{
normals.Add(
- new Vector3(m_TempNormals[i], m_TempNormals[i + 1], -m_TempNormals[i + 2]));
+ new Vector3(_tempNormals[i], _tempNormals[i + 1], -_tempNormals[i + 2]));
}
}
@@ -118,20 +118,20 @@ public void GetTextureCoordinates(IntPtr faceHandle, List textureCoordi
IntPtr textureCoordinatesHandle = IntPtr.Zero;
int uvNum = 0;
ExternApi.ArAugmentedFace_getMeshTextureCoordinates(
- m_NativeSession.SessionHandle, faceHandle, ref textureCoordinatesHandle, ref uvNum);
+ _nativeSession.SessionHandle, faceHandle, ref textureCoordinatesHandle, ref uvNum);
int floatNum = uvNum * 2;
- if (m_TempUVs == null || m_TempUVs.Length != floatNum)
+ if (_tempUVs == null || _tempUVs.Length != floatNum)
{
- m_TempUVs = new float[floatNum];
+ _tempUVs = new float[floatNum];
}
- Marshal.Copy(textureCoordinatesHandle, m_TempUVs, 0, floatNum);
+ Marshal.Copy(textureCoordinatesHandle, _tempUVs, 0, floatNum);
textureCoordinates.Clear();
textureCoordinates.Capacity = uvNum;
for (int i = 0; i < floatNum; i += 2)
{
- textureCoordinates.Add(new Vector2(m_TempUVs[i], m_TempUVs[i + 1]));
+ textureCoordinates.Add(new Vector2(_tempUVs[i], _tempUVs[i + 1]));
}
}
@@ -140,23 +140,23 @@ public void GetTriangleIndices(IntPtr faceHandle, List indices)
IntPtr triangleIndicesHandle = IntPtr.Zero;
int triangleNum = 0;
ExternApi.ArAugmentedFace_getMeshTriangleIndices(
- m_NativeSession.SessionHandle, faceHandle, ref triangleIndicesHandle,
+ _nativeSession.SessionHandle, faceHandle, ref triangleIndicesHandle,
ref triangleNum);
int indicesNum = triangleNum * 3;
- if (m_TempIndices == null || m_TempIndices.Length != indicesNum)
+ if (_tempIndices == null || _tempIndices.Length != indicesNum)
{
- m_TempIndices = new short[indicesNum];
+ _tempIndices = new short[indicesNum];
}
- Marshal.Copy(triangleIndicesHandle, m_TempIndices, 0, indicesNum);
+ Marshal.Copy(triangleIndicesHandle, _tempIndices, 0, indicesNum);
indices.Clear();
indices.Capacity = indicesNum;
for (int i = 0; i < indicesNum; i += 3)
{
- indices.Add(m_TempIndices[i]);
- indices.Add(m_TempIndices[i + 2]);
- indices.Add(m_TempIndices[i + 1]);
+ indices.Add(_tempIndices[i]);
+ indices.Add(_tempIndices[i + 2]);
+ indices.Add(_tempIndices[i + 1]);
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageApi.cs
index e53ebd7c..37527efa 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageApi.cs
@@ -38,28 +38,28 @@ namespace GoogleARCoreInternal
internal class AugmentedImageApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public AugmentedImageApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public int GetDatabaseIndex(IntPtr augmentedImageHandle)
{
int outIndex = -1;
- ExternApi.ArAugmentedImage_getIndex(m_NativeSession.SessionHandle, augmentedImageHandle,
+ ExternApi.ArAugmentedImage_getIndex(_nativeSession.SessionHandle, augmentedImageHandle,
ref outIndex);
return outIndex;
}
public Pose GetCenterPose(IntPtr augmentedImageHandle)
{
- IntPtr poseHandle = m_NativeSession.PoseApi.Create();
+ IntPtr poseHandle = _nativeSession.PoseApi.Create();
ExternApi.ArAugmentedImage_getCenterPose(
- m_NativeSession.SessionHandle, augmentedImageHandle, poseHandle);
- Pose result = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, augmentedImageHandle, poseHandle);
+ Pose result = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return result;
}
@@ -67,7 +67,7 @@ public float GetExtentX(IntPtr augmentedImageHandle)
{
float outExtentX = 0f;
ExternApi.ArAugmentedImage_getExtentX(
- m_NativeSession.SessionHandle, augmentedImageHandle, ref outExtentX);
+ _nativeSession.SessionHandle, augmentedImageHandle, ref outExtentX);
return outExtentX;
}
@@ -75,7 +75,7 @@ public float GetExtentZ(IntPtr augmentedImageHandle)
{
float outExtentZ = 0f;
ExternApi.ArAugmentedImage_getExtentZ(
- m_NativeSession.SessionHandle, augmentedImageHandle, ref outExtentZ);
+ _nativeSession.SessionHandle, augmentedImageHandle, ref outExtentZ);
return outExtentZ;
}
@@ -83,7 +83,7 @@ public string GetName(IntPtr augmentedImageHandle)
{
IntPtr outName = IntPtr.Zero;
ExternApi.ArAugmentedImage_acquireName(
- m_NativeSession.SessionHandle, augmentedImageHandle, ref outName);
+ _nativeSession.SessionHandle, augmentedImageHandle, ref outName);
string name = Marshal.PtrToStringAnsi(outName);
ExternApi.ArString_release(outName);
return name;
@@ -93,7 +93,7 @@ public AugmentedImageTrackingMethod GetTrackingMethod(IntPtr augmentedImageHandl
{
AugmentedImageTrackingMethod trackingMethod = AugmentedImageTrackingMethod.NotTracking;
ExternApi.ArAugmentedImage_getTrackingMethod(
- m_NativeSession.SessionHandle, augmentedImageHandle, ref trackingMethod);
+ _nativeSession.SessionHandle, augmentedImageHandle, ref trackingMethod);
return trackingMethod;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageDatabaseApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageDatabaseApi.cs
index a3380554..fa855026 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageDatabaseApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/AugmentedImageDatabaseApi.cs
@@ -38,11 +38,11 @@ namespace GoogleARCoreInternal
internal class AugmentedImageDatabaseApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public AugmentedImageDatabaseApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public static void Release(IntPtr augmentedImageDatabaseHandle)
@@ -58,7 +58,7 @@ public IntPtr Create(byte[] rawData)
GCHandle handle = GCHandle.Alloc(rawData, GCHandleType.Pinned);
ApiArStatus status = ExternApi.ArAugmentedImageDatabase_deserialize(
- m_NativeSession.SessionHandle, handle.AddrOfPinnedObject(), rawData.Length,
+ _nativeSession.SessionHandle, handle.AddrOfPinnedObject(), rawData.Length,
ref outDatabaseHandle);
if (status != ApiArStatus.Success)
{
@@ -76,7 +76,7 @@ public IntPtr Create(byte[] rawData)
else
{
ExternApi.ArAugmentedImageDatabase_create(
- m_NativeSession.SessionHandle, ref outDatabaseHandle);
+ _nativeSession.SessionHandle, ref outDatabaseHandle);
}
return outDatabaseHandle;
@@ -93,7 +93,7 @@ public int AddAugmentedImageAtRuntime(IntPtr augmentedImageDatabaseHandle, strin
return outIndex;
}
- GCHandle grayscaleBytesHandle = _ConvertTextureToGrayscaleBytes(imageSrc);
+ GCHandle grayscaleBytesHandle = ConvertTextureToGrayscaleBytes(imageSrc);
if (grayscaleBytesHandle.AddrOfPinnedObject() == IntPtr.Zero)
{
return -1;
@@ -103,16 +103,16 @@ public int AddAugmentedImageAtRuntime(IntPtr augmentedImageDatabaseHandle, strin
if (width > 0)
{
status = ExternApi.ArAugmentedImageDatabase_addImageWithPhysicalSize(
- m_NativeSession.SessionHandle, augmentedImageDatabaseHandle, name,
- grayscaleBytesHandle.AddrOfPinnedObject(), imageSrc.Width,
- imageSrc.Height, imageSrc.Width, width, ref outIndex);
+ _nativeSession.SessionHandle, augmentedImageDatabaseHandle, name,
+ grayscaleBytesHandle.AddrOfPinnedObject(), imageSrc._width,
+ imageSrc._height, imageSrc._width, width, ref outIndex);
}
else
{
status = ExternApi.ArAugmentedImageDatabase_addImage(
- m_NativeSession.SessionHandle, augmentedImageDatabaseHandle, name,
- grayscaleBytesHandle.AddrOfPinnedObject(), imageSrc.Width,
- imageSrc.Height, imageSrc.Width, ref outIndex);
+ _nativeSession.SessionHandle, augmentedImageDatabaseHandle, name,
+ grayscaleBytesHandle.AddrOfPinnedObject(), imageSrc._width,
+ imageSrc._height, imageSrc._width, ref outIndex);
}
if (grayscaleBytesHandle.IsAllocated)
@@ -130,21 +130,21 @@ public int AddAugmentedImageAtRuntime(IntPtr augmentedImageDatabaseHandle, strin
return outIndex;
}
- private GCHandle _ConvertTextureToGrayscaleBytes(AugmentedImageSrc imageSrc)
+ private GCHandle ConvertTextureToGrayscaleBytes(AugmentedImageSrc imageSrc)
{
byte[] grayscaleBytes = null;
- if (imageSrc.Format == TextureFormat.RGB24 ||
- imageSrc.Format == TextureFormat.RGBA32)
+ if (imageSrc._format == TextureFormat.RGB24 ||
+ imageSrc._format == TextureFormat.RGBA32)
{
- Color[] pixels = imageSrc.Pixels;
+ Color[] pixels = imageSrc._pixels;
grayscaleBytes = new byte[pixels.Length];
- for (int i = 0; i < imageSrc.Height; i++)
+ for (int i = 0; i < imageSrc._height; i++)
{
- int widthDelta = i * imageSrc.Width;
- for (int j = 0; j < imageSrc.Width; j++)
+ int widthDelta = i * imageSrc._width;
+ for (int j = 0; j < imageSrc._width; j++)
{
- int pixelIndex = ((imageSrc.Height - 1 - i) * imageSrc.Width) + j;
+ int pixelIndex = ((imageSrc._height - 1 - i) * imageSrc._width) + j;
grayscaleBytes[widthDelta + j] =
(byte)((
(0.213 * pixels[pixelIndex].r) +
@@ -155,7 +155,7 @@ private GCHandle _ConvertTextureToGrayscaleBytes(AugmentedImageSrc imageSrc)
}
else
{
- Debug.LogError("Unsupported texture format " + imageSrc.Format);
+ Debug.LogError("Unsupported texture format " + imageSrc._format);
}
return GCHandle.Alloc(grayscaleBytes, GCHandleType.Pinned);
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraApi.cs
index 5cdafbef..ea3000e6 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraApi.cs
@@ -34,17 +34,17 @@ namespace GoogleARCoreInternal
internal class CameraApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public CameraApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public TrackingState GetTrackingState(IntPtr cameraHandle)
{
ApiTrackingState apiTrackingState = ApiTrackingState.Stopped;
- ExternApi.ArCamera_getTrackingState(m_NativeSession.SessionHandle,
+ ExternApi.ArCamera_getTrackingState(_nativeSession.SessionHandle,
cameraHandle, ref apiTrackingState);
return apiTrackingState.ToTrackingState();
}
@@ -59,7 +59,7 @@ public LostTrackingReason GetLostTrackingReason(IntPtr cameraHandle)
}
ApiTrackingFailureReason apiTrackingFailureReason = ApiTrackingFailureReason.None;
- ExternApi.ArCamera_getTrackingFailureReason(m_NativeSession.SessionHandle,
+ ExternApi.ArCamera_getTrackingFailureReason(_nativeSession.SessionHandle,
cameraHandle, ref apiTrackingFailureReason);
return apiTrackingFailureReason.ToLostTrackingReason();
}
@@ -71,18 +71,18 @@ public Pose GetPose(IntPtr cameraHandle)
return Pose.identity;
}
- IntPtr poseHandle = m_NativeSession.PoseApi.Create();
- ExternApi.ArCamera_getDisplayOrientedPose(m_NativeSession.SessionHandle, cameraHandle,
+ IntPtr poseHandle = _nativeSession.PoseApi.Create();
+ ExternApi.ArCamera_getDisplayOrientedPose(_nativeSession.SessionHandle, cameraHandle,
poseHandle);
- Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return resultPose;
}
public Matrix4x4 GetProjectionMatrix(IntPtr cameraHandle, float near, float far)
{
Matrix4x4 matrix = Matrix4x4.identity;
- ExternApi.ArCamera_getProjectionMatrix(m_NativeSession.SessionHandle, cameraHandle,
+ ExternApi.ArCamera_getProjectionMatrix(_nativeSession.SessionHandle, cameraHandle,
near, far, ref matrix);
return matrix;
}
@@ -98,13 +98,13 @@ public CameraIntrinsics GetTextureIntrinsics(IntPtr cameraHandle)
}
ExternApi.ArCameraIntrinsics_create(
- m_NativeSession.SessionHandle, ref cameraIntrinsicsHandle);
+ _nativeSession.SessionHandle, ref cameraIntrinsicsHandle);
ExternApi.ArCamera_getTextureIntrinsics(
- m_NativeSession.SessionHandle, cameraHandle, cameraIntrinsicsHandle);
+ _nativeSession.SessionHandle, cameraHandle, cameraIntrinsicsHandle);
CameraIntrinsics textureIntrinsics =
- _GetCameraIntrinsicsFromHandle(cameraIntrinsicsHandle);
+ GetCameraIntrinsicsFromHandle(cameraIntrinsicsHandle);
ExternApi.ArCameraIntrinsics_destroy(cameraIntrinsicsHandle);
return textureIntrinsics;
@@ -121,13 +121,13 @@ public CameraIntrinsics GetImageIntrinsics(IntPtr cameraHandle)
}
ExternApi.ArCameraIntrinsics_create(
- m_NativeSession.SessionHandle, ref cameraIntrinsicsHandle);
+ _nativeSession.SessionHandle, ref cameraIntrinsicsHandle);
ExternApi.ArCamera_getImageIntrinsics(
- m_NativeSession.SessionHandle, cameraHandle, cameraIntrinsicsHandle);
+ _nativeSession.SessionHandle, cameraHandle, cameraIntrinsicsHandle);
CameraIntrinsics textureIntrinsics =
- _GetCameraIntrinsicsFromHandle(cameraIntrinsicsHandle);
+ GetCameraIntrinsicsFromHandle(cameraIntrinsicsHandle);
ExternApi.ArCameraIntrinsics_destroy(cameraIntrinsicsHandle);
return textureIntrinsics;
@@ -138,7 +138,7 @@ public void Release(IntPtr cameraHandle)
ExternApi.ArCamera_release(cameraHandle);
}
- private CameraIntrinsics _GetCameraIntrinsicsFromHandle(IntPtr intrinsicsHandle)
+ private CameraIntrinsics GetCameraIntrinsicsFromHandle(IntPtr intrinsicsHandle)
{
float fx, fy, px, py;
fx = fy = px = py = 0;
@@ -146,11 +146,11 @@ private CameraIntrinsics _GetCameraIntrinsicsFromHandle(IntPtr intrinsicsHandle)
width = height = 0;
ExternApi.ArCameraIntrinsics_getFocalLength(
- m_NativeSession.SessionHandle, intrinsicsHandle, ref fx, ref fy);
+ _nativeSession.SessionHandle, intrinsicsHandle, ref fx, ref fy);
ExternApi.ArCameraIntrinsics_getPrincipalPoint(
- m_NativeSession.SessionHandle, intrinsicsHandle, ref px, ref py);
+ _nativeSession.SessionHandle, intrinsicsHandle, ref px, ref py);
ExternApi.ArCameraIntrinsics_getImageDimensions(
- m_NativeSession.SessionHandle, intrinsicsHandle, ref width, ref height);
+ _nativeSession.SessionHandle, intrinsicsHandle, ref width, ref height);
return new CameraIntrinsics(
new Vector2(fx, fy), new Vector2(px, py), new Vector2Int(width, height));
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigApi.cs
index d03aea20..123b5c99 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigApi.cs
@@ -35,11 +35,11 @@ namespace GoogleARCoreInternal
internal class CameraConfigApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public CameraConfigApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public IntPtr Create()
@@ -52,7 +52,7 @@ public IntPtr Create()
return cameraConfigHandle;
}
- ExternApi.ArCameraConfig_create(m_NativeSession.SessionHandle, ref cameraConfigHandle);
+ ExternApi.ArCameraConfig_create(_nativeSession.SessionHandle, ref cameraConfigHandle);
return cameraConfigHandle;
}
@@ -73,7 +73,7 @@ public void GetImageDimensions(IntPtr cameraConfigHandle, out int width, out int
}
ExternApi.ArCameraConfig_getImageDimensions(
- m_NativeSession.SessionHandle, cameraConfigHandle, ref width, ref height);
+ _nativeSession.SessionHandle, cameraConfigHandle, ref width, ref height);
}
public void GetTextureDimensions(IntPtr cameraConfigHandle, out int width, out int height)
@@ -89,7 +89,7 @@ public void GetTextureDimensions(IntPtr cameraConfigHandle, out int width, out i
}
ExternApi.ArCameraConfig_getTextureDimensions(
- m_NativeSession.SessionHandle, cameraConfigHandle, ref width, ref height);
+ _nativeSession.SessionHandle, cameraConfigHandle, ref width, ref height);
}
public ApiCameraConfigFacingDirection GetFacingDirection(IntPtr cameraConfigHandle)
@@ -103,7 +103,7 @@ public ApiCameraConfigFacingDirection GetFacingDirection(IntPtr cameraConfigHand
}
ExternApi.ArCameraConfig_getFacingDirection(
- m_NativeSession.SessionHandle, cameraConfigHandle, ref direction);
+ _nativeSession.SessionHandle, cameraConfigHandle, ref direction);
return direction;
}
@@ -120,7 +120,7 @@ public void GetFpsRange(IntPtr cameraConfigHandle, out int minFps, out int maxFp
}
ExternApi.ArCameraConfig_getFpsRange(
- m_NativeSession.SessionHandle, cameraConfigHandle, ref minFps, ref maxFps);
+ _nativeSession.SessionHandle, cameraConfigHandle, ref minFps, ref maxFps);
}
public CameraConfigDepthSensorUsages GetDepthSensorUsage(IntPtr cameraConfigHandle)
@@ -134,7 +134,7 @@ public CameraConfigDepthSensorUsages GetDepthSensorUsage(IntPtr cameraConfigHand
}
ExternApi.ArCameraConfig_getDepthSensorUsage(
- m_NativeSession.SessionHandle, cameraConfigHandle, ref depthSensorUsage);
+ _nativeSession.SessionHandle, cameraConfigHandle, ref depthSensorUsage);
return (CameraConfigDepthSensorUsages)depthSensorUsage;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigFilterApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigFilterApi.cs
index 44bb4fde..dfdcd52e 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigFilterApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigFilterApi.cs
@@ -35,25 +35,25 @@ namespace GoogleARCoreInternal
internal class CameraConfigFilterApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public CameraConfigFilterApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public IntPtr Create(ARCoreCameraConfigFilter filter)
{
IntPtr cameraConfigFilterHandle = IntPtr.Zero;
ExternApi.ArCameraConfigFilter_create(
- m_NativeSession.SessionHandle, ref cameraConfigFilterHandle);
+ _nativeSession.SessionHandle, ref cameraConfigFilterHandle);
if (filter != null)
{
- ExternApi.ArCameraConfigFilter_setTargetFps(m_NativeSession.SessionHandle,
- cameraConfigFilterHandle, _ConvertToFpsFilter(filter.TargetCameraFramerate));
- ExternApi.ArCameraConfigFilter_setDepthSensorUsage(m_NativeSession.SessionHandle,
- cameraConfigFilterHandle, _ConvertToDepthFilter(filter.DepthSensorUsage));
+ ExternApi.ArCameraConfigFilter_setTargetFps(_nativeSession.SessionHandle,
+ cameraConfigFilterHandle, ConvertToFpsFilter(filter.TargetCameraFramerate));
+ ExternApi.ArCameraConfigFilter_setDepthSensorUsage(_nativeSession.SessionHandle,
+ cameraConfigFilterHandle, ConvertToDepthFilter(filter.DepthSensorUsage));
}
return cameraConfigFilterHandle;
@@ -64,7 +64,7 @@ public void Destroy(IntPtr cameraConfigListHandle)
ExternApi.ArCameraConfigFilter_destroy(cameraConfigListHandle);
}
- private int _ConvertToFpsFilter(
+ private int ConvertToFpsFilter(
ARCoreCameraConfigFilter.TargetCameraFramerateFilter targetCameraFramerate)
{
int fpsFilter = 0;
@@ -81,7 +81,7 @@ private int _ConvertToFpsFilter(
return fpsFilter;
}
- private int _ConvertToDepthFilter(
+ private int ConvertToDepthFilter(
ARCoreCameraConfigFilter.DepthSensorUsageFilter depthSensorUsage)
{
int depthFilter = 0;
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigListApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigListApi.cs
index 59c693df..2fe2cb15 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigListApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraConfigListApi.cs
@@ -35,18 +35,18 @@ namespace GoogleARCoreInternal
internal class CameraConfigListApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public CameraConfigListApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public IntPtr Create()
{
IntPtr cameraConfigListHandle = IntPtr.Zero;
ExternApi.ArCameraConfigList_create(
- m_NativeSession.SessionHandle, ref cameraConfigListHandle);
+ _nativeSession.SessionHandle, ref cameraConfigListHandle);
return cameraConfigListHandle;
}
@@ -59,14 +59,14 @@ public int GetSize(IntPtr cameraConfigListHandle)
{
int size = 0;
ExternApi.ArCameraConfigList_getSize(
- m_NativeSession.SessionHandle, cameraConfigListHandle, ref size);
+ _nativeSession.SessionHandle, cameraConfigListHandle, ref size);
return size;
}
public void GetItemAt(IntPtr cameraConfigListHandle, int index, IntPtr cameraConfigHandle)
{
ExternApi.ArCameraConfigList_getItem(
- m_NativeSession.SessionHandle, cameraConfigListHandle, index, cameraConfigHandle);
+ _nativeSession.SessionHandle, cameraConfigListHandle, index, cameraConfigHandle);
}
private struct ExternApi
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraMetadataApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraMetadataApi.cs
index fd429ee3..67c3c191 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraMetadataApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/CameraMetadataApi.cs
@@ -37,13 +37,13 @@ namespace GoogleARCoreInternal
internal class CameraMetadataApi
{
- private const int k_MaximumTagCountForWarning = 5000;
- private HashSet m_WarningTags = new HashSet();
- private NativeSession m_NativeSession;
+ private const int _maximumTagCountForWarning = 5000;
+ private HashSet _warningTags = new HashSet();
+ private NativeSession _nativeSession;
public CameraMetadataApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public void Release(IntPtr arCameraMetadataHandle)
@@ -55,7 +55,7 @@ public bool TryGetValues(IntPtr cameraMetadataHandle,
CameraMetadataTag tag, List resultList)
{
IntPtr ndkMetadataHandle = IntPtr.Zero;
- ExternApi.ArImageMetadata_getNdkCameraMetadata(m_NativeSession.SessionHandle,
+ ExternApi.ArImageMetadata_getNdkCameraMetadata(_nativeSession.SessionHandle,
cameraMetadataHandle, ref ndkMetadataHandle);
resultList.Clear();
@@ -70,12 +70,12 @@ public bool TryGetValues(IntPtr cameraMetadataHandle,
return false;
}
- if (entry.Count > k_MaximumTagCountForWarning && !m_WarningTags.Contains((int)tag))
+ if (entry.Count > _maximumTagCountForWarning && !_warningTags.Contains((int)tag))
{
Debug.LogWarningFormat(
"TryGetValues for tag {0} has {1} values. Accessing tags with a large " +
"number of values may impede performance.", tag, entry.Count);
- m_WarningTags.Add((int)tag);
+ _warningTags.Add((int)tag);
}
for (int i = 0; i < entry.Count; i++)
@@ -140,7 +140,7 @@ public bool GetAllCameraMetadataTags(
return false;
}
- ExternApi.ArImageMetadata_getNdkCameraMetadata(m_NativeSession.SessionHandle,
+ ExternApi.ArImageMetadata_getNdkCameraMetadata(_nativeSession.SessionHandle,
cameraMetadataHandle, ref ndkMetadataHandle);
IntPtr tagsHandle = IntPtr.Zero;
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/FrameApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/FrameApi.cs
index 7fedf76e..c1f8bf74 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/FrameApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/FrameApi.cs
@@ -36,13 +36,13 @@ namespace GoogleARCoreInternal
internal class FrameApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
- private float[,] m_AmbientSH = new float[9, 3];
+ private float[,] _ambientSH = new float[9, 3];
public FrameApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public void Release(IntPtr frameHandle)
@@ -54,7 +54,7 @@ public long GetTimestamp()
{
long timestamp = 0;
ExternApi.ArFrame_getTimestamp(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle, ref timestamp);
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle, ref timestamp);
return timestamp;
}
@@ -62,15 +62,15 @@ public IntPtr AcquireCamera()
{
IntPtr cameraHandle = IntPtr.Zero;
ExternApi.ArFrame_acquireCamera(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle, ref cameraHandle);
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle, ref cameraHandle);
return cameraHandle;
}
public CameraImageBytes AcquireCameraImageBytes()
{
IntPtr cameraImageHandle = IntPtr.Zero;
- ApiArStatus status = ExternApi.ArFrame_acquireCameraImage(m_NativeSession.SessionHandle,
- m_NativeSession.FrameHandle, ref cameraImageHandle);
+ ApiArStatus status = ExternApi.ArFrame_acquireCameraImage(_nativeSession.SessionHandle,
+ _nativeSession.FrameHandle, ref cameraImageHandle);
if (status != ApiArStatus.Success)
{
Debug.LogWarningFormat("Failed to acquire camera image with status {0}.", status);
@@ -83,8 +83,8 @@ public CameraImageBytes AcquireCameraImageBytes()
public bool TryAcquirePointCloudHandle(out IntPtr pointCloudHandle)
{
pointCloudHandle = IntPtr.Zero;
- ApiArStatus status = ExternApi.ArFrame_acquirePointCloud(m_NativeSession.SessionHandle,
- m_NativeSession.FrameHandle, ref pointCloudHandle);
+ ApiArStatus status = ExternApi.ArFrame_acquirePointCloud(_nativeSession.SessionHandle,
+ _nativeSession.FrameHandle, ref pointCloudHandle);
if (status != ApiArStatus.Success)
{
Debug.LogWarningFormat("Failed to acquire point cloud with status {0}", status);
@@ -96,8 +96,8 @@ public bool TryAcquirePointCloudHandle(out IntPtr pointCloudHandle)
public bool AcquireImageMetadata(ref IntPtr imageMetadataHandle)
{
- var status = ExternApi.ArFrame_acquireImageMetadata(m_NativeSession.SessionHandle,
- m_NativeSession.FrameHandle, ref imageMetadataHandle);
+ var status = ExternApi.ArFrame_acquireImageMetadata(_nativeSession.SessionHandle,
+ _nativeSession.FrameHandle, ref imageMetadataHandle);
if (status != ApiArStatus.Success)
{
Debug.LogErrorFormat(
@@ -110,46 +110,46 @@ public bool AcquireImageMetadata(ref IntPtr imageMetadataHandle)
public LightEstimate GetLightEstimate()
{
- IntPtr lightEstimateHandle = m_NativeSession.LightEstimateApi.Create();
+ IntPtr lightEstimateHandle = _nativeSession.LightEstimateApi.Create();
ExternApi.ArFrame_getLightEstimate(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle, lightEstimateHandle);
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle, lightEstimateHandle);
LightEstimateState state =
- m_NativeSession.LightEstimateApi.GetState(lightEstimateHandle);
+ _nativeSession.LightEstimateApi.GetState(lightEstimateHandle);
Color colorCorrection =
- m_NativeSession.LightEstimateApi.GetColorCorrection(lightEstimateHandle);
- long timestamp = m_NativeSession.LightEstimateApi.GetTimestamp(
- m_NativeSession.SessionHandle, lightEstimateHandle);
+ _nativeSession.LightEstimateApi.GetColorCorrection(lightEstimateHandle);
+ long timestamp = _nativeSession.LightEstimateApi.GetTimestamp(
+ _nativeSession.SessionHandle, lightEstimateHandle);
Quaternion mainLightRotation = Quaternion.identity;
Color mainLightColor = Color.black;
- m_NativeSession.LightEstimateApi.GetMainDirectionalLight(
- m_NativeSession.SessionHandle, lightEstimateHandle,
+ _nativeSession.LightEstimateApi.GetMainDirectionalLight(
+ _nativeSession.SessionHandle, lightEstimateHandle,
out mainLightRotation, out mainLightColor);
- m_NativeSession.LightEstimateApi.GetAmbientSH(m_NativeSession.SessionHandle,
- lightEstimateHandle, m_AmbientSH);
+ _nativeSession.LightEstimateApi.GetAmbientSH(_nativeSession.SessionHandle,
+ lightEstimateHandle, _ambientSH);
- m_NativeSession.LightEstimateApi.Destroy(lightEstimateHandle);
+ _nativeSession.LightEstimateApi.Destroy(lightEstimateHandle);
return new LightEstimate(state, colorCorrection.a,
new Color(colorCorrection.r, colorCorrection.g, colorCorrection.b, 1f),
- mainLightRotation, mainLightColor, m_AmbientSH, timestamp);
+ mainLightRotation, mainLightColor, _ambientSH, timestamp);
}
public Cubemap GetReflectionCubemap()
{
- IntPtr lightEstimateHandle = m_NativeSession.LightEstimateApi.Create();
+ IntPtr lightEstimateHandle = _nativeSession.LightEstimateApi.Create();
ExternApi.ArFrame_getLightEstimate(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle, lightEstimateHandle);
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle, lightEstimateHandle);
LightEstimateState state =
- m_NativeSession.LightEstimateApi.GetState(lightEstimateHandle);
+ _nativeSession.LightEstimateApi.GetState(lightEstimateHandle);
if (state != LightEstimateState.Valid)
{
return null;
}
- Cubemap cubemap = m_NativeSession.LightEstimateApi.GetReflectionCubemap(
- m_NativeSession.SessionHandle, lightEstimateHandle);
- m_NativeSession.LightEstimateApi.Destroy(lightEstimateHandle);
+ Cubemap cubemap = _nativeSession.LightEstimateApi.GetReflectionCubemap(
+ _nativeSession.SessionHandle, lightEstimateHandle);
+ _nativeSession.LightEstimateApi.Destroy(lightEstimateHandle);
return cubemap;
}
@@ -158,7 +158,7 @@ public void TransformDisplayUvCoords(ref ApiDisplayUvCoords uv)
{
ApiDisplayUvCoords uvOut = new ApiDisplayUvCoords();
ExternApi.ArFrame_transformDisplayUvCoords(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle,
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle,
ApiDisplayUvCoords.NumFloats, ref uv, ref uvOut);
uv = uvOut;
@@ -169,7 +169,7 @@ public void TransformCoordinates2d(ref Vector2 uv, DisplayUvCoordinateType input
{
Vector2 uvOut = new Vector2(uv.x, uv.y);
ExternApi.ArFrame_transformCoordinates2d(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle,
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle,
inputType.ToApiCoordinates2dType(), 1, ref uv, outputType.ToApiCoordinates2dType(),
ref uvOut);
@@ -178,46 +178,46 @@ public void TransformCoordinates2d(ref Vector2 uv, DisplayUvCoordinateType input
public void GetUpdatedTrackables(List trackables)
{
- IntPtr listHandle = m_NativeSession.TrackableListApi.Create();
+ IntPtr listHandle = _nativeSession.TrackableListApi.Create();
ExternApi.ArFrame_getUpdatedTrackables(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle,
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle,
ApiTrackableType.BaseTrackable, listHandle);
trackables.Clear();
- int count = m_NativeSession.TrackableListApi.GetCount(listHandle);
+ int count = _nativeSession.TrackableListApi.GetCount(listHandle);
for (int i = 0; i < count; i++)
{
IntPtr trackableHandle =
- m_NativeSession.TrackableListApi.AcquireItem(listHandle, i);
+ _nativeSession.TrackableListApi.AcquireItem(listHandle, i);
// TODO:: Remove conditional when b/75291352 is fixed.
ApiTrackableType trackableType =
- m_NativeSession.TrackableApi.GetType(trackableHandle);
+ _nativeSession.TrackableApi.GetType(trackableHandle);
if ((int)trackableType == 0x41520105)
{
- m_NativeSession.TrackableApi.Release(trackableHandle);
+ _nativeSession.TrackableApi.Release(trackableHandle);
continue;
}
- Trackable trackable = m_NativeSession.TrackableFactory(trackableHandle);
+ Trackable trackable = _nativeSession.TrackableFactory(trackableHandle);
if (trackable != null)
{
trackables.Add(trackable);
}
else
{
- m_NativeSession.TrackableApi.Release(trackableHandle);
+ _nativeSession.TrackableApi.Release(trackableHandle);
}
}
- m_NativeSession.TrackableListApi.Destroy(listHandle);
+ _nativeSession.TrackableListApi.Destroy(listHandle);
}
public int GetCameraTextureName()
{
int textureId = -1;
ExternApi.ArFrame_getCameraTextureName(
- m_NativeSession.SessionHandle, m_NativeSession.FrameHandle, ref textureId);
+ _nativeSession.SessionHandle, _nativeSession.FrameHandle, ref textureId);
return textureId;
}
@@ -228,8 +228,8 @@ public DepthStatus UpdateDepthTexture(ref Texture2D depthTexture)
// Get the current depth image.
ApiArStatus status =
(ApiArStatus)ExternApi.ArFrame_acquireDepthImage(
- m_NativeSession.SessionHandle,
- m_NativeSession.FrameHandle,
+ _nativeSession.SessionHandle,
+ _nativeSession.FrameHandle,
ref depthImageHandle);
if (status != ApiArStatus.Success)
{
@@ -239,7 +239,7 @@ public DepthStatus UpdateDepthTexture(ref Texture2D depthTexture)
}
// Update the depth texture.
- if (!_UpdateDepthTexture(ref depthTexture, depthImageHandle))
+ if (!UpdateDepthTexture(ref depthTexture, depthImageHandle))
{
return DepthStatus.InternalError;
}
@@ -247,17 +247,17 @@ public DepthStatus UpdateDepthTexture(ref Texture2D depthTexture)
return DepthStatus.Success;
}
- private bool _UpdateDepthTexture(
+ private bool UpdateDepthTexture(
ref Texture2D depthTexture, IntPtr depthImageHandle)
{
// Get the size of the depth data.
- int width = m_NativeSession.ImageApi.GetWidth(depthImageHandle);
- int height = m_NativeSession.ImageApi.GetHeight(depthImageHandle);
+ int width = _nativeSession.ImageApi.GetWidth(depthImageHandle);
+ int height = _nativeSession.ImageApi.GetHeight(depthImageHandle);
// Access the depth image surface data.
IntPtr planeDoublePtr = IntPtr.Zero;
int planeSize = 0;
- m_NativeSession.ImageApi.GetPlaneData(
+ _nativeSession.ImageApi.GetPlaneData(
depthImageHandle, 0, ref planeDoublePtr, ref planeSize);
IntPtr planeDataPtr = new IntPtr(planeDoublePtr.ToInt64());
@@ -277,7 +277,7 @@ private bool _UpdateDepthTexture(
width, height,
TextureFormat.RGB565);
- m_NativeSession.ImageApi.Release(depthImageHandle);
+ _nativeSession.ImageApi.Release(depthImageHandle);
return false;
}
}
@@ -286,7 +286,7 @@ private bool _UpdateDepthTexture(
depthTexture.LoadRawTextureData(planeDataPtr, planeSize);
depthTexture.Apply();
- m_NativeSession.ImageApi.Release(depthImageHandle);
+ _nativeSession.ImageApi.Release(depthImageHandle);
return true;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/HitTestApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/HitTestApi.cs
index 197b70a7..79affd17 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/HitTestApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/HitTestApi.cs
@@ -35,11 +35,11 @@ namespace GoogleARCoreInternal
internal class HitTestApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public HitTestApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public bool Raycast(
@@ -50,14 +50,29 @@ public bool Raycast(
IntPtr hitResultListHandle = IntPtr.Zero;
ExternApi.ArHitResultList_create(
- m_NativeSession.SessionHandle, ref hitResultListHandle);
+ _nativeSession.SessionHandle, ref hitResultListHandle);
ExternApi.ArFrame_hitTest(
- m_NativeSession.SessionHandle, frameHandle, x, y, hitResultListHandle);
+ _nativeSession.SessionHandle, frameHandle, x, y, hitResultListHandle);
FilterTrackableHits(hitResultListHandle, Mathf.Infinity, filter, outHitList);
ExternApi.ArHitResultList_destroy(hitResultListHandle);
return outHitList.Count != 0;
}
+ public bool Raycast(IntPtr frameHandle, float x, float y, float approximateDistanceMeters,
+ List outHitList)
+ {
+ outHitList.Clear();
+
+ IntPtr hitResultListHandle = IntPtr.Zero;
+ ExternApi.ArHitResultList_create(_nativeSession.SessionHandle, ref hitResultListHandle);
+ ExternApi.ArFrame_hitTestInstantPlacement(_nativeSession.SessionHandle, frameHandle,
+ x, y, approximateDistanceMeters, hitResultListHandle);
+ FilterTrackableHits(
+ hitResultListHandle, Mathf.Infinity, TrackableHitFlags.None, outHitList);
+ ExternApi.ArHitResultList_destroy(hitResultListHandle);
+ return outHitList.Count != 0;
+ }
+
public bool Raycast(
IntPtr frameHandle, Vector3 origin, Vector3 direction, float maxDistance,
TrackableHitFlags filter, List outHitList)
@@ -66,13 +81,13 @@ public bool Raycast(
IntPtr hitResultListHandle = IntPtr.Zero;
ExternApi.ArHitResultList_create(
- m_NativeSession.SessionHandle, ref hitResultListHandle);
+ _nativeSession.SessionHandle, ref hitResultListHandle);
// Invert z to match ARCore coordinate system.
origin.z = -origin.z;
direction.z = -direction.z;
ExternApi.ArFrame_hitTestRay(
- m_NativeSession.SessionHandle, frameHandle, ref origin, ref direction,
+ _nativeSession.SessionHandle, frameHandle, ref origin, ref direction,
hitResultListHandle);
FilterTrackableHits(hitResultListHandle, maxDistance, filter, outHitList);
ExternApi.ArHitResultList_destroy(hitResultListHandle);
@@ -85,7 +100,7 @@ private void FilterTrackableHits(
{
int hitListSize = 0;
ExternApi.ArHitResultList_getSize(
- m_NativeSession.SessionHandle, hitResultListHandle, ref hitListSize);
+ _nativeSession.SessionHandle, hitResultListHandle, ref hitListSize);
for (int i = 0; i < hitListSize; i++)
{
@@ -97,6 +112,12 @@ private void FilterTrackableHits(
{
outHitList.Add(trackableHit);
}
+ // InstantPlacementPoint is not controlled by TrackableHitFlags.
+ else if (trackableHit.Trackable is InstantPlacementPoint &&
+ trackableHit.Distance <= maxDistance)
+ {
+ outHitList.Add(trackableHit);
+ }
}
}
}
@@ -108,9 +129,9 @@ private bool HitResultListGetItemAt(
// Query the hit result.
IntPtr hitResultHandle = IntPtr.Zero;
- ExternApi.ArHitResult_create(m_NativeSession.SessionHandle, ref hitResultHandle);
+ ExternApi.ArHitResult_create(_nativeSession.SessionHandle, ref hitResultHandle);
ExternApi.ArHitResultList_getItem(
- m_NativeSession.SessionHandle, hitResultListHandle, index, hitResultHandle);
+ _nativeSession.SessionHandle, hitResultListHandle, index, hitResultHandle);
if (hitResultHandle == IntPtr.Zero)
{
ExternApi.ArHitResult_destroy(hitResultHandle);
@@ -118,39 +139,39 @@ private bool HitResultListGetItemAt(
}
// Query the pose from hit result.
- IntPtr poseHandle = m_NativeSession.PoseApi.Create();
+ IntPtr poseHandle = _nativeSession.PoseApi.Create();
ExternApi.ArHitResult_getHitPose(
- m_NativeSession.SessionHandle, hitResultHandle, poseHandle);
- Pose hitPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.SessionHandle, hitResultHandle, poseHandle);
+ Pose hitPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
// Query the distance from hit result.
float hitDistance = 0.0f;
ExternApi.ArHitResult_getDistance(
- m_NativeSession.SessionHandle, hitResultHandle, ref hitDistance);
+ _nativeSession.SessionHandle, hitResultHandle, ref hitDistance);
// Query the trackable from hit result.
IntPtr trackableHandle = IntPtr.Zero;
ExternApi.ArHitResult_acquireTrackable(
- m_NativeSession.SessionHandle, hitResultHandle, ref trackableHandle);
- Trackable trackable = m_NativeSession.TrackableFactory(trackableHandle);
- m_NativeSession.TrackableApi.Release(trackableHandle);
+ _nativeSession.SessionHandle, hitResultHandle, ref trackableHandle);
+ Trackable trackable = _nativeSession.TrackableFactory(trackableHandle);
+ _nativeSession.TrackableApi.Release(trackableHandle);
// Calculate trackable hit flags.
TrackableHitFlags flag = TrackableHitFlags.None;
if (trackable == null)
{
Debug.Log("Could not create trackable from hit result.");
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return false;
}
else if (trackable is DetectedPlane)
{
- if (m_NativeSession.PlaneApi.IsPoseInPolygon(trackableHandle, poseHandle))
+ if (_nativeSession.PlaneApi.IsPoseInPolygon(trackableHandle, poseHandle))
{
flag |= TrackableHitFlags.PlaneWithinPolygon;
}
- if (m_NativeSession.PlaneApi.IsPoseInExtents(trackableHandle, poseHandle))
+ if (_nativeSession.PlaneApi.IsPoseInExtents(trackableHandle, poseHandle))
{
flag |= TrackableHitFlags.PlaneWithinBounds;
}
@@ -166,13 +187,17 @@ private bool HitResultListGetItemAt(
flag |= TrackableHitFlags.FeaturePointWithSurfaceNormal;
}
}
+ else if (trackable is InstantPlacementPoint)
+ {
+ // No flag update for InstantPlacementPoint Trackable Type.
+ }
else
{
ApiTrackableType trackableType =
- m_NativeSession.TrackableApi.GetType(trackableHandle);
+ _nativeSession.TrackableApi.GetType(trackableHandle);
if (!ExperimentManager.Instance.IsManagingTrackableType((int)trackableType))
{
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return false;
}
@@ -180,7 +205,7 @@ private bool HitResultListGetItemAt(
}
outTrackableHit = new TrackableHit(hitPose, hitDistance, flag, trackable);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return true;
}
@@ -196,6 +221,11 @@ public static extern void ArFrame_hitTestRay(
IntPtr session, IntPtr frame, ref Vector3 origin, ref Vector3 direction,
IntPtr hit_result_list);
+ [AndroidImport(ApiConstants.ARCoreNativeApi)]
+ public static extern void ArFrame_hitTestInstantPlacement(
+ IntPtr session, IntPtr frame, float pixel_x, float pixel_y,
+ float guessed_distance_meters, IntPtr hit_result_list);
+
[AndroidImport(ApiConstants.ARCoreNativeApi)]
public static extern void ArHitResultList_create(
IntPtr session, ref IntPtr out_hit_result_list);
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/ImageApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/ImageApi.cs
index f4c92a25..c7f20a64 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/ImageApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/ImageApi.cs
@@ -33,11 +33,11 @@ namespace GoogleARCoreInternal
internal class ImageApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public ImageApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public void GetImageBuffer(
@@ -80,21 +80,21 @@ public void GetImageBuffer(
public void GetPlaneData(IntPtr imageHandle, int planeIndex, ref IntPtr surfaceData,
ref int dataLength)
{
- ExternApi.ArImage_getPlaneData(m_NativeSession.SessionHandle, imageHandle, planeIndex,
+ ExternApi.ArImage_getPlaneData(_nativeSession.SessionHandle, imageHandle, planeIndex,
ref surfaceData, ref dataLength);
}
public int GetWidth(IntPtr imageHandle)
{
int width = 0;
- ExternApi.ArImage_getWidth(m_NativeSession.SessionHandle, imageHandle, out width);
+ ExternApi.ArImage_getWidth(_nativeSession.SessionHandle, imageHandle, out width);
return width;
}
public int GetHeight(IntPtr imageHandle)
{
int height = 0;
- ExternApi.ArImage_getHeight(m_NativeSession.SessionHandle, imageHandle, out height);
+ ExternApi.ArImage_getHeight(_nativeSession.SessionHandle, imageHandle, out height);
return height;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/LightEstimateApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/LightEstimateApi.cs
index 31961636..e6fc9bb4 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/LightEstimateApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/LightEstimateApi.cs
@@ -35,36 +35,36 @@ namespace GoogleARCoreInternal
internal class LightEstimateApi
{
- internal static readonly float[] k_SHConstants =
+ internal static readonly float[] _shConstants =
{
0.886227f, 1.023328f, 1.023328f,
1.023328f, 0.858086f, 0.858086f,
0.247708f, 0.858086f, 0.429043f
};
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
#if !UNITY_2017_2_OR_NEWER
- private Color[] m_TempCubemapFacePixels = new Color[0];
+ private Color[] _tempCubemapFacePixels = new Color[0];
#endif
- private float[] m_TempVector = new float[3];
- private float[] m_TempColor = new float[3];
- private float[] m_TempSHCoefficients = new float[27];
- private Cubemap m_HDRCubemap = null;
- private long m_CubemapTimestamp = -1;
- private int m_CubemapTextureId = 0;
- private bool m_PluginInitialized = false;
+ private float[] _tempVector = new float[3];
+ private float[] _tempColor = new float[3];
+ private float[] _tempSHCoefficients = new float[27];
+ private Cubemap _hdrCubemap = null;
+ private long _cubemapTimestamp = -1;
+ private int _cubemapTextureId = 0;
+ private bool _pluginInitialized = false;
public LightEstimateApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public IntPtr Create()
{
IntPtr lightEstimateHandle = IntPtr.Zero;
ExternApi.ArLightEstimate_create(
- m_NativeSession.SessionHandle, ref lightEstimateHandle);
+ _nativeSession.SessionHandle, ref lightEstimateHandle);
return lightEstimateHandle;
}
@@ -77,7 +77,7 @@ public LightEstimateState GetState(IntPtr lightEstimateHandle)
{
ApiLightEstimateState state = ApiLightEstimateState.NotValid;
ExternApi.ArLightEstimate_getState(
- m_NativeSession.SessionHandle, lightEstimateHandle, ref state);
+ _nativeSession.SessionHandle, lightEstimateHandle, ref state);
return state.ToLightEstimateState();
}
@@ -85,7 +85,7 @@ public float GetPixelIntensity(IntPtr lightEstimateHandle)
{
float pixelIntensity = 0;
ExternApi.ArLightEstimate_getPixelIntensity(
- m_NativeSession.SessionHandle, lightEstimateHandle, ref pixelIntensity);
+ _nativeSession.SessionHandle, lightEstimateHandle, ref pixelIntensity);
return pixelIntensity;
}
@@ -93,7 +93,7 @@ public Color GetColorCorrection(IntPtr lightEstimateHandle)
{
Color colorCorrection = Color.black;
ExternApi.ArLightEstimate_getColorCorrection(
- m_NativeSession.SessionHandle, lightEstimateHandle, ref colorCorrection);
+ _nativeSession.SessionHandle, lightEstimateHandle, ref colorCorrection);
return colorCorrection;
}
@@ -103,19 +103,19 @@ public void GetMainDirectionalLight(IntPtr sessionHandle, IntPtr lightEstimateHa
lightColor = Color.black;
ExternApi.ArLightEstimate_getEnvironmentalHdrMainLightIntensity(sessionHandle,
- lightEstimateHandle, m_TempColor);
- lightColor.r = m_TempColor[0];
- lightColor.g = m_TempColor[1];
- lightColor.b = m_TempColor[2];
+ lightEstimateHandle, _tempColor);
+ lightColor.r = _tempColor[0];
+ lightColor.g = _tempColor[1];
+ lightColor.b = _tempColor[2];
// Apply the energy conservation term to the light color directly since Unity doesn't
// have that term in their PBR shader.
lightColor = lightColor / Mathf.PI;
ExternApi.ArLightEstimate_getEnvironmentalHdrMainLightDirection(sessionHandle,
- lightEstimateHandle, m_TempVector);
+ lightEstimateHandle, _tempVector);
Vector3 lightDirection = Vector3.one;
- ConversionHelper.ApiVectorToUnityVector(m_TempVector, out lightDirection);
+ ConversionHelper.ApiVectorToUnityVector(_tempVector, out lightDirection);
// The ARCore output the light direction defined for shader usage: lightPos-pixelPos
// We need to invert the direction to set it Unity world space.
@@ -126,7 +126,7 @@ public void GetAmbientSH(IntPtr sessionHandle, IntPtr lightEstimateHandle,
float[,] outSHCoefficients)
{
ExternApi.ArLightEstimate_getEnvironmentalHdrAmbientSphericalHarmonics(sessionHandle,
- lightEstimateHandle, m_TempSHCoefficients);
+ lightEstimateHandle, _tempSHCoefficients);
// We need to invert the coefficients that contains the z axis to map it to
// Unity world coordinate.
@@ -144,13 +144,13 @@ public void GetAmbientSH(IntPtr sessionHandle, IntPtr lightEstimateHandle,
{
for (int j = 0; j < 9; j++)
{
- outSHCoefficients[j, i] = m_TempSHCoefficients[(j * 3) + i];
+ outSHCoefficients[j, i] = _tempSHCoefficients[(j * 3) + i];
if (j == 2 || j == 5 || j == 7)
{
outSHCoefficients[j, i] = outSHCoefficients[j, i] * -1.0f;
}
- outSHCoefficients[j, i] = outSHCoefficients[j, i] * k_SHConstants[j];
+ outSHCoefficients[j, i] = outSHCoefficients[j, i] * _shConstants[j];
// Apply the energy conservation to SH coefficients as well.
outSHCoefficients[j, i] = outSHCoefficients[j, i] / Mathf.PI;
@@ -172,27 +172,27 @@ public Cubemap GetReflectionCubemap(IntPtr sessionHandle, IntPtr lightEstimateHa
TextureFormat format = dataType == ApiTextureDataType.Half ?
TextureFormat.RGBAHalf : TextureFormat.RGBA32;
- if (!m_PluginInitialized)
+ if (!_pluginInitialized)
{
ExternApi.ARCoreRenderingUtils_SetTextureDataType(dataType, true);
ExternApi.ARCoreRenderingUtils_SetActiveColorSpace(usingGammaWorkflow);
- m_PluginInitialized = true;
+ _pluginInitialized = true;
}
ExternApi.ARCoreRenderingUtils_GetCubemapTexture(ref textureId, ref size);
- if (textureId != 0 && (m_HDRCubemap == null || textureId != m_CubemapTextureId))
+ if (textureId != 0 && (_hdrCubemap == null || textureId != _cubemapTextureId))
{
- m_HDRCubemap = Cubemap.CreateExternalTexture(size, format, true,
+ _hdrCubemap = Cubemap.CreateExternalTexture(size, format, true,
new IntPtr(textureId));
- m_CubemapTextureId = textureId;
+ _cubemapTextureId = textureId;
}
long timestamp = GetTimestamp(sessionHandle, lightEstimateHandle);
- if (m_CubemapTimestamp != timestamp)
+ if (_cubemapTimestamp != timestamp)
{
ExternApi.ARCoreRenderingUtils_SetARCoreLightEstimation(sessionHandle,
lightEstimateHandle);
- m_CubemapTimestamp = timestamp;
+ _cubemapTimestamp = timestamp;
}
// Issue plugin event to update cubemap texture.
@@ -203,52 +203,52 @@ public Cubemap GetReflectionCubemap(IntPtr sessionHandle, IntPtr lightEstimateHa
// Gets raw color data from native plugin then update cubemap textures by
// Cubemap.SetPixel().
// Note, no GL texture will be created in this scenario.
- if (!m_PluginInitialized)
+ if (!_pluginInitialized)
{
ExternApi.ARCoreRenderingUtils_SetTextureDataType(
ApiTextureDataType.Float, false);
ExternApi.ARCoreRenderingUtils_SetActiveColorSpace(usingGammaWorkflow);
- m_PluginInitialized = true;
+ _pluginInitialized = true;
}
- ExternApi.ARCoreRenderingUtils_GetCubemapTexture(ref m_CubemapTextureId, ref size);
+ ExternApi.ARCoreRenderingUtils_GetCubemapTexture(ref _cubemapTextureId, ref size);
if (size > 0)
{
- if (m_HDRCubemap == null)
+ if (_hdrCubemap == null)
{
- m_HDRCubemap = new Cubemap(size, TextureFormat.RGBAHalf, true);
+ _hdrCubemap = new Cubemap(size, TextureFormat.RGBAHalf, true);
}
- if (m_TempCubemapFacePixels.Length != size)
+ if (_tempCubemapFacePixels.Length != size)
{
- Array.Resize(ref m_TempCubemapFacePixels, size * size);
+ Array.Resize(ref _tempCubemapFacePixels, size * size);
}
}
long timestamp = GetTimestamp(sessionHandle, lightEstimateHandle);
- if (m_CubemapTimestamp != timestamp)
+ if (_cubemapTimestamp != timestamp)
{
ExternApi.ARCoreRenderingUtils_SetARCoreLightEstimation(sessionHandle,
lightEstimateHandle);
- m_CubemapTimestamp = timestamp;
+ _cubemapTimestamp = timestamp;
- if (m_HDRCubemap != null)
+ if (_hdrCubemap != null)
{
for (int i = 0; i < 6; i++)
{
ExternApi.ARCoreRenderingUtils_GetCubemapRawColors(i,
- m_TempCubemapFacePixels);
- m_HDRCubemap.SetPixels(m_TempCubemapFacePixels, CubemapFace.PositiveX + i);
+ _tempCubemapFacePixels);
+ _hdrCubemap.SetPixels(_tempCubemapFacePixels, CubemapFace.PositiveX + i);
}
// This operation is very expensive, only update cubemap texture when
// the light estimate is updated in this frame.
- m_HDRCubemap.Apply();
+ _hdrCubemap.Apply();
}
}
#endif
- return m_HDRCubemap;
+ return _hdrCubemap;
}
public long GetTimestamp(IntPtr sessionHandle, IntPtr lightEstimateHandle)
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PlaneApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PlaneApi.cs
index 2f28808f..10ff0047 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PlaneApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PlaneApi.cs
@@ -35,44 +35,44 @@ namespace GoogleARCoreInternal
internal class PlaneApi
{
- private const int k_MaxPolygonSize = 1024;
- private NativeSession m_NativeSession;
- private float[] m_TmpPoints;
- private System.Runtime.InteropServices.GCHandle m_TmpPointsHandle;
+ private const int _maxPolygonSize = 1024;
+ private NativeSession _nativeSession;
+ private float[] _tmpPoints;
+ private System.Runtime.InteropServices.GCHandle _tmpPointsHandle;
public PlaneApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
- m_TmpPoints = new float[k_MaxPolygonSize * 2];
- m_TmpPointsHandle = System.Runtime.InteropServices.GCHandle.Alloc(
- m_TmpPoints, System.Runtime.InteropServices.GCHandleType.Pinned);
+ _nativeSession = nativeSession;
+ _tmpPoints = new float[_maxPolygonSize * 2];
+ _tmpPointsHandle = System.Runtime.InteropServices.GCHandle.Alloc(
+ _tmpPoints, System.Runtime.InteropServices.GCHandleType.Pinned);
}
~PlaneApi()
{
- m_TmpPointsHandle.Free();
+ _tmpPointsHandle.Free();
}
public Pose GetCenterPose(IntPtr planeHandle)
{
- var poseHandle = m_NativeSession.PoseApi.Create();
- ExternApi.ArPlane_getCenterPose(m_NativeSession.SessionHandle, planeHandle, poseHandle);
- Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ var poseHandle = _nativeSession.PoseApi.Create();
+ ExternApi.ArPlane_getCenterPose(_nativeSession.SessionHandle, planeHandle, poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return resultPose;
}
public float GetExtentX(IntPtr planeHandle)
{
float extentX = 0.0f;
- ExternApi.ArPlane_getExtentX(m_NativeSession.SessionHandle, planeHandle, ref extentX);
+ ExternApi.ArPlane_getExtentX(_nativeSession.SessionHandle, planeHandle, ref extentX);
return extentX;
}
public float GetExtentZ(IntPtr planeHandle)
{
float extentZ = 0.0f;
- ExternApi.ArPlane_getExtentZ(m_NativeSession.SessionHandle, planeHandle, ref extentZ);
+ ExternApi.ArPlane_getExtentZ(_nativeSession.SessionHandle, planeHandle, ref extentZ);
return extentZ;
}
@@ -81,19 +81,19 @@ public void GetPolygon(IntPtr planeHandle, List points)
points.Clear();
int pointCount = 0;
ExternApi.ArPlane_getPolygonSize(
- m_NativeSession.SessionHandle, planeHandle, ref pointCount);
+ _nativeSession.SessionHandle, planeHandle, ref pointCount);
if (pointCount < 1)
{
return;
}
- else if (pointCount > k_MaxPolygonSize)
+ else if (pointCount > _maxPolygonSize)
{
Debug.LogError("GetPolygon::Plane polygon size exceeds buffer capacity.");
- pointCount = k_MaxPolygonSize;
+ pointCount = _maxPolygonSize;
}
ExternApi.ArPlane_getPolygon(
- m_NativeSession.SessionHandle, planeHandle, m_TmpPointsHandle.AddrOfPinnedObject());
+ _nativeSession.SessionHandle, planeHandle, _tmpPointsHandle.AddrOfPinnedObject());
var planeCenter = GetCenterPose(planeHandle);
var unityWorldTPlane =
@@ -101,7 +101,7 @@ public void GetPolygon(IntPtr planeHandle, List points)
for (int i = pointCount - 2; i >= 0; i -= 2)
{
var point = unityWorldTPlane.MultiplyPoint3x4(
- new Vector3(m_TmpPoints[i], 0, -m_TmpPoints[i + 1]));
+ new Vector3(_tmpPoints[i], 0, -_tmpPoints[i + 1]));
points.Add(point);
}
}
@@ -110,14 +110,14 @@ public DetectedPlane GetSubsumedBy(IntPtr planeHandle)
{
IntPtr subsumerHandle = IntPtr.Zero;
ExternApi.ArPlane_acquireSubsumedBy(
- m_NativeSession.SessionHandle, planeHandle, ref subsumerHandle);
- return m_NativeSession.TrackableFactory(subsumerHandle) as DetectedPlane;
+ _nativeSession.SessionHandle, planeHandle, ref subsumerHandle);
+ return _nativeSession.TrackableFactory(subsumerHandle) as DetectedPlane;
}
public DetectedPlaneType GetPlaneType(IntPtr planeHandle)
{
ApiPlaneType planeType = ApiPlaneType.HorizontalDownwardFacing;
- ExternApi.ArPlane_getType(m_NativeSession.SessionHandle, planeHandle, ref planeType);
+ ExternApi.ArPlane_getType(_nativeSession.SessionHandle, planeHandle, ref planeType);
return planeType.ToDetectedPlaneType();
}
@@ -126,10 +126,10 @@ public bool IsPoseInExtents(IntPtr planeHandle, Pose pose)
// The int is used as a boolean value as the C API expects a int32_t value to represent
// a boolean.
int isPoseInExtents = 0;
- var poseHandle = m_NativeSession.PoseApi.Create(pose);
+ var poseHandle = _nativeSession.PoseApi.Create(pose);
ExternApi.ArPlane_isPoseInExtents(
- m_NativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInExtents);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInExtents);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return isPoseInExtents != 0;
}
@@ -139,7 +139,7 @@ public bool IsPoseInExtents(IntPtr planeHandle, IntPtr poseHandle)
// a boolean.
int isPoseInExtents = 0;
ExternApi.ArPlane_isPoseInExtents(
- m_NativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInExtents);
+ _nativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInExtents);
return isPoseInExtents != 0;
}
@@ -148,10 +148,10 @@ public bool IsPoseInPolygon(IntPtr planeHandle, Pose pose)
// The int is used as a boolean value as the C API expects a int32_t value to represent
// a boolean.
int isPoseInPolygon = 0;
- var poseHandle = m_NativeSession.PoseApi.Create(pose);
+ var poseHandle = _nativeSession.PoseApi.Create(pose);
ExternApi.ArPlane_isPoseInPolygon(
- m_NativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInPolygon);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInPolygon);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return isPoseInPolygon != 0;
}
@@ -161,7 +161,7 @@ public bool IsPoseInPolygon(IntPtr planeHandle, IntPtr poseHandle)
// a boolean.
int isPoseInPolygon = 0;
ExternApi.ArPlane_isPoseInPolygon(
- m_NativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInPolygon);
+ _nativeSession.SessionHandle, planeHandle, poseHandle, ref isPoseInPolygon);
return isPoseInPolygon != 0;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointApi.cs
index 5f6b8533..7e4bf277 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointApi.cs
@@ -34,27 +34,47 @@ namespace GoogleARCoreInternal
internal class PointApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public PointApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public Pose GetPose(IntPtr pointHandle)
{
- var poseHandle = m_NativeSession.PoseApi.Create();
- ExternApi.ArPoint_getPose(m_NativeSession.SessionHandle, pointHandle, poseHandle);
- Pose resultPose = m_NativeSession.PoseApi.ExtractPoseValue(poseHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ var poseHandle = _nativeSession.PoseApi.Create();
+ ExternApi.ArPoint_getPose(_nativeSession.SessionHandle, pointHandle, poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return resultPose;
}
+ public Pose GetInstantPlacementPointPose(IntPtr instantPlacementPointHandle)
+ {
+ var poseHandle = _nativeSession.PoseApi.Create();
+ ExternApi.ArInstantPlacementPoint_getPose(
+ _nativeSession.SessionHandle, instantPlacementPointHandle, poseHandle);
+ Pose resultPose = _nativeSession.PoseApi.ExtractPoseValue(poseHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
+ return resultPose;
+ }
+
+ public InstantPlacementPointTrackingMethod GetInstantPlacementPointTrackingMethod(
+ IntPtr instantPlacementPointHandle)
+ {
+ InstantPlacementPointTrackingMethod trackingMethod =
+ InstantPlacementPointTrackingMethod.NotTracking;
+ ExternApi.ArInstantPlacementPoint_getTrackingMethod(
+ _nativeSession.SessionHandle, instantPlacementPointHandle, ref trackingMethod);
+ return trackingMethod;
+ }
+
public FeaturePointOrientationMode GetOrientationMode(IntPtr pointHandle)
{
ApiFeaturePointOrientationMode orientationMode =
ApiFeaturePointOrientationMode.Identity;
- ExternApi.ArPoint_getOrientationMode(m_NativeSession.SessionHandle, pointHandle,
+ ExternApi.ArPoint_getOrientationMode(_nativeSession.SessionHandle, pointHandle,
ref orientationMode);
return orientationMode.ToFeaturePointOrientationMode();
}
@@ -69,6 +89,15 @@ public static extern void ArPoint_getPose(
[AndroidImport(ApiConstants.ARCoreNativeApi)]
public static extern void ArPoint_getOrientationMode(
IntPtr session, IntPtr point, ref ApiFeaturePointOrientationMode orientationMode);
+
+ [AndroidImport(ApiConstants.ARCoreNativeApi)]
+ public static extern void ArInstantPlacementPoint_getPose(
+ IntPtr session, IntPtr instantPlacementPoint, IntPtr out_pose);
+
+ [AndroidImport(ApiConstants.ARCoreNativeApi)]
+ public static extern void ArInstantPlacementPoint_getTrackingMethod(
+ IntPtr session, IntPtr instantPlacementPoint,
+ ref InstantPlacementPointTrackingMethod trackingMethod);
#pragma warning restore 626
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointCloudApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointCloudApi.cs
index 7bb0c8b1..116bf145 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointCloudApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PointCloudApi.cs
@@ -37,20 +37,20 @@ namespace GoogleARCoreInternal
internal class PointCloudApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
- private float[] m_CachedVector = new float[4];
+ private float[] _cachedVector = new float[4];
public PointCloudApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public long GetTimestamp(IntPtr pointCloudHandle)
{
long timestamp = 0;
ExternApi.ArPointCloud_getTimestamp(
- m_NativeSession.SessionHandle, pointCloudHandle, ref timestamp);
+ _nativeSession.SessionHandle, pointCloudHandle, ref timestamp);
return timestamp;
}
@@ -58,7 +58,7 @@ public int GetNumberOfPoints(IntPtr pointCloudHandle)
{
int pointCount = 0;
ExternApi.ArPointCloud_getNumberOfPoints(
- m_NativeSession.SessionHandle, pointCloudHandle, ref pointCount);
+ _nativeSession.SessionHandle, pointCloudHandle, ref pointCount);
return pointCount;
}
@@ -69,17 +69,17 @@ public PointCloudPoint GetPoint(IntPtr pointCloudHandle, int index)
// at index.
IntPtr pointCloudDataHandle = IntPtr.Zero;
ExternApi.ArPointCloud_getData(
- m_NativeSession.SessionHandle, pointCloudHandle, ref pointCloudDataHandle);
+ _nativeSession.SessionHandle, pointCloudHandle, ref pointCloudDataHandle);
IntPtr pointDataHandle = new IntPtr(pointCloudDataHandle.ToInt64() +
(Marshal.SizeOf(typeof(Vector4)) * index));
- Marshal.Copy(pointDataHandle, m_CachedVector, 0, 4);
+ Marshal.Copy(pointDataHandle, _cachedVector, 0, 4);
// Negate z axis because points are returned in OpenGl space.
Vector3 position = new Vector3(
- m_CachedVector[0], m_CachedVector[1], -m_CachedVector[2]);
- float confidence = m_CachedVector[3];
+ _cachedVector[0], _cachedVector[1], -_cachedVector[2]);
+ float confidence = _cachedVector[3];
- return new PointCloudPoint(_GetPointId(pointCloudHandle, index), position, confidence);
+ return new PointCloudPoint(GetPointId(pointCloudHandle, index), position, confidence);
}
public void Release(IntPtr pointCloudHandle)
@@ -88,17 +88,17 @@ public void Release(IntPtr pointCloudHandle)
}
#if !UNITY_EDITOR
- private int _GetPointId(IntPtr pointCloudHandle, int index)
+ private int GetPointId(IntPtr pointCloudHandle, int index)
{
IntPtr pointCloudIdsHandle = IntPtr.Zero;
ExternApi.ArPointCloud_getPointIds(
- m_NativeSession.SessionHandle, pointCloudHandle, ref pointCloudIdsHandle);
+ _nativeSession.SessionHandle, pointCloudHandle, ref pointCloudIdsHandle);
IntPtr pointIdHandle =
new IntPtr(pointCloudIdsHandle.ToInt64() + (Marshal.SizeOf(typeof(int)) * index));
return Marshal.ReadInt32(pointIdHandle);
}
#else
- private int _GetPointId(IntPtr pointCloudHandle, int index)
+ private int GetPointId(IntPtr pointCloudHandle, int index)
{
return 0;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PoseApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PoseApi.cs
index c031ca78..86540f23 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PoseApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/PoseApi.cs
@@ -26,11 +26,11 @@ namespace GoogleARCoreInternal
internal class PoseApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public PoseApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public IntPtr Create()
@@ -43,7 +43,7 @@ public IntPtr Create(Pose pose)
ApiPoseData rawPose = new ApiPoseData(pose);
IntPtr poseHandle = IntPtr.Zero;
- ExternApi.ArPose_create(m_NativeSession.SessionHandle, ref rawPose, ref poseHandle);
+ ExternApi.ArPose_create(_nativeSession.SessionHandle, ref rawPose, ref poseHandle);
return poseHandle;
}
@@ -55,7 +55,7 @@ public void Destroy(IntPtr nativePose)
public Pose ExtractPoseValue(IntPtr poseHandle)
{
ApiPoseData poseValue = new ApiPoseData(Pose.identity);
- ExternApi.ArPose_getPoseRaw(m_NativeSession.SessionHandle, poseHandle, ref poseValue);
+ ExternApi.ArPose_getPoseRaw(_nativeSession.SessionHandle, poseHandle, ref poseValue);
return poseValue.ToUnityPose();
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionApi.cs
index 4a04a86f..02fe8bb5 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionApi.cs
@@ -36,17 +36,17 @@ namespace GoogleARCoreInternal
internal class SessionApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public SessionApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public void ReportEngineType()
{
ExternApi.ArSession_reportEngineType(
- m_NativeSession.SessionHandle, "Unity", Application.unityVersion);
+ _nativeSession.SessionHandle, "Unity", Application.unityVersion);
}
public void GetSupportedCameraConfigurationsWithFilter(
@@ -55,24 +55,24 @@ public void GetSupportedCameraConfigurationsWithFilter(
List supportedCameraConfigs, DeviceCameraDirection cameraFacingDirection)
{
IntPtr cameraConfigFilterHandle =
- m_NativeSession.CameraConfigFilterApi.Create(cameraConfigFilter);
- ExternApi.ArSession_getSupportedCameraConfigsWithFilter(m_NativeSession.SessionHandle,
+ _nativeSession.CameraConfigFilterApi.Create(cameraConfigFilter);
+ ExternApi.ArSession_getSupportedCameraConfigsWithFilter(_nativeSession.SessionHandle,
cameraConfigFilterHandle, cameraConfigListHandle);
- m_NativeSession.CameraConfigFilterApi.Destroy(cameraConfigFilterHandle);
+ _nativeSession.CameraConfigFilterApi.Destroy(cameraConfigFilterHandle);
supportedCameraConfigHandles.Clear();
supportedCameraConfigs.Clear();
- int listSize = m_NativeSession.CameraConfigListApi.GetSize(cameraConfigListHandle);
+ int listSize = _nativeSession.CameraConfigListApi.GetSize(cameraConfigListHandle);
for (int i = 0; i < listSize; i++)
{
- IntPtr cameraConfigHandle = m_NativeSession.CameraConfigApi.Create();
- m_NativeSession.CameraConfigListApi.GetItemAt(
+ IntPtr cameraConfigHandle = _nativeSession.CameraConfigApi.Create();
+ _nativeSession.CameraConfigListApi.GetItemAt(
cameraConfigListHandle, i, cameraConfigHandle);
// Skip camera config that has a different camera facing direction.
DeviceCameraDirection configDirection =
- m_NativeSession.CameraConfigApi.GetFacingDirection(cameraConfigHandle)
+ _nativeSession.CameraConfigApi.GetFacingDirection(cameraConfigHandle)
.ToDeviceCameraDirection();
if (configDirection != cameraFacingDirection)
{
@@ -80,19 +80,19 @@ public void GetSupportedCameraConfigurationsWithFilter(
}
supportedCameraConfigHandles.Add(cameraConfigHandle);
- supportedCameraConfigs.Add(_CreateCameraConfig(cameraConfigHandle));
+ supportedCameraConfigs.Add(CreateCameraConfig(cameraConfigHandle));
}
}
public ApiArStatus SetCameraConfig(IntPtr cameraConfigHandle)
{
return ExternApi.ArSession_setCameraConfig(
- m_NativeSession.SessionHandle, cameraConfigHandle);
+ _nativeSession.SessionHandle, cameraConfigHandle);
}
public CameraConfig GetCameraConfig()
{
- IntPtr cameraConfigHandle = m_NativeSession.CameraConfigApi.Create();
+ IntPtr cameraConfigHandle = _nativeSession.CameraConfigApi.Create();
if (InstantPreviewManager.IsProvidingPlatform)
{
@@ -100,37 +100,37 @@ public CameraConfig GetCameraConfig()
return new CameraConfig();
}
- ExternApi.ArSession_getCameraConfig(m_NativeSession.SessionHandle, cameraConfigHandle);
- CameraConfig currentCameraConfig = _CreateCameraConfig(cameraConfigHandle);
- m_NativeSession.CameraConfigApi.Destroy(cameraConfigHandle);
+ ExternApi.ArSession_getCameraConfig(_nativeSession.SessionHandle, cameraConfigHandle);
+ CameraConfig currentCameraConfig = CreateCameraConfig(cameraConfigHandle);
+ _nativeSession.CameraConfigApi.Destroy(cameraConfigHandle);
return currentCameraConfig;
}
public void GetAllTrackables(List trackables)
{
- IntPtr listHandle = m_NativeSession.TrackableListApi.Create();
+ IntPtr listHandle = _nativeSession.TrackableListApi.Create();
ExternApi.ArSession_getAllTrackables(
- m_NativeSession.SessionHandle, ApiTrackableType.BaseTrackable, listHandle);
+ _nativeSession.SessionHandle, ApiTrackableType.BaseTrackable, listHandle);
trackables.Clear();
- int count = m_NativeSession.TrackableListApi.GetCount(listHandle);
+ int count = _nativeSession.TrackableListApi.GetCount(listHandle);
for (int i = 0; i < count; i++)
{
IntPtr trackableHandle =
- m_NativeSession.TrackableListApi.AcquireItem(listHandle, i);
+ _nativeSession.TrackableListApi.AcquireItem(listHandle, i);
- Trackable trackable = m_NativeSession.TrackableFactory(trackableHandle);
+ Trackable trackable = _nativeSession.TrackableFactory(trackableHandle);
if (trackable != null)
{
trackables.Add(trackable);
}
else
{
- m_NativeSession.TrackableApi.Release(trackableHandle);
+ _nativeSession.TrackableApi.Release(trackableHandle);
}
}
- m_NativeSession.TrackableListApi.Destroy(listHandle);
+ _nativeSession.TrackableListApi.Destroy(listHandle);
}
public void SetDisplayGeometry(ScreenOrientation orientation, int width, int height)
@@ -158,17 +158,17 @@ public void SetDisplayGeometry(ScreenOrientation orientation, int width, int hei
}
ExternApi.ArSession_setDisplayGeometry(
- m_NativeSession.SessionHandle, androidOrientation, width, height);
+ _nativeSession.SessionHandle, androidOrientation, width, height);
}
public Anchor CreateAnchor(Pose pose)
{
- IntPtr poseHandle = m_NativeSession.PoseApi.Create(pose);
+ IntPtr poseHandle = _nativeSession.PoseApi.Create(pose);
IntPtr anchorHandle = IntPtr.Zero;
ExternApi.ArSession_acquireNewAnchor(
- m_NativeSession.SessionHandle, poseHandle, ref anchorHandle);
- var anchorResult = Anchor.Factory(m_NativeSession, anchorHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, poseHandle, ref anchorHandle);
+ var anchorResult = Anchor.Factory(_nativeSession, anchorHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return anchorResult;
}
@@ -178,7 +178,7 @@ public ApiArStatus CreateCloudAnchor(
cloudAnchorHandle = IntPtr.Zero;
var result =
ExternApi.ArSession_hostAndAcquireNewCloudAnchor(
- m_NativeSession.SessionHandle, platformAnchorHandle, ref cloudAnchorHandle);
+ _nativeSession.SessionHandle, platformAnchorHandle, ref cloudAnchorHandle);
return result;
}
@@ -186,18 +186,18 @@ public ApiArStatus ResolveCloudAnchor(String cloudAnchorId, out IntPtr cloudAnch
{
cloudAnchorHandle = IntPtr.Zero;
return ExternApi.ArSession_resolveAndAcquireNewCloudAnchor(
- m_NativeSession.SessionHandle, cloudAnchorId, ref cloudAnchorHandle);
+ _nativeSession.SessionHandle, cloudAnchorId, ref cloudAnchorHandle);
}
public bool IsDepthModeSupported(ApiDepthMode depthMode)
{
int isSupported = 0;
ExternApi.ArSession_isDepthModeSupported(
- m_NativeSession.SessionHandle, depthMode, ref isSupported);
+ _nativeSession.SessionHandle, depthMode, ref isSupported);
return isSupported != 0;
}
- private CameraConfig _CreateCameraConfig(IntPtr cameraConfigHandle)
+ private CameraConfig CreateCameraConfig(IntPtr cameraConfigHandle)
{
int imageWidth = 0;
int imageHeight = 0;
@@ -206,12 +206,12 @@ private CameraConfig _CreateCameraConfig(IntPtr cameraConfigHandle)
int minFps = 0;
int maxFps = 0;
CameraConfigDepthSensorUsages depthSensorUsage =
- m_NativeSession.CameraConfigApi.GetDepthSensorUsage(cameraConfigHandle);
- m_NativeSession.CameraConfigApi.GetImageDimensions(
+ _nativeSession.CameraConfigApi.GetDepthSensorUsage(cameraConfigHandle);
+ _nativeSession.CameraConfigApi.GetImageDimensions(
cameraConfigHandle, out imageWidth, out imageHeight);
- m_NativeSession.CameraConfigApi.GetTextureDimensions(
+ _nativeSession.CameraConfigApi.GetTextureDimensions(
cameraConfigHandle, out textureWidth, out textureHeight);
- m_NativeSession.CameraConfigApi.GetFpsRange(
+ _nativeSession.CameraConfigApi.GetFpsRange(
cameraConfigHandle, out minFps, out maxFps);
return new CameraConfig(new Vector2(imageWidth, imageHeight),
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionConfigApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionConfigApi.cs
index 3ce3631a..96d96e7d 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionConfigApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/SessionConfigApi.cs
@@ -35,11 +35,11 @@ namespace GoogleARCoreInternal
internal class SessionConfigApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public SessionConfigApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public static void UpdateApiConfigWithARCoreSessionConfig(IntPtr sessionHandle,
@@ -64,7 +64,7 @@ public static void UpdateApiConfigWithARCoreSessionConfig(IntPtr sessionHandle,
IntPtr augmentedImageDatabaseHandle = IntPtr.Zero;
if (sessionConfig.AugmentedImageDatabase != null)
{
- augmentedImageDatabaseHandle = sessionConfig.AugmentedImageDatabase.NativeHandle;
+ augmentedImageDatabaseHandle = sessionConfig.AugmentedImageDatabase._nativeHandle;
ExternApi.ArConfig_setAugmentedImageDatabase(sessionHandle, configHandle,
augmentedImageDatabaseHandle);
}
@@ -86,12 +86,18 @@ public static void UpdateApiConfigWithARCoreSessionConfig(IntPtr sessionHandle,
ApiDepthMode depthMode = sessionConfig.DepthMode.ToApiDepthMode();
ExternApi.ArConfig_setDepthMode(sessionHandle, configHandle, depthMode);
}
+
+ if (!InstantPreviewManager.IsProvidingPlatform)
+ {
+ ExternApi.ArConfig_setInstantPlacementMode(sessionHandle, configHandle,
+ sessionConfig.InstantPlacementMode);
+ }
}
public IntPtr Create()
{
IntPtr configHandle = IntPtr.Zero;
- ExternApi.ArConfig_create(m_NativeSession.SessionHandle, ref configHandle);
+ ExternApi.ArConfig_create(_nativeSession.SessionHandle, ref configHandle);
return configHandle;
}
@@ -140,6 +146,10 @@ public static extern void ArConfig_setFocusMode(
[AndroidImport(ApiConstants.ARCoreNativeApi)]
public static extern void ArConfig_setDepthMode(
IntPtr session, IntPtr config, ApiDepthMode mode);
+
+ [AndroidImport(ApiConstants.ARCoreNativeApi)]
+ public static extern void ArConfig_setInstantPlacementMode(
+ IntPtr session, IntPtr config, InstantPlacementMode instant_placement_mode);
#pragma warning restore 626
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableApi.cs
index 1c365f33..6fe936d0 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableApi.cs
@@ -35,35 +35,35 @@ namespace GoogleARCoreInternal
internal class TrackableApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public TrackableApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public ApiTrackableType GetType(IntPtr trackableHandle)
{
ApiTrackableType type = ApiTrackableType.Plane;
- ExternApi.ArTrackable_getType(m_NativeSession.SessionHandle, trackableHandle, ref type);
+ ExternApi.ArTrackable_getType(_nativeSession.SessionHandle, trackableHandle, ref type);
return type;
}
public TrackingState GetTrackingState(IntPtr trackableHandle)
{
ApiTrackingState apiTrackingState = ApiTrackingState.Stopped;
- ExternApi.ArTrackable_getTrackingState(m_NativeSession.SessionHandle, trackableHandle,
+ ExternApi.ArTrackable_getTrackingState(_nativeSession.SessionHandle, trackableHandle,
ref apiTrackingState);
return apiTrackingState.ToTrackingState();
}
public bool AcquireNewAnchor(IntPtr trackableHandle, Pose pose, out IntPtr anchorHandle)
{
- IntPtr poseHandle = m_NativeSession.PoseApi.Create(pose);
+ IntPtr poseHandle = _nativeSession.PoseApi.Create(pose);
anchorHandle = IntPtr.Zero;
int status = ExternApi.ArTrackable_acquireNewAnchor(
- m_NativeSession.SessionHandle, trackableHandle, poseHandle, ref anchorHandle);
- m_NativeSession.PoseApi.Destroy(poseHandle);
+ _nativeSession.SessionHandle, trackableHandle, poseHandle, ref anchorHandle);
+ _nativeSession.PoseApi.Destroy(poseHandle);
return status == 0;
}
@@ -74,17 +74,17 @@ public void Release(IntPtr trackableHandle)
public void GetAnchors(IntPtr trackableHandle, List anchors)
{
- IntPtr anchorListHandle = m_NativeSession.AnchorApi.CreateList();
+ IntPtr anchorListHandle = _nativeSession.AnchorApi.CreateList();
ExternApi.ArTrackable_getAnchors(
- m_NativeSession.SessionHandle, trackableHandle, anchorListHandle);
+ _nativeSession.SessionHandle, trackableHandle, anchorListHandle);
anchors.Clear();
- int anchorCount = m_NativeSession.AnchorApi.GetListSize(anchorListHandle);
+ int anchorCount = _nativeSession.AnchorApi.GetListSize(anchorListHandle);
for (int i = 0; i < anchorCount; i++)
{
IntPtr anchorHandle =
- m_NativeSession.AnchorApi.AcquireListItem(anchorListHandle, i);
- Anchor anchor = Anchor.Factory(m_NativeSession, anchorHandle, false);
+ _nativeSession.AnchorApi.AcquireListItem(anchorListHandle, i);
+ Anchor anchor = Anchor.Factory(_nativeSession, anchorHandle, false);
if (anchor == null)
{
Debug.LogFormat("Unable to find Anchor component for handle {0}", anchorHandle);
@@ -95,7 +95,7 @@ public void GetAnchors(IntPtr trackableHandle, List anchors)
}
}
- m_NativeSession.AnchorApi.DestroyList(anchorListHandle);
+ _nativeSession.AnchorApi.DestroyList(anchorListHandle);
}
private struct ExternApi
diff --git a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableListApi.cs b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableListApi.cs
index ea980ae2..d07c1128 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableListApi.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Api/Wrappers/TrackableListApi.cs
@@ -35,17 +35,17 @@ namespace GoogleARCoreInternal
internal class TrackableListApi
{
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
public TrackableListApi(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
+ _nativeSession = nativeSession;
}
public IntPtr Create()
{
IntPtr handle = IntPtr.Zero;
- ExternApi.ArTrackableList_create(m_NativeSession.SessionHandle, ref handle);
+ ExternApi.ArTrackableList_create(_nativeSession.SessionHandle, ref handle);
return handle;
}
@@ -57,7 +57,7 @@ public void Destroy(IntPtr listHandle)
public int GetCount(IntPtr listHandle)
{
int count = 0;
- ExternApi.ArTrackableList_getSize(m_NativeSession.SessionHandle, listHandle, ref count);
+ ExternApi.ArTrackableList_getSize(_nativeSession.SessionHandle, listHandle, ref count);
return count;
}
@@ -65,7 +65,7 @@ public IntPtr AcquireItem(IntPtr listHandle, int index)
{
IntPtr trackableHandle = IntPtr.Zero;
ExternApi.ArTrackableList_acquireItem(
- m_NativeSession.SessionHandle, listHandle, index, ref trackableHandle);
+ _nativeSession.SessionHandle, listHandle, index, ref trackableHandle);
return trackableHandle;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Async/WaitForTaskCompletionYieldInstruction.cs b/Assets/GoogleARCore/SDK/Scripts/Async/WaitForTaskCompletionYieldInstruction.cs
index 26b9baa8..4ef0a6c0 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Async/WaitForTaskCompletionYieldInstruction.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Async/WaitForTaskCompletionYieldInstruction.cs
@@ -33,7 +33,7 @@ public class WaitForTaskCompletionYieldInstruction : CustomYieldInstruction
///
/// The AsyncTask the yield instruction waits on.
///
- private AsyncTask m_Task;
+ private AsyncTask _task;
///
/// Constructor for WaitForTaskCompletionYieldInstruction.
@@ -41,20 +41,20 @@ public class WaitForTaskCompletionYieldInstruction : CustomYieldInstruction
/// The task to wait for completion.
public WaitForTaskCompletionYieldInstruction(AsyncTask task)
{
- m_Task = task;
+ _task = task;
}
///
/// Gets a value indicating whether the coroutine instruction should keep waiting.
///
/// true if the task is incomplete, otherwise false.
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overridden method.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overridden method.")]
public override bool keepWaiting
{
get
{
- return !m_Task.IsComplete;
+ return !_task.IsComplete;
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/AsyncTask.cs b/Assets/GoogleARCore/SDK/Scripts/AsyncTask.cs
index 392de7a9..05e2bf3c 100644
--- a/Assets/GoogleARCore/SDK/Scripts/AsyncTask.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/AsyncTask.cs
@@ -35,7 +35,7 @@ public class AsyncTask
///
/// A collection of actons to perform on the main Unity thread after the task is complete.
///
- private List> m_ActionsUponTaskCompletion;
+ private List> _actionsUponTaskCompletion;
///
/// Constructor for AsyncTask.
@@ -55,13 +55,13 @@ internal AsyncTask(out Action asyncOperationComplete)
{
this.Result = result;
IsComplete = true;
- if (m_ActionsUponTaskCompletion != null)
+ if (_actionsUponTaskCompletion != null)
{
AsyncTask.PerformActionInUpdate(() =>
{
- for (int i = 0; i < m_ActionsUponTaskCompletion.Count; i++)
+ for (int i = 0; i < _actionsUponTaskCompletion.Count; i++)
{
- m_ActionsUponTaskCompletion[i](result);
+ _actionsUponTaskCompletion[i](result);
}
});
}
@@ -117,12 +117,12 @@ public AsyncTask ThenAction(Action doAfterTaskComplete)
}
// Allocate list if needed (avoids allocation if then is not used).
- if (m_ActionsUponTaskCompletion == null)
+ if (_actionsUponTaskCompletion == null)
{
- m_ActionsUponTaskCompletion = new List>();
+ _actionsUponTaskCompletion = new List>();
}
- m_ActionsUponTaskCompletion.Add(doAfterTaskComplete);
+ _actionsUponTaskCompletion.Add(doAfterTaskComplete);
return this;
}
}
@@ -132,8 +132,8 @@ public AsyncTask ThenAction(Action doAfterTaskComplete)
///
internal class AsyncTask
{
- private static Queue s_UpdateActionQueue = new Queue();
- private static object s_LockObject = new object();
+ private static Queue _updateActionQueue = new Queue();
+ private static object _lockObject = new object();
public static bool IsInitialized { get; private set; }
@@ -143,9 +143,9 @@ internal class AsyncTask
/// The action to perform.
public static void PerformActionInUpdate(Action action)
{
- lock (s_LockObject)
+ lock (_lockObject)
{
- s_UpdateActionQueue.Enqueue(action);
+ _updateActionQueue.Enqueue(action);
}
}
@@ -154,11 +154,11 @@ public static void PerformActionInUpdate(Action action)
///
public static void OnUpdate()
{
- lock (s_LockObject)
+ lock (_lockObject)
{
- while (s_UpdateActionQueue.Count > 0)
+ while (_updateActionQueue.Count > 0)
{
- Action action = s_UpdateActionQueue.Dequeue();
+ Action action = _updateActionQueue.Dequeue();
action();
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/AugmentedFace.cs b/Assets/GoogleARCore/SDK/Scripts/AugmentedFace.cs
index d072b408..dcafaf6e 100644
--- a/Assets/GoogleARCore/SDK/Scripts/AugmentedFace.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/AugmentedFace.cs
@@ -41,8 +41,8 @@ public partial class AugmentedFace : Trackable
internal AugmentedFace(IntPtr nativeHandle, NativeSession nativeApi)
: base(nativeHandle, nativeApi)
{
- m_TrackableNativeHandle = nativeHandle;
- m_NativeSession = nativeApi;
+ _trackableNativeHandle = nativeHandle;
+ _nativeSession = nativeApi;
}
///
@@ -59,14 +59,14 @@ public Pose CenterPose
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"CenterPose:: Trying to access a session that has already been destroyed.");
return new Pose();
}
- return m_NativeSession.AugmentedFaceApi.GetCenterPose(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedFaceApi.GetCenterPose(_trackableNativeHandle);
}
}
@@ -77,15 +77,15 @@ public Pose CenterPose
/// The position and orientation of a face region in world space.
public Pose GetRegionPose(AugmentedFaceRegion region)
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"GetRegionPose: Trying to access a session that has already been destroyed.");
return new Pose();
}
- return m_NativeSession.AugmentedFaceApi.GetRegionPose(
- m_TrackableNativeHandle, (ApiAugmentedFaceRegionType)region);
+ return _nativeSession.AugmentedFaceApi.GetRegionPose(
+ _trackableNativeHandle, (ApiAugmentedFaceRegionType)region);
}
///
@@ -101,14 +101,14 @@ public Pose GetRegionPose(AugmentedFaceRegion region)
///
public void GetVertices(List vertices)
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"GetVertices:: Trying to access a session that has already been destroyed.");
return;
}
- m_NativeSession.AugmentedFaceApi.GetVertices(m_TrackableNativeHandle, vertices);
+ _nativeSession.AugmentedFaceApi.GetVertices(_trackableNativeHandle, vertices);
}
///
@@ -121,7 +121,7 @@ public void GetVertices(List vertices)
///
public void GetTextureCoordinates(List textureCoordinates)
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"GetTextureCoordinates:: Trying to access a session that has already been " +
@@ -129,8 +129,8 @@ public void GetTextureCoordinates(List textureCoordinates)
return;
}
- m_NativeSession.AugmentedFaceApi.GetTextureCoordinates(
- m_TrackableNativeHandle, textureCoordinates);
+ _nativeSession.AugmentedFaceApi.GetTextureCoordinates(
+ _trackableNativeHandle, textureCoordinates);
}
///
@@ -143,14 +143,14 @@ public void GetTextureCoordinates(List textureCoordinates)
///
public void GetNormals(List normals)
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"GetNormals:: Trying to access a session that has already been destroyed.");
return;
}
- m_NativeSession.AugmentedFaceApi.GetNormals(m_TrackableNativeHandle, normals);
+ _nativeSession.AugmentedFaceApi.GetNormals(_trackableNativeHandle, normals);
}
///
@@ -163,7 +163,7 @@ public void GetNormals(List normals)
///
public void GetTriangleIndices(List indices)
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"GetTriangleIndices:: Trying to access a session that has already been " +
@@ -171,7 +171,7 @@ public void GetTriangleIndices(List indices)
return;
}
- m_NativeSession.AugmentedFaceApi.GetTriangleIndices(m_TrackableNativeHandle, indices);
+ _nativeSession.AugmentedFaceApi.GetTriangleIndices(_trackableNativeHandle, indices);
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/AugmentedImage.cs b/Assets/GoogleARCore/SDK/Scripts/AugmentedImage.cs
index dece6ebd..54a65a44 100644
--- a/Assets/GoogleARCore/SDK/Scripts/AugmentedImage.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/AugmentedImage.cs
@@ -51,7 +51,7 @@ public int DatabaseIndex
{
get
{
- return m_NativeSession.AugmentedImageApi.GetDatabaseIndex(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedImageApi.GetDatabaseIndex(_trackableNativeHandle);
}
}
@@ -65,7 +65,7 @@ public string Name
[SuppressMemoryAllocationError(IsWarning = true, Reason = "Allocates new string")]
get
{
- return m_NativeSession.AugmentedImageApi.GetName(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedImageApi.GetName(_trackableNativeHandle);
}
}
@@ -81,7 +81,7 @@ public Pose CenterPose
{
get
{
- return m_NativeSession.AugmentedImageApi.GetCenterPose(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedImageApi.GetCenterPose(_trackableNativeHandle);
}
}
@@ -101,7 +101,7 @@ public float ExtentX
{
get
{
- return m_NativeSession.AugmentedImageApi.GetExtentX(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedImageApi.GetExtentX(_trackableNativeHandle);
}
}
@@ -120,7 +120,7 @@ public float ExtentZ
{
get
{
- return m_NativeSession.AugmentedImageApi.GetExtentZ(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedImageApi.GetExtentZ(_trackableNativeHandle);
}
}
@@ -132,7 +132,7 @@ public AugmentedImageTrackingMethod TrackingMethod
{
get
{
- return m_NativeSession.AugmentedImageApi.GetTrackingMethod(m_TrackableNativeHandle);
+ return _nativeSession.AugmentedImageApi.GetTrackingMethod(_trackableNativeHandle);
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/AugmentedImageDatabase.cs b/Assets/GoogleARCore/SDK/Scripts/AugmentedImageDatabase.cs
index 6d38f2bc..a2d3f3a4 100644
--- a/Assets/GoogleARCore/SDK/Scripts/AugmentedImageDatabase.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/AugmentedImageDatabase.cs
@@ -26,6 +26,7 @@ namespace GoogleARCore
using System.Text;
using GoogleARCoreInternal;
using UnityEngine;
+ using UnityEngine.Serialization;
#if UNITY_EDITOR
using System.IO;
@@ -40,24 +41,28 @@ namespace GoogleARCore
///
public class AugmentedImageDatabase : ScriptableObject
{
- private IntPtr m_ArAugmentedImageDatabase = IntPtr.Zero;
+ private IntPtr _arAugmentedImageDatabase = IntPtr.Zero;
+ [FormerlySerializedAs("m_Images")]
[SerializeField]
- private List m_Images =
+ private List _images =
new List();
[SuppressMessage("UnityRules.UnityStyleRules", "CS0169:FieldIsNeverUsedIssue",
Justification = "Used in editor.")]
+ [FormerlySerializedAs("m_RawData")]
[SerializeField]
- private byte[] m_RawData = null;
+ private byte[] _rawData = null;
// Fixes unused variable warning when not in editor.
#pragma warning disable 414
+ [FormerlySerializedAs("m_IsRawDataDirty")]
[SerializeField]
- private bool m_IsRawDataDirty = true;
+ private bool _isRawDataDirty = true;
+ [FormerlySerializedAs("m_CliVersion")]
[SerializeField]
- private string m_CliVersion = string.Empty;
+ private string _cliVersion = string.Empty;
#pragma warning restore 414
///
@@ -65,7 +70,7 @@ public class AugmentedImageDatabase : ScriptableObject
///
public AugmentedImageDatabase()
{
- IsDirty = true;
+ _isDirty = true;
}
///
@@ -75,9 +80,9 @@ public int Count
{
get
{
- lock (m_Images)
+ lock (_images)
{
- return m_Images.Count;
+ return _images.Count;
}
}
}
@@ -86,16 +91,16 @@ public int Count
/// Gets a value indicating whether the AugmentedImageDatabase is dirty and has to be reset
/// in ArCore.
///
- internal bool IsDirty { get; private set; }
+ internal bool _isDirty { get; private set; }
///
/// Gets the native handle for an associated ArAugmentedImageDatabase.
///
- internal IntPtr NativeHandle
+ internal IntPtr _nativeHandle
{
get
{
- if (m_ArAugmentedImageDatabase == IntPtr.Zero)
+ if (_arAugmentedImageDatabase == IntPtr.Zero)
{
var nativeSession = LifecycleManager.Instance.NativeSession;
if (nativeSession == null || InstantPreviewManager.IsProvidingPlatform)
@@ -103,17 +108,17 @@ internal IntPtr NativeHandle
return IntPtr.Zero;
}
- m_ArAugmentedImageDatabase =
- nativeSession.AugmentedImageDatabaseApi.Create(m_RawData);
+ _arAugmentedImageDatabase =
+ nativeSession.AugmentedImageDatabaseApi.Create(_rawData);
}
- IsDirty = false;
- return m_ArAugmentedImageDatabase;
+ _isDirty = false;
+ return _arAugmentedImageDatabase;
}
private set
{
- m_ArAugmentedImageDatabase = value;
+ _arAugmentedImageDatabase = value;
}
}
@@ -128,23 +133,23 @@ public AugmentedImageDatabaseEntry this[int index]
{
get
{
- lock (m_Images)
+ lock (_images)
{
- return m_Images[index];
+ return _images[index];
}
}
#if UNITY_EDITOR
set
{
- var oldValue = m_Images[index];
- m_Images[index] = value;
+ var oldValue = _images[index];
+ _images[index] = value;
- if (oldValue.TextureGUID != m_Images[index].TextureGUID
- || oldValue.Name != m_Images[index].Name
- || oldValue.Width != m_Images[index].Width)
+ if (oldValue.TextureGUID != _images[index].TextureGUID
+ || oldValue.Name != _images[index].Name
+ || oldValue.Width != _images[index].Width)
{
- m_IsRawDataDirty = true;
+ _isRawDataDirty = true;
}
EditorUtility.SetDirty(this);
@@ -193,14 +198,14 @@ public int AddImage(string name, AugmentedImageSrc imageSrc, float width = 0)
}
int imageIndex = nativeSession.AugmentedImageDatabaseApi.AddAugmentedImageAtRuntime(
- NativeHandle, name, imageSrc, width);
+ _nativeHandle, name, imageSrc, width);
if (imageIndex != -1)
{
- lock (m_Images)
+ lock (_images)
{
- m_Images.Add(new AugmentedImageDatabaseEntry(name, width));
- IsDirty = true;
+ _images.Add(new AugmentedImageDatabaseEntry(name, width));
+ _isDirty = true;
}
}
@@ -214,8 +219,8 @@ public int AddImage(string name, AugmentedImageSrc imageSrc, float width = 0)
/// The image entry to add.
public void Add(AugmentedImageDatabaseEntry entry)
{
- m_Images.Add(entry);
- m_IsRawDataDirty = true;
+ _images.Add(entry);
+ _isRawDataDirty = true;
EditorUtility.SetDirty(this);
}
@@ -225,8 +230,8 @@ public void Add(AugmentedImageDatabaseEntry entry)
/// The index of the image entry to remove.
public void RemoveAt(int index)
{
- m_Images.RemoveAt(index);
- m_IsRawDataDirty = true;
+ _images.RemoveAt(index);
+ _isRawDataDirty = true;
EditorUtility.SetDirty(this);
}
@@ -238,7 +243,7 @@ public void RemoveAt(int index)
/// otherwise.
public bool IsBuildNeeded()
{
- return m_IsRawDataDirty;
+ return _isRawDataDirty;
}
/// @endcond
@@ -252,7 +257,7 @@ public bool IsBuildNeeded()
public void BuildIfNeeded(out string error)
{
error = "";
- if (!m_IsRawDataDirty)
+ if (!_isRawDataDirty)
{
return;
}
@@ -266,15 +271,15 @@ public void BuildIfNeeded(out string error)
var tempDirectoryPath = FileUtil.GetUniqueTempPathInProject();
Directory.CreateDirectory(tempDirectoryPath);
var inputImagesFile = Path.Combine(tempDirectoryPath, "inputImages");
- string[] fileLines = new string[m_Images.Count];
- for (int i = 0; i < m_Images.Count; i++)
+ string[] fileLines = new string[_images.Count];
+ for (int i = 0; i < _images.Count; i++)
{
- var imagePath = AssetDatabase.GetAssetPath(m_Images[i].Texture);
+ var imagePath = AssetDatabase.GetAssetPath(_images[i].Texture);
StringBuilder sb = new StringBuilder();
- sb.Append(m_Images[i].Name).Append('|').Append(imagePath);
- if (m_Images[i].Width > 0)
+ sb.Append(_images[i].Name).Append('|').Append(imagePath);
+ if (_images[i].Width > 0)
{
- sb.Append('|').Append(m_Images[i].Width);
+ sb.Append('|').Append(_images[i].Width);
}
fileLines[i] = sb.ToString();
@@ -300,8 +305,8 @@ public void BuildIfNeeded(out string error)
return;
}
- m_RawData = File.ReadAllBytes(rawDatabasePath + ".imgdb");
- m_IsRawDataDirty = false;
+ _rawData = File.ReadAllBytes(rawDatabasePath + ".imgdb");
+ _isRawDataDirty = false;
EditorUtility.SetDirty(this);
// Force a save to make certain build process will get updated asset.
@@ -310,7 +315,7 @@ public void BuildIfNeeded(out string error)
const int BYTES_IN_KBYTE = 1024;
Debug.LogFormat(
"Built AugmentedImageDatabase '{0}' ({1} Images, {2} KBytes)", name, Count,
- m_RawData.Length/BYTES_IN_KBYTE);
+ _rawData.Length/BYTES_IN_KBYTE);
// TODO:: Remove this log when all errors/warnings are moved to stderr for CLI tool.
Debug.Log(output);
@@ -353,29 +358,29 @@ public List GetDirtyQualityEntries()
}
}
- bool cliUpdated = m_CliVersion != currentCliVersion;
+ bool cliUpdated = _cliVersion != currentCliVersion;
// When CLI is updated, mark all entries dirty.
if (cliUpdated)
{
- for (int i = 0; i < m_Images.Count; ++i)
+ for (int i = 0; i < _images.Count; ++i)
{
- AugmentedImageDatabaseEntry updatedImage = m_Images[i];
+ AugmentedImageDatabaseEntry updatedImage = _images[i];
updatedImage.Quality = string.Empty;
- m_Images[i] = updatedImage;
+ _images[i] = updatedImage;
}
- m_CliVersion = currentCliVersion;
+ _cliVersion = currentCliVersion;
EditorUtility.SetDirty(this);
}
- for (int i = 0; i < m_Images.Count; ++i)
+ for (int i = 0; i < _images.Count; ++i)
{
- if (!string.IsNullOrEmpty(m_Images[i].Quality))
+ if (!string.IsNullOrEmpty(_images[i].Quality))
{
continue;
}
- dirtyEntries.Add(m_Images[i]);
+ dirtyEntries.Add(_images[i]);
}
return dirtyEntries;
@@ -414,9 +419,9 @@ public static bool FindCliBinaryPath(out string path)
///
private void OnDestroy()
{
- if (m_ArAugmentedImageDatabase != IntPtr.Zero)
+ if (_arAugmentedImageDatabase != IntPtr.Zero)
{
- AugmentedImageDatabaseApi.Release(m_ArAugmentedImageDatabase);
+ AugmentedImageDatabaseApi.Release(_arAugmentedImageDatabase);
}
}
#endif
diff --git a/Assets/GoogleARCore/SDK/Scripts/AugmentedImageSrc.cs b/Assets/GoogleARCore/SDK/Scripts/AugmentedImageSrc.cs
index 4afa79ef..4e14f908 100644
--- a/Assets/GoogleARCore/SDK/Scripts/AugmentedImageSrc.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/AugmentedImageSrc.cs
@@ -37,18 +37,18 @@ public class AugmentedImageSrc
/// Source Texture2D image.
public AugmentedImageSrc(Texture2D image)
{
- this.Format = image.format;
- this.Pixels = image.GetPixels();
- this.Height = image.height;
- this.Width = image.width;
+ this._format = image.format;
+ this._pixels = image.GetPixels();
+ this._height = image.height;
+ this._width = image.width;
}
- internal TextureFormat Format { get; private set; }
+ internal TextureFormat _format { get; private set; }
- internal Color[] Pixels { get; private set; }
+ internal Color[] _pixels { get; private set; }
- internal int Height { get; private set; }
+ internal int _height { get; private set; }
- internal int Width { get; private set; }
+ internal int _width { get; private set; }
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/CameraImageBytes.cs b/Assets/GoogleARCore/SDK/Scripts/CameraImageBytes.cs
index a58f9f63..96fc8fbd 100644
--- a/Assets/GoogleARCore/SDK/Scripts/CameraImageBytes.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/CameraImageBytes.cs
@@ -30,18 +30,18 @@ namespace GoogleARCore
///
public struct CameraImageBytes : IDisposable
{
- private IntPtr m_ImageHandle;
+ private IntPtr _imageHandle;
internal CameraImageBytes(IntPtr imageHandle) : this()
{
- m_ImageHandle = imageHandle;
- if (m_ImageHandle != IntPtr.Zero)
+ _imageHandle = imageHandle;
+ if (_imageHandle != IntPtr.Zero)
{
int width, height;
IntPtr y, u, v;
int yRowStride, uvPixelStride, uvRowStride;
LifecycleManager.Instance.NativeSession.ImageApi.GetImageBuffer(
- m_ImageHandle, out width, out height, out y, out u, out v, out yRowStride,
+ _imageHandle, out width, out height, out y, out u, out v, out yRowStride,
out uvPixelStride, out uvRowStride);
IsAvailable = true;
@@ -118,10 +118,10 @@ internal CameraImageBytes(IntPtr imageHandle) : this()
///
public void Release()
{
- if (m_ImageHandle != IntPtr.Zero)
+ if (_imageHandle != IntPtr.Zero)
{
- LifecycleManager.Instance.NativeSession.ImageApi.Release(m_ImageHandle);
- m_ImageHandle = IntPtr.Zero;
+ LifecycleManager.Instance.NativeSession.ImageApi.Release(_imageHandle);
+ _imageHandle = IntPtr.Zero;
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/CameraMetadataValue.cs b/Assets/GoogleARCore/SDK/Scripts/CameraMetadataValue.cs
index c475b67c..6668e9e3 100644
--- a/Assets/GoogleARCore/SDK/Scripts/CameraMetadataValue.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/CameraMetadataValue.cs
@@ -36,19 +36,19 @@ namespace GoogleARCore
public struct CameraMetadataValue
{
[FieldOffset(0)]
- private NdkCameraMetadataType m_Type;
+ private NdkCameraMetadataType _type;
[FieldOffset(4)]
- private sbyte m_ByteValue;
+ private sbyte _byteValue;
[FieldOffset(4)]
- private int m_IntValue;
+ private int _intValue;
[FieldOffset(4)]
- private long m_LongValue;
+ private long _longValue;
[FieldOffset(4)]
- private float m_FloatValue;
+ private float _floatValue;
[FieldOffset(4)]
- private double m_DoubleValue;
+ private double _doubleValue;
[FieldOffset(4)]
- private CameraMetadataRational m_RationalValue;
+ private CameraMetadataRational _rationalValue;
///
/// Constructs CameraMetadataValue using sbyte. This constructor only sets the sbyte field
@@ -57,14 +57,14 @@ public struct CameraMetadataValue
/// The byte value set to the struct.
public CameraMetadataValue(sbyte byteValue)
{
- m_IntValue = 0;
- m_LongValue = 0;
- m_FloatValue = 0;
- m_DoubleValue = 0;
- m_RationalValue = new CameraMetadataRational();
+ _intValue = 0;
+ _longValue = 0;
+ _floatValue = 0;
+ _doubleValue = 0;
+ _rationalValue = new CameraMetadataRational();
- m_Type = NdkCameraMetadataType.Byte;
- m_ByteValue = byteValue;
+ _type = NdkCameraMetadataType.Byte;
+ _byteValue = byteValue;
}
///
@@ -74,14 +74,14 @@ public CameraMetadataValue(sbyte byteValue)
/// The int value set to the struct.
public CameraMetadataValue(int intValue)
{
- m_ByteValue = 0;
- m_LongValue = 0;
- m_FloatValue = 0;
- m_DoubleValue = 0;
- m_RationalValue = new CameraMetadataRational();
+ _byteValue = 0;
+ _longValue = 0;
+ _floatValue = 0;
+ _doubleValue = 0;
+ _rationalValue = new CameraMetadataRational();
- m_Type = NdkCameraMetadataType.Int32;
- m_IntValue = intValue;
+ _type = NdkCameraMetadataType.Int32;
+ _intValue = intValue;
}
///
@@ -91,14 +91,14 @@ public CameraMetadataValue(int intValue)
/// The long value set to the struct.
public CameraMetadataValue(long longValue)
{
- m_ByteValue = 0;
- m_IntValue = 0;
- m_FloatValue = 0;
- m_DoubleValue = 0;
- m_RationalValue = new CameraMetadataRational();
+ _byteValue = 0;
+ _intValue = 0;
+ _floatValue = 0;
+ _doubleValue = 0;
+ _rationalValue = new CameraMetadataRational();
- m_Type = NdkCameraMetadataType.Int64;
- m_LongValue = longValue;
+ _type = NdkCameraMetadataType.Int64;
+ _longValue = longValue;
}
///
@@ -108,14 +108,14 @@ public CameraMetadataValue(long longValue)
/// The float value set to the struct.
public CameraMetadataValue(float floatValue)
{
- m_ByteValue = 0;
- m_IntValue = 0;
- m_LongValue = 0;
- m_DoubleValue = 0;
- m_RationalValue = new CameraMetadataRational();
+ _byteValue = 0;
+ _intValue = 0;
+ _longValue = 0;
+ _doubleValue = 0;
+ _rationalValue = new CameraMetadataRational();
- m_Type = NdkCameraMetadataType.Float;
- m_FloatValue = floatValue;
+ _type = NdkCameraMetadataType.Float;
+ _floatValue = floatValue;
}
///
@@ -125,14 +125,14 @@ public CameraMetadataValue(float floatValue)
/// The double value set to the struct.
public CameraMetadataValue(double doubleValue)
{
- m_ByteValue = 0;
- m_IntValue = 0;
- m_LongValue = 0;
- m_FloatValue = 0;
- m_RationalValue = new CameraMetadataRational();
+ _byteValue = 0;
+ _intValue = 0;
+ _longValue = 0;
+ _floatValue = 0;
+ _rationalValue = new CameraMetadataRational();
- m_Type = NdkCameraMetadataType.Double;
- m_DoubleValue = doubleValue;
+ _type = NdkCameraMetadataType.Double;
+ _doubleValue = doubleValue;
}
///
@@ -143,14 +143,14 @@ public CameraMetadataValue(double doubleValue)
/// The CameraMetadataRational value set to the struct.
public CameraMetadataValue(CameraMetadataRational rationalValue)
{
- m_ByteValue = 0;
- m_IntValue = 0;
- m_LongValue = 0;
- m_FloatValue = 0;
- m_DoubleValue = 0;
+ _byteValue = 0;
+ _intValue = 0;
+ _longValue = 0;
+ _floatValue = 0;
+ _doubleValue = 0;
- m_Type = NdkCameraMetadataType.Rational;
- m_RationalValue = rationalValue;
+ _type = NdkCameraMetadataType.Rational;
+ _rationalValue = rationalValue;
}
///
@@ -161,7 +161,7 @@ public Type ValueType
{
get
{
- switch (m_Type)
+ switch (_type)
{
case NdkCameraMetadataType.Byte:
return typeof(Byte);
@@ -188,12 +188,12 @@ public Type ValueType
/// Returns sbyte value stored in the struct.
public sbyte AsByte()
{
- if (m_Type != NdkCameraMetadataType.Byte)
+ if (_type != NdkCameraMetadataType.Byte)
{
LogError(NdkCameraMetadataType.Byte);
}
- return m_ByteValue;
+ return _byteValue;
}
///
@@ -203,12 +203,12 @@ public sbyte AsByte()
/// Returns int value stored in the struct.
public int AsInt()
{
- if (m_Type != NdkCameraMetadataType.Int32)
+ if (_type != NdkCameraMetadataType.Int32)
{
LogError(NdkCameraMetadataType.Int32);
}
- return m_IntValue;
+ return _intValue;
}
///
@@ -218,12 +218,12 @@ public int AsInt()
/// Returns float value stored in the struct.
public float AsFloat()
{
- if (m_Type != NdkCameraMetadataType.Float)
+ if (_type != NdkCameraMetadataType.Float)
{
LogError(NdkCameraMetadataType.Float);
}
- return m_FloatValue;
+ return _floatValue;
}
///
@@ -233,12 +233,12 @@ public float AsFloat()
/// Returns long value stored in the struct.
public long AsLong()
{
- if (m_Type != NdkCameraMetadataType.Int64)
+ if (_type != NdkCameraMetadataType.Int64)
{
LogError(NdkCameraMetadataType.Int64);
}
- return m_LongValue;
+ return _longValue;
}
///
@@ -248,12 +248,12 @@ public long AsLong()
/// Returns double value stored in the struct.
public double AsDouble()
{
- if (m_Type != NdkCameraMetadataType.Double)
+ if (_type != NdkCameraMetadataType.Double)
{
LogError(NdkCameraMetadataType.Double);
}
- return m_DoubleValue;
+ return _doubleValue;
}
///
@@ -263,12 +263,12 @@ public double AsDouble()
/// Returns CameraMetadataRational value stored in the struct.
public CameraMetadataRational AsRational()
{
- if (m_Type != NdkCameraMetadataType.Rational)
+ if (_type != NdkCameraMetadataType.Rational)
{
LogError(NdkCameraMetadataType.Rational);
}
- return m_RationalValue;
+ return _rationalValue;
}
private void LogError(NdkCameraMetadataType requestedType)
@@ -276,7 +276,7 @@ private void LogError(NdkCameraMetadataType requestedType)
ARDebug.LogErrorFormat(
"Error getting value from CameraMetadataType due to type mismatch. " +
"requested type = {0}, internal type = {1}\n" +
- "Are you sure you are querying the correct type?", requestedType, m_Type);
+ "Are you sure you are querying the correct type?", requestedType, _type);
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/CloudServiceResponse.cs b/Assets/GoogleARCore/SDK/Scripts/CloudServiceResponse.cs
index 67d9c722..f785c6a0 100644
--- a/Assets/GoogleARCore/SDK/Scripts/CloudServiceResponse.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/CloudServiceResponse.cs
@@ -51,8 +51,13 @@ public enum CloudServiceResponse
ErrorServiceUnreachable,
///
- /// The authorization provided by the application is not valid; The API key included in the
- /// application manifest should be checked for accuracy.
+ /// The authorization provided by the application is not valid.
+ ///
+ /// - The Google Cloud project may not have enabled the ARCore Cloud Anchor API.
+ /// - It may fail if the operation you are trying to perform is not allowed.
+ /// - When using API key authentication, this will happen if the API key in the manifest
+ /// is invalid, unauthorized or missing.
+ ///
///
ErrorNotAuthorized,
diff --git a/Assets/GoogleARCore/SDK/Scripts/DetectedPlane.cs b/Assets/GoogleARCore/SDK/Scripts/DetectedPlane.cs
index 854fa33b..ff3ba429 100644
--- a/Assets/GoogleARCore/SDK/Scripts/DetectedPlane.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/DetectedPlane.cs
@@ -39,8 +39,8 @@ public class DetectedPlane : Trackable
internal DetectedPlane(IntPtr nativeHandle, NativeSession nativeApi)
: base(nativeHandle, nativeApi)
{
- m_TrackableNativeHandle = nativeHandle;
- m_NativeSession = nativeApi;
+ _trackableNativeHandle = nativeHandle;
+ _nativeSession = nativeApi;
}
///
@@ -51,14 +51,14 @@ public DetectedPlane SubsumedBy
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"SubsumedBy:: Trying to access a session that has already been destroyed.");
return null;
}
- return m_NativeSession.PlaneApi.GetSubsumedBy(m_TrackableNativeHandle);
+ return _nativeSession.PlaneApi.GetSubsumedBy(_trackableNativeHandle);
}
}
@@ -69,14 +69,14 @@ public Pose CenterPose
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"CenterPose:: Trying to access a session that has already been destroyed.");
return new Pose();
}
- return m_NativeSession.PlaneApi.GetCenterPose(m_TrackableNativeHandle);
+ return _nativeSession.PlaneApi.GetCenterPose(_trackableNativeHandle);
}
}
@@ -87,14 +87,14 @@ public float ExtentX
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"ExtentX:: Trying to access a session that has already been destroyed.");
return 0f;
}
- return m_NativeSession.PlaneApi.GetExtentX(m_TrackableNativeHandle);
+ return _nativeSession.PlaneApi.GetExtentX(_trackableNativeHandle);
}
}
@@ -105,14 +105,14 @@ public float ExtentZ
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"ExtentZ:: Trying to access a session that has already been destroyed.");
return 0f;
}
- return m_NativeSession.PlaneApi.GetExtentZ(m_TrackableNativeHandle);
+ return _nativeSession.PlaneApi.GetExtentZ(_trackableNativeHandle);
}
}
@@ -123,14 +123,14 @@ public DetectedPlaneType PlaneType
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"PlaneType:: Trying to access a session that has already been destroyed.");
return DetectedPlaneType.HorizontalUpwardFacing;
}
- return m_NativeSession.PlaneApi.GetPlaneType(m_TrackableNativeHandle);
+ return _nativeSession.PlaneApi.GetPlaneType(_trackableNativeHandle);
}
}
@@ -143,7 +143,7 @@ public DetectedPlaneType PlaneType
[SuppressMemoryAllocationError(Reason = "List could be resized.")]
public void GetBoundaryPolygon(List boundaryPolygonPoints)
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"GetBoundaryPolygon:: Trying to access a session that has already been " +
@@ -151,7 +151,7 @@ public void GetBoundaryPolygon(List boundaryPolygonPoints)
return;
}
- m_NativeSession.PlaneApi.GetPolygon(m_TrackableNativeHandle, boundaryPolygonPoints);
+ _nativeSession.PlaneApi.GetPolygon(_trackableNativeHandle, boundaryPolygonPoints);
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalytics.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalytics.cs
index 58040a6d..a9aed020 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalytics.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalytics.cs
@@ -36,13 +36,13 @@ namespace GoogleARCoreInternal
public class ARCoreAnalytics
{
public bool EnableAnalytics;
- private const string k_EnableAnalyticsKey = "EnableGoogleARCoreAnalytics";
- private const string k_GoogleAnalyticsHost = "https://play.googleapis.com/log";
- private const long k_AnalyticsResendDelayTicks = TimeSpan.TicksPerDay * 7;
- private long m_LastUpdateTicks;
- private bool m_Verbose;
+ private const string _enableAnalyticsKey = "EnableGoogleARCoreAnalytics";
+ private const string _googleAnalyticsHost = "https://play.googleapis.com/log";
+ private const long _analyticsResendDelayTicks = TimeSpan.TicksPerDay * 7;
+ private long _lastUpdateTicks;
+ private bool _verbose;
#if UNITY_2017_1_OR_NEWER
- private UnityWebRequest m_WebRequest;
+ private UnityWebRequest _webRequest;
#endif
///
@@ -55,11 +55,11 @@ static ARCoreAnalytics()
Instance.Load();
// Send analytics immediately.
- Instance.SendAnalytics(k_GoogleAnalyticsHost, LogRequestUtils.BuildLogRequest(), false);
+ Instance.SendAnalytics(_googleAnalyticsHost, LogRequestUtils.BuildLogRequest(), false);
// Use the Editor Update callback to monitor the communication to the server.
EditorApplication.update +=
- new EditorApplication.CallbackFunction(Instance._OnAnalyticsUpdate);
+ new EditorApplication.CallbackFunction(Instance.OnAnalyticsUpdate);
}
public static ARCoreAnalytics Instance { get; private set; }
@@ -69,7 +69,7 @@ static ARCoreAnalytics()
///
public void Load()
{
- EnableAnalytics = EditorPrefs.GetBool(k_EnableAnalyticsKey, true);
+ EnableAnalytics = EditorPrefs.GetBool(_enableAnalyticsKey, true);
}
///
@@ -77,7 +77,7 @@ public void Load()
///
public void Save()
{
- EditorPrefs.SetBool(k_EnableAnalyticsKey, EnableAnalytics);
+ EditorPrefs.SetBool(_enableAnalyticsKey, EnableAnalytics);
}
///
@@ -90,7 +90,7 @@ public void SendAnalytics(string analyticsHost, LogRequest logRequest, bool verb
{
#if UNITY_2017_1_OR_NEWER
// Save the time sending was last attempted.
- m_LastUpdateTicks = DateTime.Now.Ticks;
+ _lastUpdateTicks = DateTime.Now.Ticks;
// Only send if analytics is enabled.
if (EnableAnalytics == false)
@@ -104,7 +104,7 @@ public void SendAnalytics(string analyticsHost, LogRequest logRequest, bool verb
}
// Only allow one instance of the request at a time.
- if (m_WebRequest != null)
+ if (_webRequest != null)
{
if (verbose == true)
{
@@ -123,14 +123,14 @@ public void SendAnalytics(string analyticsHost, LogRequest logRequest, bool verb
webRequest.SendWebRequest();
// Set the verbosity preference for this request.
- m_Verbose = verbose;
+ _verbose = verbose;
if (verbose == true)
{
Debug.Log("Sending Google ARCore SDK for Unity analytics.");
}
// The editor callback will follow through with this request.
- m_WebRequest = webRequest;
+ _webRequest = webRequest;
#endif
}
@@ -138,7 +138,7 @@ public void SendAnalytics(string analyticsHost, LogRequest logRequest, bool verb
/// Periodically checks back to update the current logging request, or if
/// enough time has passed, initiate a new logging request.
///
- private void _OnAnalyticsUpdate()
+ private void OnAnalyticsUpdate()
{
#if UNITY_2017_1_OR_NEWER
// Nothing to do if Analytics isn't enabled.
@@ -148,33 +148,33 @@ private void _OnAnalyticsUpdate()
}
// Process the current web request.
- if (m_WebRequest != null)
+ if (_webRequest != null)
{
- if (m_WebRequest.isDone == true)
+ if (_webRequest.isDone == true)
{
- if (m_Verbose == true)
+ if (_verbose == true)
{
- if (m_WebRequest.isNetworkError == true)
+ if (_webRequest.isNetworkError == true)
{
Debug.Log("Error sending Google ARCore SDK for Unity analytics: " +
- m_WebRequest.error);
+ _webRequest.error);
}
else
{
Debug.Log("Google ARCore SDK for Unity analytics sent: " +
- m_WebRequest.downloadHandler.text);
+ _webRequest.downloadHandler.text);
}
}
- m_WebRequest = null;
+ _webRequest = null;
}
}
// Resend analytics periodically (once per week if the editor remains open.)
- if (DateTime.Now.Ticks - m_LastUpdateTicks >= k_AnalyticsResendDelayTicks)
+ if (DateTime.Now.Ticks - _lastUpdateTicks >= _analyticsResendDelayTicks)
{
Instance.SendAnalytics(
- k_GoogleAnalyticsHost, LogRequestUtils.BuildLogRequest(), false);
+ _googleAnalyticsHost, LogRequestUtils.BuildLogRequest(), false);
}
#endif
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalyticsGUI.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalyticsGUI.cs
index b415de1b..4400ee05 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalyticsGUI.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAnalyticsGUI.cs
@@ -30,13 +30,13 @@ internal class ARCoreAnalyticsGUI
public static readonly GUIContent SDKAnalytics =
new GUIContent("Enable Google ARCore SDK Analytics");
- private static float s_GroupLabelWidth = 260;
+ private static float _groupLabelWidth = 260;
// Render ARCore Analytics Settings for ARCoreAnalyticsProvider and
// ARCoreAnalyticsPreferences.
internal static void OnGUI()
{
- EditorGUIUtility.labelWidth = s_GroupLabelWidth;
+ EditorGUIUtility.labelWidth = _groupLabelWidth;
ARCoreAnalytics.Instance.EnableAnalytics =
EditorGUILayout.Toggle(SDKAnalytics, ARCoreAnalytics.Instance.EnableAnalytics);
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAndroidSupportPreprocessBuild.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAndroidSupportPreprocessBuild.cs
new file mode 100644
index 00000000..c0842496
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAndroidSupportPreprocessBuild.cs
@@ -0,0 +1,263 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2020 Unity Technologies 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.
+//
+//
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+ using System.IO;
+ using System.Text;
+ using System.Xml;
+ using UnityEditor;
+ using UnityEditor.Build;
+ using UnityEditor.Callbacks;
+ using UnityEngine;
+
+ internal class ARCoreAndroidSupportPreprocessBuild : PreprocessBuildBase
+ {
+ private const string _pluginsFolderGuid = "93be2b9777c348648a2d9151b7e233fc";
+ private const string _clientAarName = "arcore_client";
+ private const string _gradleTempatePath = "Plugins/Android/mainTemplate.gradle";
+ private const string _launcherTemplatePath = "Plugins/Android/launcherTemplate.gradle";
+
+ private const string _backupExtension = ".backup";
+ private static bool _hasBackup = false;
+
+ [PostProcessBuild(1)]
+ public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
+ {
+ if (target == BuildTarget.Android)
+ {
+ RestoreClientAar();
+ }
+ }
+
+ public override void OnPreprocessBuild(BuildTarget target, string path)
+ {
+ if (target == BuildTarget.Android)
+ {
+#if UNITY_2018_4 || UNITY_2019 || UNITY_2020_1
+#if UNITY_2018_4
+ CheckBuildSystem();
+#endif
+ CheckGradleVersion();
+ CheckMainGradle();
+#if UNITY_2019_3_OR_NEWER
+ CheckLauncherGradle();
+#endif // UNITY_2019_3_OR_NEWER
+#elif !UNITY_2018_4_OR_NEWER
+ StripAndBackupClientAar();
+#endif
+ }
+ }
+
+ private static void RestoreClientAar()
+ {
+ if (_hasBackup)
+ {
+ string pluginsFolderPath = Path.Combine(Directory.GetCurrentDirectory(),
+ AssetDatabase.GUIDToAssetPath(_pluginsFolderGuid));
+ string[] plugins = Directory.GetFiles(pluginsFolderPath);
+ string backupFilePath = string.Empty;
+ foreach (var pluginPath in plugins)
+ {
+ if (pluginPath.Contains(_backupExtension) && !pluginPath.Contains(".meta"))
+ {
+ backupFilePath = pluginPath;
+ break;
+ }
+ }
+
+ if (string.IsNullOrEmpty(backupFilePath))
+ {
+ Debug.LogWarning("Failed to find the arcore client backup file.");
+ _hasBackup = false;
+ return;
+ }
+
+ string clientAarFilename = Path.GetFileNameWithoutExtension(backupFilePath);
+ Debug.LogFormat("Restoring {0} from backup.", clientAarFilename);
+ File.Copy(backupFilePath, Path.Combine(pluginsFolderPath, clientAarFilename), true);
+ File.Delete(backupFilePath);
+ File.Delete(backupFilePath + ".meta");
+ _hasBackup = false;
+
+ AssetDatabase.Refresh();
+ }
+ }
+
+ private void CheckBuildSystem()
+ {
+ if (EditorUserBuildSettings.androidBuildSystem != AndroidBuildSystem.Gradle)
+ {
+ Debug.LogWarning(
+ "Android Build System is not Gradle. " +
+ "Go to 'Build Setting > Android > Build System', set to Gradle.");
+ }
+ }
+
+ private void CheckGradleVersion()
+ {
+ // Need to set gradle version >= 5.6.4 by
+ // 'Preferences > External Tools > Android > Gradle'
+ // so it can compile android manifest with tag.
+ var gradlePath = EditorPrefs.GetString("GradlePath");
+ if (string.IsNullOrEmpty(gradlePath))
+ {
+ throw new BuildFailedException(
+ "'Preferences > External Tools > Android > Gradle' is empty. " +
+ "ARCore SDK for Unity requires a customized Gradle with version >= 5.6.4.");
+ }
+ }
+
+ private void CheckMainGradle()
+ {
+ // Need to use gradle plugin version >= 3.6.0 in main gradle by editing
+ // 'Assets/Plugins/Android/mainTemplate.gradle'.
+ // so it can compile android manifest with tag.
+ if (!File.Exists(Path.Combine(Application.dataPath, _gradleTempatePath)))
+ {
+ throw new BuildFailedException(
+ "Main Gradle template is not used in this build. ARCore SDK for Unity " +
+ "requires gradle plugin version >= 3.6.0. Nevigate to " +
+ "'Project Settings > Player > Android Tab > Publish Settings > Build', " +
+ "check 'Custom Gradle Template'. Then edit the generated file " +
+ "'Assets/Plugins/Android/mainTemplate.gradle' by adding dependency " +
+ "'com.android.tools.build:gradle:3.6.0.'.");
+ }
+ }
+
+ private void CheckLauncherGradle()
+ {
+ // Need to use gradle plugin version >= 3.6.0 in launcher gradle by editing
+ // 'Assets/Plugins/Android/launcherTemplate.gradle'.
+ // so it can compile android manifest with tag.
+ if (!File.Exists(Path.Combine(Application.dataPath, _launcherTemplatePath)))
+ {
+ throw new BuildFailedException(
+ "Launcher Gradle Template is not used in this build. ARCore SDK for Unity " +
+ "requires gradle plugin version >= 3.6.0. Nevigate to " +
+ "'Project Settings > Player > Android Tab > Publish Settings > Build', " +
+ "check 'Custom Launcher Gradle Template'. Then edit the generated file " +
+ "'Assets/Plugins/Android/launcherTemplate.gradle' by adding dependency " +
+ "'com.android.tools.build:gradle:3.6.0.'.");
+ }
+ }
+
+ private void StripAndBackupClientAar()
+ {
+ // Strip the tag from the arcore_client.aar when it's incompatible with
+ // Unity's built-in gradle version.
+ string cachedCurrentDirectory = Directory.GetCurrentDirectory();
+ string pluginsFolderPath = Path.Combine(cachedCurrentDirectory,
+ AssetDatabase.GUIDToAssetPath(_pluginsFolderGuid));
+
+ string[] plugins = Directory.GetFiles(pluginsFolderPath);
+ string clientAarPath = string.Empty;
+ foreach (var pluginPath in plugins)
+ {
+ if (pluginPath.Contains(_clientAarName) &&
+ !pluginPath.Contains(".meta") &&
+ AssetHelper.GetPluginImporterByName(Path.GetFileName(pluginPath))
+ .GetCompatibleWithPlatform(BuildTarget.Android))
+ {
+ clientAarPath = pluginPath;
+ break;
+ }
+ }
+
+ if (string.IsNullOrEmpty(clientAarPath))
+ {
+ throw new BuildFailedException(
+ string.Format("Cannot find a valid arcore client plugin under '{0}'",
+ pluginsFolderPath));
+ }
+
+ string clientAarFileName = Path.GetFileName(clientAarPath);
+ string jarPath = AndroidDependenciesHelper.GetJdkPath();
+ if (string.IsNullOrEmpty(jarPath))
+ {
+ throw new BuildFailedException("Cannot find a valid JDK path in this build.");
+ }
+
+ jarPath = Path.Combine(jarPath, "bin/jar");
+ var tempDirectoryPath =
+ Path.Combine(cachedCurrentDirectory, FileUtil.GetUniqueTempPathInProject());
+
+ // Back up existing client AAR.
+ string backupFilename = clientAarFileName + _backupExtension;
+ Debug.LogFormat("Backing up {0} in {1}.", clientAarFileName, backupFilename);
+ File.Copy(clientAarPath, Path.Combine(pluginsFolderPath, backupFilename), true);
+ _hasBackup = true;
+
+ Debug.LogFormat("Stripping the tag from {0} in this build.",
+ clientAarFileName);
+ try
+ {
+ // Move to a temp directory.
+ Directory.CreateDirectory(tempDirectoryPath);
+ Directory.SetCurrentDirectory(tempDirectoryPath);
+
+ // Extract the existing AAR in the temp directory.
+ string output;
+ string errors;
+ ShellHelper.RunCommand(
+ jarPath, string.Format("xf \"{0}\"", clientAarPath), out output,
+ out errors);
+
+ // Strip the tag from AndroidManifest.xml.
+ var manifestPath = Path.Combine(tempDirectoryPath, "AndroidManifest.xml");
+ var manifestText = File.ReadAllText(manifestPath);
+ manifestText = System.Text.RegularExpressions.Regex.Replace(
+ manifestText, "(/s)?(.*)(\n|\r|\r\n)", string.Empty,
+ System.Text.RegularExpressions.RegexOptions.Singleline);
+ File.WriteAllText(manifestPath, manifestText);
+
+ // Compress the modified AAR.
+ string command = string.Format("cf {0} .", clientAarFileName);
+ ShellHelper.RunCommand(
+ jarPath,
+ command,
+ out output,
+ out errors);
+
+ if (!string.IsNullOrEmpty(errors))
+ {
+ throw new BuildFailedException(
+ string.Format(
+ "Error creating jar for stripped arcore client manifest: {0}", errors));
+ }
+
+ // Override the existing client AAR with the modified one.
+ File.Copy(Path.Combine(tempDirectoryPath, clientAarFileName),
+ clientAarPath, true);
+ }
+ finally
+ {
+ // Cleanup.
+ Directory.SetCurrentDirectory(cachedCurrentDirectory);
+ Directory.Delete(tempDirectoryPath, true);
+
+ AssetDatabase.Refresh();
+ }
+
+ AssetHelper.GetPluginImporterByName(clientAarFileName)
+ .SetCompatibleWithPlatform(BuildTarget.Android, true);
+ }
+ }
+}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAndroidSupportPreprocessBuild.cs.meta b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAndroidSupportPreprocessBuild.cs.meta
new file mode 100644
index 00000000..07fbca80
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreAndroidSupportPreprocessBuild.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 171669612af004b9cbf888784959915a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreIOSSupportHelper.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreIOSSupportHelper.cs
index f0cd33a6..7ba29e5e 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreIOSSupportHelper.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreIOSSupportHelper.cs
@@ -28,8 +28,8 @@ namespace GoogleARCoreInternal
internal class ARCoreIOSSupportHelper
{
- private const string k_ARCoreEditorFolderGuid = "3efa82e8eae0d4459a41fa9c799ea3f8";
- private const string k_ARCoreIOSDependencyFileName = "ARCoreiOSDependencies";
+ private const string _arCoreEditorFolderGuid = "3efa82e8eae0d4459a41fa9c799ea3f8";
+ private const string _arCoreIOSDependencyFileName = "ARCoreiOSDependencies";
public static void SetARCoreIOSSupportEnabled(bool arcoreIOSEnabled)
{
@@ -45,12 +45,12 @@ public static void SetARCoreIOSSupportEnabled(bool arcoreIOSEnabled)
Debug.Log("Disabling ARCore iOS support.");
}
- _UpdateIOSScriptingDefineSymbols(arcoreIOSEnabled);
- _UpdateIOSPodDependencies(arcoreIOSEnabled);
- _UpdateARCoreARKitIntegrationPlugin(arcoreIOSEnabled);
+ UpdateIOSScriptingDefineSymbols(arcoreIOSEnabled);
+ UpdateIOSPodDependencies(arcoreIOSEnabled);
+ UpdateARCoreARKitIntegrationPlugin(arcoreIOSEnabled);
}
- private static void _UpdateIOSScriptingDefineSymbols(bool arcoreIOSEnabled)
+ private static void UpdateIOSScriptingDefineSymbols(bool arcoreIOSEnabled)
{
string iOSScriptingDefineSymbols =
PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.iOS);
@@ -73,16 +73,16 @@ private static void _UpdateIOSScriptingDefineSymbols(bool arcoreIOSEnabled)
}
}
- private static void _UpdateIOSPodDependencies(bool arcoreIOSEnabled)
+ private static void UpdateIOSPodDependencies(bool arcoreIOSEnabled)
{
string currentDirectory = Directory.GetCurrentDirectory();
string arcoreEditorPath = Path.Combine(currentDirectory,
- AssetDatabase.GUIDToAssetPath(k_ARCoreEditorFolderGuid));
+ AssetDatabase.GUIDToAssetPath(_arCoreEditorFolderGuid));
string iOSPodDependencyTemplatePath =
- Path.Combine(arcoreEditorPath, k_ARCoreIOSDependencyFileName + ".template");
+ Path.Combine(arcoreEditorPath, _arCoreIOSDependencyFileName + ".template");
string iOSPodDependencyXMLPath =
- Path.Combine(arcoreEditorPath, k_ARCoreIOSDependencyFileName + ".xml");
+ Path.Combine(arcoreEditorPath, _arCoreIOSDependencyFileName + ".xml");
if (arcoreIOSEnabled && !File.Exists(iOSPodDependencyXMLPath))
{
@@ -110,7 +110,7 @@ private static void _UpdateIOSPodDependencies(bool arcoreIOSEnabled)
}
}
- private static void _UpdateARCoreARKitIntegrationPlugin(bool arcoreIOSEnabled)
+ private static void UpdateARCoreARKitIntegrationPlugin(bool arcoreIOSEnabled)
{
string enableString = arcoreIOSEnabled ? "Enabling" : "Disabling";
Debug.LogFormat("{0} ARCoreARKitIntegrationPlugin.", enableString);
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreProjectSettingsGUI.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreProjectSettingsGUI.cs
index d6a6732f..b477f12f 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreProjectSettingsGUI.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreProjectSettingsGUI.cs
@@ -20,6 +20,10 @@
namespace GoogleARCoreInternal
{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Reflection;
using UnityEditor;
using UnityEngine;
@@ -42,61 +46,223 @@ internal class ARCoreProjectSettingsGUI
public static readonly GUIContent Android = new GUIContent("Android");
public static readonly GUIContent IOS = new GUIContent("iOS");
- private static readonly float k_GroupLabelIndent = 15;
- private static readonly float k_GroupFieldIndent =
- EditorGUIUtility.labelWidth - k_GroupLabelIndent;
+ private static readonly float _groupLabelIndent = 15;
+ private static readonly float _groupFieldIndent =
+ EditorGUIUtility.labelWidth - _groupLabelIndent;
- private static bool s_FoldoutCloudAnchorAPIKeys = true;
+ ///
+ /// Get the display name array of the provided enum array.
+ /// This function would be called via reflection so it needs to be public.
+ ///
+ /// The enum type.
+ /// Array of enums.
+ /// Array of strings representing those enums.
+ public static string[] GetEnumNames(Array availbleEnums)
+ {
+ return availbleEnums.OfType().Select(
+ v =>
+ {
+ MemberInfo memberInfo = typeof(T).GetMember(v.ToString()).First();
+ DisplayNameAttribute displayName =
+ GetAttribute(memberInfo);
+ if (displayName == null)
+ {
+ return v.ToString();
+ }
+ else
+ {
+ return displayName.DisplayString;
+ }
+ })
+ .ToArray();
+ }
// Render ARCore Project Settings for ARCoreProjectSettingsWindow and
// ARCoreProjectSettingsProvider.
internal static void OnGUI(bool renderForStandaloneWindow)
{
- ARCoreProjectSettings.Instance.IsARCoreRequired =
- EditorGUILayout.Toggle(ARCoreRequired,
- ARCoreProjectSettings.Instance.IsARCoreRequired);
- GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
-
- ARCoreProjectSettings.Instance.IsInstantPreviewEnabled =
- EditorGUILayout.Toggle(InstantPreviewEnabled,
- ARCoreProjectSettings.Instance.IsInstantPreviewEnabled);
- GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
-
- bool newARCoreIOSEnabled =
- EditorGUILayout.Toggle(IOSSupportEnabled,
- ARCoreProjectSettings.Instance.IsIOSSupportEnabled);
- GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
-
- s_FoldoutCloudAnchorAPIKeys =
- EditorGUILayout.Foldout(s_FoldoutCloudAnchorAPIKeys, CloudAnchorAPIKeys);
- if (s_FoldoutCloudAnchorAPIKeys)
+ DrawGUI(ARCoreProjectSettings.Instance);
+ }
+
+ private static void DrawGUI(object targetObject)
+ {
+ Type targetType = targetObject.GetType();
+ foreach (FieldInfo fieldInfo in targetType.GetFields())
{
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(k_GroupLabelIndent);
- EditorGUILayout.LabelField(Android, GUILayout.Width(k_GroupFieldIndent));
- ARCoreProjectSettings.Instance.CloudServicesApiKey =
- EditorGUILayout.TextField(ARCoreProjectSettings.Instance.CloudServicesApiKey);
- EditorGUILayout.EndHorizontal();
- GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
+ if (!ShouldDisplay(fieldInfo, targetObject))
+ {
+ continue;
+ }
+
+ string fieldName;
+ DisplayNameAttribute fieldDisplay = GetAttribute(fieldInfo);
+ if (fieldDisplay == null)
+ {
+ fieldName = string.Format("{0}", fieldInfo.Name);
+ }
+ else
+ {
+ fieldName = fieldDisplay.DisplayString;
+ }
+
+ if (fieldInfo.FieldType.IsEnum)
+ {
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField(fieldName);
- EditorGUILayout.BeginHorizontal();
- GUILayout.Space(k_GroupLabelIndent);
- EditorGUILayout.LabelField(IOS, GUILayout.Width(k_GroupFieldIndent));
- ARCoreProjectSettings.Instance.IosCloudServicesApiKey =
- EditorGUILayout.TextField(
- ARCoreProjectSettings.Instance.IosCloudServicesApiKey);
- EditorGUILayout.EndHorizontal();
+ Array availbleEnums;
+ EnumRangeAttribute enumRange = GetAttribute(fieldInfo);
+ if (enumRange != null)
+ {
+ MethodInfo checkingFunction =
+ targetType.GetMethod(enumRange.CheckingFunction);
+ availbleEnums = (Array)checkingFunction.Invoke(
+ targetObject, new object[] { });
+ }
+ else
+ {
+ availbleEnums = Enum.GetValues(fieldInfo.FieldType);
+ }
+
+ string[] enumNames =
+ (string[])typeof(ARCoreProjectSettingsGUI)
+ .GetMethod("GetEnumNames")
+ .MakeGenericMethod(fieldInfo.FieldType)
+ .Invoke(null, new object[] { availbleEnums });
+ var currentValue = fieldInfo.GetValue(targetObject);
+ int currentIndex = Array.IndexOf(availbleEnums, currentValue);
+ if (currentIndex == -1)
+ {
+ currentIndex = 0;
+ }
+
+ var selectedIndex =
+ EditorGUILayout.Popup(
+ currentIndex,
+ enumNames,
+ GUILayout.Width(_groupFieldIndent));
+ fieldInfo.SetValue(targetObject, availbleEnums.GetValue(selectedIndex));
+ EditorGUILayout.EndHorizontal();
+ }
+ else if (fieldInfo.FieldType == typeof(Boolean))
+ {
+ Boolean value = (Boolean)fieldInfo.GetValue(targetObject);
+ value = UnityEditor.EditorGUILayout.Toggle(
+ new GUIContent(fieldName), value);
+ fieldInfo.SetValue(targetObject, value);
+ }
+ else if (fieldInfo.FieldType == typeof(string))
+ {
+ EditorGUILayout.BeginHorizontal();
+ string value = (string)fieldInfo.GetValue(targetObject);
+ EditorGUILayout.LabelField(fieldName, GUILayout.Width(_groupFieldIndent));
+ value = EditorGUILayout.TextField(value);
+ fieldInfo.SetValue(targetObject, value);
+ EditorGUILayout.EndHorizontal();
+ }
+ else if (fieldInfo.FieldType == typeof(int))
+ {
+ EditorGUILayout.BeginHorizontal();
+ int value = (int)fieldInfo.GetValue(targetObject);
+ EditorGUILayout.LabelField(fieldName, GUILayout.Width(_groupFieldIndent));
+ value = (int)Convert.ToInt32(EditorGUILayout.TextField(value.ToString()));
+ fieldInfo.SetValue(targetObject, value);
+ EditorGUILayout.EndHorizontal();
+ }
+ else if (fieldInfo.FieldType == typeof(long))
+ {
+ EditorGUILayout.BeginHorizontal();
+ long value = (long)fieldInfo.GetValue(targetObject);
+ EditorGUILayout.LabelField(fieldName, GUILayout.Width(_groupFieldIndent));
+ value = (long)Convert.ToInt64(EditorGUILayout.TextField(value.ToString()));
+ fieldInfo.SetValue(targetObject, value);
+ EditorGUILayout.EndHorizontal();
+ }
+ else if (fieldInfo.FieldType == typeof(float))
+ {
+ EditorGUILayout.BeginHorizontal();
+ float value = (float)fieldInfo.GetValue(targetObject);
+ EditorGUILayout.LabelField(fieldName, GUILayout.Width(_groupFieldIndent));
+ value = (float)Convert.ToSingle(EditorGUILayout.TextField(value.ToString()));
+ fieldInfo.SetValue(targetObject, value);
+ EditorGUILayout.EndHorizontal();
+ }
+ else if (fieldInfo.FieldType == typeof(double))
+ {
+ EditorGUILayout.BeginHorizontal();
+ double value = (double)fieldInfo.GetValue(targetObject);
+ EditorGUILayout.LabelField(fieldName, GUILayout.Width(_groupFieldIndent));
+ value = (double)Convert.ToDouble(EditorGUILayout.TextField(value.ToString()));
+ fieldInfo.SetValue(targetObject, value);
+ EditorGUILayout.EndHorizontal();
+ }
+
+ GUILayout.Space(UnityEditor.EditorGUIUtility.standardVerticalSpacing);
+ DisplayHelpInfo(fieldInfo, targetObject);
+ }
+ }
+
+ private static bool ShouldDisplay(FieldInfo fieldInfo, object targetObject)
+ {
+ Type targetType = targetObject.GetType();
+
+ HideInInspector hideInInspector = GetAttribute(fieldInfo);
+ if (hideInInspector != null)
+ {
+ return false;
+ }
+
+ DisplayConditionAttribute displayCondition =
+ GetAttribute(fieldInfo);
+ if (displayCondition != null)
+ {
+ MethodInfo checkingFunction =
+ targetType.GetMethod(displayCondition.CheckingFunction);
+ return (bool)checkingFunction.Invoke(
+ targetObject, new object[] { });
+ }
+
+ return true;
+ }
+
+ private static void DisplayHelpInfo(FieldInfo fieldInfo, object targetObject)
+ {
+ Type targetType = targetObject.GetType();
+
+ DynamicHelpAttribute dynamicHelp = GetAttribute(fieldInfo);
+ HelpAttribute helpInfo;
+ if (dynamicHelp != null)
+ {
+ MethodInfo checkingFunction =
+ targetType.GetMethod(dynamicHelp.CheckingFunction);
+ helpInfo =
+ (HelpAttribute)checkingFunction.Invoke(
+ targetObject, new object[] { });
+ }
+ else
+ {
+ helpInfo = GetAttribute(fieldInfo);
+ }
+
+ if (helpInfo != null)
+ {
+ MessageType messageType =
+ (MessageType)Enum.Parse(typeof(MessageType), helpInfo.MessageType.ToString());
+ EditorGUILayout.HelpBox(helpInfo.HelpMessage, messageType);
GUILayout.Space(EditorGUIUtility.standardVerticalSpacing);
}
+ }
- if (GUI.changed)
+ private static T GetAttribute(MemberInfo memberInfo)
+ {
+ object[] targetAttributes =
+ memberInfo.GetCustomAttributes(typeof(T), false);
+ if (targetAttributes.Length > 0)
{
- if (newARCoreIOSEnabled != ARCoreProjectSettings.Instance.IsIOSSupportEnabled)
- {
- ARCoreProjectSettings.Instance.IsIOSSupportEnabled = newARCoreIOSEnabled;
- ARCoreIOSSupportHelper.SetARCoreIOSSupportEnabled(newARCoreIOSEnabled);
- }
+ return (T)targetAttributes[0];
}
+
+ return default(T);
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKManifest.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKManifest.cs
index 7fe8cc61..df0f7b44 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKManifest.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKManifest.cs
@@ -26,9 +26,9 @@ namespace UnityEditor.XR.ARCore
{
internal class ARCoreUnitySDKManifest : IPostGenerateGradleAndroidProject
{
- static readonly string k_AndroidURI = "http://schemas.android.com/apk/res/android";
- static readonly string k_AndroidManifestPath = "/src/main/AndroidManifest.xml";
- static readonly string k_AndroidPermissionCamera = "android.permission.CAMERA";
+ static readonly string _androidURI = "http://schemas.android.com/apk/res/android";
+ static readonly string _androidManifestPath = "/src/main/AndroidManifest.xml";
+ static readonly string _androidPermissionCamera = "android.permission.CAMERA";
public int callbackOrder
{
@@ -39,7 +39,7 @@ public int callbackOrder
// https://developers.google.com/ar/develop/java/enable-arcore
public void OnPostGenerateGradleAndroidProject(string path)
{
- string manifestPath = path + k_AndroidManifestPath;
+ string manifestPath = path + _androidManifestPath;
var manifestDoc = new XmlDocument();
manifestDoc.Load(manifestPath);
@@ -52,7 +52,7 @@ public void OnPostGenerateGradleAndroidProject(string path)
return;
_FindOrCreateTagWithAttribute(manifestDoc, manifestNode,
- "uses-permission", "name", k_AndroidPermissionCamera);
+ "uses-permission", "name", _androidPermissionCamera);
_FindOrCreateTagWithAttributes(manifestDoc, applicationNode,
"meta-data", "name",
"unityplayer.SkipPermissionsDialog",
@@ -81,7 +81,7 @@ private XmlNode _FindFirstChild(XmlNode node, string tag)
private void _AppendNewAttribute(XmlDocument doc, XmlElement element,
string attributeName, string attributeValue)
{
- var attribute = doc.CreateAttribute(attributeName, k_AndroidURI);
+ var attribute = doc.CreateAttribute(attributeName, _androidURI);
attribute.Value = attributeValue;
element.Attributes.Append(attribute);
}
@@ -100,7 +100,7 @@ private void _FindOrCreateTagWithAttribute(XmlDocument doc, XmlNode containingNo
if (childElement != null && childElement.HasAttributes)
{
var attribute = childElement.GetAttributeNode(attributeName,
- k_AndroidURI);
+ _androidURI);
if (attribute != null && attribute.Value == attributeValue)
return;
}
@@ -129,13 +129,13 @@ private void _FindOrCreateTagWithAttributes(XmlDocument doc, XmlNode containingN
if (childElement != null && childElement.HasAttributes)
{
var firstAttribute = childElement.GetAttributeNode(
- firstAttributeName, k_AndroidURI);
+ firstAttributeName, _androidURI);
if (firstAttribute == null ||
firstAttribute.Value != firstAttributeValue)
continue;
var secondAttribute = childElement.GetAttributeNode(
- secondAttributeName, k_AndroidURI);
+ secondAttributeName, _androidURI);
if (secondAttribute != null)
{
secondAttribute.Value = secondAttributeValue;
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKPreprocessBuild.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKPreprocessBuild.cs
index 9de7d58a..9202ab1f 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKPreprocessBuild.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ARCoreUnitySDKPreprocessBuild.cs
@@ -31,11 +31,11 @@ namespace GoogleARCoreInternal
{
internal class ARCoreUnitySDKPreprocessBuild : IPreprocessBuildWithReport
{
- private static int k_MinSdkVersion = 14;
+ private static int _minSdkVersion = 14;
public int callbackOrder { get { return 0; } }
- private ListRequest m_Request;
+ private ListRequest _request;
public void OnPreprocessBuild(BuildReport report)
{
@@ -51,27 +51,27 @@ public void OnPreprocessBuild(BuildReport report)
private void _EnsureMinSdkVersion()
{
- if ((int)PlayerSettings.Android.minSdkVersion < k_MinSdkVersion)
+ if ((int)PlayerSettings.Android.minSdkVersion < _minSdkVersion)
{
throw new BuildFailedException(string.Format("ARCore apps require a minimum " +
"SDK version of {0}. Currently set to {1}",
- k_MinSdkVersion, PlayerSettings.Android.minSdkVersion));
+ _minSdkVersion, PlayerSettings.Android.minSdkVersion));
}
}
private void _EnsureUnityARCoreIsNotPresent()
{
- m_Request = Client.List(); // List packages installed for the Project
+ _request = Client.List(); // List packages installed for the Project
EditorApplication.update += _PackageListProgress;
}
private void _PackageListProgress()
{
- if (m_Request.IsCompleted)
+ if (_request.IsCompleted)
{
- if (m_Request.Status == StatusCode.Success)
+ if (_request.Status == StatusCode.Success)
{
- foreach (var package in m_Request.Result)
+ foreach (var package in _request.Result)
{
if (package.name == "com.unity.xr.arcore")
{
@@ -81,7 +81,7 @@ private void _PackageListProgress()
}
}
}
- else if (m_Request.Status >= StatusCode.Failure)
+ else if (_request.Status >= StatusCode.Failure)
{
throw new BuildFailedException("Failure iterating packages when checking for" +
" ARCore XR Plugin.");
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreClearcut.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreClearcut.cs
index 3af26fc2..e9119be5 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreClearcut.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreClearcut.cs
@@ -1,3 +1,23 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2019 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
//
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: arcore_clearcut.proto
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreSdkLog.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreSdkLog.cs
index 438b888d..988c7311 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreSdkLog.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/Analytics/ArcoreSdkLog.cs
@@ -1,3 +1,23 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2019 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
//
// Generated by the protocol buffer compiler. DO NOT EDIT!
// source: arcore_sdk_log.proto
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidDependenciesHelper.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidDependenciesHelper.cs
index 6fcde0e7..7dc97cb7 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidDependenciesHelper.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidDependenciesHelper.cs
@@ -32,8 +32,62 @@ namespace GoogleARCoreInternal
///
internal static class AndroidDependenciesHelper
{
- private static readonly string k_TemplateFileExtension = ".template";
- private static readonly string k_PlayServiceDependencyFileExtension = ".xml";
+ private static readonly string _templateFileExtension = ".template";
+ private static readonly string _playServiceDependencyFileExtension = ".xml";
+
+ ///
+ /// Gets the JDK path used by this project.
+ ///
+ /// If found, returns the JDK path used by this project. Otherwise, returns null.
+ ///
+ public static string GetJdkPath()
+ {
+ string jdkPath = null;
+
+ // Unity started offering the embedded JDK in 2018.3
+#if UNITY_2018_3_OR_NEWER
+ if (EditorPrefs.GetBool("JdkUseEmbedded"))
+ {
+ // Use OpenJDK that is bundled with Unity. JAVA_HOME will be set when
+ // 'Preferences > External Tools > Android > JDK installed with Unity' is checked.
+ jdkPath = Environment.GetEnvironmentVariable("JAVA_HOME");
+ if (string.IsNullOrEmpty(jdkPath))
+ {
+ Debug.LogError(
+ "'Preferences > External Tools > Android > JDK installed with Unity' is " +
+ "checked, but JAVA_HOME is unset or empty. Try unchecking this setting " +
+ "and configuring a valid JDK path under " +
+ "'Preferences > External Tools > Android > JDK'.");
+ }
+ }
+ else
+#endif // UNITY_2018_3_OR_NEWER
+ {
+ // Use JDK path specified by 'Preferences > External Tools > Android > JDK'.
+ jdkPath = EditorPrefs.GetString("JdkPath");
+ if (string.IsNullOrEmpty(jdkPath))
+ {
+ // Use JAVA_HOME from the O/S environment.
+ jdkPath = Environment.GetEnvironmentVariable("JAVA_HOME");
+ if (string.IsNullOrEmpty(jdkPath))
+ {
+ Debug.LogError(
+ "'Preferences > External Tools > Android > JDK installed with Unity' " +
+ "is unchecked, but 'Preferences > External Tools > Android > JDK' " +
+ "path is empty and JAVA_HOME environment variable is unset or empty.");
+ }
+ }
+ }
+
+ if (!string.IsNullOrEmpty(jdkPath) &&
+ (File.GetAttributes(jdkPath) & FileAttributes.Directory) == 0)
+ {
+ Debug.LogError(string.Format("Invalid JDK path '{0}'", jdkPath));
+ jdkPath = null;
+ }
+
+ return jdkPath;
+ }
///
/// Handle the updating of the AndroidManifest tags by enabling/disabling the dependencies
@@ -84,7 +138,7 @@ public static void UpdateAndroidDependencies(bool enabledDependencies,
}
string dependenciesXMLPath = dependenciesTemplatePath.Replace(
- k_TemplateFileExtension, k_PlayServiceDependencyFileExtension);
+ _templateFileExtension, _playServiceDependencyFileExtension);
if (enabledDependencies && !File.Exists(dependenciesXMLPath))
{
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidManifestMerger.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidManifestMerger.cs
new file mode 100644
index 00000000..4a896cd9
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidManifestMerger.cs
@@ -0,0 +1,255 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2020 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Diagnostics.CodeAnalysis;
+ using System.IO;
+ using System.Linq;
+ using System.Text;
+ using System.Xml;
+ using System.Xml.Linq;
+ using GoogleARCore;
+ using UnityEditor;
+ using UnityEditor.Build;
+ using UnityEditor.SceneManagement;
+ using UnityEngine;
+ using UnityEngine.SceneManagement;
+
+ internal class AndroidManifestMerger
+ {
+ private const string _xmlns = "http://schemas.android.com/apk/res/android";
+ private const string _androidManifestFormat =
+ @"
+
+ {0}
+ ";
+
+ private static readonly HashSet _elementsAlwaysMerged =
+ new HashSet
+ {
+ "application",
+ "data",
+ "path-permission",
+ "grant-uri-permission",
+ "uses-sdk",
+ "supports-screen",
+ "uses-configuration"
+ };
+
+ private static readonly HashSet _elementsMergedByKey =
+ new HashSet
+ {
+ "action",
+ "activity",
+ "category",
+ "instrumentation",
+ "meta-data",
+ "permission-group",
+ "permission",
+ "permission-tree",
+ "provider",
+ "receiver",
+ "service",
+ "supports-gl-texture",
+ "uses-library",
+ "uses-permission",
+ };
+
+ private static readonly HashSet _elementsMergedOnlyChildren =
+ new HashSet
+ {
+ "manifest",
+ };
+
+ ///
+ /// Transfer an XML snippet into a valid AndroidManifest XDocument.
+ ///
+ /// The XML string snippet which should under node 'manifest'.
+ ///
+ /// The transferred XDocument.
+ public static XDocument TransferToXDocument(string snippet)
+ {
+ return XDocument.Parse(string.Format(_androidManifestFormat, snippet));
+ }
+
+ ///
+ /// Merge two XElement into one.
+ ///
+ /// The first XElement need to merged.
+ /// The second XElement need to merged.
+ /// The merged XElement.
+ public static XElement MergeXElement(XElement element1, XElement element2)
+ {
+ XElement resultElement = new XElement(element1.Name);
+
+ if (_elementsMergedOnlyChildren.Contains(element1.Name.LocalName))
+ {
+ resultElement.ReplaceAttributes(element1.Attributes());
+ }
+ else
+ {
+ MergeAttributes(element1, element2, ref resultElement);
+ }
+
+ MergeChildren(element1, element2, ref resultElement);
+ return resultElement;
+ }
+
+ private static void MergeAttributes(
+ XElement element1, XElement element2, ref XElement resultElement)
+ {
+ resultElement.ReplaceAttributes(element1.Attributes());
+
+ foreach (XAttribute attrInElement2 in element2.Attributes())
+ {
+ XAttribute attrInElement1 =
+ element1.Attributes(attrInElement2.Name).FirstOrDefault();
+
+ if (attrInElement1 == null)
+ {
+ resultElement.SetAttributeValue(
+ attrInElement2.Name, attrInElement2.Value);
+ }
+ else
+ {
+ XNamespace androidNamespace = _xmlns;
+ if (attrInElement1.Value != attrInElement2.Value)
+ {
+ if ((element1.Name == "uses-feature" ||
+ element1.Name == "uses-library") &&
+ attrInElement1.Name == androidNamespace + "required")
+ {
+ bool result = bool.Parse(attrInElement1.Value) ||
+ bool.Parse(attrInElement2.Value);
+ resultElement.SetAttributeValue(
+ attrInElement1.Name, result.ToString());
+ }
+ else if (element1.Name == "uses-sdk" &&
+ (attrInElement1.Name == androidNamespace + "minSdkVersion" ||
+ attrInElement1.Name == androidNamespace + "targetSdkVersion"))
+ {
+ Int16 result = Math.Max(Int16.Parse(attrInElement1.Value),
+ Int16.Parse(attrInElement2.Value));
+ resultElement.SetAttributeValue(
+ attrInElement1.Name, result.ToString());
+ }
+ else
+ {
+ string errorMessage = string.Format(
+ "Element '{0}', android:name='{1}', Attribute '{2}'" +
+ " has value '{3}' isn't compatible with the previous setting '{4}'.",
+ element1.Name, GetAndroidAttribute(element1, "name"),
+ attrInElement1.Name, attrInElement2.Value, attrInElement1.Value);
+ Debug.LogError(errorMessage);
+ throw new BuildFailedException(errorMessage);
+ }
+ }
+ }
+ }
+ }
+
+ private static void MergeChildren(
+ XElement element1, XElement element2, ref XElement resultElement)
+ {
+ foreach (XElement childElement1 in element1.Elements())
+ {
+ bool findSameKindElement = false;
+ foreach (XElement childElement2 in element2.Elements())
+ {
+ if (IsSameElement(childElement1, childElement2))
+ {
+ findSameKindElement = true;
+ resultElement.Add(
+ MergeXElement(childElement1, childElement2));
+ break;
+ }
+ }
+
+ if (!findSameKindElement)
+ {
+ resultElement.Add(childElement1);
+ }
+ }
+
+ foreach (XElement childElement2 in element2.Elements())
+ {
+ bool findSameKindElement = false;
+ foreach (XElement resultChildElement in resultElement.Elements())
+ {
+ if (IsSameElement(childElement2, resultChildElement))
+ {
+ findSameKindElement = true;
+ break;
+ }
+ }
+
+ if (!findSameKindElement)
+ {
+ resultElement.Add(childElement2);
+ }
+ }
+ }
+
+ private static bool IsSameElement(XElement element1, XElement element2)
+ {
+ if (element1.Name != element2.Name)
+ {
+ return false;
+ }
+
+ if (_elementsMergedOnlyChildren.Contains(element1.Name.LocalName) ||
+ _elementsAlwaysMerged.Contains(element1.Name.LocalName))
+ {
+ return true;
+ }
+
+ string androidName1 = GetAndroidAttribute(element1, "name");
+ string androidName2 = GetAndroidAttribute(element2, "name");
+ if (_elementsMergedByKey.Contains(element1.Name.LocalName) &&
+ androidName1 == androidName2)
+ {
+ return true;
+ }
+
+ if (element1.Name == "uses-feature" &&
+ androidName1 == androidName2 &&
+ (androidName1 != string.Empty ||
+ GetAndroidAttribute(element1, "glEsVersion") ==
+ GetAndroidAttribute(element2, "glEsVersion")))
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ private static string GetAndroidAttribute(
+ XElement element, string attributeName)
+ {
+ XNamespace androidNamespace = _xmlns;
+ XAttribute androidAttribute = element.Attributes(
+ androidNamespace + attributeName).FirstOrDefault();
+ return androidAttribute == null ? string.Empty : androidAttribute.Value;
+ }
+ }
+}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidManifestMerger.cs.meta b/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidManifestMerger.cs.meta
new file mode 100644
index 00000000..6bfb14b9
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/AndroidManifestMerger.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 663d23890f0dc45778a653e39b563180
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseContextMenu.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseContextMenu.cs
index 4d43a66b..da0859c9 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseContextMenu.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseContextMenu.cs
@@ -32,14 +32,14 @@ namespace GoogleARCoreInternal
Justification = "Internal")]
public static class AugmentedImageDatabaseContextMenu
{
- private const string k_SupportedImageFormatListMessage = "PNG and JPEG";
+ private const string _supportedImageFormatListMessage = "PNG and JPEG";
- private static readonly List k_SupportedImageExtensions = new List()
+ private static readonly List _supportedImageExtensions = new List()
{
".png", ".jpg", ".jpeg"
};
- private static readonly List k_UnsupportedImageExtensions = new List()
+ private static readonly List _unsupportedImageExtensions = new List()
{
".psd", ".tiff", ".tga", ".gif", ".bmp", ".iff", ".pict"
};
@@ -50,14 +50,14 @@ private static void AddAssetsToNewAugmentedImageDatabase()
var selectedImagePaths = new List();
bool unsupportedImagesSelected = false;
- selectedImagePaths = _GetSelectedImagePaths(out unsupportedImagesSelected);
+ selectedImagePaths = GetSelectedImagePaths(out unsupportedImagesSelected);
if (unsupportedImagesSelected)
{
var message = string.Format(
"One or more selected images could not be added to the " +
"AugmentedImageDatabase because they are not in a supported format. " +
"Supported image formats are: {0}",
- k_SupportedImageFormatListMessage);
+ _supportedImageFormatListMessage);
Debug.LogWarningFormat(message);
EditorUtility.DisplayDialog("Unsupported Images Selected", message, "Ok");
}
@@ -108,7 +108,7 @@ private static void AddAssetsToNewAugmentedImageDatabase()
}
}
- private static List _GetSelectedImagePaths(out bool unsupportedImagesSelected)
+ private static List GetSelectedImagePaths(out bool unsupportedImagesSelected)
{
var selectedImagePaths = new List();
@@ -118,11 +118,11 @@ private static List _GetSelectedImagePaths(out bool unsupportedImagesSel
var path = AssetDatabase.GUIDToAssetPath(GUID);
var extension = Path.GetExtension(path).ToLower();
- if (k_SupportedImageExtensions.Contains(extension))
+ if (_supportedImageExtensions.Contains(extension))
{
selectedImagePaths.Add(AssetDatabase.GUIDToAssetPath(GUID));
}
- else if (k_UnsupportedImageExtensions.Contains(extension))
+ else if (_unsupportedImageExtensions.Contains(extension))
{
unsupportedImagesSelected = true;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseInspector.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseInspector.cs
index 29923ab9..73e3f1ba 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseInspector.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/AugmentedImageDatabaseInspector.cs
@@ -32,19 +32,19 @@ namespace GoogleARCoreInternal
Justification = "Internal")]
public class AugmentedImageDatabaseInspector : Editor
{
- private const float k_ImageSpacerHeight = 55f;
- private const int k_PageSize = 5;
- private const float k_HeaderHeight = 30f;
- private static readonly Vector2 k_ContainerStart = new Vector2(14f, 87f);
+ private const float _imageSpacerHeight = 55f;
+ private const int _pageSize = 5;
+ private const float _headerHeight = 30f;
+ private static readonly Vector2 _containerStart = new Vector2(14f, 87f);
- private static BackgroundJobExecutor s_QualityBackgroundExecutor =
+ private static BackgroundJobExecutor _qualityBackgroundExecutor =
new BackgroundJobExecutor();
- private static AugmentedImageDatabase s_DatabaseForQualityJobs = null;
- private static Dictionary s_UpdatedQualityScores =
+ private static AugmentedImageDatabase _databaseForQualityJobs = null;
+ private static Dictionary _updatedQualityScores =
new Dictionary();
- private int m_PageIndex = 0;
+ private int _pageIndex = 0;
public override void OnInspectorGUI()
{
@@ -54,27 +54,27 @@ public override void OnInspectorGUI()
return;
}
- _RunDirtyQualityJobs(database);
+ RunDirtyQualityJobs(database);
- m_PageIndex = Mathf.Min(m_PageIndex, database.Count / k_PageSize);
+ _pageIndex = Mathf.Min(_pageIndex, database.Count / _pageSize);
- _DrawTitle();
- _DrawContainer();
- _DrawColumnNames();
+ DrawTitle();
+ DrawContainer();
+ DrawColumnNames();
// Draw the rows for AugmentedImageDatabaseEntry in the database,
// update the database if the entry's image is replaced and
// check whether the entry is deleted.
int displayedImageCount = 0;
int removeAt = -1;
- int pageStartIndex = m_PageIndex * k_PageSize;
- int pageEndIndex = Mathf.Min(database.Count, pageStartIndex + k_PageSize);
+ int pageStartIndex = _pageIndex * _pageSize;
+ int pageEndIndex = Mathf.Min(database.Count, pageStartIndex + _pageSize);
for (int i = pageStartIndex; i < pageEndIndex; i++, displayedImageCount++)
{
AugmentedImageDatabaseEntry updatedImage;
bool wasRemoved;
- _DrawImageField(database[i], out updatedImage, out wasRemoved);
+ DrawImageField(database[i], out updatedImage, out wasRemoved);
if (wasRemoved)
{
@@ -119,37 +119,37 @@ public override void OnInspectorGUI()
}
}
- _DrawImageSpacers(displayedImageCount);
- _DrawPageField(database.Count);
+ DrawImageSpacers(displayedImageCount);
+ DrawPageField(database.Count);
}
- private static void _RunDirtyQualityJobs(AugmentedImageDatabase database)
+ private static void RunDirtyQualityJobs(AugmentedImageDatabase database)
{
if (database == null)
{
return;
}
- if (s_DatabaseForQualityJobs != database)
+ if (_databaseForQualityJobs != database)
{
// If another database is already running quality evaluation,
// stop all pending jobs to prioritise the current database.
- if (s_DatabaseForQualityJobs != null)
+ if (_databaseForQualityJobs != null)
{
- s_QualityBackgroundExecutor.RemoveAllPendingJobs();
+ _qualityBackgroundExecutor.RemoveAllPendingJobs();
}
- s_DatabaseForQualityJobs = database;
+ _databaseForQualityJobs = database;
}
- _UpdateDatabaseQuality(database);
+ UpdateDatabaseQuality(database);
// Set database dirty to refresh inspector UI for each frame that there are still
// pending jobs.
// Otherwise if there exists one frame with no newly finished jobs, the UI will never
// get refreshed.
// EditorUtility.SetDirty can only be called from main thread.
- if (s_QualityBackgroundExecutor.PendingJobsCount > 0)
+ if (_qualityBackgroundExecutor.PendingJobsCount > 0)
{
EditorUtility.SetDirty(database);
return;
@@ -172,7 +172,7 @@ private static void _RunDirtyQualityJobs(AugmentedImageDatabase database)
AugmentedImageDatabaseEntry image = dirtyEntries[i];
var imagePath = AssetDatabase.GetAssetPath(image.Texture);
var textureGUID = image.TextureGUID;
- s_QualityBackgroundExecutor.PushJob(() =>
+ _qualityBackgroundExecutor.PushJob(() =>
{
string quality;
string error;
@@ -187,9 +187,9 @@ private static void _RunDirtyQualityJobs(AugmentedImageDatabase database)
quality = "ERROR";
}
- lock (s_UpdatedQualityScores)
+ lock (_updatedQualityScores)
{
- s_UpdatedQualityScores.Add(textureGUID, quality);
+ _updatedQualityScores.Add(textureGUID, quality);
}
});
}
@@ -198,33 +198,33 @@ private static void _RunDirtyQualityJobs(AugmentedImageDatabase database)
EditorUtility.SetDirty(database);
}
- private static void _UpdateDatabaseQuality(AugmentedImageDatabase database)
+ private static void UpdateDatabaseQuality(AugmentedImageDatabase database)
{
- lock (s_UpdatedQualityScores)
+ lock (_updatedQualityScores)
{
- if (s_UpdatedQualityScores.Count == 0)
+ if (_updatedQualityScores.Count == 0)
{
return;
}
for (int i = 0; i < database.Count; ++i)
{
- if (s_UpdatedQualityScores.ContainsKey(database[i].TextureGUID))
+ if (_updatedQualityScores.ContainsKey(database[i].TextureGUID))
{
AugmentedImageDatabaseEntry updatedImage = database[i];
- updatedImage.Quality = s_UpdatedQualityScores[updatedImage.TextureGUID];
+ updatedImage.Quality = _updatedQualityScores[updatedImage.TextureGUID];
database[i] = updatedImage;
}
}
- s_UpdatedQualityScores.Clear();
+ _updatedQualityScores.Clear();
}
// For refreshing inspector UI for updated quality scores.
EditorUtility.SetDirty(database);
}
- private void _DrawTitle()
+ private void DrawTitle()
{
const string TITLE_STRING = "Images in Database";
GUIStyle titleStyle = new GUIStyle();
@@ -241,15 +241,15 @@ private void _DrawTitle()
EditorGUILayout.EndVertical();
}
- private void _DrawContainer()
+ private void DrawContainer()
{
var containerRect = new Rect(
- k_ContainerStart.x, k_ContainerStart.y, EditorGUIUtility.currentViewWidth - 30,
- (k_PageSize * k_ImageSpacerHeight) + k_HeaderHeight);
+ _containerStart.x, _containerStart.y, EditorGUIUtility.currentViewWidth - 30,
+ (_pageSize * _imageSpacerHeight) + _headerHeight);
GUI.Box(containerRect, string.Empty);
}
- private void _DrawColumnNames()
+ private void DrawColumnNames()
{
EditorGUILayout.BeginVertical();
GUILayout.Space(5);
@@ -268,7 +268,7 @@ private void _DrawColumnNames()
GUILayoutOption[] options =
{
- GUILayout.Height(k_HeaderHeight - 10),
+ GUILayout.Height(_headerHeight - 10),
GUILayout.MaxWidth(80f)
};
EditorGUILayout.LabelField("Name", style, options);
@@ -283,7 +283,7 @@ private void _DrawColumnNames()
EditorGUILayout.EndVertical();
}
- private string _QualityForDisplay(string quality)
+ private string QualityForDisplay(string quality)
{
if (string.IsNullOrEmpty(quality))
{
@@ -298,7 +298,7 @@ private string _QualityForDisplay(string quality)
return quality + "/100";
}
- private void _DrawImageField(
+ private void DrawImageField(
AugmentedImageDatabaseEntry image, out AugmentedImageDatabaseEntry updatedImage,
out bool wasRemoved)
{
@@ -326,7 +326,7 @@ private void _DrawImageField(
var labelStyle = new GUIStyle(GUI.skin.label);
labelStyle.alignment = TextAnchor.MiddleLeft;
GUILayout.Space(5);
- EditorGUILayout.LabelField(_QualityForDisplay(image.Quality), labelStyle,
+ EditorGUILayout.LabelField(QualityForDisplay(image.Quality), labelStyle,
GUILayout.Height(42), GUILayout.MaxWidth(80f));
GUILayout.FlexibleSpace();
@@ -345,16 +345,16 @@ private void _DrawImageField(
EditorGUILayout.EndVertical();
}
- private void _DrawImageSpacers(int displayedImageCount)
+ private void DrawImageSpacers(int displayedImageCount)
{
EditorGUILayout.BeginVertical();
- GUILayout.Space((k_PageSize - displayedImageCount) * k_ImageSpacerHeight);
+ GUILayout.Space((_pageSize - displayedImageCount) * _imageSpacerHeight);
EditorGUILayout.EndVertical();
}
- private void _DrawPageField(int imageCount)
+ private void DrawPageField(int imageCount)
{
- var lastPageIndex = Mathf.Max(imageCount - 1, 0) / k_PageSize;
+ var lastPageIndex = Mathf.Max(imageCount - 1, 0) / _pageSize;
EditorGUILayout.BeginHorizontal();
GUILayout.Space(15);
@@ -373,22 +373,22 @@ private void _DrawPageField(int imageCount)
var textStyle = new GUIStyle(GUI.skin.textField);
textStyle.margin = new RectOffset(0, 0, 15, 0);
var pageString = EditorGUILayout.TextField(
- (m_PageIndex + 1).ToString(), textStyle, GUILayout.Width(30));
+ (_pageIndex + 1).ToString(), textStyle, GUILayout.Width(30));
int pageNumber;
int.TryParse(pageString, out pageNumber);
- m_PageIndex = Mathf.Clamp(pageNumber - 1, 0, lastPageIndex);
+ _pageIndex = Mathf.Clamp(pageNumber - 1, 0, lastPageIndex);
var buttonStyle = new GUIStyle(GUI.skin.button);
buttonStyle.margin = new RectOffset(10, 10, 13, 0);
- GUI.enabled = m_PageIndex > 0;
+ GUI.enabled = _pageIndex > 0;
bool moveLeft = GUILayout.Button("<", buttonStyle);
- GUI.enabled = m_PageIndex < lastPageIndex;
+ GUI.enabled = _pageIndex < lastPageIndex;
bool moveRight = GUILayout.Button(">", buttonStyle);
GUI.enabled = true;
- m_PageIndex = moveLeft ? m_PageIndex - 1 : m_PageIndex;
- m_PageIndex = moveRight ? m_PageIndex + 1 : m_PageIndex;
+ _pageIndex = moveLeft ? _pageIndex - 1 : _pageIndex;
+ _pageIndex = moveRight ? _pageIndex + 1 : _pageIndex;
GUILayout.Space(15);
EditorGUILayout.EndHorizontal();
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/BackgroundJobExecutor.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/BackgroundJobExecutor.cs
index dce633a3..7f2bf7eb 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/BackgroundJobExecutor.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/BackgroundJobExecutor.cs
@@ -29,43 +29,43 @@ namespace GoogleARCoreInternal
Justification = "Internal")]
public class BackgroundJobExecutor
{
- private AutoResetEvent m_Event = new AutoResetEvent(false);
- private Queue m_JobsQueue = new Queue();
- private Thread m_Thread;
- private bool m_Running = false;
+ private AutoResetEvent _event = new AutoResetEvent(false);
+ private Queue _jobsQueue = new Queue();
+ private Thread _thread;
+ private bool _running = false;
public BackgroundJobExecutor()
{
- m_Thread = new Thread(Run);
- m_Thread.Start();
+ _thread = new Thread(Run);
+ _thread.Start();
}
public int PendingJobsCount
{
get
{
- lock (m_JobsQueue)
+ lock (_jobsQueue)
{
- return m_JobsQueue.Count + (m_Running ? 1 : 0);
+ return _jobsQueue.Count + (_running ? 1 : 0);
}
}
}
public void PushJob(Action job)
{
- lock (m_JobsQueue)
+ lock (_jobsQueue)
{
- m_JobsQueue.Enqueue(job);
+ _jobsQueue.Enqueue(job);
}
- m_Event.Set();
+ _event.Set();
}
public void RemoveAllPendingJobs()
{
- lock (m_JobsQueue)
+ lock (_jobsQueue)
{
- m_JobsQueue.Clear();
+ _jobsQueue.Clear();
}
}
@@ -75,25 +75,25 @@ private void Run()
{
if (PendingJobsCount == 0)
{
- m_Event.WaitOne();
+ _event.WaitOne();
}
Action job = null;
- lock (m_JobsQueue)
+ lock (_jobsQueue)
{
- if (m_JobsQueue.Count == 0)
+ if (_jobsQueue.Count == 0)
{
continue;
}
- job = m_JobsQueue.Dequeue();
- m_Running = true;
+ job = _jobsQueue.Dequeue();
+ _running = true;
}
job();
- lock (m_JobsQueue)
+ lock (_jobsQueue)
{
- m_Running = false;
+ _running = false;
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/CloudAnchorPreprocessBuild.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/CloudAnchorPreprocessBuild.cs
index e1149d48..0ff8e810 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/CloudAnchorPreprocessBuild.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/CloudAnchorPreprocessBuild.cs
@@ -30,74 +30,27 @@ namespace GoogleARCoreInternal
internal class CloudAnchorPreprocessBuild : PreprocessBuildBase
{
- private const string k_ManifestTemplateGuid = "5e182918f0b8c4929a3d4b0af0ed6f56";
- private const string k_PluginsFolderGuid = "93be2b9777c348648a2d9151b7e233fc";
- private const string k_RuntimeSettingsPath = "GoogleARCore/Resources/RuntimeSettings";
+ private const string _manifestTemplateGuid = "5e182918f0b8c4929a3d4b0af0ed6f56";
+ private const string _pluginsFolderGuid = "93be2b9777c348648a2d9151b7e233fc";
+ private const string _runtimeSettingsPath = "GoogleARCore/Resources/RuntimeSettings";
public override void OnPreprocessBuild(BuildTarget target, string path)
{
if (target == BuildTarget.Android)
{
- _PreprocessAndroidBuild();
+ PreprocessAndroidBuild();
}
else if (target == BuildTarget.iOS)
{
- _PreprocessIosBuild();
+ PreprocessIosBuild();
}
}
- private string _getJdkPath()
- {
- string jdkPath = null;
-
-// Unity started offering the embedded JDK in 2018.3
-#if UNITY_2018_3_OR_NEWER
- if (UnityEditor.EditorPrefs.GetBool("JdkUseEmbedded"))
- {
- // Use OpenJDK that is bundled with Unity. JAVA_HOME will be set when
- // 'Preferences > External Tools > Android > JDK installed with Unity' is checked.
- jdkPath = System.Environment.GetEnvironmentVariable("JAVA_HOME");
- if (string.IsNullOrEmpty(jdkPath))
- {
- throw new BuildFailedException(
- "'Preferences > External Tools > Android > JDK installed with Unity' is " +
- "checked, but JAVA_HOME is unset or empty. Try unchecking this setting " +
- "and configuring a valid JDK path under " +
- "'Preferences > External Tools > Android > JDK'.");
- }
- }
- else
-#endif // UNITY_2018_3_OR_NEWER
- {
- // Use JDK path specified by 'Preferences > External Tools > Android > JDK'.
- jdkPath = EditorPrefs.GetString("JdkPath");
- if (string.IsNullOrEmpty(jdkPath))
- {
- // Use JAVA_HOME from the O/S environment.
- jdkPath = System.Environment.GetEnvironmentVariable("JAVA_HOME");
- if (string.IsNullOrEmpty(jdkPath))
- {
- throw new BuildFailedException(
- "'Preferences > External Tools > Android > JDK installed with Unity' " +
- "is unchecked, but 'Preferences > External Tools > Android > JDK' " +
- "path is empty and JAVA_HOME environment variable is unset or empty.");
- }
- }
- }
-
- if ((File.GetAttributes(jdkPath) & FileAttributes.Directory) == 0)
- {
- throw new BuildFailedException(string.Format("Invalid JDK path '{0}'", jdkPath));
- }
-
- return jdkPath;
- }
-
- private void _PreprocessAndroidBuild()
+ private void PreprocessAndroidBuild()
{
string cachedCurrentDirectory = Directory.GetCurrentDirectory();
string pluginsFolderPath = Path.Combine(cachedCurrentDirectory,
- AssetDatabase.GUIDToAssetPath(k_PluginsFolderGuid));
+ AssetDatabase.GUIDToAssetPath(_pluginsFolderGuid));
string cloudAnchorsManifestAarPath =
Path.Combine(pluginsFolderPath, "cloud_anchor_manifest.aar");
@@ -105,10 +58,16 @@ private void _PreprocessAndroidBuild()
!string.IsNullOrEmpty(ARCoreProjectSettings.Instance.CloudServicesApiKey);
if (cloudAnchorsEnabled)
{
- string jarPath = Path.Combine(_getJdkPath(), "bin/jar");
+ string jarPath = AndroidDependenciesHelper.GetJdkPath();
+ if (string.IsNullOrEmpty(jarPath))
+ {
+ throw new BuildFailedException("Cannot find a valid JDK path in this build.");
+ }
+
+ jarPath = Path.Combine(jarPath, "bin/jar");
// If the API Key didn't change then do nothing.
- if (!_IsApiKeyDirty(jarPath, cloudAnchorsManifestAarPath,
+ if (!IsApiKeyDirty(jarPath, cloudAnchorsManifestAarPath,
ARCoreProjectSettings.Instance.CloudServicesApiKey))
{
return;
@@ -128,7 +87,7 @@ private void _PreprocessAndroidBuild()
var manifestTemplatePath = Path.Combine(
cachedCurrentDirectory,
- AssetDatabase.GUIDToAssetPath(k_ManifestTemplateGuid));
+ AssetDatabase.GUIDToAssetPath(_manifestTemplateGuid));
// Extract the "template AAR" and remove it.
string output;
@@ -192,7 +151,7 @@ private void _PreprocessAndroidBuild()
}
}
- private bool _IsApiKeyDirty(string jarPath, string aarPath, string apiKey)
+ private bool IsApiKeyDirty(string jarPath, string aarPath, string apiKey)
{
bool isApiKeyDirty = true;
var cachedCurrentDirectory = Directory.GetCurrentDirectory();
@@ -237,9 +196,9 @@ private bool _IsApiKeyDirty(string jarPath, string aarPath, string apiKey)
return isApiKeyDirty;
}
- private void _PreprocessIosBuild()
+ private void PreprocessIosBuild()
{
- var runtimeSettingsPath = Path.Combine(Application.dataPath, k_RuntimeSettingsPath);
+ var runtimeSettingsPath = Path.Combine(Application.dataPath, _runtimeSettingsPath);
Directory.CreateDirectory(runtimeSettingsPath);
string cloudServicesApiKey = ARCoreProjectSettings.Instance.IosCloudServicesApiKey;
File.WriteAllText(
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ExampleBuildHelper.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ExampleBuildHelper.cs
index 0562edaa..ee0e3d27 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ExampleBuildHelper.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ExampleBuildHelper.cs
@@ -28,13 +28,13 @@ namespace GoogleARCoreInternal
internal class ExampleBuildHelper : PreprocessBuildBase
{
- private List m_ExampleScenes = new List();
+ private List _exampleScenes = new List();
- internal List AllExampleScenes
+ internal List _allExampleScenes
{
get
{
- return m_ExampleScenes;
+ return _exampleScenes;
}
}
@@ -42,12 +42,12 @@ public override void OnPreprocessBuild(BuildTarget target, string path)
{
}
- protected void _AddExampleScene(ExampleScene scene)
+ protected void AddExampleScene(ExampleScene scene)
{
- m_ExampleScenes.Add(scene);
+ _exampleScenes.Add(scene);
}
- protected void _DoPreprocessBuild(BuildTarget target, string path)
+ protected void DoPreprocessBuild(BuildTarget target, string path)
{
BuildTargetGroup buildTargetGroup;
if (target == BuildTarget.Android)
@@ -83,7 +83,7 @@ protected void _DoPreprocessBuild(BuildTarget target, string path)
List exampleSceneIcons = new List();
List exampleProductNames = new List();
- foreach (var exampleScene in m_ExampleScenes)
+ foreach (var exampleScene in _exampleScenes)
{
exampleSceneIcons.Add(AssetDatabase.LoadAssetAtPath(
AssetDatabase.GUIDToAssetPath(exampleScene.IconGuid)));
@@ -109,7 +109,7 @@ protected void _DoPreprocessBuild(BuildTarget target, string path)
}
}
- foreach (var exampleScene in m_ExampleScenes)
+ foreach (var exampleScene in _exampleScenes)
{
if (enabledBuildScene.guid.ToString() == exampleScene.SceneGuid)
{
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ExamplePreprocessBuild.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ExamplePreprocessBuild.cs
index faee9ed9..623864a8 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/ExamplePreprocessBuild.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ExamplePreprocessBuild.cs
@@ -30,42 +30,42 @@ internal class ExamplePreprocessBuild : ExampleBuildHelper
{
public ExamplePreprocessBuild()
{
- _AddExampleScene(new ExampleScene()
+ AddExampleScene(new ExampleScene()
{
ProductName = "HelloAR U3D",
PackageName = "com.google.ar.core.examples.unity.helloar",
SceneGuid = "e6a6fa04348cb45c9b0221eb19c946da",
IconGuid = "36b7440e71f344bef8fca770c2d365f8"
});
- _AddExampleScene(new ExampleScene()
+ AddExampleScene(new ExampleScene()
{
ProductName = "CV U3D",
PackageName = "com.google.ar.core.examples.unity.computervision",
SceneGuid = "5ef0f7f7f2c7b4285b707265348bbffd",
IconGuid = "7c556c651080f499d9eaeea95d392d80"
});
- _AddExampleScene(new ExampleScene()
+ AddExampleScene(new ExampleScene()
{
ProductName = "AugmentedImage U3D",
PackageName = "com.google.ar.core.examples.unity.augmentedimage",
SceneGuid = "be567d47d3ab94b3badc5b211f535a24",
IconGuid = "0bf81216732894b46b8b5437b1acc57a"
});
- _AddExampleScene(new ExampleScene()
+ AddExampleScene(new ExampleScene()
{
ProductName = "CloudAnchors U3D",
PackageName = "com.google.ar.core.examples.unity.cloudanchors",
SceneGuid = "83fb41cc294e74bdea57537befa00ffc",
IconGuid = "dcfb8b44c93d547e2bdf8a638c1415af"
});
- _AddExampleScene(new ExampleScene()
+ AddExampleScene(new ExampleScene()
{
ProductName = "AugmentedFaces U3D",
PackageName = "com.google.ar.core.examples.unity.augmentedfaces",
SceneGuid = "7d2be221c0e8f4e259a08279fab0da42",
IconGuid = "c63c0025880214284b97a9d1b5de07dc"
});
- _AddExampleScene(new ExampleScene()
+ AddExampleScene(new ExampleScene()
{
ProductName = "ObjectManipulation U3D",
PackageName = "com.google.ar.core.examples.unity.objectmanipulation",
@@ -76,7 +76,7 @@ public ExamplePreprocessBuild()
public override void OnPreprocessBuild(BuildTarget target, string path)
{
- _DoPreprocessBuild(target, path);
+ DoPreprocessBuild(target, path);
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/HelpAttributeDrawer.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/HelpAttributeDrawer.cs
index d5ec7a6c..49392f05 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/HelpAttributeDrawer.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/HelpAttributeDrawer.cs
@@ -30,7 +30,7 @@ namespace GoogleARCoreInternal
[CustomPropertyDrawer(typeof(HelpAttribute))]
internal class HelpAttributeDrawer : PropertyDrawer
{
- private const float k_IconOffset = 40;
+ private const float _iconOffset = 40;
///
/// Override Unity GetPropertyHeight to specify how tall the GUI for this field is
@@ -41,12 +41,12 @@ internal class HelpAttributeDrawer : PropertyDrawer
/// The height in pixels.
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
{
- if (_IsHelpBoxEmpty())
+ if (IsHelpBoxEmpty())
{
- return _GetOriginalPropertyHeight(property, label);
+ return GetOriginalPropertyHeight(property, label);
}
- return _GetOriginalPropertyHeight(property, label) + _GetHelpAttributeHeight() +
+ return GetOriginalPropertyHeight(property, label) + GetHelpAttributeHeight() +
EditorStyles.helpBox.padding.vertical;
}
@@ -61,17 +61,17 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
EditorGUI.BeginProperty(position, label, property);
Rect labelPosition = position;
float labelHeight = base.GetPropertyHeight(property, label);
- float propertyHeight = _GetOriginalPropertyHeight(property, label);
+ float propertyHeight = GetOriginalPropertyHeight(property, label);
labelPosition.height = labelHeight;
// Draw property based on defualt Unity GUI behavior.
- string warningMessage = _GetIncompatibleAttributeWarning(property);
+ string warningMessage = GetIncompatibleAttributeWarning(property);
if (!string.IsNullOrEmpty(warningMessage))
{
var warningContent = new GUIContent(warningMessage);
EditorGUI.LabelField(labelPosition, label, warningContent);
}
- else if (_GetPropertyAttribute() != null)
+ else if (GetPropertyAttribute() != null)
{
Rect textAreaPosition = position;
textAreaPosition.y += labelHeight;
@@ -84,7 +84,7 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
property.stringValue = text;
}
}
- else if (_GetPropertyAttribute() != null)
+ else if (GetPropertyAttribute() != null)
{
Rect multilinePosition = position;
multilinePosition.x += EditorGUIUtility.labelWidth;
@@ -98,9 +98,9 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
property.stringValue = text;
}
}
- else if (_GetPropertyAttribute() != null)
+ else if (GetPropertyAttribute() != null)
{
- var rangeAttribute = _GetPropertyAttribute();
+ var rangeAttribute = GetPropertyAttribute();
if (property.propertyType == SerializedPropertyType.Integer)
{
EditorGUI.IntSlider(labelPosition, property,
@@ -117,43 +117,43 @@ public override void OnGUI(Rect position, SerializedProperty property, GUIConten
EditorGUI.PropertyField(labelPosition, property);
}
- if (!_IsHelpBoxEmpty())
+ if (!IsHelpBoxEmpty())
{
var helpBoxPosition = position;
helpBoxPosition.y += propertyHeight + EditorStyles.helpBox.padding.top;
- helpBoxPosition.height = _GetHelpAttributeHeight();
- EditorGUI.HelpBox(helpBoxPosition, _GetHelpAttribute().HelpMessage,
- (MessageType)_GetHelpAttribute().MessageType);
+ helpBoxPosition.height = GetHelpAttributeHeight();
+ EditorGUI.HelpBox(helpBoxPosition, GetHelpAttribute().HelpMessage,
+ (MessageType)GetHelpAttribute().MessageType);
}
EditorGUI.EndProperty();
}
- private HelpAttribute _GetHelpAttribute()
+ private HelpAttribute GetHelpAttribute()
{
return attribute as HelpAttribute;
}
- private bool _IsHelpBoxEmpty()
+ private bool IsHelpBoxEmpty()
{
- return string.IsNullOrEmpty(_GetHelpAttribute().HelpMessage);
+ return string.IsNullOrEmpty(GetHelpAttribute().HelpMessage);
}
- private bool _IsIconVisible()
+ private bool IsIconVisible()
{
- return _GetHelpAttribute().MessageType != HelpAttribute.HelpMessageType.None;
+ return GetHelpAttribute().MessageType != HelpAttribute.HelpMessageType.None;
}
- private T _GetPropertyAttribute() where T : PropertyAttribute
+ private T GetPropertyAttribute() where T : PropertyAttribute
{
var attributes = fieldInfo.GetCustomAttributes(typeof(T), true);
return attributes != null && attributes.Length > 0 ? (T)attributes[0] : null;
}
- private float _GetOriginalPropertyHeight(SerializedProperty property, GUIContent label)
+ private float GetOriginalPropertyHeight(SerializedProperty property, GUIContent label)
{
float labelHeight = base.GetPropertyHeight(property, label);
- string warningMessage = _GetIncompatibleAttributeWarning(property);
+ string warningMessage = GetIncompatibleAttributeWarning(property);
if (!string.IsNullOrEmpty(warningMessage))
{
return labelHeight;
@@ -161,7 +161,7 @@ private float _GetOriginalPropertyHeight(SerializedProperty property, GUIContent
// Calculate property height for TextArea attribute.
// TextArea is below property label.
- var textAreaAttribute = _GetPropertyAttribute();
+ var textAreaAttribute = GetPropertyAttribute();
if (textAreaAttribute != null)
{
var textAreaContent = new GUIContent(property.stringValue);
@@ -180,7 +180,7 @@ private float _GetOriginalPropertyHeight(SerializedProperty property, GUIContent
// Calculate property height for Multiline attribute.
// Multiline is on the same line of property label.
- var multilineAttribute = _GetPropertyAttribute();
+ var multilineAttribute = GetPropertyAttribute();
if (multilineAttribute != null)
{
var textFieldStyle = new GUIStyle(EditorStyles.textField);
@@ -197,7 +197,7 @@ private float _GetOriginalPropertyHeight(SerializedProperty property, GUIContent
"UnityRules.UnityStyleRules",
"US1300:LinesMustBe100CharactersOrShorter",
Justification = "Unity issue URL length > 100")]
- private float _GetTextAreaWidth()
+ private float GetTextAreaWidth()
{
// Use reflection to determine contextWidth, to workaround the following Unity issue:
// https://issuetracker.unity3d.com/issues/decoratordrawers-ongui-rect-has-a-different-width-compared-to-editorguiutility-dot-currentviewwidth
@@ -218,17 +218,17 @@ private float _GetTextAreaWidth()
return textAreaWidth;
}
- private float _GetHelpAttributeHeight()
+ private float GetHelpAttributeHeight()
{
float attributeHeight = 0;
- if (_IsHelpBoxEmpty())
+ if (IsHelpBoxEmpty())
{
return attributeHeight;
}
- var content = new GUIContent(_GetHelpAttribute().HelpMessage);
- var iconOffset = _IsIconVisible() ? k_IconOffset : 0;
- float textAreaWidth = _GetTextAreaWidth();
+ var content = new GUIContent(GetHelpAttribute().HelpMessage);
+ var iconOffset = IsIconVisible() ? _iconOffset : 0;
+ float textAreaWidth = GetTextAreaWidth();
// When HelpBox icon is visble, part of the width is occupied by the icon.
attributeHeight = EditorStyles.helpBox.CalcHeight(content, textAreaWidth - iconOffset);
@@ -240,24 +240,24 @@ private float _GetHelpAttributeHeight()
return attributeHeight;
}
- private string _GetIncompatibleAttributeWarning(SerializedProperty property)
+ private string GetIncompatibleAttributeWarning(SerializedProperty property)
{
// Based on Unity default behavior, potential incompatible attributes have
// following priorities: TextAreaAttribute > MultilineAttribute > RangeAttribute.
// If higher priority exists, lower one will be ignored.
- if (_GetPropertyAttribute() != null)
+ if (GetPropertyAttribute() != null)
{
return property.propertyType == SerializedPropertyType.String ?
null : "Use TextArea with string.";
}
- if (_GetPropertyAttribute() != null)
+ if (GetPropertyAttribute() != null)
{
return property.propertyType == SerializedPropertyType.String ?
null : "Use Multiline with string.";
}
- if (_GetPropertyAttribute() != null)
+ if (GetPropertyAttribute() != null)
{
return property.propertyType == SerializedPropertyType.Float ||
property.propertyType == SerializedPropertyType.Integer ?
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/LogRequestUtils.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/LogRequestUtils.cs
index 1c2ae0b7..b4212b94 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/LogRequestUtils.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/LogRequestUtils.cs
@@ -33,8 +33,8 @@ namespace GoogleARCoreInternal
Justification = "Internal")]
public class LogRequestUtils
{
- private const string k_GoogleAnalyticsId = "GoogleAnalyticsId";
- private static string s_SessionId = string.Empty;
+ private const string _googleAnalyticsId = "GoogleAnalyticsId";
+ private static string _sessionId = string.Empty;
///
/// Generates a new LogRequest using the current system configuration.
@@ -59,27 +59,27 @@ ArCoreSdkLog.Types.UnityEngine.Types.EditionType editionType
// Collect the set of information to be sent to Google.
ArCoreSdkLog logSDK = new ArCoreSdkLog()
{
- SdkInstanceId = _UniqueId(),
+ SdkInstanceId = UniqueId(),
OsVersion = SystemInfo.operatingSystem,
ArcoreSdkVersion = GoogleARCore.VersionInfo.Version,
SdkType = ArCoreSdkLog.Types.SDKType.ArcoreSdk,
Unity = engine, // Unity engine version.
- SdkSessionId = _SessionId(),
+ SdkSessionId = SessionId(),
};
// Assemble the Clearcut log event data.
LogEvent logEvent = new LogEvent()
{
- EventTimeMs = _GetCurrentUnixEpochTimeMs(),
- EventUptimeMs = _GetSystemUptimeMs(),
+ EventTimeMs = GetCurrentUnixEpochTimeMs(),
+ EventUptimeMs = GetSystemUptimeMs(),
SourceExtension = logSDK.ToByteString(),
};
// Package all data in a log request.
LogRequest logRequest = new LogRequest()
{
- RequestTimeMs = _GetCurrentUnixEpochTimeMs(),
- RequestUptimeMs = _GetSystemUptimeMs(),
+ RequestTimeMs = GetCurrentUnixEpochTimeMs(),
+ RequestUptimeMs = GetSystemUptimeMs(),
LogSourceVal = LogRequest.Types.LogSource.ArcoreSdk,
LogEvent = { logEvent },
};
@@ -92,10 +92,10 @@ ArCoreSdkLog.Types.UnityEngine.Types.EditionType editionType
/// in Unity's EditorPrefs, subsequent calls return the retrieved value.
///
/// A unique string representing this client.
- private static string _UniqueId()
+ private static string UniqueId()
{
// Check to see if the id already exists.
- string id = EditorPrefs.GetString(k_GoogleAnalyticsId, string.Empty);
+ string id = EditorPrefs.GetString(_googleAnalyticsId, string.Empty);
if (id != string.Empty)
{
return id;
@@ -117,7 +117,7 @@ private static string _UniqueId()
id = str.ToString();
// Store for retrieval next time.
- EditorPrefs.SetString(k_GoogleAnalyticsId, id);
+ EditorPrefs.SetString(_googleAnalyticsId, id);
return id;
}
@@ -127,22 +127,22 @@ private static string _UniqueId()
/// used while the current project remains open.
///
/// The current session id.
- private static string _SessionId()
+ private static string SessionId()
{
// Generate on first request.
- if (s_SessionId == string.Empty)
+ if (_sessionId == string.Empty)
{
- s_SessionId = Guid.NewGuid().ToString();
+ _sessionId = Guid.NewGuid().ToString();
}
- return s_SessionId;
+ return _sessionId;
}
///
/// Current UTC coordinated time.
///
/// Current UTC time in milliseconds.
- private static long _GetCurrentUnixEpochTimeMs()
+ private static long GetCurrentUnixEpochTimeMs()
{
// UTC Epoch Time (0h 00m 00.00s Jan 1, 1970).
DateTimeOffset epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, 0, TimeSpan.Zero);
@@ -158,7 +158,7 @@ private static long _GetCurrentUnixEpochTimeMs()
/// The time since the system was booted in millseconds.
///
/// Current system uptime in milliseconds.
- private static long _GetSystemUptimeMs()
+ private static long GetSystemUptimeMs()
{
return Environment.TickCount;
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ManifestModificationPreprocessBuild.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/ManifestModificationPreprocessBuild.cs
new file mode 100644
index 00000000..acf499d9
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ManifestModificationPreprocessBuild.cs
@@ -0,0 +1,247 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2020 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
+namespace GoogleARCoreInternal
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Diagnostics.CodeAnalysis;
+ using System.IO;
+ using System.Linq;
+ using System.Text;
+ using System.Xml;
+ using System.Xml.Linq;
+ using GoogleARCore;
+ using UnityEditor;
+ using UnityEditor.Build;
+ using UnityEditor.SceneManagement;
+ using UnityEngine;
+ using UnityEngine.SceneManagement;
+
+ internal class ManifestModificationPreprocessBuild : PreprocessBuildBase
+ {
+ private const string _pluginsFolderGuid = "93be2b9777c348648a2d9151b7e233fc";
+
+ ///
+ /// Generate the AndroidManifest XDocument based on the ARCoreProjectSettings.
+ /// This function would be used in Tests.
+ ///
+ /// ARCore Project Settings.
+ /// The XDocument of the final AndroidManifest.
+ public static XDocument GenerateCustomizedAndroidManifest(
+ ARCoreProjectSettings settings)
+ {
+ XElement mergedRoot = GetDefaultAndroidManifest().Root;
+ List featureModules = DependentModulesManager.GetModules();
+ foreach (IDependentModule module in featureModules)
+ {
+ if (module.IsEnabled(settings))
+ {
+ XDocument xDocument =
+ AndroidManifestMerger.TransferToXDocument(
+ module.GetAndroidManifestSnippet(settings));
+ mergedRoot = AndroidManifestMerger.MergeXElement(
+ mergedRoot, xDocument.Root);
+ }
+ }
+
+ return new XDocument(mergedRoot);
+ }
+
+ public override void OnPreprocessBuild(BuildTarget target, string path)
+ {
+ if (target == BuildTarget.Android)
+ {
+ PreprocessAndroidBuild();
+ }
+ }
+
+ private static void CheckCompatibilityWithAllSesssionConfigs(
+ ARCoreProjectSettings settings,
+ Dictionary sessionToSceneMap)
+ {
+ List featureModules = DependentModulesManager.GetModules();
+ foreach (IDependentModule module in featureModules)
+ {
+ foreach (var entry in sessionToSceneMap)
+ {
+ if (!module.IsCompatibleWithSessionConfig(
+ settings, entry.Key))
+ {
+ throw new BuildFailedException(
+ string.Format(
+ "Module {0} isn't compatible with the setting in {1}",
+ module.GetType().Name, entry.Value));
+ }
+ }
+ }
+ }
+
+ private static Dictionary GetAllSessionConfigs()
+ {
+ Dictionary sessionToPathMap =
+ new Dictionary();
+ EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes;
+ foreach (EditorBuildSettingsScene editorScene in EditorBuildSettings.scenes)
+ {
+ if (editorScene.enabled)
+ {
+ Scene scene = SceneManager.GetSceneByPath(editorScene.path);
+ if (!scene.isLoaded)
+ {
+ scene = EditorSceneManager.OpenScene(
+ editorScene.path, OpenSceneMode.Additive);
+ }
+
+ foreach (GameObject gameObject in scene.GetRootGameObjects())
+ {
+ ARCoreSession sessionComponent =
+ (ARCoreSession)gameObject.GetComponentInChildren(
+ typeof(ARCoreSession));
+ if (sessionComponent != null)
+ {
+ if (!sessionToPathMap.ContainsKey(sessionComponent.SessionConfig))
+ {
+ sessionToPathMap.Add(
+ sessionComponent.SessionConfig, editorScene.path);
+ }
+
+ break;
+ }
+ }
+ }
+ }
+
+ return sessionToPathMap;
+ }
+
+ private static XDocument GetDefaultAndroidManifest()
+ {
+ string str =
+ @"
+
+
+ ";
+ return XDocument.Parse(str);
+ }
+
+ private static void CreateClassesJar(string jarPath, string tempDirectoryPath)
+ {
+ var javaPath = Path.Combine(
+ tempDirectoryPath, "GoogleArCoreCustomizedManifestEmptyClass.java");
+
+ using (FileStream fs = File.Create(javaPath))
+ {
+ byte[] info = new UTF8Encoding(true).GetBytes(
+ "public class GoogleArCoreCustomizedManifestEmptyClass {}");
+ fs.Write(info, 0, info.Length);
+ }
+
+ var fileListBuilder = new StringBuilder();
+ foreach (var filePath in Directory.GetFiles(tempDirectoryPath))
+ {
+ fileListBuilder.AppendFormat(" {0}", Path.GetFileName(filePath));
+ }
+
+ string command = string.Format(
+ "cf classes.jar {0}", fileListBuilder.ToString());
+ string output;
+ string errors;
+ ShellHelper.RunCommand(jarPath, command, out output, out errors);
+
+ if (!string.IsNullOrEmpty(errors))
+ {
+ throw new BuildFailedException(
+ string.Format(
+ "Error creating classes.jar for manifest: {0}", errors));
+ }
+
+ File.Delete(javaPath);
+ }
+
+ private void PreprocessAndroidBuild()
+ {
+ string cachedCurrentDirectory = Directory.GetCurrentDirectory();
+ string pluginsFolderPath = Path.Combine(cachedCurrentDirectory,
+ AssetDatabase.GUIDToAssetPath(_pluginsFolderGuid));
+ string customizedManifestAarPath =
+ Path.Combine(pluginsFolderPath, "customized_manifest.aar");
+
+ string jarPath = Path.Combine(AndroidDependenciesHelper.GetJdkPath(), "bin/jar");
+
+ var tempDirectoryPath =
+ Path.Combine(cachedCurrentDirectory, FileUtil.GetUniqueTempPathInProject());
+
+ try
+ {
+ // Move to a temp directory.
+ Directory.CreateDirectory(tempDirectoryPath);
+ Directory.SetCurrentDirectory(tempDirectoryPath);
+
+ CreateClassesJar(jarPath, tempDirectoryPath);
+
+ CheckCompatibilityWithAllSesssionConfigs(
+ ARCoreProjectSettings.Instance, GetAllSessionConfigs());
+ XDocument customizedManifest =
+ GenerateCustomizedAndroidManifest(ARCoreProjectSettings.Instance);
+ var manifestPath = Path.Combine(tempDirectoryPath, "AndroidManifest.xml");
+ customizedManifest.Save(manifestPath);
+
+ // Compress the new AAR.
+ var fileListBuilder = new StringBuilder();
+ foreach (var filePath in Directory.GetFiles(tempDirectoryPath))
+ {
+ fileListBuilder.AppendFormat(" {0}", Path.GetFileName(filePath));
+ }
+
+ string command = string.Format(
+ "cf customized_manifest.aar {0}", fileListBuilder.ToString());
+
+ string output;
+ string errors;
+ ShellHelper.RunCommand(jarPath, command, out output, out errors);
+
+ if (!string.IsNullOrEmpty(errors))
+ {
+ throw new BuildFailedException(
+ string.Format(
+ "Error creating aar for manifest: {0}", errors));
+ }
+
+ File.Copy(Path.Combine(tempDirectoryPath, "customized_manifest.aar"),
+ customizedManifestAarPath, true);
+ }
+ finally
+ {
+ // Cleanup.
+ Directory.SetCurrentDirectory(cachedCurrentDirectory);
+ Directory.Delete(tempDirectoryPath, true);
+
+ AssetDatabase.Refresh();
+ }
+
+ AssetHelper.GetPluginImporterByName("customized_manifest.aar")
+ .SetCompatibleWithPlatform(BuildTarget.Android, true);
+ }
+ }
+}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/ManifestModificationPreprocessBuild.cs.meta b/Assets/GoogleARCore/SDK/Scripts/Editor/ManifestModificationPreprocessBuild.cs.meta
new file mode 100644
index 00000000..299d0e6f
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/ManifestModificationPreprocessBuild.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e4e2abfe95ad443f4a90d23bb14299df
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Scripts/Editor/PreprocessBuildBase.cs b/Assets/GoogleARCore/SDK/Scripts/Editor/PreprocessBuildBase.cs
index 453c21a0..3253cfc8 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Editor/PreprocessBuildBase.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Editor/PreprocessBuildBase.cs
@@ -36,8 +36,8 @@ internal class PreprocessBuildBase : IPreprocessBuildWithReport
internal class PreprocessBuildBase : IPreprocessBuild
#endif
{
- [SuppressMessage("UnityRules.UnityStyleRules", "US1000:FieldsMustBeUpperCamelCase",
- Justification = "Overriden property.")]
+ [SuppressMessage("UnityRules.UnityStyleRules",
+ "US1109:PublicPropertiesMustBeUpperCamelCase", Justification = "Overriden property.")]
public int callbackOrder
{
get
diff --git a/Assets/GoogleARCore/SDK/Scripts/EnvironmentalLight.cs b/Assets/GoogleARCore/SDK/Scripts/EnvironmentalLight.cs
index b16311f7..3cb38343 100644
--- a/Assets/GoogleARCore/SDK/Scripts/EnvironmentalLight.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/EnvironmentalLight.cs
@@ -41,7 +41,7 @@ public class EnvironmentalLight : MonoBehaviour
///
public Light DirectionalLight;
- private long m_LightEstimateTimestamp = -1;
+ private long _lightEstimateTimestamp = -1;
///
/// Unity update method that sets global light estimation shader constant and
@@ -85,9 +85,9 @@ public void Update()
// Set _GlobalLightEstimation for backward compatibility.
Shader.SetGlobalFloat("_GlobalLightEstimation", normalizedIntensity);
}
- else if (m_LightEstimateTimestamp != estimate.Timestamp)
+ else if (_lightEstimateTimestamp != estimate.Timestamp)
{
- m_LightEstimateTimestamp = estimate.Timestamp;
+ _lightEstimateTimestamp = estimate.Timestamp;
if (DirectionalLight != null)
{
if (!DirectionalLight.gameObject.activeSelf || !DirectionalLight.enabled)
diff --git a/Assets/GoogleARCore/SDK/Scripts/ExperimentSupport/ExperimentManager.cs b/Assets/GoogleARCore/SDK/Scripts/ExperimentSupport/ExperimentManager.cs
index a08fc5bb..323f60f8 100644
--- a/Assets/GoogleARCore/SDK/Scripts/ExperimentSupport/ExperimentManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/ExperimentSupport/ExperimentManager.cs
@@ -27,14 +27,14 @@ namespace GoogleARCoreInternal
internal class ExperimentManager
{
- private static ExperimentManager s_Instance;
- private List m_Experiments;
+ private static ExperimentManager _instance;
+ private List _experiments;
public ExperimentManager()
{
// Experiments all derive from ExperimentBase to get hooks to the internal
// state. Find and hook them up.
- m_Experiments = new List();
+ _experiments = new List();
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
List allTypes = new List();
@@ -63,7 +63,7 @@ public ExperimentManager()
continue;
}
- m_Experiments.Add(Activator.CreateInstance(type) as ExperimentBase);
+ _experiments.Add(Activator.CreateInstance(type) as ExperimentBase);
}
}
@@ -71,12 +71,12 @@ public static ExperimentManager Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
- s_Instance = new ExperimentManager();
+ _instance = new ExperimentManager();
}
- return s_Instance;
+ return _instance;
}
}
@@ -88,7 +88,7 @@ public bool IsConfigurationDirty
{
bool result = false;
- foreach (var experiment in m_Experiments)
+ foreach (var experiment in _experiments)
{
result = result || experiment.IsConfigurationDirty();
}
@@ -99,21 +99,21 @@ public bool IsConfigurationDirty
public void Initialize()
{
- LifecycleManager.Instance.EarlyUpdate += s_Instance._OnEarlyUpdate;
+ LifecycleManager.Instance.EarlyUpdate += _instance.OnEarlyUpdate;
LifecycleManager.Instance.UpdateSessionFeatures +=
- s_Instance.OnUpdateSessionFeatures;
+ _instance.OnUpdateSessionFeatures;
LifecycleManager.Instance.OnSetConfiguration +=
- s_Instance._SetConfiguration;
+ _instance.SetConfiguration;
}
public bool IsManagingTrackableType(int trackableType)
{
- return _GetTrackableTypeManager(trackableType) != null;
+ return GetTrackableTypeManager(trackableType) != null;
}
public TrackableHitFlags GetTrackableHitFlags(int trackableType)
{
- ExperimentBase trackableManager = _GetTrackableTypeManager(trackableType);
+ ExperimentBase trackableManager = GetTrackableTypeManager(trackableType);
if (trackableManager != null)
{
return trackableManager.GetTrackableHitFlags(trackableType);
@@ -124,7 +124,7 @@ public TrackableHitFlags GetTrackableHitFlags(int trackableType)
public Trackable TrackableFactory(int trackableType, IntPtr trackableHandle)
{
- ExperimentBase trackableManager = _GetTrackableTypeManager(trackableType);
+ ExperimentBase trackableManager = GetTrackableTypeManager(trackableType);
if (trackableManager != null)
{
return trackableManager.TrackableFactory(trackableType, trackableHandle);
@@ -135,31 +135,31 @@ public Trackable TrackableFactory(int trackableType, IntPtr trackableHandle)
public void OnUpdateSessionFeatures()
{
- foreach (var experiment in m_Experiments)
+ foreach (var experiment in _experiments)
{
experiment.OnUpdateSessionFeatures();
}
}
- private void _OnEarlyUpdate()
+ private void OnEarlyUpdate()
{
- foreach (var experiment in m_Experiments)
+ foreach (var experiment in _experiments)
{
experiment.OnEarlyUpdate();
}
}
- private void _SetConfiguration(IntPtr sessionHandle, IntPtr configHandle)
+ private void SetConfiguration(IntPtr sessionHandle, IntPtr configHandle)
{
- foreach (var experiment in m_Experiments)
+ foreach (var experiment in _experiments)
{
experiment.OnSetConfiguration(sessionHandle, configHandle);
}
}
- private ExperimentBase _GetTrackableTypeManager(int trackableType)
+ private ExperimentBase GetTrackableTypeManager(int trackableType)
{
- foreach (var experiment in m_Experiments)
+ foreach (var experiment in _experiments)
{
if (experiment.IsManagingTrackableType(trackableType))
{
diff --git a/Assets/GoogleARCore/SDK/Scripts/FeaturePoint.cs b/Assets/GoogleARCore/SDK/Scripts/FeaturePoint.cs
index ec76331a..c6910c45 100644
--- a/Assets/GoogleARCore/SDK/Scripts/FeaturePoint.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/FeaturePoint.cs
@@ -21,8 +21,6 @@
namespace GoogleARCore
{
using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
using GoogleARCoreInternal;
using UnityEngine;
@@ -48,14 +46,14 @@ public Pose Pose
{
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"Pose:: Trying to access a session that has already been destroyed.");
return new Pose();
}
- return m_NativeSession.PointApi.GetPose(m_TrackableNativeHandle);
+ return _nativeSession.PointApi.GetPose(_trackableNativeHandle);
}
}
@@ -68,7 +66,7 @@ public FeaturePointOrientationMode OrientationMode
IsWarning = true, Reason = "Requires further investigation.")]
get
{
- if (_IsSessionDestroyed())
+ if (IsSessionDestroyed())
{
Debug.LogError(
"OrientationMode:: Trying to access a session that has already been " +
@@ -76,7 +74,7 @@ public FeaturePointOrientationMode OrientationMode
return FeaturePointOrientationMode.Identity;
}
- return m_NativeSession.PointApi.GetOrientationMode(m_TrackableNativeHandle);
+ return _nativeSession.PointApi.GetOrientationMode(_trackableNativeHandle);
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Frame.cs b/Assets/GoogleARCore/SDK/Scripts/Frame.cs
index bed2c5aa..885fb19a 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Frame.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Frame.cs
@@ -35,7 +35,7 @@ public class Frame
{
//// @cond EXCLUDE_FROM_DOXYGEN
- private static List s_TmpTrackableHitList = new List();
+ private static List _tmpTrackableHitList = new List();
//// @endcond
@@ -86,8 +86,8 @@ public static LightEstimate LightEstimate
/// Note that the Unity's screen coordinate (0, 0)
/// starts from bottom left.
///
- /// Horizontal touch position in Unity's screen coordiante.
- /// Vertical touch position in Unity's screen coordiante.
+ /// Horizontal touch position in Unity screen coordinates.
+ /// Vertical touch position in Unity screen coordinates.
/// A filter bitmask where each set bit in
///
/// represents a category of raycast hits the method call should consider valid.
@@ -107,11 +107,56 @@ public static bool Raycast(float x, float y, TrackableHitFlags filter,
// Note that the Unity's screen coordinate (0, 0) starts from bottom left.
bool foundHit = nativeSession.HitTestApi.Raycast(
- nativeSession.FrameHandle, x, Screen.height - y, filter, s_TmpTrackableHitList);
+ nativeSession.FrameHandle, x, Screen.height - y, filter, _tmpTrackableHitList);
- if (foundHit && s_TmpTrackableHitList.Count != 0)
+ if (foundHit && _tmpTrackableHitList.Count != 0)
{
- hitResult = s_TmpTrackableHitList[0];
+ hitResult = _tmpTrackableHitList[0];
+ }
+
+ return foundHit;
+ }
+
+ ///
+ /// Performs a ray cast that can return a result before ARCore establishes full tracking.
+ ///
+ /// The pose and apparent scale of attached objects depends on the tracking method and the provided
+ /// approximateDistanceMeters. A discussion of the different tracking methods and the
+ /// effects of apparent object scale are described in .
+ ///
+ /// This function will succeed only if is
+ /// InstantPlacementMode.LocalYUp in the ARCore session configuration, the ARCore
+ /// session status is .Tracking, and there are sufficent
+ /// feature points to track the point in screen space.
+ ///
+ ///
+ /// Horizontal touch position in Unity screen coordinates.
+ /// Vertical touch position in Unity screen coordinates.
+ /// The distance at which to create an . This is only used while the tracking method for the
+ /// returned point is
+ /// InstantPlacementPointTrackingMethod.ScreenspaceWithApproximateDistance.
+ /// If successful a with a trackable of type
+ /// .
+ /// true if successful, otherwise false.
+ [SuppressMemoryAllocationError(IsWarning = true, Reason = "List could be resized")]
+ public static bool RaycastInstantPlacement(float x, float y,
+ float approximateDistanceMeters, out TrackableHit hitResult)
+ {
+ hitResult = new TrackableHit();
+ var nativeSession = LifecycleManager.Instance.NativeSession;
+ if (nativeSession == null)
+ {
+ return false;
+ }
+
+ // Note that the Unity's screen coordinate (0, 0) starts from bottom left.
+ bool foundHit = nativeSession.HitTestApi.Raycast(nativeSession.FrameHandle,
+ x, Screen.height - y, approximateDistanceMeters, _tmpTrackableHitList);
+ if (foundHit && _tmpTrackableHitList.Count != 0)
+ {
+ hitResult = _tmpTrackableHitList[0];
}
return foundHit;
@@ -146,11 +191,11 @@ public static bool Raycast(
bool foundHit =
nativeSession.HitTestApi.Raycast(
nativeSession.FrameHandle, origin, direction, maxDistance, filter,
- s_TmpTrackableHitList);
+ _tmpTrackableHitList);
- if (foundHit && s_TmpTrackableHitList.Count != 0)
+ if (foundHit && _tmpTrackableHitList.Count != 0)
{
- hitResult = s_TmpTrackableHitList[0];
+ hitResult = _tmpTrackableHitList[0];
}
return foundHit;
@@ -162,8 +207,8 @@ public static bool Raycast(
/// Note that the Unity's screen coordinate (0, 0)
/// starts from bottom left.
///
- /// Horizontal touch position in Unity's screen coordiante.
- /// Vertical touch position in Unity's screen coordiante.
+ /// Horizontal touch position in Unity screen coordinates.
+ /// Vertical touch position in Unity screen coordinates.
/// A filter bitmask where each set bit in
///
/// represents a category of raycast hits the method call should consider valid.
@@ -350,7 +395,7 @@ public static Vector4 GetPoint(int index)
///
/// Gets a point from the point cloud at the given index. If the point is inaccessible
/// due to session state or an out-of-range index a point will be returns with the
- /// Id field set to PointCloudPoint.k_InvalidPointId.
+ /// Id field set to PointCloudPoint._invalidPointId.
///
/// The index of the point cloud point to get.
/// The point from the point cloud at index.
diff --git a/Assets/GoogleARCore/SDK/Scripts/IAndroidPermissionsCheck.cs b/Assets/GoogleARCore/SDK/Scripts/IAndroidPermissionsCheck.cs
index b6f71a5f..af3ecbb6 100644
--- a/Assets/GoogleARCore/SDK/Scripts/IAndroidPermissionsCheck.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/IAndroidPermissionsCheck.cs
@@ -1,6 +1,20 @@
//-----------------------------------------------------------------------
//
+//
// Copyright 2019 Google LLC. 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.
+//
//
//-----------------------------------------------------------------------
diff --git a/Assets/GoogleARCore/SDK/Scripts/InstantPlacementMode.cs b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementMode.cs
new file mode 100644
index 00000000..1eaf8cdb
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementMode.cs
@@ -0,0 +1,60 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2019 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+ ///
+ /// Indicates whether Instant Placement is enabled or disabled.
+ /// The default value is .Disabled.
+ ///
+ public enum InstantPlacementMode
+ {
+ ///
+ /// Instant Placement mode is disabled.
+ ///
+ Disabled = 0,
+
+ ///
+ /// Enable Instant Placement. If the hit test is successful,
+ /// it will return a single with the +Y pointing upward,
+ /// against gravity. Otherwise, returns an empty result set.
+ ///
+ /// This mode is currently intended to be used with hit tests against
+ /// horizontal surfaces.
+ ///
+ /// Hit tests may also be performed against surfaces with any orientation, however:
+ ///
+ /// - The resulting Instant Placement point will always have a pose
+ /// with +Y pointing upward, against gravity.
+ /// - No guarantees are made with respect to orientation of +X and +Z.
+ /// Specifically, a hit test against a vertical surface, such as a wall,
+ /// will not result in a pose that's in any way aligned to the plane of the
+ /// wall, other than +Y being up, against gravity.
+ /// - The 's tracking method may never become
+ /// .FullTracking or may take
+ /// a long time to reach this state.The tracking method remains
+ /// .
+ /// ScreenspaceWithApproximateDistance
+ /// until a (tiny) horizontal plane is fitted at the point of the hit test.
+ ///
+ ///
+ LocalYUp = 2,
+ }
+}
diff --git a/Assets/GoogleARCore/SDK/Scripts/InstantPlacementMode.cs.meta b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementMode.cs.meta
new file mode 100644
index 00000000..ff06cf66
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementMode.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5f980907d3efc415bac7c0129138db83
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPoint.cs b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPoint.cs
new file mode 100644
index 00000000..f33c5b9b
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPoint.cs
@@ -0,0 +1,115 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2020 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+ using System;
+ using GoogleARCoreInternal;
+ using UnityEngine;
+
+ ///
+ /// Trackable Instant Placement point returned by .
+ ///
+ /// If ARCore has an accurate 3D pose for the returned by
+ /// it will start
+ /// with tracking method .FullTracking.
+ /// Otherwise, it will start with tracking method
+ /// InstantPlacementPointTrackingMethod.ScreenspaceWithApproximateDistance, and will
+ /// transition to .FullTracking once
+ /// ARCore has an accurate 3D pose. Once the tracking method is
+ /// .FullTracking it will not revert to
+ /// InstantPlacementPointTrackingMethod.ScreenspaceWithApproximateDistance.
+ ///
+ /// When the tracking method changes from
+ /// InstantPlacementPointTrackingMethod.ScreenspaceWithApproximateDistance in one frame
+ /// to .FullTracking in the next frame,
+ /// the pose will jump from its initial location based on the provided approximate distance to a
+ /// new location at an accurate distance.
+ ///
+ /// This instantaneous change in pose will change the apparent scale of any objects that are
+ /// anchored to the . That is, an object will suddenly appear
+ /// larger or smaller than it was in the previous frame.
+ ///
+ /// To avoid the visual jump due to the sudden change in apparent object scale, use the
+ /// following procedure:
+ /// 1. Keep track of the pose and tracking method of the in
+ /// each frame.
+ /// 2. Wait for the tracking method to change to
+ /// .FullTracking.
+ /// 3. Use the pose from the previous frame and the pose in the current frame to determine the
+ /// object's distance to the device in both frames.
+ /// 4. Calculate the apparent change in scale due to the change in distance from the camera.
+ /// 5. Adjust the scale of the object to counteract the perceived change in scale, so that
+ /// visually the object does not appear to change in size.
+ /// 6. Optionally, smoothly adjust the scale of the object back to its original value over
+ /// several frames.
+ ///
+ public class InstantPlacementPoint : Trackable
+ {
+ ///
+ /// Construct an InstantPlacementPoint from a native handle.
+ ///
+ /// A handle to the native ARCore API Trackable.
+ /// The ARCore native api.
+ internal InstantPlacementPoint(IntPtr nativeHandle, NativeSession nativeApi) :
+ base(nativeHandle, nativeApi)
+ {
+ }
+
+ ///
+ /// Gets the pose of the InstantPlacementPoint.
+ ///
+ public Pose Pose
+ {
+ get
+ {
+ if (IsSessionDestroyed())
+ {
+ Debug.LogError(
+ "Pose:: Trying to access a session that has already been destroyed.");
+ return new Pose();
+ }
+
+ return _nativeSession.PointApi.GetInstantPlacementPointPose(_trackableNativeHandle);
+ }
+ }
+
+ ///
+ /// Gets the tracking method of the InstantPlacementPoint.
+ ///
+ public InstantPlacementPointTrackingMethod TrackingMethod
+ {
+ get
+ {
+ if (IsSessionDestroyed())
+ {
+ Debug.LogError(
+ "InstantPlacementPointTrackingMethod:: " +
+ "Trying to access a session that has already been destroyed.");
+ return InstantPlacementPointTrackingMethod.NotTracking;
+ }
+
+ return _nativeSession.PointApi.GetInstantPlacementPointTrackingMethod(
+ _trackableNativeHandle);
+ }
+ }
+ }
+}
diff --git a/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPoint.cs.meta b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPoint.cs.meta
new file mode 100644
index 00000000..2d37ec5b
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPoint.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9b92f5835aacd40879a977a443888aa1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPointTrackingMethod.cs b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPointTrackingMethod.cs
new file mode 100644
index 00000000..07e76dba
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPointTrackingMethod.cs
@@ -0,0 +1,49 @@
+//-----------------------------------------------------------------------
+//
+//
+// Copyright 2020 Google LLC. 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.
+//
+//
+//-----------------------------------------------------------------------
+
+namespace GoogleARCore
+{
+ ///
+ /// Tracking methods for .
+ ///
+ public enum InstantPlacementPointTrackingMethod
+ {
+ ///
+ /// The is not currently being tracked. The is .Paused or .Stopped.
+ ///
+ NotTracking = 0x00,
+
+ ///
+ /// The is currently being tracked in screen space and
+ /// the pose returned by .Pose is being estimated
+ /// using the approximate distance provided to .
+ ///
+ ScreenspaceWithApproximateDistance = 0x01,
+
+ ///
+ /// The is being tracked normally and .Pose is fully determined by ARCore.
+ ///
+ FullTracking = 0x02,
+ }
+}
diff --git a/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPointTrackingMethod.cs.meta b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPointTrackingMethod.cs.meta
new file mode 100644
index 00000000..457e2889
--- /dev/null
+++ b/Assets/GoogleARCore/SDK/Scripts/InstantPlacementPointTrackingMethod.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3427063d7c0334106a8cec5dbe0bbd69
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/GoogleARCore/SDK/Scripts/LightEstimate.cs b/Assets/GoogleARCore/SDK/Scripts/LightEstimate.cs
index ff0b0ea6..1ff7ef1b 100644
--- a/Assets/GoogleARCore/SDK/Scripts/LightEstimate.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/LightEstimate.cs
@@ -30,13 +30,13 @@ namespace GoogleARCore
///
public struct LightEstimate
{
- private float m_PixelIntensity;
- private Color m_ColorCorrection;
+ private float _pixelIntensity;
+ private Color _colorCorrection;
- private Quaternion m_DirectionalLightRotation;
- private Color m_DirectionalLightColor;
- private SphericalHarmonicsL2 m_AmbientProbe;
- private Cubemap m_CachedCubemap;
+ private Quaternion _directionalLightRotation;
+ private Color _directionalLightColor;
+ private SphericalHarmonicsL2 _ambientProbe;
+ private Cubemap _cachedCubemap;
///
/// Constructor for a LightEstimate.
@@ -84,20 +84,20 @@ public LightEstimate(
Quaternion directionalLightRotation, Color directionalLightColor,
float[,] ambientSHCoefficients, long timestamp) : this()
{
- _InitializeLightEstimateMode();
+ InitializeLightEstimateMode();
State = state;
Timestamp = timestamp;
- m_PixelIntensity = pixelIntensity;
- m_ColorCorrection = colorCorrection;
+ _pixelIntensity = pixelIntensity;
+ _colorCorrection = colorCorrection;
- m_DirectionalLightRotation = directionalLightRotation;
+ _directionalLightRotation = directionalLightRotation;
// Apply the energy conservation term to the light color directly since Unity doesn't
// apply the term in their standard shader.
- m_DirectionalLightColor = directionalLightColor;
+ _directionalLightColor = directionalLightColor;
// Apply gamma correction to the light color. Unity light color is in gamma space.
- m_DirectionalLightColor = m_DirectionalLightColor.gamma;
+ _directionalLightColor = _directionalLightColor.gamma;
// Unity spherical harmonics is in linear space.
var ambientProbe = new SphericalHarmonicsL2();
@@ -112,8 +112,8 @@ public LightEstimate(
}
}
- m_AmbientProbe = ambientProbe;
- m_CachedCubemap = null;
+ _ambientProbe = ambientProbe;
+ _cachedCubemap = null;
}
///
@@ -141,12 +141,12 @@ public float PixelIntensity
"LightEstimationMode is not AmbientIntensity.");
}
- return m_PixelIntensity;
+ return _pixelIntensity;
}
private set
{
- m_PixelIntensity = value;
+ _pixelIntensity = value;
}
}
@@ -167,12 +167,12 @@ public Color ColorCorrection
"LightEstimationMode is not AmbientIntensity.");
}
- return m_ColorCorrection;
+ return _colorCorrection;
}
private set
{
- m_ColorCorrection = value;
+ _colorCorrection = value;
}
}
@@ -192,12 +192,12 @@ public Quaternion DirectionalLightRotation
"LightEstimationMode is not one of the Environmental HDR modes.");
}
- return m_DirectionalLightRotation;
+ return _directionalLightRotation;
}
private set
{
- m_DirectionalLightRotation = value;
+ _directionalLightRotation = value;
}
}
@@ -217,12 +217,12 @@ public Color DirectionalLightColor
"LightEstimationMode is not one of the Environmental HDR modes.");
}
- return m_DirectionalLightColor;
+ return _directionalLightColor;
}
private set
{
- m_DirectionalLightColor = value;
+ _directionalLightColor = value;
}
}
@@ -242,12 +242,12 @@ public SphericalHarmonicsL2 AmbientProbe
"LightEstimationMode is not one of the Environmental HDR modes.");
}
- return m_AmbientProbe;
+ return _ambientProbe;
}
private set
{
- m_AmbientProbe = value;
+ _ambientProbe = value;
}
}
@@ -270,7 +270,7 @@ public Cubemap ReflectionProbe
return null;
}
- if (m_CachedCubemap == null)
+ if (_cachedCubemap == null)
{
var nativeSession = LifecycleManager.Instance.NativeSession;
if (nativeSession == null)
@@ -278,10 +278,10 @@ public Cubemap ReflectionProbe
return null;
}
- m_CachedCubemap = nativeSession.FrameApi.GetReflectionCubemap();
+ _cachedCubemap = nativeSession.FrameApi.GetReflectionCubemap();
}
- return m_CachedCubemap;
+ return _cachedCubemap;
}
}
@@ -294,7 +294,7 @@ public Cubemap ReflectionProbe
/// The timestamp of the LightEstimate.
public long Timestamp { get; private set; }
- private void _InitializeLightEstimateMode()
+ private void InitializeLightEstimateMode()
{
Mode = LightEstimationMode.Disabled;
if (LifecycleManager.Instance.SessionComponent != null)
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreAndroidLifecycleManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreAndroidLifecycleManager.cs
index aeb3b8e2..73401c8a 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreAndroidLifecycleManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreAndroidLifecycleManager.cs
@@ -37,42 +37,42 @@ namespace GoogleARCoreInternal
internal class ARCoreAndroidLifecycleManager : ILifecycleManager
{
- private const int k_MTNumTextureIds = 4;
+ private const int _mtNumTextureIds = 4;
- private static ARCoreAndroidLifecycleManager s_Instance = null;
+ private static ARCoreAndroidLifecycleManager _instance = null;
- private IntPtr m_CachedSessionHandle = IntPtr.Zero;
+ private IntPtr _cachedSessionHandle = IntPtr.Zero;
- private IntPtr m_CachedFrameHandle = IntPtr.Zero;
+ private IntPtr _cachedFrameHandle = IntPtr.Zero;
- private Dictionary m_NativeSessions =
+ private Dictionary _nativeSessions =
new Dictionary(new IntPtrEqualityComparer());
- private DeviceCameraDirection? m_CachedCameraDirection = null;
+ private DeviceCameraDirection? _cachedCameraDirection = null;
- private ARCoreSessionConfig m_CachedConfig = null;
+ private ARCoreSessionConfig _cachedConfig = null;
- private ScreenOrientation? m_CachedScreenOrientation = null;
+ private ScreenOrientation? _cachedScreenOrientation = null;
- private bool? m_DesiredSessionState = null;
+ private bool? _desiredSessionState = null;
- private bool m_DisabledSessionOnErrorState = false;
+ private bool _disabledSessionOnErrorState = false;
// Only care about disable to enable transition here (ignore enable to disable transition)
- // because it will triggier _OnBeforeResumeSession which links to a public API
+ // because it will triggier OnBeforeResumeSession which links to a public API
// RegisterChooseCameraConfigurationCallback.
- private bool m_HaveDisableToEnableTransition = false;
+ private bool _haveDisableToEnableTransition = false;
- private AndroidNativeHelper.AndroidSurfaceRotation m_CachedDisplayRotation =
+ private AndroidNativeHelper.AndroidSurfaceRotation _cachedDisplayRotation =
AndroidNativeHelper.AndroidSurfaceRotation.Rotation0;
- private List m_TempCameraConfigHandles = new List();
+ private List _tempCameraConfigHandles = new List();
- private List m_TempCameraConfigs = new List();
+ private List _tempCameraConfigs = new List();
// List of OpenGL ES texture IDs for camera generated during OnEarlyUpdate
- private int[] m_CameraTextureIds = null;
- private Dictionary m_TextureIdToTexture2D =
+ private int[] _cameraTextureIds = null;
+ private Dictionary _textureIdToTexture2D =
new Dictionary();
public event Action UpdateSessionFeatures;
@@ -89,20 +89,20 @@ public static ARCoreAndroidLifecycleManager Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
- s_Instance = new ARCoreAndroidLifecycleManager();
- s_Instance._Initialize();
- ARPrestoCallbackManager.Instance.EarlyUpdate += s_Instance._OnEarlyUpdate;
+ _instance = new ARCoreAndroidLifecycleManager();
+ _instance.Initialize();
+ ARPrestoCallbackManager.Instance.EarlyUpdate += _instance.OnEarlyUpdate;
ARPrestoCallbackManager.Instance.BeforeResumeSession +=
- s_Instance._OnBeforeResumeSession;
+ _instance.OnBeforeResumeSession;
ARPrestoCallbackManager.Instance.OnSetConfiguration +=
- s_Instance._SetSessionConfiguration;
+ _instance.SetSessionConfiguration;
ExperimentManager.Instance.Initialize();
}
- return s_Instance;
+ return _instance;
}
}
@@ -116,12 +116,12 @@ public NativeSession NativeSession
{
get
{
- if (m_CachedSessionHandle == IntPtr.Zero)
+ if (_cachedSessionHandle == IntPtr.Zero)
{
return null;
}
- return _GetNativeSession(m_CachedSessionHandle);
+ return GetNativeSession(_cachedSessionHandle);
}
}
@@ -156,23 +156,23 @@ public void CreateSession(ARCoreSession sessionComponent)
public void EnableSession()
{
- if (m_DesiredSessionState.HasValue && !m_DesiredSessionState.Value)
+ if (_desiredSessionState.HasValue && !_desiredSessionState.Value)
{
- m_HaveDisableToEnableTransition = true;
+ _haveDisableToEnableTransition = true;
}
- m_DesiredSessionState = true;
+ _desiredSessionState = true;
}
public void DisableSession()
{
- m_DesiredSessionState = false;
+ _desiredSessionState = false;
}
public void ResetSession()
{
- _FireOnSessionSetEnabled(false);
- _Initialize();
+ FireOnSessionSetEnabled(false);
+ Initialize();
ExternApi.ArPresto_reset();
}
@@ -181,30 +181,30 @@ public void ResetSession()
///
internal static void ResetInstance()
{
- if (s_Instance != null && s_Instance.OnResetInstance != null)
+ if (_instance != null && _instance.OnResetInstance != null)
{
- s_Instance.OnResetInstance();
+ _instance.OnResetInstance();
}
- s_Instance = null;
+ _instance = null;
}
- private void _OnBeforeResumeSession(IntPtr sessionHandle)
+ private void OnBeforeResumeSession(IntPtr sessionHandle)
{
if (SessionComponent == null || sessionHandle == IntPtr.Zero)
{
return;
}
- NativeSession tempNativeSession = _GetNativeSession(sessionHandle);
+ NativeSession tempNativeSession = GetNativeSession(sessionHandle);
var listHandle = tempNativeSession.CameraConfigListApi.Create();
tempNativeSession.SessionApi.GetSupportedCameraConfigurationsWithFilter(
SessionComponent.CameraConfigFilter,
- listHandle, m_TempCameraConfigHandles, m_TempCameraConfigs,
+ listHandle, _tempCameraConfigHandles, _tempCameraConfigs,
SessionComponent.DeviceCameraDirection);
- if (m_TempCameraConfigHandles.Count == 0)
+ if (_tempCameraConfigHandles.Count == 0)
{
Debug.LogWarning(
"Unable to choose a custom camera configuration because none are available.");
@@ -215,13 +215,13 @@ private void _OnBeforeResumeSession(IntPtr sessionHandle)
if (SessionComponent.GetChooseCameraConfigurationCallback() != null)
{
configIndex = SessionComponent.GetChooseCameraConfigurationCallback()(
- m_TempCameraConfigs);
+ _tempCameraConfigs);
}
- if (configIndex >= 0 && configIndex < m_TempCameraConfigHandles.Count)
+ if (configIndex >= 0 && configIndex < _tempCameraConfigHandles.Count)
{
var status = tempNativeSession.SessionApi.SetCameraConfig(
- m_TempCameraConfigHandles[configIndex]);
+ _tempCameraConfigHandles[configIndex]);
if (status != ApiArStatus.Success)
{
Debug.LogErrorFormat(
@@ -229,41 +229,41 @@ private void _OnBeforeResumeSession(IntPtr sessionHandle)
}
}
- for (int i = 0; i < m_TempCameraConfigHandles.Count; i++)
+ for (int i = 0; i < _tempCameraConfigHandles.Count; i++)
{
- tempNativeSession.CameraConfigApi.Destroy(m_TempCameraConfigHandles[i]);
+ tempNativeSession.CameraConfigApi.Destroy(_tempCameraConfigHandles[i]);
}
}
// clean up
tempNativeSession.CameraConfigListApi.Destroy(listHandle);
- m_TempCameraConfigHandles.Clear();
- m_TempCameraConfigs.Clear();
+ _tempCameraConfigHandles.Clear();
+ _tempCameraConfigs.Clear();
}
- private void _OnEarlyUpdate()
+ private void OnEarlyUpdate()
{
- _SetCameraTextureName();
+ SetCameraTextureName();
// Update session activity before EarlyUpdate.
- if (m_HaveDisableToEnableTransition)
+ if (_haveDisableToEnableTransition)
{
- _SetSessionEnabled(false);
- _SetSessionEnabled(true);
- m_HaveDisableToEnableTransition = false;
+ SetSessionEnabled(false);
+ SetSessionEnabled(true);
+ _haveDisableToEnableTransition = false;
// Avoid firing session enable event twice.
- if (m_DesiredSessionState.HasValue && m_DesiredSessionState.Value)
+ if (_desiredSessionState.HasValue && _desiredSessionState.Value)
{
- m_DesiredSessionState = null;
+ _desiredSessionState = null;
}
}
- if (m_DesiredSessionState.HasValue)
+ if (_desiredSessionState.HasValue)
{
- _SetSessionEnabled(m_DesiredSessionState.Value);
- m_DesiredSessionState = null;
+ SetSessionEnabled(_desiredSessionState.Value);
+ _desiredSessionState = null;
}
// Perform updates before calling ArPresto_update.
@@ -277,7 +277,7 @@ private void _OnEarlyUpdate()
UpdateSessionFeatures();
}
- _SetCameraDirection(SessionComponent.DeviceCameraDirection);
+ SetCameraDirection(SessionComponent.DeviceCameraDirection);
IntPtr currentSession = IntPtr.Zero;
ExternApi.ArPresto_getSession(ref currentSession);
@@ -286,8 +286,8 @@ private void _OnEarlyUpdate()
// due to session feature update(camera direction etc).
if (previousSession != currentSession)
{
- _FireOnSessionSetEnabled(false);
- _FireOnSessionSetEnabled(true);
+ FireOnSessionSetEnabled(false);
+ FireOnSessionSetEnabled(true);
}
// Validate and convert the SessionConfig to a Instant Preview supported config by
@@ -303,10 +303,10 @@ private void _OnEarlyUpdate()
SessionComponent.SessionConfig);
}
- _UpdateConfiguration(SessionComponent.SessionConfig);
+ UpdateConfiguration(SessionComponent.SessionConfig);
}
- _UpdateDisplayGeometry();
+ UpdateDisplayGeometry();
// Update ArPresto and potentially ArCore.
ExternApi.ArPresto_update();
@@ -336,34 +336,34 @@ private void _OnEarlyUpdate()
previousSessionStatus.IsError() != SessionStatus.IsError())
{
// Disable internal session bits so we properly pause the session due to error.
- _FireOnSessionSetEnabled(false);
- m_DisabledSessionOnErrorState = true;
+ FireOnSessionSetEnabled(false);
+ _disabledSessionOnErrorState = true;
}
- else if (SessionStatus.IsValid() && m_DisabledSessionOnErrorState)
+ else if (SessionStatus.IsValid() && _disabledSessionOnErrorState)
{
if (SessionComponent.enabled)
{
- _FireOnSessionSetEnabled(true);
+ FireOnSessionSetEnabled(true);
}
- m_DisabledSessionOnErrorState = false;
+ _disabledSessionOnErrorState = false;
}
// Get the current session from presto and note if it has changed.
IntPtr sessionHandle = IntPtr.Zero;
ExternApi.ArPresto_getSession(ref sessionHandle);
- IsSessionChangedThisFrame = m_CachedSessionHandle != sessionHandle;
- m_CachedSessionHandle = sessionHandle;
+ IsSessionChangedThisFrame = _cachedSessionHandle != sessionHandle;
+ _cachedSessionHandle = sessionHandle;
- ExternApi.ArPresto_getFrame(ref m_CachedFrameHandle);
+ ExternApi.ArPresto_getFrame(ref _cachedFrameHandle);
// Update the native session with the newest frame.
if (NativeSession != null)
{
- NativeSession.OnUpdate(m_CachedFrameHandle);
+ NativeSession.OnUpdate(_cachedFrameHandle);
}
- _UpdateTextureIfNeeded();
+ UpdateTextureIfNeeded();
if (EarlyUpdate != null)
{
@@ -371,7 +371,7 @@ private void _OnEarlyUpdate()
}
}
- private void _SetCameraTextureName()
+ private void SetCameraTextureName()
{
if (InstantPreviewManager.IsProvidingPlatform)
{
@@ -379,48 +379,48 @@ private void _SetCameraTextureName()
}
// Generate texture IDs if necessary
- if (m_CameraTextureIds == null)
+ if (_cameraTextureIds == null)
{
- int textureNum = SystemInfo.graphicsMultiThreaded ? k_MTNumTextureIds : 1;
+ int textureNum = SystemInfo.graphicsMultiThreaded ? _mtNumTextureIds : 1;
Debug.LogFormat("Using {0} textures for ARCore session", textureNum);
- m_CameraTextureIds = new int[textureNum];
- OpenGL.glGenTextures(m_CameraTextureIds.Length, m_CameraTextureIds);
+ _cameraTextureIds = new int[textureNum];
+ OpenGL.glGenTextures(_cameraTextureIds.Length, _cameraTextureIds);
int error = OpenGL.glGetError();
if (error != 0)
{
Debug.LogErrorFormat("OpenGL glGenTextures error: {0}", error);
}
- foreach (int textureId in m_CameraTextureIds)
+ foreach (int textureId in _cameraTextureIds)
{
OpenGL.glBindTexture(OpenGL.Target.GL_TEXTURE_EXTERNAL_OES,
textureId);
Texture2D texture2d = Texture2D.CreateExternalTexture(
0, 0, TextureFormat.ARGB32, false, false, new IntPtr(textureId));
- m_TextureIdToTexture2D[textureId] = texture2d;
+ _textureIdToTexture2D[textureId] = texture2d;
}
ExternApi.ArPresto_setCameraTextureNames(
- m_CameraTextureIds.Length, m_CameraTextureIds);
+ _cameraTextureIds.Length, _cameraTextureIds);
}
}
- private void _Initialize()
+ private void Initialize()
{
- if (m_NativeSessions != null)
+ if (_nativeSessions != null)
{
- foreach (var nativeSession in m_NativeSessions.Values)
+ foreach (var nativeSession in _nativeSessions.Values)
{
nativeSession.MarkDestroyed();
}
}
- m_NativeSessions = new Dictionary(new IntPtrEqualityComparer());
- m_CachedSessionHandle = IntPtr.Zero;
- m_CachedFrameHandle = IntPtr.Zero;
- m_CachedConfig = null;
- m_DesiredSessionState = null;
- m_HaveDisableToEnableTransition = false;
+ _nativeSessions = new Dictionary(new IntPtrEqualityComparer());
+ _cachedSessionHandle = IntPtr.Zero;
+ _cachedFrameHandle = IntPtr.Zero;
+ _cachedConfig = null;
+ _desiredSessionState = null;
+ _haveDisableToEnableTransition = false;
BackgroundTexture = null;
SessionComponent = null;
IsSessionChangedThisFrame = true;
@@ -428,7 +428,7 @@ private void _Initialize()
LostTrackingReason = LostTrackingReason.None;
}
- private void _UpdateTextureIfNeeded()
+ private void UpdateTextureIfNeeded()
{
// If running in editor, updates background texture from Instant Preview only.
Texture2D previewBackgroundTexture = BackgroundTexture;
@@ -448,13 +448,13 @@ private void _UpdateTextureIfNeeded()
int backgroundTextureId = NativeSession.FrameApi.GetCameraTextureName();
Texture2D texture2d = null;
- if (m_TextureIdToTexture2D.TryGetValue(backgroundTextureId, out texture2d))
+ if (_textureIdToTexture2D.TryGetValue(backgroundTextureId, out texture2d))
{
BackgroundTexture = texture2d;
}
}
- private void _SetSessionEnabled(bool sessionEnabled)
+ private void SetSessionEnabled(bool sessionEnabled)
{
if (sessionEnabled && SessionComponent == null)
{
@@ -466,17 +466,17 @@ private void _SetSessionEnabled(bool sessionEnabled)
// valid.
if (!SessionStatus.IsError())
{
- _FireOnSessionSetEnabled(sessionEnabled);
+ FireOnSessionSetEnabled(sessionEnabled);
}
ExternApi.ArPresto_setEnabled(sessionEnabled);
}
- private bool _SetCameraDirection(DeviceCameraDirection cameraDirection)
+ private bool SetCameraDirection(DeviceCameraDirection cameraDirection)
{
// The camera direction has not changed.
- if (m_CachedCameraDirection.HasValue &&
- m_CachedCameraDirection.Value == cameraDirection)
+ if (_cachedCameraDirection.HasValue &&
+ _cachedCameraDirection.Value == cameraDirection)
{
return false;
}
@@ -490,7 +490,7 @@ private bool _SetCameraDirection(DeviceCameraDirection cameraDirection)
{
InstantPreviewManager.LogLimitedSupportMessage(
"enable front-facing (selfie) camera");
- m_CachedCameraDirection = DeviceCameraDirection.BackFacing;
+ _cachedCameraDirection = DeviceCameraDirection.BackFacing;
if (SessionComponent != null)
{
SessionComponent.DeviceCameraDirection = DeviceCameraDirection.BackFacing;
@@ -499,7 +499,7 @@ private bool _SetCameraDirection(DeviceCameraDirection cameraDirection)
return false;
}
- m_CachedCameraDirection = cameraDirection;
+ _cachedCameraDirection = cameraDirection;
var apiCameraDirection =
cameraDirection == DeviceCameraDirection.BackFacing ?
ApiPrestoDeviceCameraDirection.BackFacing :
@@ -510,7 +510,7 @@ private bool _SetCameraDirection(DeviceCameraDirection cameraDirection)
return true;
}
- private void _SetSessionConfiguration(IntPtr sessionHandle, IntPtr configHandle)
+ private void SetSessionConfiguration(IntPtr sessionHandle, IntPtr configHandle)
{
if (configHandle == IntPtr.Zero)
{
@@ -525,18 +525,18 @@ private void _SetSessionConfiguration(IntPtr sessionHandle, IntPtr configHandle)
}
// Disable depth if the device doesn't support it.
- if (m_CachedConfig.DepthMode != DepthMode.Disabled)
+ if (_cachedConfig.DepthMode != DepthMode.Disabled)
{
- NativeSession tempNativeSession = _GetNativeSession(sessionHandle);
+ NativeSession tempNativeSession = GetNativeSession(sessionHandle);
if (!tempNativeSession.SessionApi.IsDepthModeSupported(
- m_CachedConfig.DepthMode.ToApiDepthMode()))
+ _cachedConfig.DepthMode.ToApiDepthMode()))
{
- m_CachedConfig.DepthMode = DepthMode.Disabled;
+ _cachedConfig.DepthMode = DepthMode.Disabled;
}
}
SessionConfigApi.UpdateApiConfigWithARCoreSessionConfig(
- sessionHandle, configHandle, m_CachedConfig);
+ sessionHandle, configHandle, _cachedConfig);
if (OnSetConfiguration != null)
{
@@ -544,7 +544,7 @@ private void _SetSessionConfiguration(IntPtr sessionHandle, IntPtr configHandle)
}
}
- private void _UpdateConfiguration(ARCoreSessionConfig config)
+ private void UpdateConfiguration(ARCoreSessionConfig config)
{
// There is no configuration to set.
if (config == null)
@@ -553,45 +553,45 @@ private void _UpdateConfiguration(ARCoreSessionConfig config)
}
// The configuration has not been updated.
- if (m_CachedConfig != null && config.Equals(m_CachedConfig) &&
+ if (_cachedConfig != null && config.Equals(_cachedConfig) &&
(config.AugmentedImageDatabase == null ||
- !config.AugmentedImageDatabase.IsDirty) &&
+ !config.AugmentedImageDatabase._isDirty) &&
!ExperimentManager.Instance.IsConfigurationDirty)
{
return;
}
- m_CachedConfig = ScriptableObject.CreateInstance();
- m_CachedConfig.CopyFrom(config);
+ _cachedConfig = ScriptableObject.CreateInstance();
+ _cachedConfig.CopyFrom(config);
ExternApi.ArPresto_setConfigurationDirty();
}
- private void _UpdateDisplayGeometry()
+ private void UpdateDisplayGeometry()
{
- if (!m_CachedScreenOrientation.HasValue ||
- Screen.orientation != m_CachedScreenOrientation)
+ if (!_cachedScreenOrientation.HasValue ||
+ Screen.orientation != _cachedScreenOrientation)
{
- m_CachedScreenOrientation = Screen.orientation;
- m_CachedDisplayRotation = AndroidNativeHelper.GetDisplayRotation();
+ _cachedScreenOrientation = Screen.orientation;
+ _cachedDisplayRotation = AndroidNativeHelper.GetDisplayRotation();
}
ExternApi.ArPresto_setDisplayGeometry(
- m_CachedDisplayRotation, Screen.width, Screen.height);
+ _cachedDisplayRotation, Screen.width, Screen.height);
}
- private NativeSession _GetNativeSession(IntPtr sessionHandle)
+ private NativeSession GetNativeSession(IntPtr sessionHandle)
{
NativeSession nativeSession;
- if (!m_NativeSessions.TryGetValue(sessionHandle, out nativeSession))
+ if (!_nativeSessions.TryGetValue(sessionHandle, out nativeSession))
{
- nativeSession = new NativeSession(sessionHandle, m_CachedFrameHandle);
- m_NativeSessions.Add(sessionHandle, nativeSession);
+ nativeSession = new NativeSession(sessionHandle, _cachedFrameHandle);
+ _nativeSessions.Add(sessionHandle, nativeSession);
}
return nativeSession;
}
- private void _FireOnSessionSetEnabled(bool isEnabled)
+ private void FireOnSessionSetEnabled(bool isEnabled)
{
if (OnSessionSetEnabled != null)
{
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreIOSLifecycleManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreIOSLifecycleManager.cs
index 65bf3351..258c31a8 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreIOSLifecycleManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/ARCoreIOSLifecycleManager.cs
@@ -17,12 +17,10 @@
//
//
//-----------------------------------------------------------------------
-
+#if UNITY_IOS
namespace GoogleARCoreInternal
{
using System;
- using System.Collections.Generic;
- using System.Reflection;
using System.Runtime.InteropServices;
using GoogleARCore;
using GoogleARCoreInternal.CrossPlatform;
@@ -30,50 +28,50 @@ namespace GoogleARCoreInternal
internal class ARCoreIOSLifecycleManager : ILifecycleManager
{
- private const string k_CloudServicesApiKeyPath = "RuntimeSettings/CloudServicesApiKey";
+ private static ARCoreIOSLifecycleManager _instance;
+#if ARCORE_IOS_SUPPORT
- private static ARCoreIOSLifecycleManager s_Instance;
+ internal static IARCoreiOSHelper _arCoreiOSHelper = null;
- private IntPtr m_SessionHandle = IntPtr.Zero;
+ private IntPtr _sessionHandle = IntPtr.Zero;
- private IntPtr m_FrameHandle = IntPtr.Zero;
+ private IntPtr _frameHandle = IntPtr.Zero;
- // Avoid warnings for fields that are unused on Android platform.
-#pragma warning disable 67, 414
- private string m_CloudServicesApiKey;
+ private bool _sessionEnabled = false;
- private bool m_SessionEnabled = false;
+ private IntPtr _realArKitSessionHandle = IntPtr.Zero;
+#endif // ARCORE_IOS_SUPPORT
+ // Avoid warnings for fields that are unused on when ARCORE_IOS_SUPPORT is not defined.
+#pragma warning disable 67, 414
- private IntPtr m_RealArKitSessionHandle = IntPtr.Zero;
+ public event Action EarlyUpdate;
public event Action UpdateSessionFeatures;
- public event Action EarlyUpdate;
-
public event Action OnSessionSetEnabled;
public event Action OnSetConfiguration;
-#pragma warning restore 67, 414
public event Action OnResetInstance;
+#pragma warning restore 67, 414
public static ARCoreIOSLifecycleManager Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
- s_Instance = new ARCoreIOSLifecycleManager();
- s_Instance._Initialize();
- s_Instance.m_CloudServicesApiKey =
- (Resources.Load(k_CloudServicesApiKeyPath) as TextAsset).text;
+ _instance = new ARCoreIOSLifecycleManager();
#if ARCORE_IOS_SUPPORT
- UnityEngine.XR.iOS.UnityARSessionNativeInterface.ARFrameUpdatedEvent +=
- s_Instance._OnARKitFrameUpdated;
+ if (_arCoreiOSHelper == null)
+ {
+ _arCoreiOSHelper = new ARCoreiOSHelper();
+ }
+ _instance._Initialize();
#endif
}
- return s_Instance;
+ return _instance;
}
}
@@ -109,11 +107,11 @@ public void CreateSession(ARCoreSession sessionComponent)
return;
}
- m_RealArKitSessionHandle = _GetSessionHandleFromArkitPlugin();
SessionComponent = sessionComponent;
-
+ _realArKitSessionHandle = _arCoreiOSHelper.GetARKitSessionPtr();
+ string apiKey = _arCoreiOSHelper.GetCloudServicesApiKey();
var status =
- ExternApi.ArSession_create(m_CloudServicesApiKey, null, ref m_SessionHandle);
+ ExternApi.ArSession_create(apiKey, null, ref _sessionHandle);
if (status != ApiArStatus.Success)
{
Debug.LogErrorFormat(
@@ -121,7 +119,8 @@ public void CreateSession(ARCoreSession sessionComponent)
return;
}
- NativeSession = new NativeSession(m_SessionHandle, IntPtr.Zero);
+ NativeSession = new NativeSession(_sessionHandle, IntPtr.Zero);
+ _arCoreiOSHelper.RegisterFrameUpdateEvent(_instance._OnARKitFrameUpdated);
#else
Debug.Log("ARCore iOS Support is not enabled. ARCore will be disabled on iOS device.");
return;
@@ -130,28 +129,33 @@ public void CreateSession(ARCoreSession sessionComponent)
public void EnableSession()
{
- m_SessionEnabled = true;
+#if ARCORE_IOS_SUPPORT
+ _sessionEnabled = true;
SessionStatus = SessionStatus.Tracking;
+#endif
}
public void DisableSession()
{
- m_SessionEnabled = false;
+#if ARCORE_IOS_SUPPORT
+ _sessionEnabled = false;
SessionStatus = SessionStatus.NotTracking;
+#endif
}
public void ResetSession()
{
- if (m_SessionHandle != IntPtr.Zero)
+#if ARCORE_IOS_SUPPORT
+ if (_sessionHandle != IntPtr.Zero)
{
- if (m_FrameHandle != IntPtr.Zero)
+ if (_frameHandle != IntPtr.Zero)
{
- NativeSession.FrameApi.Release(m_FrameHandle);
- m_FrameHandle = IntPtr.Zero;
+ NativeSession.FrameApi.Release(_frameHandle);
+ _frameHandle = IntPtr.Zero;
}
- ExternApi.ArSession_destroy(m_SessionHandle);
- m_SessionHandle = IntPtr.Zero;
+ ExternApi.ArSession_destroy(_sessionHandle);
+ _sessionHandle = IntPtr.Zero;
}
if (NativeSession != null)
@@ -160,6 +164,7 @@ public void ResetSession()
}
_Initialize();
+#endif
}
///
@@ -167,34 +172,35 @@ public void ResetSession()
///
internal static void ResetInstance()
{
- if (s_Instance != null && s_Instance.OnResetInstance != null)
+#if ARCORE_IOS_SUPPORT
+ if (_instance != null && _instance.OnResetInstance != null)
{
- s_Instance.OnResetInstance();
+ _instance.OnResetInstance();
}
- s_Instance = null;
+ _instance = null;
+#endif
}
#if ARCORE_IOS_SUPPORT
private void _OnARKitFrameUpdated(UnityEngine.XR.iOS.UnityARCamera camera)
{
- if (m_FrameHandle != IntPtr.Zero)
+ if (_frameHandle != IntPtr.Zero)
{
- NativeSession.FrameApi.Release(m_FrameHandle);
- m_FrameHandle = IntPtr.Zero;
+ NativeSession.FrameApi.Release(_frameHandle);
+ _frameHandle = IntPtr.Zero;
}
- if (m_SessionEnabled)
+ if (_sessionEnabled)
{
- m_FrameHandle =
- ExternApi.ARCoreARKitIntegration_getCurrentFrame(m_RealArKitSessionHandle);
+ _frameHandle = _arCoreiOSHelper.GetARKitFramePtr(_realArKitSessionHandle);
ExternApi.ArSession_updateAndAcquireArFrame(
- m_SessionHandle, m_FrameHandle, ref m_FrameHandle);
+ _sessionHandle, _frameHandle, ref _frameHandle);
}
if (NativeSession != null)
{
- NativeSession.OnUpdate(m_FrameHandle);
+ NativeSession.OnUpdate(_frameHandle);
}
if (EarlyUpdate != null)
@@ -202,42 +208,17 @@ private void _OnARKitFrameUpdated(UnityEngine.XR.iOS.UnityARCamera camera)
EarlyUpdate();
}
}
-#endif
private void _Initialize()
{
- m_SessionEnabled = false;
+ _sessionEnabled = false;
SessionStatus = SessionStatus.NotTracking;
LostTrackingReason = LostTrackingReason.None;
IsSessionChangedThisFrame = false;
}
- private IntPtr _GetSessionHandleFromArkitPlugin()
- {
- IntPtr result = IntPtr.Zero;
-#if ARCORE_IOS_SUPPORT
- var m_session =
- UnityEngine.XR.iOS.UnityARSessionNativeInterface.GetARSessionNativeInterface();
- var sessionField = m_session.GetType().GetField(
- "m_NativeARSession", BindingFlags.NonPublic | BindingFlags.Instance);
- var val = sessionField.GetValue(m_session);
- result =
- ExternApi.ARCoreARKitIntegration_castUnitySessionToARKitSession((System.IntPtr)val);
-#endif
- return result;
- }
-
private struct ExternApi
{
-#if UNITY_IOS
- [DllImport(ApiConstants.ARCoreARKitIntegrationApi)]
- public static extern IntPtr ARCoreARKitIntegration_castUnitySessionToARKitSession(
- IntPtr sessionToCast);
-
- [DllImport(ApiConstants.ARCoreARKitIntegrationApi)]
- public static extern IntPtr ARCoreARKitIntegration_getCurrentFrame(
- IntPtr arkitSessionHandle);
-
[DllImport(ApiConstants.ARCoreNativeApi)]
public static extern ApiArStatus ArSession_create(
string apiKey, string bundleIdentifier, ref IntPtr sessionHandle);
@@ -248,34 +229,8 @@ public static extern ApiArStatus ArSession_create(
[DllImport(ApiConstants.ARCoreNativeApi)]
public static extern ApiArStatus ArSession_updateAndAcquireArFrame(
IntPtr sessionHandle, IntPtr arkitFrameHandle, ref IntPtr arFrame);
-#else
- public static IntPtr ARCoreARKitIntegration_castUnitySessionToARKitSession(
- IntPtr sessionToCast)
- {
- return IntPtr.Zero;
- }
-
- public static IntPtr ARCoreARKitIntegration_getCurrentFrame(IntPtr arkitSessionHandle)
- {
- return IntPtr.Zero;
- }
-
- public static ApiArStatus ArSession_create(string apiKey, string bundleIdentifier,
- ref IntPtr sessionHandle)
- {
- return ApiArStatus.Success;
- }
-
- public static void ArSession_destroy(IntPtr session)
- {
- }
-
- public static ApiArStatus ArSession_updateAndAcquireArFrame(IntPtr sessionHandle,
- IntPtr arkitFrameHandle, ref IntPtr arFrame)
- {
- return ApiArStatus.Success;
- }
-#endif
}
+#endif // ARCORE_IOS_SUPPORT
}
}
+#endif
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/ARPrestoCallbackManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/ARPrestoCallbackManager.cs
index 4bd76151..d46fcbf3 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/ARPrestoCallbackManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/ARPrestoCallbackManager.cs
@@ -35,26 +35,26 @@ namespace GoogleARCoreInternal
internal class ARPrestoCallbackManager
{
- private static ARPrestoCallbackManager s_Instance;
+ private static ARPrestoCallbackManager _instance;
- private static IAndroidPermissionsCheck s_AndroidPermissionCheck;
+ private static IAndroidPermissionsCheck _androidPermissionCheck;
- private CheckApkAvailabilityResultCallback m_CheckApkAvailabilityResultCallback;
+ private CheckApkAvailabilityResultCallback _checkApkAvailabilityResultCallback;
- private RequestApkInstallationResultCallback m_RequestApkInstallationResultCallback;
+ private RequestApkInstallationResultCallback _requestApkInstallationResultCallback;
- private CameraPermissionRequestProvider m_RequestCameraPermissionCallback;
+ private CameraPermissionRequestProvider _requestCameraPermissionCallback;
- private EarlyUpdateCallback m_EarlyUpdateCallback;
+ private EarlyUpdateCallback _earlyUpdateCallback;
- private OnBeforeSetConfigurationCallback m_OnBeforeSetConfigurationCallback;
+ private OnBeforeSetConfigurationCallback _onBeforeSetConfigurationCallback;
- private OnBeforeResumeSessionCallback m_OnBeforeResumeSessionCallback;
+ private OnBeforeResumeSessionCallback _onBeforeResumeSessionCallback;
- private List> m_PendingAvailabilityCheckCallbacks =
+ private List> _pendingAvailabilityCheckCallbacks =
new List>();
- private List> m_PendingInstallationRequestCallbacks =
+ private List> _pendingInstallationRequestCallbacks =
new List>();
public delegate void EarlyUpdateCallback();
@@ -89,19 +89,19 @@ public static ARPrestoCallbackManager Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
- if (s_AndroidPermissionCheck == null &&
+ if (_androidPermissionCheck == null &&
!InstantPreviewManager.IsProvidingPlatform)
{
- s_AndroidPermissionCheck = AndroidPermissionsManager.GetInstance();
+ _androidPermissionCheck = AndroidPermissionsManager.GetInstance();
}
- s_Instance = new ARPrestoCallbackManager();
- s_Instance._Initialize();
+ _instance = new ARPrestoCallbackManager();
+ _instance.Initialize();
}
- return s_Instance;
+ return _instance;
}
}
@@ -118,10 +118,10 @@ public AsyncTask CheckApkAvailability()
return task;
}
- ExternApi.ArPresto_checkApkAvailability(m_CheckApkAvailabilityResultCallback,
+ ExternApi.ArPresto_checkApkAvailability(_checkApkAvailabilityResultCallback,
IntPtr.Zero);
- m_PendingAvailabilityCheckCallbacks.Add(onComplete);
+ _pendingAvailabilityCheckCallbacks.Add(onComplete);
return task;
}
@@ -140,48 +140,48 @@ public AsyncTask RequestApkInstallation(bool userRequeste
}
ExternApi.ArPresto_requestApkInstallation(userRequested,
- m_RequestApkInstallationResultCallback, IntPtr.Zero);
+ _requestApkInstallationResultCallback, IntPtr.Zero);
- m_PendingInstallationRequestCallbacks.Add(onComplete);
+ _pendingInstallationRequestCallbacks.Add(onComplete);
return task;
}
internal static void ResetInstance()
{
- s_Instance = null;
- s_AndroidPermissionCheck = null;
+ _instance = null;
+ _androidPermissionCheck = null;
}
internal static void SetAndroidPermissionCheck(
IAndroidPermissionsCheck androidPermissionsCheck)
{
- s_AndroidPermissionCheck = androidPermissionsCheck;
+ _androidPermissionCheck = androidPermissionsCheck;
}
[AOT.MonoPInvokeCallback(typeof(CheckApkAvailabilityResultCallback))]
- private static void _OnCheckApkAvailabilityResultTrampoline(
+ private static void OnCheckApkAvailabilityResultTrampoline(
ApiAvailability status, IntPtr context)
{
- Instance._OnCheckApkAvailabilityResult(status.ToApkAvailabilityStatus());
+ Instance.OnCheckApkAvailabilityResult(status.ToApkAvailabilityStatus());
}
[AOT.MonoPInvokeCallback(typeof(RequestApkInstallationResultCallback))]
- private static void _OnApkInstallationResultTrampoline(
+ private static void OnApkInstallationResultTrampoline(
ApiApkInstallationStatus status, IntPtr context)
{
- Instance._OnRequestApkInstallationResult(status.ToApkInstallationStatus());
+ Instance.OnRequestApkInstallationResult(status.ToApkInstallationStatus());
}
[AOT.MonoPInvokeCallback(typeof(CameraPermissionRequestProvider))]
- private static void _RequestCameraPermissionTrampoline(
+ private static void RequestCameraPermissionTrampoline(
CameraPermissionsResultCallback onComplete, IntPtr context)
{
- Instance._RequestCameraPermission(onComplete, context);
+ Instance.RequestCameraPermission(onComplete, context);
}
[AOT.MonoPInvokeCallback(typeof(EarlyUpdateCallback))]
- private static void _EarlyUpdateTrampoline()
+ private static void EarlyUpdateTrampoline()
{
if (Instance.EarlyUpdate != null)
{
@@ -190,7 +190,7 @@ private static void _EarlyUpdateTrampoline()
}
[AOT.MonoPInvokeCallback(typeof(OnBeforeSetConfigurationCallback))]
- private static void _BeforeSetConfigurationTrampoline(
+ private static void BeforeSetConfigurationTrampoline(
IntPtr sessionHandle, IntPtr configHandle)
{
if (Instance.OnSetConfiguration != null)
@@ -200,7 +200,7 @@ private static void _BeforeSetConfigurationTrampoline(
}
[AOT.MonoPInvokeCallback(typeof(OnBeforeResumeSessionCallback))]
- private static void _BeforeResumeSessionTrampoline(IntPtr sessionHandle)
+ private static void BeforeResumeSessionTrampoline(IntPtr sessionHandle)
{
if (Instance.BeforeResumeSession != null)
{
@@ -208,16 +208,16 @@ private static void _BeforeResumeSessionTrampoline(IntPtr sessionHandle)
}
}
- private void _Initialize()
+ private void Initialize()
{
- m_EarlyUpdateCallback = new EarlyUpdateCallback(_EarlyUpdateTrampoline);
+ _earlyUpdateCallback = new EarlyUpdateCallback(EarlyUpdateTrampoline);
if (InstantPreviewManager.IsProvidingPlatform)
{
// Instant preview does not support updated function signature returning 'bool'.
- ExternApi.ArCoreUnity_setArPrestoInitialized(m_EarlyUpdateCallback);
+ ExternApi.ArCoreUnity_setArPrestoInitialized(_earlyUpdateCallback);
}
- else if (!ExternApi.ArCoreUnity_setArPrestoInitialized(m_EarlyUpdateCallback))
+ else if (!ExternApi.ArCoreUnity_setArPrestoInitialized(_earlyUpdateCallback))
{
Debug.LogError(
"Missing Unity Engine ARCore support. Please ensure that the Unity project " +
@@ -228,54 +228,54 @@ private void _Initialize()
IntPtr activityHandle = IntPtr.Zero;
ExternApi.ArCoreUnity_getJniInfo(ref javaVMHandle, ref activityHandle);
- m_CheckApkAvailabilityResultCallback =
- new CheckApkAvailabilityResultCallback(_OnCheckApkAvailabilityResultTrampoline);
+ _checkApkAvailabilityResultCallback =
+ new CheckApkAvailabilityResultCallback(OnCheckApkAvailabilityResultTrampoline);
- m_RequestApkInstallationResultCallback =
- new RequestApkInstallationResultCallback(_OnApkInstallationResultTrampoline);
+ _requestApkInstallationResultCallback =
+ new RequestApkInstallationResultCallback(OnApkInstallationResultTrampoline);
- m_RequestCameraPermissionCallback =
- new CameraPermissionRequestProvider(_RequestCameraPermissionTrampoline);
+ _requestCameraPermissionCallback =
+ new CameraPermissionRequestProvider(RequestCameraPermissionTrampoline);
- m_OnBeforeSetConfigurationCallback =
- new OnBeforeSetConfigurationCallback(_BeforeSetConfigurationTrampoline);
+ _onBeforeSetConfigurationCallback =
+ new OnBeforeSetConfigurationCallback(BeforeSetConfigurationTrampoline);
- m_OnBeforeResumeSessionCallback =
- new OnBeforeResumeSessionCallback(_BeforeResumeSessionTrampoline);
+ _onBeforeResumeSessionCallback =
+ new OnBeforeResumeSessionCallback(BeforeResumeSessionTrampoline);
ExternApi.ArPresto_initialize(
- javaVMHandle, activityHandle, m_RequestCameraPermissionCallback,
- m_OnBeforeSetConfigurationCallback, m_OnBeforeResumeSessionCallback);
+ javaVMHandle, activityHandle, _requestCameraPermissionCallback,
+ _onBeforeSetConfigurationCallback, _onBeforeResumeSessionCallback);
}
- private void _OnCheckApkAvailabilityResult(ApkAvailabilityStatus status)
+ private void OnCheckApkAvailabilityResult(ApkAvailabilityStatus status)
{
- foreach (var onComplete in m_PendingAvailabilityCheckCallbacks)
+ foreach (var onComplete in _pendingAvailabilityCheckCallbacks)
{
onComplete(status);
}
- m_PendingAvailabilityCheckCallbacks.Clear();
+ _pendingAvailabilityCheckCallbacks.Clear();
}
- private void _OnRequestApkInstallationResult(ApkInstallationStatus status)
+ private void OnRequestApkInstallationResult(ApkInstallationStatus status)
{
- foreach (var onComplete in m_PendingInstallationRequestCallbacks)
+ foreach (var onComplete in _pendingInstallationRequestCallbacks)
{
onComplete(status);
}
- m_PendingInstallationRequestCallbacks.Clear();
+ _pendingInstallationRequestCallbacks.Clear();
}
- private void _RequestCameraPermission(CameraPermissionsResultCallback onComplete,
+ private void RequestCameraPermission(CameraPermissionsResultCallback onComplete,
IntPtr context)
{
const string cameraPermissionName = "android.permission.CAMERA";
- if (s_AndroidPermissionCheck != null)
+ if (_androidPermissionCheck != null)
{
- s_AndroidPermissionCheck.RequestAndroidPermission(cameraPermissionName)
+ _androidPermissionCheck.RequestAndroidPermission(cameraPermissionName)
.ThenAction((grantResult) =>
{
onComplete(grantResult.IsAllGranted, context);
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/CloudServiceManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/CloudServiceManager.cs
index 9966b0fc..794e2bb4 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/CloudServiceManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/CloudServiceManager.cs
@@ -29,22 +29,22 @@ namespace GoogleARCoreInternal.CrossPlatform
internal class CloudServiceManager
{
- private static CloudServiceManager s_Instance;
+ private static CloudServiceManager _instance;
- private List m_CloudAnchorRequests = new List();
+ private List _cloudAnchorRequests = new List();
public static CloudServiceManager Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
- s_Instance = new CloudServiceManager();
- LifecycleManager.Instance.EarlyUpdate += s_Instance._OnEarlyUpdate;
- LifecycleManager.Instance.OnResetInstance += _ResetInstance;
+ _instance = new CloudServiceManager();
+ LifecycleManager.Instance.EarlyUpdate += _instance.OnEarlyUpdate;
+ LifecycleManager.Instance.OnResetInstance += ResetInstance;
}
- return s_Instance;
+ return _instance;
}
}
@@ -53,12 +53,12 @@ public GoogleARCore.AsyncTask CreateCloudAnchor(
{
Action onComplete;
GoogleARCore.AsyncTask task;
- if (!_CreateCloudAnchorResultAsyncTask(out onComplete, out task))
+ if (!CreateCloudAnchorResultAsyncTask(out onComplete, out task))
{
return task;
}
- _CreateCloudAnchor(onComplete, anchor.NativeHandle);
+ CreateCloudAnchor(onComplete, anchor._nativeHandle);
return task;
}
@@ -67,7 +67,7 @@ public GoogleARCore.AsyncTask CreateCloudAnchor(UnityEngine.P
{
Action onComplete;
GoogleARCore.AsyncTask task;
- if (!_CreateCloudAnchorResultAsyncTask(out onComplete, out task))
+ if (!CreateCloudAnchorResultAsyncTask(out onComplete, out task))
{
return task;
}
@@ -77,7 +77,7 @@ public GoogleARCore.AsyncTask CreateCloudAnchor(UnityEngine.P
IntPtr arkitAnchorHandle = IntPtr.Zero;
ExternApi.ARKitAnchor_create(poseHandle, ref arkitAnchorHandle);
- _CreateCloudAnchor(onComplete, arkitAnchorHandle);
+ CreateCloudAnchor(onComplete, arkitAnchorHandle);
// Clean up handles for the Pose and ARKitAnchor.
LifecycleManager.Instance.NativeSession.PoseApi.Destroy(poseHandle);
@@ -90,7 +90,7 @@ public GoogleARCore.AsyncTask ResolveCloudAnchor(string cloud
{
Action onComplete;
GoogleARCore.AsyncTask task;
- if (!_CreateCloudAnchorResultAsyncTask(out onComplete, out task))
+ if (!CreateCloudAnchorResultAsyncTask(out onComplete, out task))
{
return task;
}
@@ -110,7 +110,7 @@ public GoogleARCore.AsyncTask ResolveCloudAnchor(string cloud
return task;
}
- _CreateAndTrackCloudAnchorRequest(cloudAnchorHandle, onComplete, cloudAnchorId);
+ CreateAndTrackCloudAnchorRequest(cloudAnchorHandle, onComplete, cloudAnchorId);
return task;
}
@@ -122,7 +122,7 @@ public void CancelCloudAnchorAsyncTask(string cloudAnchorId)
return;
}
- _CancelCloudAnchorRequest(cloudAnchorId);
+ CancelCloudAnchorRequest(cloudAnchorId);
}
///
@@ -134,7 +134,7 @@ public void CancelCloudAnchorAsyncTask(string cloudAnchorId)
/// This will always contain a valid task even when function returns false.
/// Returns true if cloud anchor creation should continue. Returns false if cloud
/// creation should abort.
- protected internal bool _CreateCloudAnchorResultAsyncTask(
+ protected internal bool CreateCloudAnchorResultAsyncTask(
out Action onComplete,
out GoogleARCore.AsyncTask task)
{
@@ -161,7 +161,7 @@ protected internal bool _CreateCloudAnchorResultAsyncTask(
/// Cloud anchor handle.
/// The on complete Action that was created for the
/// AsyncTask.
- protected internal void _CreateAndTrackCloudAnchorRequest(IntPtr cloudAnchorHandle,
+ protected internal void CreateAndTrackCloudAnchorRequest(IntPtr cloudAnchorHandle,
Action onComplete, string cloudAnchorId = null)
{
if (LifecycleManager.Instance.NativeSession == null || cloudAnchorHandle == IntPtr.Zero)
@@ -186,7 +186,7 @@ protected internal void _CreateAndTrackCloudAnchorRequest(IntPtr cloudAnchorHand
OnTaskComplete = onComplete,
};
- _UpdateCloudAnchorRequest(request, true);
+ UpdateCloudAnchorRequest(request, true);
}
///
@@ -195,7 +195,7 @@ protected internal void _CreateAndTrackCloudAnchorRequest(IntPtr cloudAnchorHand
/// The on complete Action that was created for the
/// AsyncTask.
/// The native handle for the anchor.
- protected internal void _CreateCloudAnchor(Action onComplete,
+ protected internal void CreateCloudAnchor(Action onComplete,
IntPtr anchorNativeHandle)
{
IntPtr cloudAnchorHandle = IntPtr.Zero;
@@ -213,14 +213,14 @@ protected internal void _CreateCloudAnchor(Action onComplete,
return;
}
- _CreateAndTrackCloudAnchorRequest(cloudAnchorHandle, onComplete);
+ CreateAndTrackCloudAnchorRequest(cloudAnchorHandle, onComplete);
return;
}
- protected internal void _CancelCloudAnchorRequest(string cloudAnchorId)
+ protected internal void CancelCloudAnchorRequest(string cloudAnchorId)
{
bool cancelledCloudAnchorRequest = false;
- foreach (var request in m_CloudAnchorRequests)
+ foreach (var request in _cloudAnchorRequests)
{
if (request.CloudAnchorId == null || !request.CloudAnchorId.Equals(cloudAnchorId))
{
@@ -245,7 +245,7 @@ protected internal void _CancelCloudAnchorRequest(string cloudAnchorId)
cancelledCloudAnchorRequest = true;
}
- m_CloudAnchorRequests.RemoveAll(x => x.IsComplete);
+ _cloudAnchorRequests.RemoveAll(x => x.IsComplete);
if (!cancelledCloudAnchorRequest)
{
@@ -254,22 +254,22 @@ protected internal void _CancelCloudAnchorRequest(string cloudAnchorId)
}
}
- private static void _ResetInstance()
+ private static void ResetInstance()
{
- s_Instance = null;
+ _instance = null;
}
- private void _OnEarlyUpdate()
+ private void OnEarlyUpdate()
{
- foreach (var request in m_CloudAnchorRequests)
+ foreach (var request in _cloudAnchorRequests)
{
- _UpdateCloudAnchorRequest(request);
+ UpdateCloudAnchorRequest(request);
}
- m_CloudAnchorRequests.RemoveAll(x => x.IsComplete);
+ _cloudAnchorRequests.RemoveAll(x => x.IsComplete);
}
- private void _UpdateCloudAnchorRequest(
+ private void UpdateCloudAnchorRequest(
CloudAnchorRequest request, bool isNewRequest = false)
{
var cloudState =
@@ -318,7 +318,7 @@ private void _UpdateCloudAnchorRequest(
}
else if (isNewRequest)
{
- m_CloudAnchorRequests.Add(request);
+ _cloudAnchorRequests.Add(request);
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/ILifecycleManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/ILifecycleManager.cs
index c25a54e9..967b99b3 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/ILifecycleManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/ILifecycleManager.cs
@@ -24,7 +24,7 @@ namespace GoogleARCoreInternal
using System.Diagnostics.CodeAnalysis;
using GoogleARCore;
- [SuppressMessage("UnityRules.UnityStyleRules", "US1101:NonPublicFieldsMustHavePrefixM",
+ [SuppressMessage("UnityRules.UnityStyleRules", "US1108:NonPublicPropertiesMustBeLowerCamelCase",
Justification = "This is an interface so fields are already public.")]
internal interface ILifecycleManager
{
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/LifecycleManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/LifecycleManager.cs
index 6722f0d4..e352216e 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/LifecycleManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/LifecycleManager.cs
@@ -26,25 +26,22 @@ namespace GoogleARCoreInternal
internal class LifecycleManager
{
- private static ILifecycleManager s_Instance;
+ private static ILifecycleManager _instance;
public static ILifecycleManager Instance
{
get
{
- if (s_Instance == null)
+ if (_instance == null)
{
- if (Application.platform == RuntimePlatform.IPhonePlayer)
- {
- s_Instance = ARCoreIOSLifecycleManager.Instance;
- }
- else
- {
- s_Instance = ARCoreAndroidLifecycleManager.Instance;
- }
+#if UNITY_ANDROID || UNITY_EDITOR
+ _instance = ARCoreAndroidLifecycleManager.Instance;
+#elif UNITY_IOS
+ _instance = ARCoreIOSLifecycleManager.Instance;
+#endif
}
- return s_Instance;
+ return _instance;
}
}
@@ -53,18 +50,19 @@ public static ILifecycleManager Instance
///
internal static void ResetInstance()
{
- if (s_Instance != null)
+ if (_instance != null)
{
- if (Application.platform == RuntimePlatform.IPhonePlayer)
+ if (_instance is ARCoreAndroidLifecycleManager)
{
- ARCoreIOSLifecycleManager.ResetInstance();
+ ARCoreAndroidLifecycleManager.ResetInstance();
}
- else
+#if UNITY_IOS
+ else if(_instance is ARCoreIOSLifecycleManager)
{
- ARCoreAndroidLifecycleManager.ResetInstance();
+ ARCoreIOSLifecycleManager.ResetInstance();
}
-
- s_Instance = null;
+#endif
+ _instance = null;
}
}
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/PointCloudManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/PointCloudManager.cs
index 65684c62..ba21e734 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/PointCloudManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/PointCloudManager.cs
@@ -27,13 +27,13 @@ namespace GoogleARCoreInternal
internal class PointCloudManager
{
- private NativeSession m_NativeSession = null;
+ private NativeSession _nativeSession = null;
- private float m_LastReleasedPointcloudTimestamp = 0.0f;
+ private float _lastReleasedPointcloudTimestamp = 0.0f;
public PointCloudManager(NativeSession session)
{
- m_NativeSession = session;
+ _nativeSession = session;
}
public IntPtr PointCloudHandle { get; private set; }
@@ -42,8 +42,8 @@ public bool IsPointCloudNew
{
get
{
- return m_NativeSession.PointCloudApi.GetTimestamp(PointCloudHandle) !=
- m_LastReleasedPointcloudTimestamp;
+ return _nativeSession.PointCloudApi.GetTimestamp(PointCloudHandle) !=
+ _lastReleasedPointcloudTimestamp;
}
}
@@ -53,14 +53,14 @@ public void OnUpdate()
// After first frame, release previous frame's point cloud.
if (PointCloudHandle != IntPtr.Zero)
{
- m_LastReleasedPointcloudTimestamp =
- m_NativeSession.PointCloudApi.GetTimestamp(PointCloudHandle);
- m_NativeSession.PointCloudApi.Release(PointCloudHandle);
+ _lastReleasedPointcloudTimestamp =
+ _nativeSession.PointCloudApi.GetTimestamp(PointCloudHandle);
+ _nativeSession.PointCloudApi.Release(PointCloudHandle);
PointCloudHandle = IntPtr.Zero;
}
IntPtr pointCloudHandle;
- m_NativeSession.FrameApi.TryAcquirePointCloudHandle(out pointCloudHandle);
+ _nativeSession.FrameApi.TryAcquirePointCloudHandle(out pointCloudHandle);
PointCloudHandle = pointCloudHandle;
#endif
}
diff --git a/Assets/GoogleARCore/SDK/Scripts/Managers/TrackableManager.cs b/Assets/GoogleARCore/SDK/Scripts/Managers/TrackableManager.cs
index 37db5e44..746eb5e1 100644
--- a/Assets/GoogleARCore/SDK/Scripts/Managers/TrackableManager.cs
+++ b/Assets/GoogleARCore/SDK/Scripts/Managers/TrackableManager.cs
@@ -27,25 +27,25 @@ namespace GoogleARCoreInternal
internal class TrackableManager
{
- private Dictionary m_TrackableDict =
+ private Dictionary _trackableDict =
new Dictionary(new IntPtrEqualityComparer());
- private NativeSession m_NativeSession;
+ private NativeSession _nativeSession;
- private int m_LastUpdateFrame = -1;
+ private int _lastUpdateFrame = -1;
- private List m_NewTrackables = new List();
+ private List _newTrackables = new List();
- private List m_AllTrackables = new List();
+ private List _allTrackables = new List();
- private List m_UpdatedTrackables = new List();
+ private List _updatedTrackables = new List();
- private HashSet m_OldTrackables = new HashSet();
+ private HashSet _oldTrackables = new HashSet();
public TrackableManager(NativeSession nativeSession)
{
- m_NativeSession = nativeSession;
- LifecycleManager.Instance.OnResetInstance += _ClearCachedTrackables;
+ _nativeSession = nativeSession;
+ LifecycleManager.Instance.OnResetInstance += ClearCachedTrackables;
}
///
@@ -63,32 +63,36 @@ public Trackable TrackableFactory(IntPtr nativeHandle)
}
Trackable result;
- if (m_TrackableDict.TryGetValue(nativeHandle, out result))
+ if (_trackableDict.TryGetValue(nativeHandle, out result))
{
// Release aquired handle and return cached result.
- m_NativeSession.TrackableApi.Release(nativeHandle);
+ _nativeSession.TrackableApi.Release(nativeHandle);
return result;
}
// This block needs to construct classes marked Obsolete since those versions are always
// the most derived type.
#pragma warning disable 618 // Obsolete warning
- ApiTrackableType trackableType = m_NativeSession.TrackableApi.GetType(nativeHandle);
+ ApiTrackableType trackableType = _nativeSession.TrackableApi.GetType(nativeHandle);
if (trackableType == ApiTrackableType.Plane)
{
- result = new TrackedPlane(nativeHandle, m_NativeSession);
+ result = new TrackedPlane(nativeHandle, _nativeSession);
}
else if (trackableType == ApiTrackableType.Point)
{
- result = new TrackedPoint(nativeHandle, m_NativeSession);
+ result = new TrackedPoint(nativeHandle, _nativeSession);
+ }
+ else if (trackableType == ApiTrackableType.InstantPlacementPoint)
+ {
+ result = new InstantPlacementPoint(nativeHandle, _nativeSession);
}
else if (trackableType == ApiTrackableType.AugmentedImage)
{
- result = new AugmentedImage(nativeHandle, m_NativeSession);
+ result = new AugmentedImage(nativeHandle, _nativeSession);
}
else if (trackableType == ApiTrackableType.AugmentedFace)
{
- result = new AugmentedFace(nativeHandle, m_NativeSession);
+ result = new AugmentedFace(nativeHandle, _nativeSession);
}
else if (ExperimentManager.Instance.IsManagingTrackableType((int)trackableType))
{
@@ -104,7 +108,7 @@ public Trackable TrackableFactory(IntPtr nativeHandle)
if (result != null)
{
- m_TrackableDict.Add(nativeHandle, result);
+ _trackableDict.Add(nativeHandle, result);
}
return result;
@@ -113,55 +117,55 @@ public Trackable TrackableFactory(IntPtr nativeHandle)
public void GetTrackables(
List trackables, TrackableQueryFilter filter) where T : Trackable
{
- if (m_LastUpdateFrame < Time.frameCount)
+ if (_lastUpdateFrame < Time.frameCount)
{
// Get trackables updated this frame.
- m_NativeSession.FrameApi.GetUpdatedTrackables(m_UpdatedTrackables);
+ _nativeSession.FrameApi.GetUpdatedTrackables(_updatedTrackables);
// Get all the trackables in the session.
- m_NativeSession.SessionApi.GetAllTrackables(m_AllTrackables);
+ _nativeSession.SessionApi.GetAllTrackables(_allTrackables);
// Find trackables that are not in the hashset (new).
- m_NewTrackables.Clear();
- for (int i = 0; i < m_AllTrackables.Count; i++)
+ _newTrackables.Clear();
+ for (int i = 0; i < _allTrackables.Count; i++)
{
- Trackable trackable = m_AllTrackables[i];
- if (!m_OldTrackables.Contains(trackable))
+ Trackable trackable = _allTrackables[i];
+ if (!_oldTrackables.Contains(trackable))
{
- m_NewTrackables.Add(trackable);
- m_OldTrackables.Add(trackable);
+ _newTrackables.Add(trackable);
+ _oldTrackables.Add(trackable);
}
}
- m_LastUpdateFrame = Time.frameCount;
+ _lastUpdateFrame = Time.frameCount;
}
trackables.Clear();
if (filter == TrackableQueryFilter.All)
{
- for (int i = 0; i < m_AllTrackables.Count; i++)
+ for (int i = 0; i < _allTrackables.Count; i++)
{
- _SafeAdd(m_AllTrackables[i], trackables);
+ SafeAdd(_allTrackables[i], trackables);
}
}
else if (filter == TrackableQueryFilter.New)
{
- for (int i = 0; i < m_NewTrackables.Count; i++)
+ for (int i = 0; i < _newTrackables.Count; i++)
{
- _SafeAdd(m_NewTrackables[i], trackables);
+ SafeAdd(_newTrackables[i], trackables);
}
}
else if (filter == TrackableQueryFilter.Updated)
{
- for (int i = 0; i < m_UpdatedTrackables.Count; i++)
+ for (int i = 0; i < _updatedTrackables.Count; i++)
{
- _SafeAdd(m_UpdatedTrackables[i], trackables);
+ SafeAdd(_updatedTrackables[i], trackables);
}
}
}
- private void _SafeAdd(Trackable trackable, List trackables) where T : Trackable
+ private void SafeAdd(Trackable trackable, List trackables) where T : Trackable
{
if (trackable is T)
{
@@ -169,13 +173,13 @@ private void _SafeAdd