From 0e9de80c5da82a2156eb348e07210927ee0069e0 Mon Sep 17 00:00:00 2001 From: Marcello Tridenti Date: Tue, 30 Apr 2024 13:38:53 +0200 Subject: [PATCH 1/3] Vr Builder 4 compatibility (#5) * Updated condition and demo process * Updated docs * PDF manual --- .../VR Builder Demo - VRIF Integration.unity | 222 +++- .../Demo - VRIF Integration.json | 1029 ++++++++++------- Documentation/vrif-integration-manual.md | 20 +- Documentation/vrif-integration-manual.pdf | Bin 419099 -> 419358 bytes .../CheckControlPositionCondition.cs | 28 +- 5 files changed, 876 insertions(+), 423 deletions(-) diff --git a/Demo/Scenes/VR Builder Demo - VRIF Integration.unity b/Demo/Scenes/VR Builder Demo - VRIF Integration.unity index 3419dc1..fb7faf5 100644 --- a/Demo/Scenes/VR Builder Demo - VRIF Integration.unity +++ b/Demo/Scenes/VR Builder Demo - VRIF Integration.unity @@ -8812,6 +8812,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -9115,6 +9116,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -12128,6 +12130,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 812179936} @@ -18483,6 +18487,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 781666619} @@ -19386,6 +19392,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 m_SortingLayerID: 0 m_SortingOrder: -100 @@ -19469,6 +19476,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -29446,6 +29454,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 179551010} @@ -29728,6 +29738,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 177530551} @@ -34931,6 +34943,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 463067111} @@ -36563,6 +36577,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 727521751} @@ -41297,6 +41313,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 860913889} @@ -49631,6 +49649,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -64476,6 +64495,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1293541497} @@ -67644,6 +67665,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -83729,6 +83751,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1302114344} @@ -83892,6 +83916,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -88567,8 +88592,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: cc6af03d78e74e468cd44be3b5c62c50 uniqueName: Slot (8) - tags: [] + guids: [] --- !u!1 &847377411 GameObject: m_ObjectHideFlags: 0 @@ -90400,6 +90427,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -94513,6 +94541,7 @@ MonoBehaviour: VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null selectedProcessStreamingAssetsPath: Processes/Demo - VRIF Integration/Demo - VRIF Integration.json + processStringLocalizationTable: --- !u!4 &912355383 Transform: m_ObjectHideFlags: 0 @@ -112709,6 +112738,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 2120140264} @@ -115076,6 +115107,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 55961743} @@ -115734,6 +115767,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 854064332} @@ -117464,6 +117499,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1263140340} @@ -120374,6 +120411,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1440601576} @@ -124713,6 +124752,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1240489641} @@ -131517,6 +131558,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1689280360} @@ -133046,8 +133089,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: 956a5f98534418449b31d4b5f7160037 uniqueName: GravityCube 1 - tags: [] + guids: [] --- !u!1 &1270487925 GameObject: m_ObjectHideFlags: 0 @@ -133943,6 +133988,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 795210615} @@ -135411,6 +135458,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1401721480} @@ -136198,6 +136247,8 @@ MonoBehaviour: SlowMoRateOfFire: 0.3 ShotForce: 20 BulletCasingForce: 3 + LaserGuided: 0 + LaserPoint: {fileID: 0} RecoilForce: {x: 0, y: 0, z: 0} RecoilDuration: 0.3 ValidLayers: @@ -137415,6 +137466,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 757868654} @@ -143701,6 +143754,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 524541292} @@ -144228,6 +144283,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1756895730} @@ -144548,6 +144605,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -144857,6 +144915,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -147830,6 +147889,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1688119738} @@ -152431,8 +152492,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: 1cfc3a195715bd4bb98af0c6c117fdd8 uniqueName: Hinge - tags: [] + guids: [] --- !u!114 &1463236166 MonoBehaviour: m_ObjectHideFlags: 0 @@ -153015,6 +153078,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 682559161} @@ -153895,6 +153960,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -157535,6 +157601,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -160512,6 +160579,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -162738,6 +162806,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1728921174} @@ -167221,6 +167291,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 890513168} @@ -167551,6 +167623,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1630279031} @@ -168149,6 +168223,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1787981189} @@ -177650,8 +177726,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: 4e4d1960c81699498a3f714d2cfe7120 uniqueName: LaserSword - tags: [] + guids: [] --- !u!1 &1717430778 GameObject: m_ObjectHideFlags: 0 @@ -181244,8 +181322,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: 1c1c8ee1b49334479d88b78095490aa1 uniqueName: Marker Red - tags: [] + guids: [] --- !u!114 &1746294608 MonoBehaviour: m_ObjectHideFlags: 0 @@ -186271,6 +186351,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1701736973} @@ -186415,6 +186497,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -197520,6 +197603,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 974568373} @@ -202843,6 +202928,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 773433184} @@ -205036,6 +205123,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 5 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1792871748} @@ -206841,6 +206930,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1589197916} @@ -211187,6 +211278,7 @@ GameObject: - component: {fileID: 1956891032} - component: {fileID: 1956891031} - component: {fileID: 1956891030} + - component: {fileID: 1956891036} m_Layer: 0 m_Name: CenterEyeAnchor m_TagString: MainCamera @@ -211225,8 +211317,13 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: f391ac734d94ea34697b6cde3269f11a, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: 7d848dd120caf54f82d52a379fd07374 uniqueName: User - tags: [] + guids: [] + head: {fileID: 1956891029} + leftHand: {fileID: 0} + rightHand: {fileID: 0} --- !u!114 &1956891031 MonoBehaviour: m_ObjectHideFlags: 0 @@ -211324,6 +211421,102 @@ AudioListener: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1956891028} m_Enabled: 1 +--- !u!82 &1956891036 +AudioSource: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1956891028} + m_Enabled: 1 + serializedVersion: 4 + OutputAudioMixerGroup: {fileID: 0} + m_audioClip: {fileID: 0} + m_PlayOnAwake: 1 + m_Volume: 1 + m_Pitch: 1 + Loop: 0 + Mute: 0 + Spatialize: 0 + SpatializePostEffects: 0 + Priority: 128 + DopplerLevel: 1 + MinDistance: 1 + MaxDistance: 500 + Pan2D: 0 + rolloffMode: 0 + BypassEffects: 0 + BypassListenerEffects: 0 + BypassReverbZones: 0 + rolloffCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 1 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + panLevelCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + spreadCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + reverbZoneMixCustomCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 --- !u!1 &1957028668 GameObject: m_ObjectHideFlags: 0 @@ -212092,6 +212285,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 705659179} @@ -224604,8 +224799,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: cc34ae9a0e88924e895a356e5d3a36de uniqueName: SteeringWheel Vertical - tags: [] + guids: [] --- !u!114 &2070968873 MonoBehaviour: m_ObjectHideFlags: 0 @@ -225740,6 +225937,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Health: 10 + SelfDestruct: 0 + SelfDestructDelay: 0.1 SpawnOnDeath: {fileID: 0} ActivateGameObjectsOnDeath: - {fileID: 1253141394} @@ -227136,6 +227335,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 25 m_SortingLayerID: 0 m_SortingOrder: -100 @@ -230921,6 +231121,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -236080,8 +236281,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 64582d436c5a4e84d89ba2d25709ddca, type: 3} m_Name: m_EditorClassIdentifier: + serializedGuid: + serializedGuid: 5dc210a4cddba74198e71b17ecf2c1a8 uniqueName: Bat 2H - tags: [] + guids: [] --- !u!23 &2466280432754187660 MeshRenderer: m_ObjectHideFlags: 0 @@ -236755,6 +236958,7 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 m_SortingLayerID: 0 m_SortingOrder: 0 @@ -237810,6 +238014,8 @@ MonoBehaviour: SlowMoRateOfFire: 0.3 ShotForce: 20 BulletCasingForce: 3 + LaserGuided: 0 + LaserPoint: {fileID: 0} RecoilForce: {x: 0, y: 0, z: 0} RecoilDuration: 0.3 ValidLayers: diff --git a/Demo/StreamingAssets/Processes/Demo - VRIF Integration/Demo - VRIF Integration.json b/Demo/StreamingAssets/Processes/Demo - VRIF Integration/Demo - VRIF Integration.json index bda53b9..08cf48d 100644 --- a/Demo/StreamingAssets/Processes/Demo - VRIF Integration/Demo - VRIF Integration.json +++ b/Demo/StreamingAssets/Processes/Demo - VRIF Integration/Demo - VRIF Integration.json @@ -1,51 +1,57 @@ { "$id": "1", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper, VRBuilder.Core", - "Steps": { + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+ProcessWrapper, VRBuilder.Core", + "SubChapters": { "$id": "2", + "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.IChapter, VRBuilder.Core]], mscorlib", + "$values": [] + }, + "Steps": { + "$id": "3", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.IStep, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "3", + "$id": "4", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "4", + "$id": "5", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { - "x": -102.4, + "x": -73.6, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "8667f78a-9b7a-4a38-a8a6-bfccffe501d2" }, "Data": { - "$id": "5", + "$id": "6", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Grab Condition", "Description": null, "Behaviors": { - "$id": "6", + "$id": "7", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "7", + "$id": "8", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "8", + "$id": "9", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "9", + "$id": "10", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "10", + "$id": "11", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "11", + "$id": "12", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "Welcome to the demo scene of the integration between VRIF and VR Builder. VR Builder guides you through this app, while VRIF provides you with the interactions. Start by grabbing the red marker on the table." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -54,84 +60,103 @@ } }, "Transitions": { - "$id": "12", + "$id": "13", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "13", + "$id": "14", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "14", + "$id": "15", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "15", + "$id": "16", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "16", + "$id": "17", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "17", + "$id": "18", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "18", + "$id": "19", "$type": "VRBuilder.BasicInteraction.Conditions.GrabbedCondition, VRBuilder.BasicInteraction", "Data": { - "$id": "19", + "$id": "20", "$type": "VRBuilder.BasicInteraction.Conditions.GrabbedCondition+EntityData, VRBuilder.BasicInteraction", "KeepUnlocked": true, + "Targets": { + "$id": "21", + "$type": "VRBuilder.Core.SceneObjects.MultipleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IGrabbableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "22", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "e18e1c1c-93b4-4734-9d88-b78095490aa1" + ] + } + }, "GrabbableProperty": { - "$id": "20", + "$id": "23", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IGrabbableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "Marker Red" }, "IsCompleted": false, - "Name": "Grab Object", "Metadata": null } } ] }, "TargetStep": { - "$id": "21", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 1, + "$id": "24", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "25", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "56dcb89f-cec7-43a5-b7ff-8df4517bd098" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "22", + "$id": "26", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "23", + "$id": "27", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "24", + "$id": "28", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "25", + "$id": "29", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "26", + "$id": "30", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "27", + "$id": "31", "$type": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.FoldableAttribute", "TypeId": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "28", + "$id": "32", "$type": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.DeletableAttribute", "TypeId": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "29", + "$id": "33", "$type": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.HelpAttribute", "TypeId": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" @@ -139,17 +164,17 @@ ] }, "ChildMetadata": { - "$id": "30", + "$id": "34", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "31", + "$id": "35", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "32", + "$id": "36", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -161,7 +186,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "33", + "$id": "37", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -174,69 +199,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "34", + "$id": "38", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "39", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "39" + }, "Metadata": { - "$id": "35", + "$id": "40", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "36", + "$id": "41", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "37", + "$id": "42", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "38", + "$id": "43", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "39", + "$id": "44", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 128.0, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "56dcb89f-cec7-43a5-b7ff-8df4517bd098" }, "Data": { - "$id": "40", + "$id": "45", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Release Condition", "Description": null, "Behaviors": { - "$id": "41", + "$id": "46", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "42", + "$id": "47", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "43", + "$id": "48", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "44", + "$id": "49", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "45", + "$id": "50", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "46", + "$id": "51", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "You grabbed the marker, and VR Builder can react accordingly. Now release it." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -245,92 +277,111 @@ } }, "Transitions": { - "$id": "47", + "$id": "52", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "48", + "$id": "53", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "49", + "$id": "54", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "50", + "$id": "55", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "51", + "$id": "56", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "52", + "$id": "57", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "53", + "$id": "58", "$type": "VRBuilder.BasicInteraction.Conditions.ReleasedCondition, VRBuilder.BasicInteraction", "Data": { - "$id": "54", + "$id": "59", "$type": "VRBuilder.BasicInteraction.Conditions.ReleasedCondition+EntityData, VRBuilder.BasicInteraction", + "GrabbableProperties": { + "$id": "60", + "$type": "VRBuilder.Core.SceneObjects.MultipleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IGrabbableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "61", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "e18e1c1c-93b4-4734-9d88-b78095490aa1" + ] + } + }, "GrabbableProperty": { - "$id": "55", + "$id": "62", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IGrabbableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "Marker Red" }, "IsCompleted": false, - "Name": "Release Object", "Metadata": null } } ] }, "TargetStep": { - "$id": "56", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 5, + "$id": "63", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "64", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "8bd5e2f7-a6c1-4376-a087-2c112138b165" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "57", + "$id": "65", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "58", + "$id": "66", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "59", + "$id": "67", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "60", + "$id": "68", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "61", + "$id": "69", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$ref": "27" + "$ref": "31" }, { - "$ref": "28" + "$ref": "32" }, { - "$ref": "29" + "$ref": "33" } ] }, "ChildMetadata": { - "$id": "62", + "$id": "70", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "63", + "$id": "71", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "64", + "$id": "72", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -342,7 +393,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "65", + "$id": "73", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -355,69 +406,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "66", + "$id": "74", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "75", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "75" + }, "Metadata": { - "$id": "67", + "$id": "76", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "68", + "$id": "77", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "69", + "$id": "78", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "70", + "$id": "79", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "71", + "$id": "80", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 567.2, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "933d8ae3-d75e-4372-a49c-cff2fb958d74" }, "Data": { - "$id": "72", + "$id": "81", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Use Condition", "Description": null, "Behaviors": { - "$id": "73", + "$id": "82", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "74", + "$id": "83", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "75", + "$id": "84", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "76", + "$id": "85", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "77", + "$id": "86", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "78", + "$id": "87", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "Good. Now to the use condition. Grab the black cylinder, which is actually a laser sword, and use it by pressing the trigger." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -426,83 +484,102 @@ } }, "Transitions": { - "$id": "79", + "$id": "88", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "80", + "$id": "89", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "81", + "$id": "90", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "82", + "$id": "91", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "83", + "$id": "92", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "84", + "$id": "93", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "85", + "$id": "94", "$type": "VRBuilder.BasicInteraction.Conditions.UsedCondition, VRBuilder.BasicInteraction", "Data": { - "$id": "86", + "$id": "95", "$type": "VRBuilder.BasicInteraction.Conditions.UsedCondition+EntityData, VRBuilder.BasicInteraction", + "UsableObjects": { + "$id": "96", + "$type": "VRBuilder.Core.SceneObjects.MultipleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IUsableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "97", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "60194d4e-16c8-4999-8a3f-714d2cfe7120" + ] + } + }, "UsableProperty": { - "$id": "87", + "$id": "98", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IUsableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "LaserSword" }, "IsCompleted": false, - "Name": "Use Object", "Metadata": null } } ] }, "TargetStep": { - "$id": "88", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 3, + "$id": "99", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "100", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "bf971c04-9397-4faf-a93c-01dc62882ae9" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "89", + "$id": "101", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "90", + "$id": "102", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "91", + "$id": "103", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "92", + "$id": "104", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "93", + "$id": "105", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "94", + "$id": "106", "$type": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.FoldableAttribute", "TypeId": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "95", + "$id": "107", "$type": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.DeletableAttribute", "TypeId": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "96", + "$id": "108", "$type": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.HelpAttribute", "TypeId": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" @@ -510,17 +587,17 @@ ] }, "ChildMetadata": { - "$id": "97", + "$id": "109", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "98", + "$id": "110", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "99", + "$id": "111", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -532,7 +609,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "100", + "$id": "112", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -545,69 +622,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "101", + "$id": "113", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "114", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "114" + }, "Metadata": { - "$id": "102", + "$id": "115", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "103", + "$id": "116", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "104", + "$id": "117", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "105", + "$id": "118", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "106", + "$id": "119", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 768.8, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "bf971c04-9397-4faf-a93c-01dc62882ae9" }, "Data": { - "$id": "107", + "$id": "120", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Snap Condition", "Description": null, "Behaviors": { - "$id": "108", + "$id": "121", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "109", + "$id": "122", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "110", + "$id": "123", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "111", + "$id": "124", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "112", + "$id": "125", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "113", + "$id": "126", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "When you're done, store it by snapping it to the bottom right snap point." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -616,96 +700,126 @@ } }, "Transitions": { - "$id": "114", + "$id": "127", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "115", + "$id": "128", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "116", + "$id": "129", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "117", + "$id": "130", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "118", + "$id": "131", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "119", + "$id": "132", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "120", + "$id": "133", "$type": "VRBuilder.BasicInteraction.Conditions.SnappedCondition, VRBuilder.BasicInteraction", "Data": { - "$id": "121", + "$id": "134", "$type": "VRBuilder.BasicInteraction.Conditions.SnappedCondition+EntityData, VRBuilder.BasicInteraction", + "TargetObjects": { + "$id": "135", + "$type": "VRBuilder.Core.SceneObjects.MultipleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.ISnappableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "136", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "60194d4e-16c8-4999-8a3f-714d2cfe7120" + ] + } + }, "Target": { - "$id": "122", + "$id": "137", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.ISnappableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "LaserSword" }, + "TargetSnapZone": { + "$id": "138", + "$type": "VRBuilder.Core.SceneObjects.SingleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.ISnapZoneProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "139", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "3df06acc-e778-464e-8cd4-4be3b5c62c50" + ] + } + }, "ZoneToSnapInto": { - "$id": "123", + "$id": "140", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.ISnapZoneProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "Slot (8)" }, - "Name": "Snap Object", "Metadata": null } } ] }, "TargetStep": { - "$id": "124", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 4, + "$id": "141", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "142", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "a54dcd86-c81f-4c7c-a56b-aa174c585a98" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "125", + "$id": "143", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "126", + "$id": "144", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "127", + "$id": "145", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "128", + "$id": "146", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "129", + "$id": "147", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$ref": "94" + "$ref": "106" }, { - "$ref": "95" + "$ref": "107" }, { - "$ref": "96" + "$ref": "108" } ] }, "ChildMetadata": { - "$id": "130", + "$id": "148", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "131", + "$id": "149", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "132", + "$id": "150", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -717,7 +831,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "133", + "$id": "151", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -730,69 +844,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "134", + "$id": "152", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "153", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "153" + }, "Metadata": { - "$id": "135", + "$id": "154", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "136", + "$id": "155", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "137", + "$id": "156", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "138", + "$id": "157", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "139", + "$id": "158", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { - "x": 980.8, + "x": 983.2, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "a54dcd86-c81f-4c7c-a56b-aa174c585a98" }, "Data": { - "$id": "140", + "$id": "159", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Two Hand Grab", "Description": null, "Behaviors": { - "$id": "141", + "$id": "160", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "142", + "$id": "161", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "143", + "$id": "162", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "144", + "$id": "163", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "145", + "$id": "164", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "146", + "$id": "165", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "Let's try two hand grabbing. Grab the baseball bat with two hands." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -801,93 +922,112 @@ } }, "Transitions": { - "$id": "147", + "$id": "166", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "148", + "$id": "167", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "149", + "$id": "168", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "150", + "$id": "169", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "151", + "$id": "170", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "152", + "$id": "171", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "153", + "$id": "172", "$type": "VRBuilder.BasicInteraction.Conditions.GrabbedCondition, VRBuilder.BasicInteraction", "Data": { - "$id": "154", + "$id": "173", "$type": "VRBuilder.BasicInteraction.Conditions.GrabbedCondition+EntityData, VRBuilder.BasicInteraction", "KeepUnlocked": true, + "Targets": { + "$id": "174", + "$type": "VRBuilder.Core.SceneObjects.MultipleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IGrabbableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "175", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "a410c25d-dbcd-41a7-98e7-1b17ecf2c1a8" + ] + } + }, "GrabbableProperty": { - "$id": "155", + "$id": "176", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.IGrabbableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "Bat 2H" }, "IsCompleted": false, - "Name": "Grab Object", "Metadata": null } } ] }, "TargetStep": { - "$id": "156", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 6, + "$id": "177", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "178", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "4b5831f5-c9d7-4a2b-8b02-2b55837fb205" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "157", + "$id": "179", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "158", + "$id": "180", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "159", + "$id": "181", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "160", + "$id": "182", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "161", + "$id": "183", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$ref": "94" + "$ref": "106" }, { - "$ref": "95" + "$ref": "107" }, { - "$ref": "96" + "$ref": "108" } ] }, "ChildMetadata": { - "$id": "162", + "$id": "184", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "163", + "$id": "185", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "164", + "$id": "186", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -899,7 +1039,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "165", + "$id": "187", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -912,69 +1052,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "166", + "$id": "188", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "189", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "189" + }, "Metadata": { - "$id": "167", + "$id": "190", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "168", + "$id": "191", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "169", + "$id": "192", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "170", + "$id": "193", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "171", + "$id": "194", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 356.0, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "8bd5e2f7-a6c1-4376-a087-2c112138b165" }, "Data": { - "$id": "172", + "$id": "195", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Touch Condition", "Description": null, "Behaviors": { - "$id": "173", + "$id": "196", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "174", + "$id": "197", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "175", + "$id": "198", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "176", + "$id": "199", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "177", + "$id": "200", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "178", + "$id": "201", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "To test the touch condition, touch the red cube" }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -983,83 +1130,102 @@ } }, "Transitions": { - "$id": "179", + "$id": "202", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "180", + "$id": "203", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "181", + "$id": "204", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "182", + "$id": "205", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "183", + "$id": "206", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "184", + "$id": "207", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "185", + "$id": "208", "$type": "VRBuilder.BasicInteraction.Conditions.TouchedCondition, VRBuilder.BasicInteraction", "Data": { - "$id": "186", + "$id": "209", "$type": "VRBuilder.BasicInteraction.Conditions.TouchedCondition+EntityData, VRBuilder.BasicInteraction", + "TouchableProperties": { + "$id": "210", + "$type": "VRBuilder.Core.SceneObjects.MultipleScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.ITouchableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", + "guids": { + "$id": "211", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "985f6a95-4453-4418-9b31-d4b5f7160037" + ] + } + }, "TouchableProperty": { - "$id": "187", + "$id": "212", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.BasicInteraction.Properties.ITouchableProperty, VRBuilder.BasicInteraction]], VRBuilder.Core", "UniqueName": "GravityCube 1" }, "IsCompleted": false, - "Name": "Touch Object", "Metadata": null } } ] }, "TargetStep": { - "$id": "188", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 2, + "$id": "213", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "214", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "933d8ae3-d75e-4372-a49c-cff2fb958d74" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "189", + "$id": "215", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "190", + "$id": "216", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "191", + "$id": "217", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "192", + "$id": "218", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "193", + "$id": "219", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "194", + "$id": "220", "$type": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.FoldableAttribute", "TypeId": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "195", + "$id": "221", "$type": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.DeletableAttribute", "TypeId": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "196", + "$id": "222", "$type": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.HelpAttribute", "TypeId": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" @@ -1067,17 +1233,17 @@ ] }, "ChildMetadata": { - "$id": "197", + "$id": "223", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "198", + "$id": "224", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "199", + "$id": "225", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -1089,7 +1255,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "200", + "$id": "226", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -1102,69 +1268,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "201", + "$id": "227", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "228", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "228" + }, "Metadata": { - "$id": "202", + "$id": "229", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "203", + "$id": "230", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "204", + "$id": "231", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "205", + "$id": "232", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "206", + "$id": "233", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 1241.6, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "4b5831f5-c9d7-4a2b-8b02-2b55837fb205" }, "Data": { - "$id": "207", + "$id": "234", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Control Position - Lever", "Description": null, "Behaviors": { - "$id": "208", + "$id": "235", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "209", + "$id": "236", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "210", + "$id": "237", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "211", + "$id": "238", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "212", + "$id": "239", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "213", + "$id": "240", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "Great. Now pull the lever all the way towards you, then release it." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": false } } @@ -1173,33 +1346,44 @@ } }, "Transitions": { - "$id": "214", + "$id": "241", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "215", + "$id": "242", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "216", + "$id": "243", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "217", + "$id": "244", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "218", + "$id": "245", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "219", + "$id": "246", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "220", + "$id": "247", "$type": "VRBuilder.VRIF.Conditions.CheckControlPositionCondition, Assembly-CSharp", "Data": { - "$id": "221", + "$id": "248", "$type": "VRBuilder.VRIF.Conditions.CheckControlPositionCondition+EntityData, Assembly-CSharp", + "ContinuousControl": { + "$id": "249", + "$type": "VRBuilder.Core.SceneObjects.SingleScenePropertyReference`1[[VRBuilder.VRIF.Properties.IContinuousControlProperty, Assembly-CSharp]], VRBuilder.Core", + "guids": { + "$id": "250", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "193afc1c-1557-4bbd-b98a-f0c6c117fdd8" + ] + } + }, "ControlProperty": { - "$id": "222", + "$id": "251", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.VRIF.Properties.IContinuousControlProperty, Assembly-CSharp]], VRBuilder.Core", "UniqueName": "Hinge" }, @@ -1207,52 +1391,61 @@ "MaxPosition": 0.1, "RequireRelease": true, "IsCompleted": false, - "Name": "Check Control Position", + "Name": "Set 'Hinge' between 0 and 0.1", "Metadata": null } } ] }, "TargetStep": { - "$id": "223", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 7, + "$id": "252", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "253", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "3acfd6d9-94b8-4b23-952d-34ef8755cdc5" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "224", + "$id": "254", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "225", + "$id": "255", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "226", + "$id": "256", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "227", + "$id": "257", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "228", + "$id": "258", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "229", + "$id": "259", "$type": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.FoldableAttribute", "TypeId": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "230", + "$id": "260", "$type": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.DeletableAttribute", "TypeId": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "231", + "$id": "261", "$type": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.HelpAttribute", "TypeId": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" @@ -1260,17 +1453,17 @@ ] }, "ChildMetadata": { - "$id": "232", + "$id": "262", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "233", + "$id": "263", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "234", + "$id": "264", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -1282,7 +1475,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "235", + "$id": "265", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -1295,69 +1488,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "236", + "$id": "266", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "267", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "267" + }, "Metadata": { - "$id": "237", + "$id": "268", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "238", + "$id": "269", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "239", + "$id": "270", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "240", + "$id": "271", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "241", + "$id": "272", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 1519.2, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "3acfd6d9-94b8-4b23-952d-34ef8755cdc5" }, "Data": { - "$id": "242", + "$id": "273", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "Control Position - Wheel", "Description": null, "Behaviors": { - "$id": "243", + "$id": "274", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "244", + "$id": "275", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "245", + "$id": "276", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "246", + "$id": "277", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "247", + "$id": "278", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "248", + "$id": "279", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", "Text": "Now start turning the wheel counterclockwise." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": true } } @@ -1366,33 +1566,44 @@ } }, "Transitions": { - "$id": "249", + "$id": "280", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "250", + "$id": "281", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "251", + "$id": "282", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "252", + "$id": "283", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "253", + "$id": "284", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "254", + "$id": "285", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "255", + "$id": "286", "$type": "VRBuilder.VRIF.Conditions.CheckControlPositionCondition, Assembly-CSharp", "Data": { - "$id": "256", + "$id": "287", "$type": "VRBuilder.VRIF.Conditions.CheckControlPositionCondition+EntityData, Assembly-CSharp", + "ContinuousControl": { + "$id": "288", + "$type": "VRBuilder.Core.SceneObjects.SingleScenePropertyReference`1[[VRBuilder.VRIF.Properties.IContinuousControlProperty, Assembly-CSharp]], VRBuilder.Core", + "guids": { + "$id": "289", + "$type": "System.Collections.Generic.List`1[[System.Guid, mscorlib]], mscorlib", + "$values": [ + "9aae34cc-880e-4e92-895a-356e5d3a36de" + ] + } + }, "ControlProperty": { - "$id": "257", + "$id": "290", "$type": "VRBuilder.Core.SceneObjects.ScenePropertyReference`1[[VRBuilder.VRIF.Properties.IContinuousControlProperty, Assembly-CSharp]], VRBuilder.Core", "UniqueName": "SteeringWheel Vertical" }, @@ -1400,52 +1611,61 @@ "MaxPosition": 0.6, "RequireRelease": false, "IsCompleted": false, - "Name": "Check Control Position", + "Name": "Set 'SteeringWheel Vertical' between 0.5 and 0.6", "Metadata": null } } ] }, "TargetStep": { - "$id": "258", - "$type": "VRBuilder.Core.Serialization.ImprovedNewtonsoftJsonProcessSerializer+ProcessWrapper+StepRef, VRBuilder.Core", - "PositionIndex": 8, + "$id": "291", + "$type": "VRBuilder.Core.Serialization.NewtonsoftJsonProcessSerializerV4+Wrapper+StepRef, VRBuilder.Core", "LifeCycle": null, - "StepMetadata": null + "StepMetadata": { + "$id": "292", + "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", + "Position": { + "x": 0.0, + "y": 0.0 + }, + "StepType": null, + "Guid": "f43dcb9b-4f35-4564-b833-a3736186b785" + }, + "Parent": null }, "Mode": null, "IsCompleted": false, "Metadata": { - "$id": "259", + "$id": "293", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "260", + "$id": "294", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "Conditions": { - "$id": "261", + "$id": "295", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.ReorderableListOfAttribute": { - "$id": "262", + "$id": "296", "$type": "VRBuilder.Core.Attributes.ListOfAttribute+Metadata, VRBuilder.Core", "ChildAttributes": { - "$id": "263", + "$id": "297", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Attributes.MetadataAttribute, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "264", + "$id": "298", "$type": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.FoldableAttribute", "TypeId": "VRBuilder.Core.Attributes.FoldableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "265", + "$id": "299", "$type": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.DeletableAttribute", "TypeId": "VRBuilder.Core.Attributes.DeletableAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" }, { - "$id": "266", + "$id": "300", "$type": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core", "Name": "VRBuilder.Core.Attributes.HelpAttribute", "TypeId": "VRBuilder.Core.Attributes.HelpAttribute, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" @@ -1453,17 +1673,17 @@ ] }, "ChildMetadata": { - "$id": "267", + "$id": "301", "$type": "System.Collections.Generic.List`1[[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "$values": [ { - "$id": "268", + "$id": "302", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "VRBuilder.Core.Attributes.FoldableAttribute": true, "VRBuilder.Core.Attributes.DeletableAttribute": null, "VRBuilder.Core.Attributes.HelpAttribute": null, "ReorderableElement": { - "$id": "269", + "$id": "303", "$type": "VRBuilder.Core.UI.Drawers.Metadata.ReorderableElementMetadata, VRBuilder.Core", "MoveUp": false, "MoveDown": false, @@ -1475,7 +1695,7 @@ } }, "VRBuilder.Core.Attributes.ExtendableListAttribute": { - "$id": "270", + "$id": "304", "$type": "VRBuilder.Core.Attributes.ExtendableListAttribute+SerializedTypeWrapper, VRBuilder.Core", "Type": "VRBuilder.Core.Conditions.ICondition, VRBuilder.Core, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" } @@ -1488,69 +1708,76 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "271", + "$id": "305", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "306", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "306" + }, "Metadata": { - "$id": "272", + "$id": "307", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "273", + "$id": "308", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "274", + "$id": "309", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", - "selected": 0 + "selected": 1 } } } } }, { - "$id": "275", + "$id": "310", "$type": "VRBuilder.Core.Step, VRBuilder.Core", "StepMetadata": { - "$id": "276", + "$id": "311", "$type": "VRBuilder.Core.StepMetadata, VRBuilder.Core", "Position": { "x": 1757.6, "y": 0.0 - } + }, + "StepType": "default", + "Guid": "f43dcb9b-4f35-4564-b833-a3736186b785" }, "Data": { - "$id": "277", + "$id": "312", "$type": "VRBuilder.Core.Step+EntityData, VRBuilder.Core", "Name": "End", "Description": null, "Behaviors": { - "$id": "278", + "$id": "313", "$type": "VRBuilder.Core.BehaviorCollection, VRBuilder.Core", "Data": { - "$id": "279", + "$id": "314", "$type": "VRBuilder.Core.BehaviorCollection+EntityData, VRBuilder.Core", "Behaviors": { - "$id": "280", + "$id": "315", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.IBehavior, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "281", + "$id": "316", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior, VRBuilder.Core", "Data": { - "$id": "282", + "$id": "317", "$type": "VRBuilder.Core.Behaviors.PlayAudioBehavior+EntityData, VRBuilder.Core", "AudioData": { - "$id": "283", + "$id": "318", "$type": "VRBuilder.TextToSpeech.Audio.TextToSpeechAudio, VRBuilder.TextToSpeech", - "Text": "That's enough. This concludes this demo process. Feel free to check our the workflow editor to see how the process was built and look at the referenced objects to learn about their configuration." + "Text": "That's enough. This concludes this demo process. Feel free to check our the process editor to see how the process was built and look at the referenced objects to learn about their configuration." }, "ExecutionStages": 1, "Volume": 1.0, "Metadata": null, - "Name": "Play Audio", "IsBlocking": true } } @@ -1559,23 +1786,23 @@ } }, "Transitions": { - "$id": "284", + "$id": "319", "$type": "VRBuilder.Core.TransitionCollection, VRBuilder.Core", "Data": { - "$id": "285", + "$id": "320", "$type": "VRBuilder.Core.TransitionCollection+EntityData, VRBuilder.Core", "Transitions": { - "$id": "286", + "$id": "321", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.ITransition, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "287", + "$id": "322", "$type": "VRBuilder.Core.Transition, VRBuilder.Core", "Data": { - "$id": "288", + "$id": "323", "$type": "VRBuilder.Core.Transition+EntityData, VRBuilder.Core", "Conditions": { - "$id": "289", + "$id": "324", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Conditions.ICondition, VRBuilder.Core]], mscorlib", "$values": [] }, @@ -1589,21 +1816,27 @@ } } }, - "Current": null, "Mode": null, "ToUnlock": { - "$id": "290", + "$id": "325", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.Behaviors.LockablePropertyReference, VRBuilder.Core]], mscorlib", "$values": [] }, + "TagsToUnlock": { + "$id": "326", + "$type": "System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib],[System.Collections.Generic.IEnumerable`1[[System.Type, mscorlib]], mscorlib]], mscorlib" + }, + "GroupsToUnlock": { + "$ref": "326" + }, "Metadata": { - "$id": "291", + "$id": "327", "$type": "VRBuilder.Core.Metadata, VRBuilder.Core", "values": { - "$id": "292", + "$id": "328", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib]], mscorlib", "TabsGroup": { - "$id": "293", + "$id": "329", "$type": "System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Object, mscorlib]], mscorlib", "selected": 0 } @@ -1614,67 +1847,72 @@ ] }, "Process": { - "$id": "294", + "$id": "330", "$type": "VRBuilder.Core.Process, VRBuilder.Core", "CurrentStep": null, + "ProcessMetadata": { + "$id": "331", + "$type": "VRBuilder.Core.ProcessMetadata, VRBuilder.Core", + "StringLocalizationTable": null, + "Guid": "7ac84a6b-1821-4238-8888-36c14aac504a" + }, "Data": { - "$id": "295", + "$id": "332", "$type": "VRBuilder.Core.Process+EntityData, VRBuilder.Core", "Chapters": { - "$id": "296", + "$id": "333", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.IChapter, VRBuilder.Core]], mscorlib", "$values": [ { - "$id": "297", + "$id": "334", "$type": "VRBuilder.Core.Chapter, VRBuilder.Core", "ChapterMetadata": { - "$id": "298", + "$id": "335", "$type": "VRBuilder.Core.ChapterMetadata, VRBuilder.Core", - "LastSelectedStep": { - "$ref": "275" - }, + "LastSelectedStep": null, "EntryNodePosition": { "x": -274.4, "y": 0.0 - } + }, + "Guid": "8d32cd77-a14e-4230-b8d9-d31acbcfa6cf" }, "Data": { - "$id": "299", + "$id": "336", "$type": "VRBuilder.Core.Chapter+EntityData, VRBuilder.Core", "Name": "Chapter 1", "FirstStep": { - "$ref": "3" + "$ref": "4" }, "Steps": { - "$id": "300", + "$id": "337", "$type": "System.Collections.Generic.List`1[[VRBuilder.Core.IStep, VRBuilder.Core]], mscorlib", "$values": [ { - "$ref": "3" + "$ref": "4" }, { - "$ref": "38" + "$ref": "43" }, { - "$ref": "70" + "$ref": "79" }, { - "$ref": "105" + "$ref": "118" }, { - "$ref": "138" + "$ref": "157" }, { - "$ref": "170" + "$ref": "193" }, { - "$ref": "205" + "$ref": "232" }, { - "$ref": "240" + "$ref": "271" }, { - "$ref": "275" + "$ref": "310" } ] } @@ -1683,13 +1921,12 @@ ] }, "FirstChapter": { - "$ref": "297" + "$ref": "334" }, - "Current": null, "Name": "Demo - VRIF Integration", "Mode": null, "Metadata": null } }, - "$serializerVersion": 2 + "$serializerVersion": 4 } \ No newline at end of file diff --git a/Documentation/vrif-integration-manual.md b/Documentation/vrif-integration-manual.md index 3a90791..e3f1056 100644 --- a/Documentation/vrif-integration-manual.md +++ b/Documentation/vrif-integration-manual.md @@ -1,20 +1,24 @@ # VRIF Interaction Component for VR Builder ## Table of Contents -1. [Introduction](#introduction) -1. [Installation](#installation) +- [VRIF Interaction Component for VR Builder](#vrif-interaction-component-for-vr-builder) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Installation](#installation) - [Requirements](#requirements) - [How to Install](#how-to-install) -1. [Quick Start](#quick-start) -1. [Differences from XRIT](#differences-from-xrit) -1. [Properties](#data-properties) + - [Quick Start](#quick-start) + - [Differences from XRIT](#differences-from-xrit) + - [Properties](#properties) - [Grabbable Property](#grabbable-property) - [Touchable Property](#touchable-property) - [Usable Property](#usable-property) - [Snappable/Snap Zone Property](#snappablesnap-zone-property) - [Lever/Wheel Property](#leverwheel-property) -1. [Check Control Position Condition](#check-control-position-condition) -1. [Contact](#contact) + - [Check Control Position Condition](#check-control-position-condition) + - [Description](#description) + - [Configuration](#configuration) + - [Contact](#contact) ## Introduction @@ -23,7 +27,7 @@ VR Builder is a tool for quickly creating sequential interactive processes, like ## Installation ### Requirements -- This add-on requires VR Builder version 3.0.0 or later to work. +- This add-on requires VR Builder version 4.0.0 or later to work. - This add-on is based on VRIF 2.0. Earlier versions might work, but they are untested. ### How to Install diff --git a/Documentation/vrif-integration-manual.pdf b/Documentation/vrif-integration-manual.pdf index ef69d899c9c743dbaa4d4b590c67157507c515be..b882c1a8e751bb6091661816bc86bbbf786123a9 100644 GIT binary patch delta 40313 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�{JZfnRNgSOHz1xoX1k1fWP-Ab%0K@E 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 delta 40515 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 ContinuousControl { get; set; } + + [DataMember] + [HideInProcessInspector] + [Obsolete("Use ContinuousControl instead.")] + [LegacyProperty(nameof(ContinuousControl))] public ScenePropertyReference ControlProperty { get; set; } [DataMember] @@ -38,7 +45,7 @@ public class EntityData : IConditionData [DataMember] [HideInProcessInspector] - public string Name { get; set; } + public string Name => $"Set {ContinuousControl} between {MinPosition} and {MaxPosition}"; public Metadata Metadata { get; set; } } @@ -51,7 +58,7 @@ public EntityAutocompleter(EntityData data) : base(data) public override void Complete() { - Data.ControlProperty.Value.FastForwardPosition(Data.MinPosition + (Data.MaxPosition - Data.MinPosition) / 2); + Data.ContinuousControl.Value.FastForwardPosition(Data.MinPosition + (Data.MaxPosition - Data.MinPosition) / 2); } } @@ -59,17 +66,17 @@ private class ActiveProcess : BaseActiveProcessOverCompletable { protected override bool CheckIfCompleted() { - if(Data.MinPosition > Data.MaxPosition) + if (Data.MinPosition > Data.MaxPosition) { - Debug.LogError($"{typeof(CheckControlPositionCondition).Name} for object {Data.ControlProperty.UniqueName} will never complete as the minimum value is greater than the maximum value."); + Debug.LogError($"{typeof(CheckControlPositionCondition).Name} for object {Data.ContinuousControl} will never complete as the minimum value is greater than the maximum value."); } - if(Data.RequireRelease && Data.ControlProperty.Value.IsInteracting) + if (Data.RequireRelease && Data.ContinuousControl.Value.IsInteracting) { return false; } - return Data.ControlProperty.Value.Position >= Data.MinPosition && Data.ControlProperty.Value.Position <= Data.MaxPosition; + return Data.ContinuousControl.Value.Position >= Data.MinPosition && Data.ContinuousControl.Value.Position <= Data.MaxPosition; } public ActiveProcess(EntityData data) : base(data) @@ -77,21 +84,20 @@ public ActiveProcess(EntityData data) : base(data) } } - public CheckControlPositionCondition() : this("") + public CheckControlPositionCondition() : this(Guid.Empty) { } - public CheckControlPositionCondition(IContinuousControlProperty control, float minPosition, float maxPosition, bool requireRelease = false, string name = null) : this(ProcessReferenceUtils.GetNameFrom(control), minPosition, maxPosition, requireRelease, name) + public CheckControlPositionCondition(IContinuousControlProperty control, float minPosition, float maxPosition, bool requireRelease = false) : this(ProcessReferenceUtils.GetUniqueIdFrom(control), minPosition, maxPosition, requireRelease) { } - public CheckControlPositionCondition(string controlName, float minPosition = 0, float maxPosition = 1, bool requireRelease = false, string name = "Check Control Position") + public CheckControlPositionCondition(Guid control, float minPosition = 0, float maxPosition = 1, bool requireRelease = false) { - Data.ControlProperty = new ScenePropertyReference(controlName); + Data.ContinuousControl = new SingleScenePropertyReference(control); Data.MinPosition = minPosition; Data.MaxPosition = maxPosition; Data.RequireRelease = requireRelease; - Data.Name = name; } public override IStageProcess GetActiveProcess() From b788540699232e2d70ce1fdb86826576ccd9564b Mon Sep 17 00:00:00 2001 From: Marcello Tridenti Date: Tue, 30 Apr 2024 13:45:16 +0200 Subject: [PATCH 2/3] Updated changelog --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cac50c..31a21c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Changelog - VRIF Interaction Component -**v2.0.0 (2023-05-03 - Current)** +**v3.0.0 (2024-04-30 - Current)** + +*[Changed]* +- Now compatible with VR Builder 4.0.0 and later versions. + +**v2.0.0 (2023-05-03)** *[Changed]* - Now compatible with VR Builder 3.0.0 and later versions. From 0f5f05e9eb92b2aa892cb0fb90b75d396737c81b Mon Sep 17 00:00:00 2001 From: Marcello Tridenti Date: Tue, 30 Apr 2024 13:51:27 +0200 Subject: [PATCH 3/3] Fixed warnings --- Source/Runtime/Properties/SnapZoneProperty.cs | 6 +++--- Source/Runtime/Properties/SnappableProperty.cs | 14 +++++++------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Source/Runtime/Properties/SnapZoneProperty.cs b/Source/Runtime/Properties/SnapZoneProperty.cs index 7558509..d0000b7 100644 --- a/Source/Runtime/Properties/SnapZoneProperty.cs +++ b/Source/Runtime/Properties/SnapZoneProperty.cs @@ -31,7 +31,7 @@ protected SnapZone SnapZone { get { - if(snapZone == null) + if (snapZone == null) { snapZone = GetComponent(); } @@ -80,7 +80,7 @@ private void HandleSnapped(Grabbable grabbable) SnappedObject = grabbable.GetComponent(); if (SnappedObject == null) { - Debug.LogWarning($"SnapZone '{SceneObject.UniqueName}' received snap from object '{grabbable.gameObject.name}' without {typeof(SnappableProperty).Name}"); + Debug.LogWarning($"SnapZone '{SceneObject.GameObject.name}' received snap from object '{grabbable.gameObject.name}' without {typeof(SnappableProperty).Name}"); } else { @@ -116,7 +116,7 @@ protected void EmitUnsnapped() } public void Configure(IMode mode) - { + { } protected override void InternalSetLocked(bool lockState) diff --git a/Source/Runtime/Properties/SnappableProperty.cs b/Source/Runtime/Properties/SnappableProperty.cs index 8ec11de..e0ff033 100644 --- a/Source/Runtime/Properties/SnappableProperty.cs +++ b/Source/Runtime/Properties/SnappableProperty.cs @@ -27,7 +27,7 @@ public class SnappableProperty : LockableProperty, ISnappableProperty /// The grabbable property on this game object. /// protected GrabbableProperty GrabbableProperty - { + { get { if (grabbableProperty == null) @@ -37,8 +37,8 @@ protected GrabbableProperty GrabbableProperty return grabbableProperty; } - } - + } + /// public bool LockObjectOnSnap { get; set; } @@ -82,10 +82,10 @@ private void HandleUnsnapped() private void HandleSnapped() { Transform parent = transform.parent; - - if(parent == null) + + if (parent == null) { - Debug.LogError($"Object {SceneObject.UniqueName} should be snapped but is not child object."); + Debug.LogError($"Object {SceneObject.GameObject.name} should be snapped but is not child object."); return; } @@ -93,7 +93,7 @@ private void HandleSnapped() if (snapZone == null) { - Debug.LogWarning($"Object {SceneObject.UniqueName} has been snapped to a snap zone without a {typeof(SnapZoneProperty).Name}. The VR Builder process will not see the object as snapped."); + Debug.LogWarning($"Object {SceneObject.GameObject.name} has been snapped to a snap zone without a {typeof(SnapZoneProperty).Name}. The VR Builder process will not see the object as snapped."); return; }