From d50df5655ab175b3d0da17eea300631c664861ab Mon Sep 17 00:00:00 2001 From: Kenneth Yang <82800265+kjy5@users.noreply.github.com> Date: Thu, 5 Sep 2024 12:42:43 -0700 Subject: [PATCH 1/9] feat: Automation pipeline UI (#720) * Basic UI components * Hide and show side panels * Upgrade to Unity 6 * Create UI prefab, Switched to using prebuilt tab menu * Start to attach scripting * Build for Linux and WebGL (need to update Urchin) * Bind left side panel state, needs converter for bool to DisplayStyle * State based left side panel hide/show * RSP heading based on mode * Automation stack and initial styling * Inspector stack, color names (might remove) * Probe color buttons * Inspector stack visibility update based on mode * Create automation stack, add state to right side panel * Enable/disable automation stack based on probe's connection * Inspector selector probe * Add inspector state * Reset Bregma from UI, fixed inspector probe label binding * Prepare to use list instead of dropdown to pick insertion * Foundation for target list view * Removed styling * Generate options for target insertions * Separated automation stages, list not working, trying radio button group * Try with radio button group, not sure * List targetable in radio button group * Remove panel background when hidden * WIP color insertion options (worked then stopped) * Fixed options caching, colors work * Refactor MBC to prep for automation functions * Draw trajectory lines * Drive to entry coordinate. Lines seem to be regenerated unnecessarily * Fixed removal, inefficient redraw every frame * It'll continue to redraw * Implement probe state * Comments * Unified left/right panel state and handler * Bregma calibration text fields * Dura calibration, bad resume on entry coordinate * WIP Ensure trajectory is not recomputed unnecessarily * Fixed recompute after complete * Bindings for insertion section * Add stop and exit buttons, hyphened some names, need to fix probe switch * Update Unity, fixed exception on probe switch * Rollback commited main scene changes * Added new states to automation * Prepare for drive, change Bregma calibration to monitor depth * Compute depth based drive coordinate and navigate there * Drop to Dura via depth * Drive button visibility * WIP drive pipeline * WIP drive down, incorrect offsetting * Fixed offset * Drive and pause * Drive cycle * Enable Click through on panel --- .../.idea/projectSettingsUpdater.xml | 2 +- .../AddressableAssetSettings.asset | 84 +- .../AssetGroups/Built In Data.asset | 15 +- Assets/DefaultVolumeProfile.asset | 795 + Assets/DefaultVolumeProfile.asset.meta | 8 + Assets/Editor/ModelsManager.cs | 50 +- .../InputSystem/ProbeControlInputActions.cs | 8 +- Assets/InputSystem/ProbeMetaControls.cs | 8 +- .../BrainRegion/BrainRegionOpaqueLit.mat | 6 +- .../BrainRegion/BrainRegionOpaqueUnlit.mat | 6 +- .../BrainRegion/BrainRegionTransparentLit.mat | 6 +- .../BrainRegionTransparentUnlit.mat | 6 +- Assets/Materials/CraniotomyMaterial.mat | 4 +- Assets/Materials/EphysAtlasLineMaterial.mat | 6 +- Assets/Materials/LitGrey.mat | 6 +- Assets/Materials/Probe/GoldConnectorCable.mat | 6 +- Assets/Materials/Probe/Green.mat | 6 +- Assets/Materials/Probe/IBLProbeMaterial.mat | 6 +- Assets/Materials/Probe/LitBlackMaterial.mat | 6 +- Assets/Materials/Probe/NeuronMaterial.mat | 6 +- Assets/Materials/ProbeMaterial.mat | 4 +- Assets/Materials/ProbeTransparentMaterial.mat | 4 +- Assets/Materials/SiteMaterial.mat | 6 +- Assets/Materials/SkullMaterial.mat | 6 +- Assets/Materials/SurfacePointMaterial.mat | 6 +- .../TrajectoryPlanner/CollisionMaterial.mat | 6 +- .../TrajectoryPlanner/ProbeRecordingChunk.mat | 6 +- .../TrajectoryPlanner/SensapexMetal.mat | 6 +- .../Materials/Volume/InPlaneSliceMaterial.mat | 6 +- .../Volume/ProbePanelChannelMaterial.mat | 6 +- .../Volume/ProbePanelSliceMaterial.mat | 6 +- .../InsertionSelectionPanel.prefab | 37 +- Assets/Prefabs/UI/UI.prefab | 83 + Assets/Prefabs/UI/UI.prefab.meta | 7 + Assets/Scenes/TrajectoryPlanner.unity | 362 +- Assets/Scripts/Core/Util/IsExternalInit.cs | 7 + .../Scripts/Core/Util/IsExternalInit.cs.meta | 2 + .../Core/Util/ResettingScriptableObject.cs | 31 + .../Util/ResettingScriptableObject.cs.meta | 2 + Assets/Scripts/EphysLink/EphysLinkModels.cs | 2 +- .../Probes/ManipulatorBehaviorController.meta | 8 + .../ManipulatorBehaviorController.cs | 144 +- .../ManipulatorBehaviorController.cs.meta | 0 ...Controller_Automation_BregmaCalibration.cs | 79 + ...oller_Automation_BregmaCalibration.cs.meta | 2 + ...orController_Automation_DuraCalibration.cs | 58 + ...troller_Automation_DuraCalibration.cs.meta | 2 + ...BehaviorController_Automation_Insertion.cs | 471 + ...iorController_Automation_Insertion.cs.meta | 2 + ...orController_Automation_TargetInsertion.cs | 360 + ...troller_Automation_TargetInsertion.cs.meta | 2 + .../Pinpoint/Probes/ProbeAutomationState.cs | 103 + .../Probes/ProbeAutomationState.cs.meta | 2 + .../Probes/ProbeAutomationStateManager.cs | 225 + .../ProbeAutomationStateManager.cs.meta | 2 + .../Scripts/Pinpoint/Probes/ProbeManager.cs | 12 +- .../Pinpoint/TrajectoryPlannerManager.cs | 4 +- .../InsertionSelectionPanelHandler.cs | 1 + .../ManipulatorConnectionPanel.cs | 6 +- Assets/Scripts/UI/AutomationStack.meta | 8 + .../AutomationStack/AutomationStackHandler.cs | 241 + .../AutomationStackHandler.cs.meta | 2 + ...utomationStackHandler_BregmaCalibration.cs | 26 + ...tionStackHandler_BregmaCalibration.cs.meta | 2 + .../AutomationStackHandler_DuraCalibration.cs | 25 + ...mationStackHandler_DuraCalibration.cs.meta | 2 + .../AutomationStackHandler_Insertion.cs | 84 + .../AutomationStackHandler_Insertion.cs.meta | 2 + .../AutomationStackHandler_TargetInsertion.cs | 206 + ...mationStackHandler_TargetInsertion.cs.meta | 2 + Assets/Scripts/UI/States.meta | 8 + .../UI/States/AutomationStackState.asset | 17 + .../UI/States/AutomationStackState.asset.meta | 8 + .../Scripts/UI/States/AutomationStackState.cs | 508 + .../UI/States/AutomationStackState.cs.meta | 2 + .../UI/States/InspectorStackState.asset | 14 + .../UI/States/InspectorStackState.asset.meta | 8 + .../Scripts/UI/States/InspectorStackState.cs | 18 + .../UI/States/InspectorStackState.cs.meta | 2 + Assets/Scripts/UI/States/UIPanelState.asset | 17 + .../Scripts/UI/States/UIPanelState.asset.meta | 8 + Assets/Scripts/UI/States/UIPanelState.cs | 149 + Assets/Scripts/UI/States/UIPanelState.cs.meta | 2 + Assets/Scripts/UI/UIPanelHandler.cs | 121 + Assets/Scripts/UI/UIPanelHandler.cs.meta | 2 + Assets/Scripts/UI/pinpoint.ui.asmdef | 9 +- Assets/Shaders/StimulusTests/BarMaterial.mat | 6 +- .../Shaders/StimulusTests/GaborMaterial.mat | 6 +- Assets/Shaders/StimulusTests/LinearGrey.mat | 6 +- .../Shaders/StimulusTests/MotionMaterial.mat | 6 +- .../Shaders/StimulusTests/SparkMaterial.mat | 6 +- .../LiberationSans SDF - Fallback.asset | 248 +- .../LiberationSans SDF.asset | 23 +- .../Style Sheets/Default Style Sheet.asset | 23 +- .../TextMesh Pro/Resources/TMP Settings.asset | 17 +- Assets/TextMesh Pro/Shaders/SDFFunctions.hlsl | 178 + .../Shaders/SDFFunctions.hlsl.meta | 10 + .../Shaders/TMP_Bitmap-Custom-Atlas.shader | 72 +- .../Shaders/TMP_Bitmap-Mobile.shader | 52 +- Assets/TextMesh Pro/Shaders/TMP_Bitmap.shader | 62 +- .../Shaders/TMP_SDF Overlay.shader | 83 +- .../TextMesh Pro/Shaders/TMP_SDF SSD.shader | 95 +- .../Shaders/TMP_SDF-HDRP LIT.shadergraph | 12074 ++++++++++++++++ .../Shaders/TMP_SDF-HDRP LIT.shadergraph.meta | 10 + .../Shaders/TMP_SDF-HDRP UNLIT.shadergraph | 11759 +++++++++++++++ .../TMP_SDF-HDRP UNLIT.shadergraph.meta | 10 + .../Shaders/TMP_SDF-Mobile Masking.shader | 77 +- .../Shaders/TMP_SDF-Mobile Overlay.shader | 68 +- .../Shaders/TMP_SDF-Mobile SSD.shader | 6 +- .../Shaders/TMP_SDF-Mobile-2-Pass.shader | 389 + .../Shaders/TMP_SDF-Mobile-2-Pass.shader.meta | 9 + .../Shaders/TMP_SDF-Mobile.shader | 26 +- .../Shaders/TMP_SDF-Surface-Mobile.shader | 9 +- .../Shaders/TMP_SDF-Surface.shader | 11 +- .../Shaders/TMP_SDF-URP Lit.shadergraph | 11932 +++++++++++++++ .../Shaders/TMP_SDF-URP Lit.shadergraph.meta | 10 + .../Shaders/TMP_SDF-URP Unlit.shadergraph | 11629 +++++++++++++++ .../TMP_SDF-URP Unlit.shadergraph.meta | 10 + Assets/TextMesh Pro/Shaders/TMP_SDF.shader | 81 +- Assets/TextMesh Pro/Shaders/TMP_Sprite.shader | 101 +- Assets/TextMesh Pro/Shaders/TMPro.cginc.meta | 2 +- .../TextMesh Pro/Shaders/TMPro_Mobile.cginc | 32 +- .../Shaders/TMPro_Properties.cginc | 5 - .../TextMesh Pro/Shaders/TMPro_Surface.cginc | 10 +- Assets/TextMesh Pro/Sprites/EmojiOne.png.meta | 132 +- Assets/UI Toolkit/PanelSettings.asset | 14 +- Assets/UI/Components.meta | 8 + Assets/UI/Components/AutomationStack.uxml | 108 + .../UI/Components/AutomationStack.uxml.meta | 10 + .../ChannelMapsAndSlicesListItem.uxml | 6 + .../ChannelMapsAndSlicesListItem.uxml.meta | 10 + Assets/UI/Components/InspectorStack.uxml | 56 + Assets/UI/Components/InspectorStack.uxml.meta | 10 + Assets/UI/Components/ProbeLabel.uxml | 7 + Assets/UI/Components/ProbeLabel.uxml.meta | 10 + Assets/UI/Components/ProbeListItem.uxml | 9 + Assets/UI/Components/ProbeListItem.uxml.meta | 10 + Assets/UI/LeftSidePanel.uxml | 45 + Assets/UI/LeftSidePanel.uxml.meta | 10 + Assets/UI/RightSidePanel.uxml | 53 + Assets/UI/RightSidePanel.uxml.meta | 10 + Assets/UI/Styles.meta | 8 + Assets/UI/Styles/GeneralStyles.uss | 55 + Assets/UI/Styles/GeneralStyles.uss.meta | 11 + Assets/UI/Styles/InspectorStyle.uss | 116 + Assets/UI/Styles/InspectorStyle.uss.meta | 11 + Assets/UI/{ => Styles}/SettingsStyle.uss | 0 Assets/UI/{ => Styles}/SettingsStyle.uss.meta | 0 Assets/UI/UI.uxml | 8 + Assets/UI/UI.uxml.meta | 10 + Assets/UniversalRenderPipelineAsset.asset | 34 +- ...niversalRenderPipelineAsset_Renderer.asset | 28 +- ...niversalRenderPipelineGlobalSettings.asset | 232 +- Packages/manifest.json | 21 +- Packages/packages-lock.json | 140 +- Pinpoint.sln.DotSettings | 4 +- ProjectSettings/GraphicsSettings.asset | 14 +- ProjectSettings/MultiplayerManager.asset | 7 + ProjectSettings/ProjectSettings.asset | 67 +- ProjectSettings/ProjectVersion.txt | 4 +- ProjectSettings/SceneTemplateSettings.json | 97 +- ProjectSettings/ShaderGraphSettings.asset | 1 + ProjectSettings/TagManager.asset | 11 +- ProjectSettings/URPProjectSettings.asset | 2 +- 164 files changed, 53911 insertions(+), 1242 deletions(-) create mode 100644 Assets/DefaultVolumeProfile.asset create mode 100644 Assets/DefaultVolumeProfile.asset.meta create mode 100644 Assets/Prefabs/UI/UI.prefab create mode 100644 Assets/Prefabs/UI/UI.prefab.meta create mode 100644 Assets/Scripts/Core/Util/IsExternalInit.cs create mode 100644 Assets/Scripts/Core/Util/IsExternalInit.cs.meta create mode 100644 Assets/Scripts/Core/Util/ResettingScriptableObject.cs create mode 100644 Assets/Scripts/Core/Util/ResettingScriptableObject.cs.meta create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.meta rename Assets/Scripts/Pinpoint/Probes/{ => ManipulatorBehaviorController}/ManipulatorBehaviorController.cs (81%) rename Assets/Scripts/Pinpoint/Probes/{ => ManipulatorBehaviorController}/ManipulatorBehaviorController.cs.meta (100%) create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs.meta create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs.meta create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs.meta create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs create mode 100644 Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs.meta create mode 100644 Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs create mode 100644 Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs.meta create mode 100644 Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs create mode 100644 Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs.meta create mode 100644 Assets/Scripts/UI/AutomationStack.meta create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler.cs create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler.cs.meta create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_BregmaCalibration.cs create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_BregmaCalibration.cs.meta create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_DuraCalibration.cs create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_DuraCalibration.cs.meta create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_Insertion.cs create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_Insertion.cs.meta create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_TargetInsertion.cs create mode 100644 Assets/Scripts/UI/AutomationStack/AutomationStackHandler_TargetInsertion.cs.meta create mode 100644 Assets/Scripts/UI/States.meta create mode 100644 Assets/Scripts/UI/States/AutomationStackState.asset create mode 100644 Assets/Scripts/UI/States/AutomationStackState.asset.meta create mode 100644 Assets/Scripts/UI/States/AutomationStackState.cs create mode 100644 Assets/Scripts/UI/States/AutomationStackState.cs.meta create mode 100644 Assets/Scripts/UI/States/InspectorStackState.asset create mode 100644 Assets/Scripts/UI/States/InspectorStackState.asset.meta create mode 100644 Assets/Scripts/UI/States/InspectorStackState.cs create mode 100644 Assets/Scripts/UI/States/InspectorStackState.cs.meta create mode 100644 Assets/Scripts/UI/States/UIPanelState.asset create mode 100644 Assets/Scripts/UI/States/UIPanelState.asset.meta create mode 100644 Assets/Scripts/UI/States/UIPanelState.cs create mode 100644 Assets/Scripts/UI/States/UIPanelState.cs.meta create mode 100644 Assets/Scripts/UI/UIPanelHandler.cs create mode 100644 Assets/Scripts/UI/UIPanelHandler.cs.meta create mode 100644 Assets/TextMesh Pro/Shaders/SDFFunctions.hlsl create mode 100644 Assets/TextMesh Pro/Shaders/SDFFunctions.hlsl.meta create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-HDRP LIT.shadergraph.meta create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-HDRP UNLIT.shadergraph.meta create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile-2-Pass.shader create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-Mobile-2-Pass.shader.meta create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-URP Lit.shadergraph.meta create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph create mode 100644 Assets/TextMesh Pro/Shaders/TMP_SDF-URP Unlit.shadergraph.meta create mode 100644 Assets/UI/Components.meta create mode 100644 Assets/UI/Components/AutomationStack.uxml create mode 100644 Assets/UI/Components/AutomationStack.uxml.meta create mode 100644 Assets/UI/Components/ChannelMapsAndSlicesListItem.uxml create mode 100644 Assets/UI/Components/ChannelMapsAndSlicesListItem.uxml.meta create mode 100644 Assets/UI/Components/InspectorStack.uxml create mode 100644 Assets/UI/Components/InspectorStack.uxml.meta create mode 100644 Assets/UI/Components/ProbeLabel.uxml create mode 100644 Assets/UI/Components/ProbeLabel.uxml.meta create mode 100644 Assets/UI/Components/ProbeListItem.uxml create mode 100644 Assets/UI/Components/ProbeListItem.uxml.meta create mode 100644 Assets/UI/LeftSidePanel.uxml create mode 100644 Assets/UI/LeftSidePanel.uxml.meta create mode 100644 Assets/UI/RightSidePanel.uxml create mode 100644 Assets/UI/RightSidePanel.uxml.meta create mode 100644 Assets/UI/Styles.meta create mode 100644 Assets/UI/Styles/GeneralStyles.uss create mode 100644 Assets/UI/Styles/GeneralStyles.uss.meta create mode 100644 Assets/UI/Styles/InspectorStyle.uss create mode 100644 Assets/UI/Styles/InspectorStyle.uss.meta rename Assets/UI/{ => Styles}/SettingsStyle.uss (100%) rename Assets/UI/{ => Styles}/SettingsStyle.uss.meta (100%) create mode 100644 Assets/UI/UI.uxml create mode 100644 Assets/UI/UI.uxml.meta create mode 100644 ProjectSettings/MultiplayerManager.asset diff --git a/.idea/.idea.Pinpoint/.idea/projectSettingsUpdater.xml b/.idea/.idea.Pinpoint/.idea/projectSettingsUpdater.xml index 4bb9f4d2..86cc6c63 100644 --- a/.idea/.idea.Pinpoint/.idea/projectSettingsUpdater.xml +++ b/.idea/.idea.Pinpoint/.idea/projectSettingsUpdater.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/Assets/AddressableAssetsData/AddressableAssetSettings.asset b/Assets/AddressableAssetsData/AddressableAssetSettings.asset index 0a2e394c..2ce23dd8 100644 --- a/Assets/AddressableAssetsData/AddressableAssetSettings.asset +++ b/Assets/AddressableAssetsData/AddressableAssetSettings.asset @@ -21,16 +21,32 @@ MonoBehaviour: m_BundleLocalCatalog: 0 m_CatalogRequestsTimeout: 0 m_DisableCatalogUpdateOnStart: 0 + m_InternalIdNamingMode: 0 + m_InternalBundleIdMode: 1 + m_AssetLoadMode: 0 + m_BundledAssetProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider + m_AssetBundleProviderType: + m_AssemblyName: Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null + m_ClassName: UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider m_IgnoreUnsupportedFilesInBuild: 0 m_UniqueBundleIds: 0 + m_EnableJsonCatalog: 1 m_NonRecursiveBuilding: 0 m_CCDEnabled: 0 m_maxConcurrentWebRequests: 500 + m_UseUWRForLocalBundles: 0 + m_BundleTimeout: 0 + m_BundleRetryCount: 0 + m_BundleRedirectLimit: -1 + m_SharedBundleSettings: 0 + m_SharedBundleSettingsCustomGroupIndex: 0 m_ContiguousBundles: 0 m_StripUnityVersionFromBundleBuild: 0 m_DisableVisibleSubAssetRepresentations: 0 - m_ShaderBundleNaming: 0 - m_ShaderBundleCustomNaming: + m_BuiltInBundleNaming: 0 + mBuiltInBundleCustomNaming: m_MonoScriptBundleNaming: 0 m_CheckForContentUpdateRestrictionsOption: 0 m_MonoScriptBundleCustomNaming: @@ -45,13 +61,11 @@ MonoBehaviour: m_overridePlayerVersion: m_GroupAssets: - {fileID: 11400000, guid: f5ef3838dcf03ab4b8a46a08e76e3145, type: 2} - - {fileID: 11400000, guid: d5389119c92750140ac9a693d91d803d, type: 2} - {fileID: 11400000, guid: 3693e87d2b7c0ab4fa203210015d32dc, type: 2} - {fileID: 11400000, guid: 59ffbdc4842bce949811dc8a3f2f6c37, type: 2} + - {fileID: 11400000, guid: d5389119c92750140ac9a693d91d803d, type: 2} - {fileID: 11400000, guid: eaf52d31609aae946b49dc61e431fd89, type: 2} m_BuildSettings: - m_CompileScriptsInVirtualMode: 0 - m_CleanupStreamingAssetsAfterBuilds: 1 m_LogResourceManagerExceptions: 1 m_BundleBuildPath: Temp/com.unity.addressables/AssetBundles m_ProfileSettings: @@ -60,32 +74,32 @@ MonoBehaviour: m_Id: dff9ccd71970d8840aed7a0320906efa m_ProfileName: Default m_Values: - - m_Id: b28712faecae3244489993d74caf0ba7 - m_Value: '[UnityEditor.EditorUserBuildSettings.activeBuildTarget]' - m_Id: 01e3c05280f34834eb3978814847c527 m_Value: '[UnityEngine.AddressableAssets.Addressables.BuildPath]/[BuildTarget]' + - m_Id: 0dbfffed1e7d1434696f5a6193af38d3 + m_Value: 'ServerData/[BuildTarget]' - m_Id: 6e9217891ed892f40b1933afda7ddded m_Value: '{UnityEngine.AddressableAssets.Addressables.RuntimePath}/[BuildTarget]' - - m_Id: 0dbfffed1e7d1434696f5a6193af38d3 - m_Value: ServerData/[BuildTarget] - m_Id: 8b0e868bf8565ef4ba5a95e7d57f666c - m_Value: https://data.virtualbrainlab.org/PinpointData/1.0.3/[BuildTarget] + m_Value: 'https://data.virtualbrainlab.org/PinpointData/1.0.3/[BuildTarget]' + - m_Id: b28712faecae3244489993d74caf0ba7 + m_Value: '[UnityEditor.EditorUserBuildSettings.activeBuildTarget]' m_ProfileEntryNames: - - m_Id: b28712faecae3244489993d74caf0ba7 - m_Name: BuildTarget - m_InlineUsage: 0 - m_Id: 01e3c05280f34834eb3978814847c527 m_Name: LocalBuildPath m_InlineUsage: 0 - - m_Id: 6e9217891ed892f40b1933afda7ddded - m_Name: LocalLoadPath - m_InlineUsage: 0 - m_Id: 0dbfffed1e7d1434696f5a6193af38d3 m_Name: RemoteBuildPath m_InlineUsage: 0 + - m_Id: 6e9217891ed892f40b1933afda7ddded + m_Name: LocalLoadPath + m_InlineUsage: 0 - m_Id: 8b0e868bf8565ef4ba5a95e7d57f666c m_Name: RemoteLoadPath m_InlineUsage: 0 + - m_Id: b28712faecae3244489993d74caf0ba7 + m_Name: BuildTarget + m_InlineUsage: 0 m_ProfileVersion: 1 m_LabelTable: m_LabelNames: @@ -97,45 +111,9 @@ MonoBehaviour: m_CertificateHandlerType: m_AssemblyName: m_ClassName: - m_ActivePlayerDataBuilderIndex: 3 + m_ActivePlayerDataBuilderIndex: 2 m_DataBuilders: - {fileID: 11400000, guid: a9b76b6fc38ca524e83f460f344d47ba, type: 2} - - {fileID: 11400000, guid: 7823640370daec140b301df16cada5bf, type: 2} - {fileID: 11400000, guid: a8d03897e468ca34288b6f19b8c8076e, type: 2} - {fileID: 11400000, guid: 90e8fd157c1476f419b29b740ad030c2, type: 2} m_ActiveProfileId: dff9ccd71970d8840aed7a0320906efa - m_HostingServicesManager: - m_HostingServiceInfos: - - classRef: UnityEditor.AddressableAssets.HostingServices.HttpHostingService, - Unity.Addressables.Editor - dataStore: - m_SerializedData: - - m_AssemblyName: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_ClassName: System.Int32 - m_Data: 57613 - m_Key: HostingServicePort - - m_AssemblyName: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_ClassName: System.Int32 - m_Data: 0 - m_Key: HostingServiceUploadSpeed - - m_AssemblyName: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_ClassName: System.String - m_Data: ServerData/StandaloneWindows64 - m_Key: ContentRoot - - m_AssemblyName: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_ClassName: System.Boolean - m_Data: False - m_Key: IsEnabled - - m_AssemblyName: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_ClassName: System.String - m_Data: Local Hosting 0 - m_Key: DescriptiveName - - m_AssemblyName: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - m_ClassName: System.Int32 - m_Data: 0 - m_Key: InstanceId - m_Settings: {fileID: 11400000} - m_NextInstanceId: 1 - m_RegisteredServiceTypeRefs: - - UnityEditor.AddressableAssets.HostingServices.HttpHostingService, Unity.Addressables.Editor - m_PingTimeoutInMilliseconds: 5000 diff --git a/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset b/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset index 857e99ca..1e5a0637 100644 --- a/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset +++ b/Assets/AddressableAssetsData/AssetGroups/Built In Data.asset @@ -13,20 +13,9 @@ MonoBehaviour: m_Name: Built In Data m_EditorClassIdentifier: m_GroupName: Built In Data - m_Data: - m_SerializedData: [] m_GUID: 1251e539c379bef4ba9bc3c80d35df43 - m_SerializeEntries: - - m_GUID: Resources - m_Address: Resources - m_ReadOnly: 1 - m_SerializedLabels: [] - - m_GUID: EditorSceneList - m_Address: EditorSceneList - m_ReadOnly: 1 - m_SerializedLabels: [] + m_SerializeEntries: [] m_ReadOnly: 1 m_Settings: {fileID: 11400000, guid: 2d938794e1ac8154b9b50ee21079a3c4, type: 2} m_SchemaSet: - m_Schemas: - - {fileID: 11400000, guid: 6fb9ab587c7174c41aa51c96052a7b55, type: 2} + m_Schemas: [] diff --git a/Assets/DefaultVolumeProfile.asset b/Assets/DefaultVolumeProfile.asset new file mode 100644 index 00000000..b40eda8f --- /dev/null +++ b/Assets/DefaultVolumeProfile.asset @@ -0,0 +1,795 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &-2233999508840761921 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66f335fb1ffd8684294ad653bf1c7564, type: 3} + m_Name: ColorAdjustments + m_EditorClassIdentifier: + active: 1 + postExposure: + m_OverrideState: 1 + m_Value: 0 + contrast: + m_OverrideState: 1 + m_Value: 0 + colorFilter: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + hueShift: + m_OverrideState: 1 + m_Value: 0 + saturation: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-1605165664502921212 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3eb4b772797da9440885e8bd939e9560, type: 3} + m_Name: ColorCurves + m_EditorClassIdentifier: + active: 1 + master: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + red: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + green: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + blue: + m_OverrideState: 1 + m_Value: + k__BackingField: 2 + m_Loop: 0 + m_ZeroValue: 0 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 1 + outSlope: 1 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + hueVsHue: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + hueVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 1 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + satVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + lumVsSat: + m_OverrideState: 1 + m_Value: + k__BackingField: 0 + m_Loop: 0 + m_ZeroValue: 0.5 + m_Range: 1 + m_Curve: + serializedVersion: 2 + m_Curve: [] + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 +--- !u!114 &-491110859270068929 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 81180773991d8724ab7f2d216912b564, type: 3} + m_Name: ChromaticAberration + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-368029045001234886 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c01700fd266d6914ababb731e09af2eb, type: 3} + m_Name: DepthOfField + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + gaussianStart: + m_OverrideState: 1 + m_Value: 10 + gaussianEnd: + m_OverrideState: 1 + m_Value: 30 + gaussianMaxRadius: + m_OverrideState: 1 + m_Value: 1 + highQualitySampling: + m_OverrideState: 1 + m_Value: 0 + focusDistance: + m_OverrideState: 1 + m_Value: 10 + aperture: + m_OverrideState: 1 + m_Value: 5.6 + focalLength: + m_OverrideState: 1 + m_Value: 50 + bladeCount: + m_OverrideState: 1 + m_Value: 5 + bladeCurvature: + m_OverrideState: 1 + m_Value: 1 + bladeRotation: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &-244940636916020023 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 221518ef91623a7438a71fef23660601, type: 3} + m_Name: WhiteBalance + m_EditorClassIdentifier: + active: 1 + temperature: + m_OverrideState: 1 + m_Value: 0 + tint: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d7fd9488000d3734a9e00ee676215985, type: 3} + m_Name: DefaultVolumeProfile + m_EditorClassIdentifier: + components: + - {fileID: 3654869180574669359} + - {fileID: 1708626565050889760} + - {fileID: -244940636916020023} + - {fileID: 7764341717281186532} + - {fileID: -491110859270068929} + - {fileID: -2233999508840761921} + - {fileID: 6170172739141258652} + - {fileID: -368029045001234886} + - {fileID: 5285595025999801235} + - {fileID: 8174558588254802136} + - {fileID: 8360757048657935934} + - {fileID: 4999513074986707088} + - {fileID: 490281590347622981} + - {fileID: 4547113280357904290} + - {fileID: 2529440093976583771} + - {fileID: 2295968890007204182} + - {fileID: -1605165664502921212} + - {fileID: 6027786327861637672} + - {fileID: 4396734909207396331} +--- !u!114 &490281590347622981 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdfbdbb87d3286943a057f7791b43141, type: 3} + m_Name: ChannelMixer + m_EditorClassIdentifier: + active: 1 + redOutRedIn: + m_OverrideState: 1 + m_Value: 100 + redOutGreenIn: + m_OverrideState: 1 + m_Value: 0 + redOutBlueIn: + m_OverrideState: 1 + m_Value: 0 + greenOutRedIn: + m_OverrideState: 1 + m_Value: 0 + greenOutGreenIn: + m_OverrideState: 1 + m_Value: 100 + greenOutBlueIn: + m_OverrideState: 1 + m_Value: 0 + blueOutRedIn: + m_OverrideState: 1 + m_Value: 0 + blueOutGreenIn: + m_OverrideState: 1 + m_Value: 0 + blueOutBlueIn: + m_OverrideState: 1 + m_Value: 100 +--- !u!114 &1708626565050889760 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ccf1aba9553839d41ae37dd52e9ebcce, type: 3} + m_Name: MotionBlur + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + quality: + m_OverrideState: 1 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0 + clamp: + m_OverrideState: 1 + m_Value: 0.05 +--- !u!114 &2295968890007204182 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 29fa0085f50d5e54f8144f766051a691, type: 3} + m_Name: FilmGrain + m_EditorClassIdentifier: + active: 1 + type: + m_OverrideState: 1 + m_Value: 0 + intensity: + m_OverrideState: 1 + m_Value: 0 + response: + m_OverrideState: 1 + m_Value: 0.8 + texture: + m_OverrideState: 1 + m_Value: {fileID: 0} +--- !u!114 &2529440093976583771 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 899c54efeace73346a0a16faa3afe726, type: 3} + m_Name: Vignette + m_EditorClassIdentifier: + active: 1 + color: + m_OverrideState: 1 + m_Value: {r: 0, g: 0, b: 0, a: 1} + center: + m_OverrideState: 1 + m_Value: {x: 0.5, y: 0.5} + intensity: + m_OverrideState: 1 + m_Value: 0 + smoothness: + m_OverrideState: 1 + m_Value: 0.2 + rounded: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &3654869180574669359 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c23e3b12dc18c42a140437e53d3951, type: 3} + m_Name: Tonemapping + m_EditorClassIdentifier: + active: 1 + mode: + m_OverrideState: 1 + m_Value: 0 + neutralHDRRangeReductionMode: + m_OverrideState: 1 + m_Value: 2 + acesPreset: + m_OverrideState: 1 + m_Value: 3 + hueShiftAmount: + m_OverrideState: 1 + m_Value: 0 + detectPaperWhite: + m_OverrideState: 1 + m_Value: 0 + paperWhite: + m_OverrideState: 1 + m_Value: 300 + detectBrightnessLimits: + m_OverrideState: 1 + m_Value: 1 + minNits: + m_OverrideState: 1 + m_Value: 0.005 + maxNits: + m_OverrideState: 1 + m_Value: 1000 +--- !u!114 &4396734909207396331 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bd486065ce11414fa40e631affc4900, type: 3} + m_Name: ProbeVolumesOptions + m_EditorClassIdentifier: + active: 1 + normalBias: + m_OverrideState: 1 + m_Value: 0.05 + viewBias: + m_OverrideState: 1 + m_Value: 0.1 + scaleBiasWithMinProbeDistance: + m_OverrideState: 1 + m_Value: 0 + samplingNoise: + m_OverrideState: 1 + m_Value: 0.1 + animateSamplingNoise: + m_OverrideState: 1 + m_Value: 1 + leakReductionMode: + m_OverrideState: 1 + m_Value: 2 + minValidDotProductValue: + m_OverrideState: 1 + m_Value: 0.1 + occlusionOnlyReflectionNormalization: + m_OverrideState: 1 + m_Value: 1 + intensityMultiplier: + m_OverrideState: 1 + m_Value: 1 + skyOcclusionIntensityMultiplier: + m_OverrideState: 1 + m_Value: 1 + worldOffset: + m_OverrideState: 1 + m_Value: {x: 0, y: 0, z: 0} +--- !u!114 &4547113280357904290 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 558a8e2b6826cf840aae193990ba9f2e, type: 3} + m_Name: ShadowsMidtonesHighlights + m_EditorClassIdentifier: + active: 1 + shadows: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + midtones: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + highlights: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + shadowsStart: + m_OverrideState: 1 + m_Value: 0 + shadowsEnd: + m_OverrideState: 1 + m_Value: 0.3 + highlightsStart: + m_OverrideState: 1 + m_Value: 0.55 + highlightsEnd: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &4999513074986707088 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e021b4c809a781e468c2988c016ebbea, type: 3} + m_Name: ColorLookup + m_EditorClassIdentifier: + active: 1 + texture: + m_OverrideState: 1 + m_Value: {fileID: 0} + dimension: 1 + contribution: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &5285595025999801235 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5485954d14dfb9a4c8ead8edb0ded5b1, type: 3} + m_Name: LiftGammaGain + m_EditorClassIdentifier: + active: 1 + lift: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + gamma: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} + gain: + m_OverrideState: 1 + m_Value: {x: 1, y: 1, z: 1, w: 0} +--- !u!114 &6027786327861637672 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0b2db86121404754db890f4c8dfe81b2, type: 3} + m_Name: Bloom + m_EditorClassIdentifier: + active: 1 + skipIterations: + m_OverrideState: 1 + m_Value: 1 + threshold: + m_OverrideState: 1 + m_Value: 0.9 + intensity: + m_OverrideState: 1 + m_Value: 0 + scatter: + m_OverrideState: 1 + m_Value: 0.7 + clamp: + m_OverrideState: 1 + m_Value: 65472 + tint: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + highQualityFiltering: + m_OverrideState: 1 + m_Value: 0 + downscale: + m_OverrideState: 1 + m_Value: 0 + maxIterations: + m_OverrideState: 1 + m_Value: 6 + dirtTexture: + m_OverrideState: 1 + m_Value: {fileID: 0} + dimension: 1 + dirtIntensity: + m_OverrideState: 1 + m_Value: 0 +--- !u!114 &6170172739141258652 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 06437c1ff663d574d9447842ba0a72e4, type: 3} + m_Name: ScreenSpaceLensFlare + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 + tintColor: + m_OverrideState: 1 + m_Value: {r: 1, g: 1, b: 1, a: 1} + bloomMip: + m_OverrideState: 1 + m_Value: 1 + firstFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + secondaryFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + warpedFlareIntensity: + m_OverrideState: 1 + m_Value: 1 + warpedFlareScale: + m_OverrideState: 1 + m_Value: {x: 1, y: 1} + samples: + m_OverrideState: 1 + m_Value: 1 + sampleDimmer: + m_OverrideState: 1 + m_Value: 0.5 + vignetteEffect: + m_OverrideState: 1 + m_Value: 1 + startingPosition: + m_OverrideState: 1 + m_Value: 1.25 + scale: + m_OverrideState: 1 + m_Value: 1.5 + streaksIntensity: + m_OverrideState: 1 + m_Value: 0 + streaksLength: + m_OverrideState: 1 + m_Value: 0.5 + streaksOrientation: + m_OverrideState: 1 + m_Value: 0 + streaksThreshold: + m_OverrideState: 1 + m_Value: 0.25 + resolution: + m_OverrideState: 1 + m_Value: 4 + chromaticAbberationIntensity: + m_OverrideState: 1 + m_Value: 0.5 +--- !u!114 &7764341717281186532 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c5e1dc532bcb41949b58bc4f2abfbb7e, type: 3} + m_Name: LensDistortion + m_EditorClassIdentifier: + active: 1 + intensity: + m_OverrideState: 1 + m_Value: 0 + xMultiplier: + m_OverrideState: 1 + m_Value: 1 + yMultiplier: + m_OverrideState: 1 + m_Value: 1 + center: + m_OverrideState: 1 + m_Value: {x: 0.5, y: 0.5} + scale: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &8174558588254802136 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fb60a22f311433c4c962b888d1393f88, type: 3} + m_Name: PaniniProjection + m_EditorClassIdentifier: + active: 1 + distance: + m_OverrideState: 1 + m_Value: 0 + cropToFit: + m_OverrideState: 1 + m_Value: 1 +--- !u!114 &8360757048657935934 +MonoBehaviour: + m_ObjectHideFlags: 3 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 70afe9e12c7a7ed47911bb608a23a8ff, type: 3} + m_Name: SplitToning + m_EditorClassIdentifier: + active: 1 + shadows: + m_OverrideState: 1 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + highlights: + m_OverrideState: 1 + m_Value: {r: 0.5, g: 0.5, b: 0.5, a: 1} + balance: + m_OverrideState: 1 + m_Value: 0 diff --git a/Assets/DefaultVolumeProfile.asset.meta b/Assets/DefaultVolumeProfile.asset.meta new file mode 100644 index 00000000..faf04878 --- /dev/null +++ b/Assets/DefaultVolumeProfile.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05a554b5d96cb37499e68e86e5c02903 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Editor/ModelsManager.cs b/Assets/Editor/ModelsManager.cs index 4b62a62d..a9770e65 100644 --- a/Assets/Editor/ModelsManager.cs +++ b/Assets/Editor/ModelsManager.cs @@ -1,7 +1,10 @@ +using System.Collections; using System.IO; using System.Net; +using Unity.EditorCoroutines.Editor; using UnityEditor; using UnityEngine; +using UnityEngine.Networking; namespace Editor { @@ -11,32 +14,51 @@ public static class ModelsManager public static void UpdateSchemas() { var webClient = new WebClient(); - - webClient.DownloadFile( - "https://raw.githubusercontent.com/VirtualBrainLab/vbl-aquarium/main/models/csharp/EphysLinkModels.cs", - "Assets/Scripts/EphysLink/EphysLinkModels.cs"); - + + EditorCoroutineUtility.StartCoroutineOwnerless( + DownloadFile( + "https://raw.githubusercontent.com/VirtualBrainLab/vbl-aquarium/main/models/csharp/EphysLinkModels.cs", + "Assets/Scripts/EphysLink/EphysLinkModels.cs" + ) + ); + Debug.Log("Schemas updated successfully!"); } private static void GetSchemas(string srcURL, string outFile) { + if (!Directory.Exists(outFile)) Directory.CreateDirectory(outFile); - if (!Directory.Exists(outFile)) - { - Directory.CreateDirectory(outFile); - } + var files = Directory.GetFiles(srcURL, "*.cs"); - string[] files = Directory.GetFiles(srcURL, "*.cs"); - - foreach (string file in files) + foreach (var file in files) { - string fileName = Path.GetFileName(file); - string destFilePath = Path.Combine(outFile, fileName); + var fileName = Path.GetFileName(file); + var destFilePath = Path.Combine(outFile, fileName); File.Copy(file, destFilePath, true); } AssetDatabase.Refresh(); } + + private static IEnumerator DownloadFile(string url, string outputPath) + { + using var request = UnityWebRequest.Get(url); + yield return request.SendWebRequest(); + + if ( + request.result + is UnityWebRequest.Result.ConnectionError + or UnityWebRequest.Result.ProtocolError + ) + { + Debug.LogError(request.error); + } + else + { + File.WriteAllBytes(outputPath, request.downloadHandler.data); + Debug.Log("File downloaded successfully!"); + } + } } } \ No newline at end of file diff --git a/Assets/InputSystem/ProbeControlInputActions.cs b/Assets/InputSystem/ProbeControlInputActions.cs index 9e4f3182..684ba9f7 100644 --- a/Assets/InputSystem/ProbeControlInputActions.cs +++ b/Assets/InputSystem/ProbeControlInputActions.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator -// version 1.7.0 +// version 1.9.0 // from Assets/InputSystem/ProbeControlInputActions.inputactions // // Changes to this file may cause incorrect behavior and will be lost if @@ -14,6 +14,7 @@ using System.Collections.Generic; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Utilities; +using UnityEngine; public partial class @ProbeControlInputActions: IInputActionCollection2, IDisposable { @@ -592,6 +593,11 @@ public @ProbeControlInputActions() m_ProbeControl_InputControl = m_ProbeControl.FindAction("InputControl", throwIfNotFound: true); } + ~@ProbeControlInputActions() + { + Debug.Assert(!m_ProbeControl.enabled, "This will cause a leak and performance issues, ProbeControlInputActions.ProbeControl.Disable() has not been called."); + } + public void Dispose() { UnityEngine.Object.Destroy(asset); diff --git a/Assets/InputSystem/ProbeMetaControls.cs b/Assets/InputSystem/ProbeMetaControls.cs index 535269b1..60696cc9 100644 --- a/Assets/InputSystem/ProbeMetaControls.cs +++ b/Assets/InputSystem/ProbeMetaControls.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was auto-generated by com.unity.inputsystem:InputActionCodeGenerator -// version 1.7.0 +// version 1.9.0 // from Assets/InputSystem/ProbeMetaControls.inputactions // // Changes to this file may cause incorrect behavior and will be lost if @@ -14,6 +14,7 @@ using System.Collections.Generic; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Utilities; +using UnityEngine; public partial class @ProbeMetaControls: IInputActionCollection2, IDisposable { @@ -134,6 +135,11 @@ public @ProbeMetaControls() m_ProbeMetaControl_SwitchAxisMode = m_ProbeMetaControl.FindAction("SwitchAxisMode", throwIfNotFound: true); } + ~@ProbeMetaControls() + { + Debug.Assert(!m_ProbeMetaControl.enabled, "This will cause a leak and performance issues, ProbeMetaControls.ProbeMetaControl.Disable() has not been called."); + } + public void Dispose() { UnityEngine.Object.Destroy(asset); diff --git a/Assets/Materials/BrainRegion/BrainRegionOpaqueLit.mat b/Assets/Materials/BrainRegion/BrainRegionOpaqueLit.mat index 60f82caf..a34cc45b 100644 --- a/Assets/Materials/BrainRegion/BrainRegionOpaqueLit.mat +++ b/Assets/Materials/BrainRegion/BrainRegionOpaqueLit.mat @@ -18,7 +18,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -120,6 +121,7 @@ Material: - _MLClip: {r: 0, g: 11.4, b: 0, a: 0} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &7950688029384146499 MonoBehaviour: m_ObjectHideFlags: 11 @@ -132,4 +134,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/BrainRegion/BrainRegionOpaqueUnlit.mat b/Assets/Materials/BrainRegion/BrainRegionOpaqueUnlit.mat index ada06e3a..dcfd40ec 100644 --- a/Assets/Materials/BrainRegion/BrainRegionOpaqueUnlit.mat +++ b/Assets/Materials/BrainRegion/BrainRegionOpaqueUnlit.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -31,7 +31,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -127,3 +128,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/BrainRegion/BrainRegionTransparentLit.mat b/Assets/Materials/BrainRegion/BrainRegionTransparentLit.mat index 2b7b47d0..d83f19c0 100644 --- a/Assets/Materials/BrainRegion/BrainRegionTransparentLit.mat +++ b/Assets/Materials/BrainRegion/BrainRegionTransparentLit.mat @@ -18,7 +18,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -117,6 +118,7 @@ Material: - _MLClip: {r: 0, g: 11.4, b: 0, a: 0} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &1531999738427662394 MonoBehaviour: m_ObjectHideFlags: 11 @@ -129,4 +131,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/BrainRegion/BrainRegionTransparentUnlit.mat b/Assets/Materials/BrainRegion/BrainRegionTransparentUnlit.mat index 1eb713ba..0b0bfa8f 100644 --- a/Assets/Materials/BrainRegion/BrainRegionTransparentUnlit.mat +++ b/Assets/Materials/BrainRegion/BrainRegionTransparentUnlit.mat @@ -18,7 +18,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -117,6 +118,7 @@ Material: - _MLClip: {r: 0, g: 11.4, b: 0, a: 0} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &1531999738427662394 MonoBehaviour: m_ObjectHideFlags: 11 @@ -129,4 +131,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/CraniotomyMaterial.mat b/Assets/Materials/CraniotomyMaterial.mat index 812eb4bf..30c76e87 100644 --- a/Assets/Materials/CraniotomyMaterial.mat +++ b/Assets/Materials/CraniotomyMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -36,6 +36,7 @@ Material: disabledShaderPasses: - SHADOWCASTER - DepthOnly + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -134,3 +135,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/EphysAtlasLineMaterial.mat b/Assets/Materials/EphysAtlasLineMaterial.mat index 85ad055d..1aacc64f 100644 --- a/Assets/Materials/EphysAtlasLineMaterial.mat +++ b/Assets/Materials/EphysAtlasLineMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -32,7 +32,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -132,3 +133,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/LitGrey.mat b/Assets/Materials/LitGrey.mat index d77a7d83..77016c03 100644 --- a/Assets/Materials/LitGrey.mat +++ b/Assets/Materials/LitGrey.mat @@ -19,7 +19,8 @@ Material: m_CustomRenderQueue: -1 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -118,6 +119,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &5545177365015435086 MonoBehaviour: m_ObjectHideFlags: 11 @@ -130,4 +132,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/Probe/GoldConnectorCable.mat b/Assets/Materials/Probe/GoldConnectorCable.mat index 0eae63dc..364a8a18 100644 --- a/Assets/Materials/Probe/GoldConnectorCable.mat +++ b/Assets/Materials/Probe/GoldConnectorCable.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -32,7 +32,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -131,3 +132,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/Probe/Green.mat b/Assets/Materials/Probe/Green.mat index 0b857a5a..987e0380 100644 --- a/Assets/Materials/Probe/Green.mat +++ b/Assets/Materials/Probe/Green.mat @@ -19,7 +19,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -118,6 +119,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &2484206933931674713 MonoBehaviour: m_ObjectHideFlags: 11 @@ -130,4 +132,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/Probe/IBLProbeMaterial.mat b/Assets/Materials/Probe/IBLProbeMaterial.mat index 7fc4857e..4d29ecf1 100644 --- a/Assets/Materials/Probe/IBLProbeMaterial.mat +++ b/Assets/Materials/Probe/IBLProbeMaterial.mat @@ -20,7 +20,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -119,6 +120,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &8990643678099489018 MonoBehaviour: m_ObjectHideFlags: 11 @@ -131,4 +133,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/Probe/LitBlackMaterial.mat b/Assets/Materials/Probe/LitBlackMaterial.mat index 52972597..d2023f9b 100644 --- a/Assets/Materials/Probe/LitBlackMaterial.mat +++ b/Assets/Materials/Probe/LitBlackMaterial.mat @@ -19,7 +19,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -118,6 +119,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &5791354437846213698 MonoBehaviour: m_ObjectHideFlags: 11 @@ -130,4 +132,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/Probe/NeuronMaterial.mat b/Assets/Materials/Probe/NeuronMaterial.mat index b3f852bb..5b6403b5 100644 --- a/Assets/Materials/Probe/NeuronMaterial.mat +++ b/Assets/Materials/Probe/NeuronMaterial.mat @@ -18,7 +18,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -115,6 +116,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &2666491075564505777 MonoBehaviour: m_ObjectHideFlags: 11 @@ -127,4 +129,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/ProbeMaterial.mat b/Assets/Materials/ProbeMaterial.mat index f1cb3b87..3d15dd0b 100644 --- a/Assets/Materials/ProbeMaterial.mat +++ b/Assets/Materials/ProbeMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -36,6 +36,7 @@ Material: disabledShaderPasses: - SHADOWCASTER - DepthOnly + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -141,3 +142,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/ProbeTransparentMaterial.mat b/Assets/Materials/ProbeTransparentMaterial.mat index fc24d173..5c8d4d86 100644 --- a/Assets/Materials/ProbeTransparentMaterial.mat +++ b/Assets/Materials/ProbeTransparentMaterial.mat @@ -23,6 +23,7 @@ Material: disabledShaderPasses: - SHADOWCASTER - DepthOnly + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -122,6 +123,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &8489137983973626414 MonoBehaviour: m_ObjectHideFlags: 11 @@ -134,4 +136,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/SiteMaterial.mat b/Assets/Materials/SiteMaterial.mat index 6901fcce..763b1c9f 100644 --- a/Assets/Materials/SiteMaterial.mat +++ b/Assets/Materials/SiteMaterial.mat @@ -19,7 +19,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -120,6 +121,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &1523391536134859176 MonoBehaviour: m_ObjectHideFlags: 11 @@ -132,4 +134,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/SkullMaterial.mat b/Assets/Materials/SkullMaterial.mat index d5ad3da1..5a4fd0e3 100644 --- a/Assets/Materials/SkullMaterial.mat +++ b/Assets/Materials/SkullMaterial.mat @@ -18,7 +18,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -128,6 +129,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &1110752586801046589 MonoBehaviour: m_ObjectHideFlags: 11 @@ -140,4 +142,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/SurfacePointMaterial.mat b/Assets/Materials/SurfacePointMaterial.mat index f023055d..4d724cf6 100644 --- a/Assets/Materials/SurfacePointMaterial.mat +++ b/Assets/Materials/SurfacePointMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -34,7 +34,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -133,3 +134,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/TrajectoryPlanner/CollisionMaterial.mat b/Assets/Materials/TrajectoryPlanner/CollisionMaterial.mat index 3111132b..1e602bbe 100644 --- a/Assets/Materials/TrajectoryPlanner/CollisionMaterial.mat +++ b/Assets/Materials/TrajectoryPlanner/CollisionMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -32,7 +32,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -132,3 +133,4 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/TrajectoryPlanner/ProbeRecordingChunk.mat b/Assets/Materials/TrajectoryPlanner/ProbeRecordingChunk.mat index 79c51bef..040bfce9 100644 --- a/Assets/Materials/TrajectoryPlanner/ProbeRecordingChunk.mat +++ b/Assets/Materials/TrajectoryPlanner/ProbeRecordingChunk.mat @@ -19,7 +19,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -119,6 +120,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &7200608012259704473 MonoBehaviour: m_ObjectHideFlags: 11 @@ -131,4 +133,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/TrajectoryPlanner/SensapexMetal.mat b/Assets/Materials/TrajectoryPlanner/SensapexMetal.mat index cbc15fb0..55a8abce 100644 --- a/Assets/Materials/TrajectoryPlanner/SensapexMetal.mat +++ b/Assets/Materials/TrajectoryPlanner/SensapexMetal.mat @@ -19,7 +19,8 @@ Material: m_CustomRenderQueue: 2000 stringTagMap: RenderType: Opaque - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -118,6 +119,7 @@ Material: - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &4492099221454130244 MonoBehaviour: m_ObjectHideFlags: 11 @@ -130,4 +132,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 diff --git a/Assets/Materials/Volume/InPlaneSliceMaterial.mat b/Assets/Materials/Volume/InPlaneSliceMaterial.mat index 1c529c41..cbb159ca 100644 --- a/Assets/Materials/Volume/InPlaneSliceMaterial.mat +++ b/Assets/Materials/Volume/InPlaneSliceMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -31,7 +31,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -154,3 +155,4 @@ Material: - _UpDirection: {r: 0, g: 1, b: 0, a: 0} - _VolumeSize: {r: 528, g: 320, b: 456, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/Volume/ProbePanelChannelMaterial.mat b/Assets/Materials/Volume/ProbePanelChannelMaterial.mat index 83748463..f579d362 100644 --- a/Assets/Materials/Volume/ProbePanelChannelMaterial.mat +++ b/Assets/Materials/Volume/ProbePanelChannelMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -31,7 +31,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -141,3 +142,4 @@ Material: - _SpecColor: {r: 0.2, g: 0.2, b: 0.2, a: 1} - _TipPosition: {r: 0, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Materials/Volume/ProbePanelSliceMaterial.mat b/Assets/Materials/Volume/ProbePanelSliceMaterial.mat index 935394e3..35300123 100644 --- a/Assets/Materials/Volume/ProbePanelSliceMaterial.mat +++ b/Assets/Materials/Volume/ProbePanelSliceMaterial.mat @@ -12,7 +12,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} m_Name: m_EditorClassIdentifier: - version: 7 + version: 9 --- !u!21 &2100000 Material: serializedVersion: 8 @@ -31,7 +31,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -145,3 +146,4 @@ Material: - _TipPosition: {r: 78, g: 185, b: 230, a: 0} - _UpAxis: {r: 0, g: 0, b: 0, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 diff --git a/Assets/Prefabs/UI/EphysCopilot/InsertionSelectionPanel.prefab b/Assets/Prefabs/UI/EphysCopilot/InsertionSelectionPanel.prefab index bbdc2114..a530ab8e 100644 --- a/Assets/Prefabs/UI/EphysCopilot/InsertionSelectionPanel.prefab +++ b/Assets/Prefabs/UI/EphysCopilot/InsertionSelectionPanel.prefab @@ -32,7 +32,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 5103970214871766003} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -112,15 +111,17 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -192,7 +193,6 @@ RectTransform: - {fileID: 3299314768057195748} - {fileID: 5443312132586863250} m_Father: {fileID: 6312497235516384231} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -292,7 +292,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1334401237401123798} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} m_AnchorMax: {x: 1, y: 0.5} @@ -370,7 +369,6 @@ RectTransform: m_Children: - {fileID: 3653181643625187054} m_Father: {fileID: 2967243177907657535} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -495,7 +493,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 6044053482212494243} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -573,15 +570,17 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -630,7 +629,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4625251052424300385} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -709,7 +707,6 @@ RectTransform: - {fileID: 1334401237401123798} - {fileID: 6044053482212494243} m_Father: {fileID: 0} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -792,7 +789,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4625251052424300385} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} @@ -870,7 +866,6 @@ RectTransform: m_Children: - {fileID: 6312497235516384231} m_Father: {fileID: 2967243177907657535} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -959,7 +954,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 4625251052424300385} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1037,15 +1031,17 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1099,7 +1095,6 @@ RectTransform: - {fileID: 4429934044767703842} - {fileID: 2967243177907657535} m_Father: {fileID: 5103970214871766003} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1192,14 +1187,18 @@ MonoBehaviour: m_ItemText: {fileID: 7906760482401174147} m_ItemImage: {fileID: 0} m_Value: 0 + m_MultiSelect: 0 m_Options: m_Options: - m_Text: Option A m_Image: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Text: Option B m_Image: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} - m_Text: Option C m_Image: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} m_OnValueChanged: m_PersistentCalls: m_Calls: @@ -1268,7 +1267,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1334401237401123798} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1346,15 +1344,17 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 6e72656b m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1402,7 +1402,6 @@ RectTransform: m_Children: - {fileID: 5236390316110336122} m_Father: {fileID: 1523856699623931373} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1444,7 +1443,6 @@ RectTransform: - {fileID: 2148185415867671841} - {fileID: 1523856699623931373} m_Father: {fileID: 1334401237401123798} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -1578,7 +1576,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 3653181643625187054} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1653,7 +1650,6 @@ RectTransform: m_Children: - {fileID: 4625251052424300385} m_Father: {fileID: 2148185415867671841} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 1, y: 1} @@ -1694,7 +1690,6 @@ RectTransform: m_Children: - {fileID: 7156214125293086914} m_Father: {fileID: 5103970214871766003} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} diff --git a/Assets/Prefabs/UI/UI.prefab b/Assets/Prefabs/UI/UI.prefab new file mode 100644 index 00000000..2609cb40 --- /dev/null +++ b/Assets/Prefabs/UI/UI.prefab @@ -0,0 +1,83 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &952126553420751687 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 15652614861718102} + - component: {fileID: 6646602896389307525} + - component: {fileID: 3182672479199375693} + - component: {fileID: 6240793296398976258} + m_Layer: 5 + m_Name: UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &15652614861718102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952126553420751687} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6646602896389307525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952126553420751687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PanelSettings: {fileID: 11400000, guid: 6471a2a110aba664faa84353fc94dae5, type: 2} + m_ParentUI: {fileID: 0} + sourceAsset: {fileID: 9197481963319205126, guid: 2f07f202fef6a2249838c0b722a6739b, type: 3} + m_SortingOrder: 0 + m_WorldSpaceSizeMode: 1 + m_WorldSpaceWidth: 1920 + m_WorldSpaceHeight: 1080 +--- !u!114 &3182672479199375693 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952126553420751687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7096bdaf70d738048bb326a49b961347, type: 3} + m_Name: + m_EditorClassIdentifier: + _state: {fileID: 11400000, guid: 1f3a268d723c7fe4f90bd218f72aa27d, type: 2} + _uiDocument: {fileID: 6646602896389307525} +--- !u!114 &6240793296398976258 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 952126553420751687} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f7c4c21d250a58a4c948c37d132330c7, type: 3} + m_Name: + m_EditorClassIdentifier: + _state: {fileID: 11400000, guid: d2fb6ddc884d6094f9a210b3dc6cbbf0, type: 2} + _uiDocument: {fileID: 6646602896389307525} diff --git a/Assets/Prefabs/UI/UI.prefab.meta b/Assets/Prefabs/UI/UI.prefab.meta new file mode 100644 index 00000000..d0d09481 --- /dev/null +++ b/Assets/Prefabs/UI/UI.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/TrajectoryPlanner.unity b/Assets/Scenes/TrajectoryPlanner.unity index a70e4c78..eb6f02e9 100644 --- a/Assets/Scenes/TrajectoryPlanner.unity +++ b/Assets/Scenes/TrajectoryPlanner.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 9 + serializedVersion: 10 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,13 +38,11 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.44824904, g: 0.49827605, b: 0.5755831, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 serializedVersion: 12 - m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -67,9 +65,6 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 - m_FinalGather: 0 - m_FinalGatherFiltering: 1 - m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -342,15 +337,17 @@ MonoBehaviour: m_lineSpacingMax: 0 m_paragraphSpacing: 0 m_charWidthMaxAdj: 0 - m_enableWordWrapping: 1 + m_TextWrappingMode: 1 m_wordWrappingRatios: 0.4 m_overflowMode: 0 m_linkedTextComponent: {fileID: 0} parentLinkedComponent: {fileID: 0} m_enableKerning: 1 + m_ActiveFontFeatures: 00000000 m_enableExtraPadding: 0 checkPaddingRequired: 0 m_isRichText: 1 + m_EmojiFallbackSupport: 1 m_parseCtrlCharacters: 1 m_isOrthographic: 1 m_isCullingEnabled: 0 @@ -1026,9 +1023,8 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 745816212} m_Enabled: 1 - serializedVersion: 10 + serializedVersion: 11 m_Type: 1 - m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -1078,8 +1074,12 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &745816214 Transform: m_ObjectHideFlags: 0 @@ -1365,7 +1365,7 @@ PrefabInstance: m_TransformParent: {fileID: 0} m_Modifications: - target: {fileID: 2480836680909240781, guid: 6d02a754f544b65479102fc55b4a6105, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: 44832adf106072c4980aac75dd5d60cb, type: 2} - target: {fileID: 2480836680909240781, guid: 6d02a754f544b65479102fc55b4a6105, type: 3} @@ -1445,7 +1445,7 @@ PrefabInstance: value: 0.05 objectReference: {fileID: 0} - target: {fileID: 7017486998538583892, guid: 6d02a754f544b65479102fc55b4a6105, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: 3ddd4c24f5b89054eac597f10d86eabd, type: 2} - target: {fileID: 7017486998538583892, guid: 6d02a754f544b65479102fc55b4a6105, type: 3} @@ -1701,7 +1701,8 @@ Material: m_DoubleSidedGI: 0 m_CustomRenderQueue: -1 stringTagMap: {} - disabledShaderPasses: [] + disabledShaderPasses: + - MOTIONVECTORS m_LockedProperties: m_SavedProperties: serializedVersion: 3 @@ -1825,6 +1826,7 @@ Material: - _UpDirection: {r: 0, g: 1, b: 0, a: 0} - _VolumeSize: {r: 528, g: 320, b: 456, a: 0} m_BuildTextureStacks: [] + m_AllowLocking: 1 --- !u!114 &1377288554 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 341190944644698638, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -1945,11 +1947,11 @@ PrefabInstance: value: objectReference: {fileID: 1835840601} - target: {fileID: 7375321954526526105, guid: cfe4069a636d24749b8858eb289cac65, type: 3} - propertyPath: _focusableInputs.Array.data[0] + propertyPath: '_focusableInputs.Array.data[0]' value: objectReference: {fileID: 434432043} - target: {fileID: 7375321954526526105, guid: cfe4069a636d24749b8858eb289cac65, type: 3} - propertyPath: _focusableInputs.Array.data[1] + propertyPath: '_focusableInputs.Array.data[1]' value: objectReference: {fileID: 444598638} - target: {fileID: 7375321954526526105, guid: cfe4069a636d24749b8858eb289cac65, type: 3} @@ -2976,15 +2978,15 @@ PrefabInstance: value: 3 objectReference: {fileID: 0} - target: {fileID: 341190943640726972, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _webglDisabledFeaturesGOs.Array.data[0] + propertyPath: '_webglDisabledFeaturesGOs.Array.data[0]' value: objectReference: {fileID: 201768568} - target: {fileID: 341190943640726972, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _webglDisabledFeaturesGOs.Array.data[1] + propertyPath: '_webglDisabledFeaturesGOs.Array.data[1]' value: objectReference: {fileID: 881322448} - target: {fileID: 341190943640726972, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _webglDisabledFeaturesGOs.Array.data[2] + propertyPath: '_webglDisabledFeaturesGOs.Array.data[2]' value: objectReference: {fileID: 1044063713} - target: {fileID: 341190943674669911, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -2995,6 +2997,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190943674669911, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190943674669911, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190943674669911, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -3079,6 +3089,10 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 341190943836035196, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190943836035196, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 169.88 @@ -3223,6 +3237,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 341190944034978748, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190944034978748, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944034978748, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 354.84 @@ -3435,6 +3457,14 @@ PrefabInstance: propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190944298537966, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190944298537966, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944298537966, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -3451,6 +3481,10 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190944311329756, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944311329756, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -3515,6 +3549,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 341190944410943211, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190944410943211, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944410943211, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 384.91998 @@ -3531,6 +3573,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190944411999430, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190944411999430, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944411999430, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.y value: 0 @@ -3600,7 +3650,7 @@ PrefabInstance: value: PinpointAtlasManager, trajectoryplanner.core objectReference: {fileID: 0} - target: {fileID: 341190944529771625, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 1375602521} - target: {fileID: 341190944541019319, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -3643,6 +3693,14 @@ PrefabInstance: propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190944544068803, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190944544068803, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944544068803, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -3707,6 +3765,14 @@ PrefabInstance: propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190944702461357, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190944702461357, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190944702461357, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -3871,6 +3937,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 341190945105275010, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 341190945105275010, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 341190945105275010, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.y value: 0 @@ -4099,6 +4173,10 @@ PrefabInstance: propertyPath: onValueChanged.m_PersistentCalls.m_Calls.Array.data[0].m_Target value: objectReference: {fileID: 1703646459} + - target: {fileID: 341190945403315011, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_IsActive + value: 1 + objectReference: {fileID: 0} - target: {fileID: 341190945403315022, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_RaycastTarget value: 0 @@ -4176,11 +4254,11 @@ PrefabInstance: value: 2 objectReference: {fileID: 0} - target: {fileID: 341190945559892368, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _skullList.Array.data[0] + propertyPath: '_skullList.Array.data[0]' value: objectReference: {fileID: 1826524689} - target: {fileID: 341190945559892368, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _skullList.Array.data[1] + propertyPath: '_skullList.Array.data[1]' value: objectReference: {fileID: 0} - target: {fileID: 341190945559892372, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -5436,15 +5514,15 @@ PrefabInstance: value: 3 objectReference: {fileID: 0} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _whiteUIText.Array.data[0] + propertyPath: '_whiteUIText.Array.data[0]' value: objectReference: {fileID: 871760447} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _whiteUIText.Array.data[1] + propertyPath: '_whiteUIText.Array.data[1]' value: objectReference: {fileID: 267608534} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _whiteUIText.Array.data[2] + propertyPath: '_whiteUIText.Array.data[2]' value: objectReference: {fileID: 382584097} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -5456,11 +5534,11 @@ PrefabInstance: value: 3 objectReference: {fileID: 0} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableGOs.Array.data[0] + propertyPath: 'EditorFocusableGOs.Array.data[0]' value: objectReference: {fileID: 1445793942} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableGOs.Array.data[1] + propertyPath: 'EditorFocusableGOs.Array.data[1]' value: objectReference: {fileID: 76833136} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -5468,15 +5546,15 @@ PrefabInstance: value: objectReference: {fileID: 1696303671} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableGOs.Array.data[0] + propertyPath: '_editorFocusableGOs.Array.data[0]' value: objectReference: {fileID: 1445793942} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableGOs.Array.data[1] + propertyPath: '_editorFocusableGOs.Array.data[1]' value: objectReference: {fileID: 76833136} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableGOs.Array.data[2] + propertyPath: '_editorFocusableGOs.Array.data[2]' value: objectReference: {fileID: 94756719} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -5484,107 +5562,107 @@ PrefabInstance: value: 12 objectReference: {fileID: 0} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[0] + propertyPath: 'EditorFocusableInputs.Array.data[0]' value: objectReference: {fileID: 1047957689} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[1] + propertyPath: 'EditorFocusableInputs.Array.data[1]' value: objectReference: {fileID: 1364222952} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[2] + propertyPath: 'EditorFocusableInputs.Array.data[2]' value: objectReference: {fileID: 1073378868} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[3] + propertyPath: 'EditorFocusableInputs.Array.data[3]' value: objectReference: {fileID: 160775271} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[4] + propertyPath: 'EditorFocusableInputs.Array.data[4]' value: objectReference: {fileID: 1889336854} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[5] + propertyPath: 'EditorFocusableInputs.Array.data[5]' value: objectReference: {fileID: 1805012647} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[6] + propertyPath: 'EditorFocusableInputs.Array.data[6]' value: objectReference: {fileID: 1049341881} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[7] + propertyPath: 'EditorFocusableInputs.Array.data[7]' value: objectReference: {fileID: 661010683} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[8] + propertyPath: 'EditorFocusableInputs.Array.data[8]' value: objectReference: {fileID: 434432043} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: EditorFocusableInputs.Array.data[9] + propertyPath: 'EditorFocusableInputs.Array.data[9]' value: objectReference: {fileID: 444598638} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[0] + propertyPath: '_editorFocusableInputs.Array.data[0]' value: objectReference: {fileID: 1047957689} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[1] + propertyPath: '_editorFocusableInputs.Array.data[1]' value: objectReference: {fileID: 1364222952} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[2] + propertyPath: '_editorFocusableInputs.Array.data[2]' value: objectReference: {fileID: 1073378868} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[3] + propertyPath: '_editorFocusableInputs.Array.data[3]' value: objectReference: {fileID: 160775271} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[4] + propertyPath: '_editorFocusableInputs.Array.data[4]' value: objectReference: {fileID: 1889336854} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[5] + propertyPath: '_editorFocusableInputs.Array.data[5]' value: objectReference: {fileID: 1805012647} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[6] + propertyPath: '_editorFocusableInputs.Array.data[6]' value: objectReference: {fileID: 1049341881} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[7] + propertyPath: '_editorFocusableInputs.Array.data[7]' value: objectReference: {fileID: 661010683} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[8] + propertyPath: '_editorFocusableInputs.Array.data[8]' value: objectReference: {fileID: 434432043} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[9] + propertyPath: '_editorFocusableInputs.Array.data[9]' value: objectReference: {fileID: 444598638} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[10] + propertyPath: '_editorFocusableInputs.Array.data[10]' value: objectReference: {fileID: 604468498} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[11] + propertyPath: '_editorFocusableInputs.Array.data[11]' value: objectReference: {fileID: 1450061016} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[12] + propertyPath: '_editorFocusableInputs.Array.data[12]' value: objectReference: {fileID: 604468498} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[13] + propertyPath: '_editorFocusableInputs.Array.data[13]' value: objectReference: {fileID: 604468498} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[14] + propertyPath: '_editorFocusableInputs.Array.data[14]' value: objectReference: {fileID: 604468498} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputs.Array.data[15] + propertyPath: '_editorFocusableInputs.Array.data[15]' value: objectReference: {fileID: 604468498} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -5592,7 +5670,7 @@ PrefabInstance: value: 1 objectReference: {fileID: 0} - target: {fileID: 3336044886673126097, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} - propertyPath: _editorFocusableInputFields.Array.data[0] + propertyPath: '_editorFocusableInputFields.Array.data[0]' value: objectReference: {fileID: 0} - target: {fileID: 3444711362033518062, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} @@ -7335,6 +7413,14 @@ PrefabInstance: propertyPath: m_SizeDelta.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 7136927735706924113, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7136927735706924113, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7136927735706924113, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -8227,6 +8313,10 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 9068794099353245877, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: -20 + objectReference: {fileID: 0} - target: {fileID: 9068794099353245877, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -8243,6 +8333,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 9068794099390589346, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: -80 + objectReference: {fileID: 0} + - target: {fileID: 9068794099390589346, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: -20 + objectReference: {fileID: 0} - target: {fileID: 9068794099390589346, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -8259,6 +8357,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 9068794099503478681, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: -120 + objectReference: {fileID: 0} + - target: {fileID: 9068794099503478681, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: -20 + objectReference: {fileID: 0} - target: {fileID: 9068794099503478681, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -8275,6 +8381,14 @@ PrefabInstance: propertyPath: m_AnchorMin.y value: 0 objectReference: {fileID: 0} + - target: {fileID: 9068794099879238884, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.x + value: -40 + objectReference: {fileID: 0} + - target: {fileID: 9068794099879238884, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} + propertyPath: m_LocalPosition.y + value: -20 + objectReference: {fileID: 0} - target: {fileID: 9068794099879238884, guid: 94cdeca105038d74ea47b57e6b99eb4e, type: 3} propertyPath: m_AnchoredPosition.x value: 0 @@ -8542,7 +8656,7 @@ PrefabInstance: value: 8 objectReference: {fileID: 0} - target: {fileID: 1302158968669684560, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: rigGOs.Array.data[7] + propertyPath: 'rigGOs.Array.data[7]' value: objectReference: {fileID: 0} - target: {fileID: 1302158968669684561, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} @@ -8662,11 +8776,11 @@ PrefabInstance: value: 5 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _allowedProbeTypes.Array.data[3] + propertyPath: '_allowedProbeTypes.Array.data[3]' value: 24 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _allowedProbeTypes.Array.data[4] + propertyPath: '_allowedProbeTypes.Array.data[4]' value: 24 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} @@ -8674,55 +8788,55 @@ PrefabInstance: value: 11 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _selectionLayerNames.Array.data[1] + propertyPath: '_selectionLayerNames.Array.data[1]' value: bank0 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _selectionLayerNames.Array.data[2] + propertyPath: '_selectionLayerNames.Array.data[2]' value: double_length objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _selectionLayerNames.Array.data[3] + propertyPath: '_selectionLayerNames.Array.data[3]' value: default objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _selectionLayerNames.Array.data[4] + propertyPath: '_selectionLayerNames.Array.data[4]' value: bottom_row objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[1] + propertyPath: '_channelMapProbeTypes.Array.data[1]' value: 21 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[2] + propertyPath: '_channelMapProbeTypes.Array.data[2]' value: 24 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[3] + propertyPath: '_channelMapProbeTypes.Array.data[3]' value: 28 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[4] + propertyPath: '_channelMapProbeTypes.Array.data[4]' value: 128 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[5] + propertyPath: '_channelMapProbeTypes.Array.data[5]' value: 256 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[6] + propertyPath: '_channelMapProbeTypes.Array.data[6]' value: -1 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[7] + propertyPath: '_channelMapProbeTypes.Array.data[7]' value: 25 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[8] + propertyPath: '_channelMapProbeTypes.Array.data[8]' value: 50 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[9] + propertyPath: '_channelMapProbeTypes.Array.data[9]' value: 100 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} @@ -8730,7 +8844,7 @@ PrefabInstance: value: 5 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} - propertyPath: _channelMapProbeTypes.Array.data[10] + propertyPath: '_channelMapProbeTypes.Array.data[10]' value: 200 objectReference: {fileID: 0} - target: {fileID: 2367291489059947454, guid: 734f6254569c01842b9d2e2ff1b1d7ae, type: 3} @@ -8859,6 +8973,63 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1001 &2439981618345730369 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 15652614861718102, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 952126553420751687, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} + propertyPath: m_Name + value: UI + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 81a48f20abaa4fa4fab0a4cb7a3ddd41, type: 3} --- !u!1001 &4661864818121820327 PrefabInstance: m_ObjectHideFlags: 0 @@ -8974,7 +9145,7 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} - target: {fileID: 6193778550765170453, guid: b578609b502e9c74286332dd7db2cfc8, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: 0c293f080f6c91d4489c6ddc14f326ec, type: 2} - target: {fileID: 6193778550765170455, guid: b578609b502e9c74286332dd7db2cfc8, type: 3} @@ -9054,7 +9225,7 @@ PrefabInstance: value: 0 objectReference: {fileID: 0} - target: {fileID: 6193778552155365646, guid: b578609b502e9c74286332dd7db2cfc8, type: 3} - propertyPath: m_Materials.Array.data[0] + propertyPath: 'm_Materials.Array.data[0]' value: objectReference: {fileID: 2100000, guid: 9e04d79f7c3c3534a9031f28643d20c1, type: 2} m_RemovedComponents: [] @@ -10487,7 +10658,7 @@ PrefabInstance: value: 2 objectReference: {fileID: 0} - target: {fileID: 8016510558008620341, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: brainRegionMaterials.Array.data[2] + propertyPath: 'brainRegionMaterials.Array.data[2]' value: objectReference: {fileID: 2100000, guid: 2a8f9060c91986e4083dd67bf487177b, type: 2} - target: {fileID: 8016510558008620341, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} @@ -10495,7 +10666,7 @@ PrefabInstance: value: 2 objectReference: {fileID: 0} - target: {fileID: 8016510558008620341, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: brainRegionMaterialNames.Array.data[2] + propertyPath: 'brainRegionMaterialNames.Array.data[2]' value: toon-outline objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} @@ -10719,79 +10890,79 @@ PrefabInstance: value: 4 objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: whiteUIText.Array.data[0] + propertyPath: 'whiteUIText.Array.data[0]' value: objectReference: {fileID: 382584097} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: whiteUIText.Array.data[1] + propertyPath: 'whiteUIText.Array.data[1]' value: objectReference: {fileID: 871760447} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: whiteUIText.Array.data[2] + propertyPath: 'whiteUIText.Array.data[2]' value: objectReference: {fileID: 267608534} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _whiteUIText.Array.data[0] + propertyPath: '_whiteUIText.Array.data[0]' value: objectReference: {fileID: 382584097} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _whiteUIText.Array.data[1] + propertyPath: '_whiteUIText.Array.data[1]' value: objectReference: {fileID: 871760447} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _whiteUIText.Array.data[2] + propertyPath: '_whiteUIText.Array.data[2]' value: objectReference: {fileID: 267608534} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: probePrefabs.Array.data[3] + propertyPath: 'probePrefabs.Array.data[3]' value: objectReference: {fileID: 8943063119080654577, guid: 9adfbf39d76a6644d884c44a708ee70a, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[3] + propertyPath: '_probePrefabs.Array.data[3]' value: objectReference: {fileID: 8943063119080654577, guid: 9adfbf39d76a6644d884c44a708ee70a, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[4] + propertyPath: '_probePrefabs.Array.data[4]' value: objectReference: {fileID: 4368194536080577051, guid: 7282cbc09f6c2fa40bd5b661f02ae460, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[5] + propertyPath: '_probePrefabs.Array.data[5]' value: objectReference: {fileID: 4368194536080577051, guid: c555f2ac47d6bf14b86dff1e23ec243d, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[6] + propertyPath: '_probePrefabs.Array.data[6]' value: objectReference: {fileID: 4368194536080577051, guid: 6891811463e7bf8479053eb1eb1eefe9, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[7] + propertyPath: '_probePrefabs.Array.data[7]' value: objectReference: {fileID: 4368194536080577051, guid: fb43e89f3ab62794a9da5def11da869c, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[8] + propertyPath: '_probePrefabs.Array.data[8]' value: objectReference: {fileID: 4368194536080577051, guid: 522e9cff57601f04092f13575c3dfdbf, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabs.Array.data[9] + propertyPath: '_probePrefabs.Array.data[9]' value: objectReference: {fileID: 4368194536080577051, guid: c2478d085fb8dc949a40d0951e320e94, type: 3} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: probePrefabIDs.Array.data[3] + propertyPath: 'probePrefabIDs.Array.data[3]' value: 8 objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabIDs.Array.data[0] + propertyPath: '_probePrefabIDs.Array.data[0]' value: 0 objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabIDs.Array.data[1] + propertyPath: '_probePrefabIDs.Array.data[1]' value: 21 objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabIDs.Array.data[2] + propertyPath: '_probePrefabIDs.Array.data[2]' value: 24 objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} - propertyPath: _probePrefabIDs.Array.data[3] + propertyPath: '_probePrefabIDs.Array.data[3]' value: 28 objectReference: {fileID: 0} - target: {fileID: 8016510558008620343, guid: 482bfae3ba88b424e96d7fcd669f7b73, type: 3} @@ -11799,3 +11970,4 @@ SceneRoots: - {fileID: 608524081} - {fileID: 8634027648085377985} - {fileID: 9130107592048835190} + - {fileID: 2439981618345730369} diff --git a/Assets/Scripts/Core/Util/IsExternalInit.cs b/Assets/Scripts/Core/Util/IsExternalInit.cs new file mode 100644 index 00000000..0893f5e5 --- /dev/null +++ b/Assets/Scripts/Core/Util/IsExternalInit.cs @@ -0,0 +1,7 @@ +using System.ComponentModel; + +namespace System.Runtime.CompilerServices +{ + [EditorBrowsable(EditorBrowsableState.Never)] + public class IsExternalInit { } +} diff --git a/Assets/Scripts/Core/Util/IsExternalInit.cs.meta b/Assets/Scripts/Core/Util/IsExternalInit.cs.meta new file mode 100644 index 00000000..08f96bf0 --- /dev/null +++ b/Assets/Scripts/Core/Util/IsExternalInit.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c889421ec241fbf448a0105d64279cea \ No newline at end of file diff --git a/Assets/Scripts/Core/Util/ResettingScriptableObject.cs b/Assets/Scripts/Core/Util/ResettingScriptableObject.cs new file mode 100644 index 00000000..fc90ac4e --- /dev/null +++ b/Assets/Scripts/Core/Util/ResettingScriptableObject.cs @@ -0,0 +1,31 @@ +using UnityEngine; +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace Core.Util +{ + public abstract class ResettingScriptableObject : ScriptableObject + { +#if UNITY_EDITOR + private string _initialJson = string.Empty; + + private void OnEnable() + { + if (Application.isPlaying) + return; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + _initialJson = EditorJsonUtility.ToJson(this); + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state != PlayModeStateChange.ExitingPlayMode) + return; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorJsonUtility.FromJsonOverwrite(_initialJson, this); + } +#endif + } +} diff --git a/Assets/Scripts/Core/Util/ResettingScriptableObject.cs.meta b/Assets/Scripts/Core/Util/ResettingScriptableObject.cs.meta new file mode 100644 index 00000000..6cdda06f --- /dev/null +++ b/Assets/Scripts/Core/Util/ResettingScriptableObject.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 22194e125c099d94da23503a00587831 \ No newline at end of file diff --git a/Assets/Scripts/EphysLink/EphysLinkModels.cs b/Assets/Scripts/EphysLink/EphysLinkModels.cs index 67e98139..039b30b5 100644 --- a/Assets/Scripts/EphysLink/EphysLinkModels.cs +++ b/Assets/Scripts/EphysLink/EphysLinkModels.cs @@ -125,7 +125,7 @@ public SetInsideBrainRequest(string manipulatorId, bool inside) } } -; + [Serializable] public struct SetPositionRequest { diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.meta b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.meta new file mode 100644 index 00000000..ecaf62e5 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c2bc1aabdb00c0948831ca62cc76473f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.cs b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController.cs similarity index 81% rename from Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.cs rename to Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController.cs index 694351a7..83719bb9 100644 --- a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.cs +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController.cs @@ -8,9 +8,9 @@ using UnityEngine; using UnityEngine.Events; -namespace Pinpoint.Probes +namespace Pinpoint.Probes.ManipulatorBehaviorController { - public class ManipulatorBehaviorController : MonoBehaviour + public partial class ManipulatorBehaviorController : MonoBehaviour { #region Constants @@ -37,10 +37,10 @@ public class ManipulatorBehaviorController : MonoBehaviour public Vector3 Dimensions { get; private set; } - /** - * Getter and setter or the zero coordinate offset of the manipulator. - * If passed a NaN value, the previous value is kept. - */ + /// + /// Getter and setter or the zero coordinate offset of the manipulator. + /// If passed a NaN value, the previous value is kept. + /// public Vector4 ZeroCoordinateOffset { get => _zeroCoordinateOffset; @@ -67,18 +67,6 @@ public float BrainSurfaceOffset } } - public bool IsSetToDropToSurfaceWithDepth - { - get => _isSetToDropToSurfaceWithDepth; - set - { - if (BrainSurfaceOffset != 0) - return; - _isSetToDropToSurfaceWithDepth = value; - IsSetToDropToSurfaceWithDepthChangedEvent.Invoke(value); - } - } - public CoordinateSpace CoordinateSpace { get; private set; } private CoordinateTransform CoordinateTransform { get; set; } @@ -92,17 +80,17 @@ public bool IsRightHanded } } + public readonly ProbeAutomationStateManager ProbeAutomationStateManager = new(); + // Helper functions to create and destroy a probe public Action CreatePathfinderProbe { private get; set; } public Action DestroyThisProbe { private get; set; } #region Private internal fields - private Vector4 _lastManipulatorPosition = Vector4.zero; private Vector4 _lastLoggedManipulatorPosition = Vector4.zero; private Vector4 _zeroCoordinateOffset = Vector4.zero; private float _brainSurfaceOffset; - private bool _isSetToDropToSurfaceWithDepth = true; private bool _isRightHanded; private float _lastLoggedTime; private bool _isSetToInsideBrain; @@ -122,26 +110,17 @@ public bool IsRightHanded #region Unity /// - /// Setup this instance + /// Setup this instance. /// private void Awake() { // Start off as disabled enabled = false; - - // Update manipulator inside brain state - // _probeController.MovedThisFrameEvent.AddListener(() => - // { - // if (_isSetToInsideBrain != _probeManager.IsProbeInBrain()) - // CommunicationManager.Instance.SetInsideBrain(ManipulatorID, _probeManager.IsProbeInBrain(), - // insideBrain => - // { - // _isSetToInsideBrain = insideBrain; - // _probeController.UnlockedDir = insideBrain ? new Vector4(0, 0, 0, 1) : Vector4.one; - // }); - // }); } + /// + /// Cleanup this instance. + /// private void OnDisable() { ManipulatorID = null; @@ -154,6 +133,12 @@ private void OnDisable() #region Public Methods + /// + /// Initialize the manipulator behavior controller with the given manipulator ID and calibration status.
+ /// Starts to echo the manipulator position and locks the manipulator from manual control. + ///
+ /// ID of the manipulator to represent. + /// Whether this manipulator has been calibrated. public void Initialize(string manipulatorID, bool calibrated) { CommunicationManager.Instance.GetManipulators(response => @@ -191,6 +176,9 @@ void StartEchoing() }); } + /// + /// Configure this manipulator's coordinate space and transform based on its handedness, number of axes, and angles. + /// private void UpdateSpaceAndTransform() { CoordinateSpace = new ManipulatorSpace(Dimensions); @@ -213,11 +201,16 @@ private void UpdateSpaceAndTransform() }; } + /// + /// Convert insertion AP, ML, DV coordinates to manipulator translation stage position. + /// + /// AP, ML, DV coordinates from an insertion. + /// Computed manipulator translation stage positions to match this coordinate. public Vector4 ConvertInsertionAPMLDVToManipulatorPosition(Vector3 insertionAPMLDV) { // Convert apmldv to world coordinate - var convertToWorld = _probeManager.ProbeController.Insertion.T2World_Vector( - insertionAPMLDV + var convertToWorld = BrainAtlasManager.ActiveReferenceAtlas.Atlas2World_Vector( + BrainAtlasManager.ActiveAtlasTransform.T2U_Vector(insertionAPMLDV) ); // Convert to Manipulator space @@ -225,16 +218,28 @@ public Vector4 ConvertInsertionAPMLDVToManipulatorPosition(Vector3 insertionAPML Vector4 posInManipulatorTransform = CoordinateTransform.U2T(posInManipulatorSpace); // Apply brain surface offset - var brainSurfaceAdjustment = float.IsNaN(BrainSurfaceOffset) ? 0 : BrainSurfaceOffset; - if (_probeManager.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth) - posInManipulatorTransform.w -= brainSurfaceAdjustment; - else - posInManipulatorTransform.z += brainSurfaceAdjustment; + posInManipulatorTransform.w -= float.IsNaN(BrainSurfaceOffset) ? 0 : BrainSurfaceOffset; // Apply coordinate offsets and return result return posInManipulatorTransform + ZeroCoordinateOffset; } + /// + /// Compute if a given AP, ML, DV coordinate is within the manipulator's reach. + /// + /// Coordinate to check. + /// True if the coordinates are within the bounds, false otherwise. + public bool IsAPMLDVWithinManipulatorBounds(Vector3 apmldv) + { + var manipulatorPosition = ConvertInsertionAPMLDVToManipulatorPosition(apmldv); + return !(manipulatorPosition.x < 0) + && !(manipulatorPosition.x > Dimensions.x) + && !(manipulatorPosition.y < 0) + && !(manipulatorPosition.y > Dimensions.y) + && !(manipulatorPosition.z < 0) + && !(manipulatorPosition.z > Dimensions.z); + } + /// /// Set manipulator space offset from brain surface as Depth from manipulator or probe coordinates. /// @@ -248,9 +253,7 @@ public void ComputeBrainSurfaceOffset() else { // We need to calculate the surface coordinate ourselves - var (brainSurfaceCoordinateIdx, _) = _probeManager.CalculateEntryCoordinate( - !IsSetToDropToSurfaceWithDepth - ); + var (brainSurfaceCoordinateIdx, _) = _probeManager.CalculateEntryCoordinate(); if (float.IsNaN(brainSurfaceCoordinateIdx.x)) { @@ -258,8 +261,12 @@ public void ComputeBrainSurfaceOffset() return; } - var brainSurfaceToTransformed = _probeController.Insertion.World2T( - BrainAtlasManager.ActiveReferenceAtlas.AtlasIdx2World(brainSurfaceCoordinateIdx) + var brainSurfaceToTransformed = BrainAtlasManager.ActiveAtlasTransform.U2T( + BrainAtlasManager.ActiveReferenceAtlas.World2Atlas( + BrainAtlasManager.ActiveReferenceAtlas.AtlasIdx2World( + brainSurfaceCoordinateIdx + ) + ) ); BrainSurfaceOffset += Vector3.Distance( @@ -379,19 +386,16 @@ Action onErrorCallBack #region Private Methods + /// + /// Given a manipulator position, set the probe position to match. + /// + /// Absolute manipulator translation stage position. private void EchoPosition(Vector4 pos) { // Exit if disabled and there is no probe controller. if (!enabled && _probeController == null) return; - // Calculate last used direction for dropping to brain surface (between depth and DV) - var dvDelta = Math.Abs(pos.z - _lastManipulatorPosition.z); - var depthDelta = Math.Abs(pos.w - _lastManipulatorPosition.w); - if (dvDelta > 0.0001 || depthDelta > 0.0001) - IsSetToDropToSurfaceWithDepth = depthDelta > dvDelta; - _lastManipulatorPosition = pos; - // Apply zero coordinate offset. var zeroCoordinateAdjustedManipulatorPosition = pos - ZeroCoordinateOffset; @@ -402,16 +406,9 @@ private void EchoPosition(Vector4 pos) // Brain surface adjustment. var brainSurfaceAdjustment = float.IsNaN(BrainSurfaceOffset) ? 0 : BrainSurfaceOffset; - if (IsSetToDropToSurfaceWithDepth) - { - // Apply depth adjustment to manipulator position for non-3 axis manipulators. - if (CoordinateTransform.Prefix != "3lhm") - zeroCoordinateAdjustedManipulatorPosition.w += brainSurfaceAdjustment; - } - else - { - manipulatorSpacePosition.y -= brainSurfaceAdjustment; - } + // Apply depth adjustment to manipulator position for non-3 axis manipulators. + if (CoordinateTransform.Prefix != "3lhm") + zeroCoordinateAdjustedManipulatorPosition.w += brainSurfaceAdjustment; // Convert to world space. var zeroCoordinateAdjustedWorldPosition = CoordinateSpace.Space2World( @@ -426,21 +423,15 @@ private void EchoPosition(Vector4 pos) // Set probe position. // For 3-axis manipulators, use depth to adjust brain offset if applying offset on depth. if (CoordinateTransform.Prefix == "3lhm") - { - if (IsSetToDropToSurfaceWithDepth) - _probeController.SetProbePosition( - new Vector4( - transformedApmldv.x, - transformedApmldv.y, - transformedApmldv.z, - brainSurfaceAdjustment - ) - ); - else - _probeController.SetProbePosition(transformedApmldv); - } + _probeController.SetProbePosition( + new Vector4( + transformedApmldv.x, + transformedApmldv.y, + transformedApmldv.z, + brainSurfaceAdjustment + ) + ); else - { _probeController.SetProbePosition( new Vector4( transformedApmldv.x, @@ -449,7 +440,6 @@ private void EchoPosition(Vector4 pos) zeroCoordinateAdjustedManipulatorPosition.w ) ); - } // Log and continue echoing LogAndContinue(); diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.cs.meta b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController.cs.meta similarity index 100% rename from Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController.cs.meta rename to Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController.cs.meta diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs new file mode 100644 index 00000000..ab28beca --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs @@ -0,0 +1,79 @@ +using System; +using System.Globalization; +using EphysLink; +using UnityEngine; + +namespace Pinpoint.Probes.ManipulatorBehaviorController +{ + public partial class ManipulatorBehaviorController + { + #region Constants + + /// + /// How far the depth axis can be off center of its range before the user is warned. + /// + /// Applies to 3-axis manipulators when calibrating. + private const float CENTER_DEVIATION_FACTOR = 0.125f; + + #endregion + + /// + /// Reset zero coordinate of the manipulator + /// + /// + /// Alerts user of 4-axis manipulators if depth axis is not at 0 and 3-axis manipulators if depth is too far from + /// center. + /// + public void ResetZeroCoordinate() + { + CommunicationManager.Instance.GetPosition( + ManipulatorID, + zeroCoordinate => + { + // Setup alert affirmative callback (continue with reset). + QuestionDialogue.Instance.YesCallback = DoReset; + + // Check depth position and alert. + switch (NumAxes) + { + case 3 + when Mathf.Abs(Dimensions.z / 2f - zeroCoordinate.w) + > CENTER_DEVIATION_FACTOR * Dimensions.z: + QuestionDialogue.Instance.NewQuestion( + "The depth axis is too far from the center of its range and may not have enough space to reach the target. Are you sure you want to continue?" + ); + break; + case 4 when Mathf.Approximately(zeroCoordinate.w, 0f): + QuestionDialogue.Instance.NewQuestion( + "The depth axis is not at 0 and may not have enough space to reach the target. Are you sure you want to continue?" + ); + break; + default: + DoReset(); + break; + } + + return; + + void DoReset() + { + ZeroCoordinateOffset = zeroCoordinate; + BrainSurfaceOffset = 0; + + // Log event. + OutputLog.Log( + new[] + { + "Copilot", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "ResetZeroCoordinate", + ManipulatorID, + ZeroCoordinateOffset.ToString() + } + ); + } + } + ); + } + } +} diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs.meta b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs.meta new file mode 100644 index 00000000..a0c24d89 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_BregmaCalibration.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2f99a30517f49f04fa41d8524a7c4357 \ No newline at end of file diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs new file mode 100644 index 00000000..934caa08 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs @@ -0,0 +1,58 @@ +using System; +using System.Globalization; +using EphysLink; +using UnityEngine; + +namespace Pinpoint.Probes.ManipulatorBehaviorController +{ + /// + /// Manage the Dura calibration of the manipulator. + /// + public partial class ManipulatorBehaviorController + { + #region Properties + + /// + /// Record of the manipulator's depth coordinate at the Dura. + /// + private float _duraDepth; + + /// + /// Record of the probe's coordinate at the Dura. + /// + private Vector3 _duraCoordinate; + + #endregion + + /// + /// Reset the dura offset of the probe and enable the next step + /// + public void ResetDuraOffset() + { + // Reset dura offset. + ComputeBrainSurfaceOffset(); + + // Record the dura depth. + CommunicationManager.Instance.GetPosition( + ManipulatorID, + pos => + { + _duraDepth = pos.w; + _duraCoordinate = _probeController.Insertion.APMLDV; + } + ); + + // Log the event. + OutputLog.Log( + new[] + { + "Automation", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "ResetDuraOffset", + ManipulatorID, + BrainSurfaceOffset.ToString(CultureInfo.InvariantCulture) + } + ); + } + } +} diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs.meta b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs.meta new file mode 100644 index 00000000..9368860b --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_DuraCalibration.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0609c7d3d307feb4cb539412cc7669ec diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs new file mode 100644 index 00000000..24cea222 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs @@ -0,0 +1,471 @@ +using System; +using System.Globalization; +using BrainAtlas; +using EphysLink; +using UnityEngine; + +namespace Pinpoint.Probes.ManipulatorBehaviorController +{ + public partial class ManipulatorBehaviorController + { + #region Constants + + #region Relative distances + + /// + /// Extra safety margin for the Dura to outside to ensure probe is fully retracted (mm). + /// + private const float DURA_MARGIN_DISTANCE = 0.2f; + + /// + /// Distance from target to start slowing down probe (mm). + /// + private const float NEAR_TARGET_DISTANCE = 1f; + + #endregion + + #region Speed multipliers + + /// + /// Slowdown factor for the probe when it is near the target. + /// + private const float NEAR_TARGET_SPEED_MULTIPLIER = 2f / 3f; + + /// + /// Extra speed multiplier for the probe when it is exiting. + /// + private const int EXIT_DRIVE_SPEED_MULTIPLIER = 6; + + /// + /// Speed multiplier of the probe once outside the brain. + /// + private const int OUTSIDE_DRIVE_SPEED_MULTIPLIER = 50; + + #endregion + + #endregion + + #region Properties + + /// + /// Is the probe driving in the insertion cycle? + /// + /// Used to identify which buttons should be made available. + public bool IsMoving { get; private set; } + + #region Caches + + private Vector3 _cachedTargetCoordinate = Vector3.negativeInfinity; + private Vector3 _cachedOffsetAdjustedTargetCoordinate = Vector3.negativeInfinity; + + #endregion + + #endregion + + #region Drive Functions + + /// + /// Start or resume inserting the probe to the target insertion. + /// + /// Probe manager for the target insertion. + /// Base driving speed in mm/s. + /// Distance to drive past target in mm. + /// Probe is not in a drivable state. + /// Unhandled probe drive state. + public void Drive( + ProbeManager targetInsertionProbeManager, + float baseSpeed, + float drivePastDistance + ) + { + // Throw exception if invariant is violated. + if (!ProbeAutomationStateManager.IsInsertable()) + throw new InvalidOperationException( + "Cannot drive to target insertion if the probe is not in a drivable state." + ); + + // Get target depth. + var targetDepth = GetTargetDepth(targetInsertionProbeManager); + + // Set state to driving state (if needed). + ProbeAutomationStateManager.SetToInsertionDrivingState(); + + // Log set to driving state. + LogDrive(targetDepth, baseSpeed, drivePastDistance); + + // Set probe to be moving. + IsMoving = true; + + // Handle driving state. + switch (ProbeAutomationStateManager.ProbeAutomationState) + { + case ProbeAutomationState.DrivingToNearTarget: + // Drive to near target if not already there. + if ( + GetCurrentDistanceToTarget(targetInsertionProbeManager) + > NEAR_TARGET_DISTANCE + ) + CommunicationManager.Instance.SetDepth( + new SetDepthRequest( + ManipulatorID, + targetDepth - NEAR_TARGET_DISTANCE, + baseSpeed + ), + _ => CompleteDriveStep(), + Debug.LogError + ); + // Skip to next step if already through near target. + else + CompleteDriveStep(); + break; + case ProbeAutomationState.DrivingToPastTarget: + // Drive to past target. + CommunicationManager.Instance.SetDepth( + new SetDepthRequest( + ManipulatorID, + targetDepth + drivePastDistance, + baseSpeed * NEAR_TARGET_SPEED_MULTIPLIER + ), + _ => CompleteDriveStep(), + Debug.LogError + ); + break; + case ProbeAutomationState.ReturningToTarget: + // Drive up to target. + CommunicationManager.Instance.SetDepth( + new SetDepthRequest( + ManipulatorID, + targetDepth, + baseSpeed * NEAR_TARGET_SPEED_MULTIPLIER + ), + _ => CompleteDriveStep(), + Debug.LogError + ); + break; + case ProbeAutomationState.IsUncalibrated: + case ProbeAutomationState.IsCalibrated: + case ProbeAutomationState.DrivingToTargetEntryCoordinate: + case ProbeAutomationState.AtEntryCoordinate: + case ProbeAutomationState.AtDuraInsert: + case ProbeAutomationState.AtNearTargetInsert: + case ProbeAutomationState.AtPastTarget: + case ProbeAutomationState.AtTarget: + case ProbeAutomationState.ExitingToNearTarget: + case ProbeAutomationState.AtNearTargetExit: + case ProbeAutomationState.ExitingToDura: + case ProbeAutomationState.AtDuraExit: + case ProbeAutomationState.ExitingToMargin: + case ProbeAutomationState.AtExitMargin: + case ProbeAutomationState.ExitingToTargetEntryCoordinate: + case ProbeAutomationState.DrivingToBregma: + throw new InvalidOperationException( + $"Not a valid driving state: {ProbeAutomationStateManager.ProbeAutomationState}" + ); + default: + throw new ArgumentOutOfRangeException( + $"Unhandled probe drive state: {ProbeAutomationStateManager.ProbeAutomationState}" + ); + } + + return; + + // Increment the state in the insertion cycle and call drive if not at target yet. + void CompleteDriveStep() + { + // Increment cycle state. + ProbeAutomationStateManager.IncrementInsertionCycleState(); + + // Log the event. + LogDrive(targetDepth, baseSpeed, drivePastDistance); + + // Call drive if not at target yet. + if ( + ProbeAutomationStateManager.ProbeAutomationState + != ProbeAutomationState.AtTarget + ) + Drive(targetInsertionProbeManager, baseSpeed, drivePastDistance); + // Set probe to be done moving. + else + IsMoving = false; + } + } + + /// + /// Stop the probe's movement. + /// + public void Stop() + { + CommunicationManager.Instance.Stop( + ManipulatorID, + () => + { + // Set probe to be not moving. + IsMoving = false; + + // Log stop event. + OutputLog.Log( + new[] + { + "Automation", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "Drive", + ManipulatorID, + "Stop" + } + ); + }, + Debug.LogError + ); + } + + /// + /// Start or resume exiting the probe to the target insertion. + /// + /// Probe manager for the target insertion. + /// Base driving speed in mm/s. + /// Probe is not in an exitable state. + /// Unhandled probe exit state. + public void Exit(ProbeManager targetInsertionProbeManager, float baseSpeed) + { + // Throw exception if state is not valid. + if (!ProbeAutomationStateManager.IsExitable()) + throw new InvalidOperationException( + "Cannot exit to target insertion if the probe is not in a state that can exit." + ); + + // Get target depth. + var targetDepth = GetTargetDepth(targetInsertionProbeManager); + + // Set state to exiting state (if needed). + ProbeAutomationStateManager.SetToExitingDrivingState(); + + // Log set to exiting state. + LogDrive(targetDepth, baseSpeed); + + // Set probe to be moving. + IsMoving = true; + + // Handle exiting state. + switch (ProbeAutomationStateManager.ProbeAutomationState) + { + case ProbeAutomationState.ExitingToNearTarget: + // Exit to near target if not already there. + if ( + GetCurrentDistanceToTarget(targetInsertionProbeManager) + < NEAR_TARGET_DISTANCE + ) + CommunicationManager.Instance.SetDepth( + new SetDepthRequest( + ManipulatorID, + targetDepth - NEAR_TARGET_DISTANCE, + baseSpeed + * EXIT_DRIVE_SPEED_MULTIPLIER + * NEAR_TARGET_SPEED_MULTIPLIER + ), + _ => CompleteExitStep(), + Debug.LogError + ); + // Skip to next step if already above near target. + else + CompleteExitStep(); + break; + case ProbeAutomationState.ExitingToDura: + // Exit back up to the Dura. + CommunicationManager.Instance.SetDepth( + new SetDepthRequest( + ManipulatorID, + _duraDepth, + baseSpeed * EXIT_DRIVE_SPEED_MULTIPLIER + ), + _ => CompleteExitStep(), + Debug.LogError + ); + break; + case ProbeAutomationState.ExitingToMargin: + // Exit to the safe margin above the Dura. + CommunicationManager.Instance.SetDepth( + new SetDepthRequest( + ManipulatorID, + _duraDepth - DURA_MARGIN_DISTANCE, + baseSpeed * EXIT_DRIVE_SPEED_MULTIPLIER + ), + _ => CompleteExitStep(), + Debug.LogError + ); + break; + case ProbeAutomationState.ExitingToTargetEntryCoordinate: + // Drive to the target entry coordinate (same place before calibrating to the Dura). + CommunicationManager.Instance.SetPosition( + new SetPositionRequest( + ManipulatorID, + ConvertInsertionAPMLDVToManipulatorPosition( + _trajectoryCoordinates.third + ), + AUTOMATIC_MOVEMENT_SPEED + ), + _ => CompleteExitStep(), + Debug.LogError + ); + break; + case ProbeAutomationState.IsUncalibrated: + case ProbeAutomationState.IsCalibrated: + case ProbeAutomationState.DrivingToTargetEntryCoordinate: + case ProbeAutomationState.AtEntryCoordinate: + case ProbeAutomationState.AtDuraInsert: + case ProbeAutomationState.DrivingToNearTarget: + case ProbeAutomationState.AtNearTargetInsert: + case ProbeAutomationState.DrivingToPastTarget: + case ProbeAutomationState.AtPastTarget: + case ProbeAutomationState.ReturningToTarget: + case ProbeAutomationState.AtTarget: + case ProbeAutomationState.AtNearTargetExit: + case ProbeAutomationState.AtDuraExit: + case ProbeAutomationState.AtExitMargin: + case ProbeAutomationState.DrivingToBregma: + throw new InvalidOperationException( + $"Not a valid exit state: {ProbeAutomationStateManager.ProbeAutomationState}" + ); + default: + throw new ArgumentOutOfRangeException( + $"Unhandled probe exit state: {ProbeAutomationStateManager.ProbeAutomationState}" + ); + } + + return; + + // Increment the state in the insertion cycle and call exit if not at entry coordinate yet. + void CompleteExitStep() + { + // Increment cycle state. + ProbeAutomationStateManager.IncrementInsertionCycleState(); + + // Log the event. + LogDrive(targetDepth, baseSpeed); + + // Call exit if not back at entry coordinate yet. + if ( + ProbeAutomationStateManager.ProbeAutomationState + != ProbeAutomationState.AtEntryCoordinate + ) + { + Exit(targetInsertionProbeManager, baseSpeed); + } + // Set probe to be done moving and remove Dura offset. + else + { + IsMoving = false; + BrainSurfaceOffset = 0; + } + } + } + + #endregion + + #region Helper Functions + + /// + /// Log a drive event. + /// + /// Target depth of drive. + /// Base speed of drive. + /// Distance (mm) driven past the target. Only supplied in insertion drives. + private void LogDrive(float targetDepth, float baseSpeed, float drivePastDistance = 0) + { + OutputLog.Log( + new[] + { + "Automation", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "Drive", + ManipulatorID, + ProbeAutomationStateManager.ProbeAutomationState.ToString(), + targetDepth.ToString(CultureInfo.InvariantCulture), + baseSpeed.ToString(CultureInfo.InvariantCulture), + drivePastDistance.ToString(CultureInfo.InvariantCulture) + } + ); + } + + /// + /// Compute the target coordinate adjusted for the probe's actual position. + /// + /// + /// APMLDV coordinates of where the probe should actually go. + private Vector3 GetOffsetAdjustedTargetCoordinate(ProbeManager targetInsertionProbeManager) + { + // Extract target insertion. + var targetInsertion = targetInsertionProbeManager.ProbeController.Insertion; + + // Shortcut exit if already computed and targetInsertion did not change. + if ( + targetInsertion.APMLDV == _cachedTargetCoordinate + && !float.IsNegativeInfinity(_cachedOffsetAdjustedTargetCoordinate.x) + ) + return _cachedOffsetAdjustedTargetCoordinate; + + var targetWorldT = targetInsertion.PositionWorldT(); + var relativePositionWorldT = _probeController.Insertion.PositionWorldT() - targetWorldT; + var probeTipTForward = _probeController.ProbeTipT.forward; + var offsetAdjustedRelativeTargetPositionWorldT = Vector3.ProjectOnPlane( + relativePositionWorldT, + probeTipTForward + ); + var offsetAdjustedTargetCoordinateWorldT = + targetWorldT + offsetAdjustedRelativeTargetPositionWorldT; + + // Converting worldT to AtlasT (to capture new Bregma offset when there is scaling) + // then switch axes to get APMLDV. + var offsetAdjustedTargetCoordinateAtlasT = + BrainAtlasManager.ActiveReferenceAtlas.World2Atlas( + offsetAdjustedTargetCoordinateWorldT + ); + var offsetAdjustedTargetCoordinateT = BrainAtlasManager.ActiveAtlasTransform.U2T_Vector( + offsetAdjustedTargetCoordinateAtlasT + ); + + // Cache the computed values. + _cachedTargetCoordinate = targetInsertion.APMLDV; + _cachedOffsetAdjustedTargetCoordinate = offsetAdjustedTargetCoordinateT; + + return _cachedOffsetAdjustedTargetCoordinate; + } + + /// + /// Compute the absolute distance from the target insertion to the Dura. + /// + /// Target to computer distance to. + /// Distance in mm to the target from the Dura. + private float GetTargetDistanceToDura(ProbeManager targetInsertionProbeManager) + { + return Vector3.Distance( + GetOffsetAdjustedTargetCoordinate(targetInsertionProbeManager), + _duraCoordinate + ); + } + + /// + /// Compute the current distance to the target insertion. + /// + /// + /// Distance in mm to the target from the probe. + private float GetCurrentDistanceToTarget(ProbeManager targetInsertionProbeManager) + { + return Vector3.Distance( + _probeController.Insertion.APMLDV, + GetOffsetAdjustedTargetCoordinate(targetInsertionProbeManager) + ); + } + + /// + /// Compute the target depth for the probe to drive to. + /// + /// Target to drive (insert) to. + /// The depth the manipulator needs to drive to reach the target insertion. + private float GetTargetDepth(ProbeManager targetInsertionProbeManager) + { + return _duraDepth + GetTargetDistanceToDura(targetInsertionProbeManager); + } + + #endregion + } +} diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs.meta b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs.meta new file mode 100644 index 00000000..3bf4072a --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_Insertion.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bbc85cfb8bef2b54a8d4643231d64cf7 diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs new file mode 100644 index 00000000..84c047f3 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs @@ -0,0 +1,360 @@ +using System; +using System.Globalization; +using BrainAtlas; +using EphysLink; +using UnityEngine; + +namespace Pinpoint.Probes.ManipulatorBehaviorController +{ + public partial class ManipulatorBehaviorController + { + #region Constants + + // Axes colors. + private static readonly Color AP_COLOR = new(1, 0.3215686f, 0.3215686f); + private static readonly Color ML_COLOR = new(0.2039216f, 0.6745098f, 0.8784314f); + private static readonly Color DV_COLOR = new(1, 0.854902f, 0.4745098f); + + // Trajectory line properties. + private const float LINE_WIDTH = 0.1f; + private const int NUM_SEGMENTS = 2; + + // Trajectory values. + public static readonly Vector3 PRE_DEPTH_DRIVE_DV_OFFSET = new(0, 3.5f, 0); + + /// + /// Distance from the entry coordinate to the Dura. This is considered a safe distance to put the probe. + /// + private const float ENTRY_COORDINATE_DURA_DISTANCE = 3.5f; + + #endregion + + #region Components + + private (GameObject ap, GameObject ml, GameObject dv) _trajectoryLineGameObjects; + private (LineRenderer ap, LineRenderer ml, LineRenderer dv) _trajectoryLineLineRenderers; + + #endregion + + #region Properties + + /// + /// Trajectory broken into 3 stages (for 3 axes of movement). + /// + /// Execution order: DV, AP, ML. Defaults to negative infinity when there is no trajectory. + private (Vector3 first, Vector3 second, Vector3 third) _trajectoryCoordinates = ( + Vector3.negativeInfinity, + Vector3.negativeInfinity, + Vector3.negativeInfinity + ); + + #endregion + + #region Public Functions + + /// + /// Compute the entry coordinate and trajectory for the target insertion. Also, draw the trajectory lines. + /// + /// Probe manager of the target insertion + /// + /// The computed entry coordinate in AP, ML, DV coordinates. Negative infinity if target is unset or already + /// there. + /// + public Vector3 ComputeEntryCoordinateTrajectory(ProbeManager targetInsertionProbeManager) + { + // If set to null or already past the entry coordinate, cleanup and remove insertion trajectory. + if ( + targetInsertionProbeManager == null + || ProbeAutomationStateManager.HasReachedTargetEntryCoordinate() + ) + { + RemoveTrajectoryLines(); + return Vector3.negativeInfinity; + } + + // Compute the trajectory. + ComputeTargetEntryCoordinateTrajectory(targetInsertionProbeManager); + + // Create trajectory lines. + CreateTrajectoryLines(); + + // Set trajectory lines. + UpdateTrajectoryLines(); + + // Return final entry coordinate (coordinate of the ML movement, the last in the trajectory). + return _trajectoryCoordinates.third; + } + + /// + /// Move the probe along the planned trajectory to the target entry coordinate.
+ ///
+ /// Callback action after movement is completed. + /// No trajectory planned for probe + /// Will log that movement has started and completed. + public void DriveToTargetEntryCoordinate(Action onDriveEnd) + { + // Throw exception if invariant is violated. + if (float.IsNegativeInfinity(_trajectoryCoordinates.first.x)) + throw new InvalidOperationException( + "No trajectory planned for probe " + _probeManager.name + ); + + // Convert insertions to manipulator positions. + var dvPosition = ConvertInsertionAPMLDVToManipulatorPosition(_trajectoryCoordinates.first); + var apPosition = ConvertInsertionAPMLDVToManipulatorPosition(_trajectoryCoordinates.second); + var mlPosition = ConvertInsertionAPMLDVToManipulatorPosition(_trajectoryCoordinates.third); + + // Log that movement is starting. + OutputLog.Log( + new[] + { + "Automation", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "DriveToTargetEntryCoordinate", + ManipulatorID, + "Start" + } + ); + + // Move. + CommunicationManager.Instance.SetPosition( + new SetPositionRequest(ManipulatorID, dvPosition, AUTOMATIC_MOVEMENT_SPEED), + _ => + { + CommunicationManager.Instance.SetPosition( + new SetPositionRequest(ManipulatorID, apPosition, AUTOMATIC_MOVEMENT_SPEED), + _ => + { + CommunicationManager.Instance.SetPosition( + new SetPositionRequest( + ManipulatorID, + mlPosition, + AUTOMATIC_MOVEMENT_SPEED + ), + _ => + { + // Remove trajectory lines. + RemoveTrajectoryLines(); + + // Conclude drive. + ConcludeDrive(); + }, + error => + { + Debug.LogError(error); + ConcludeDrive(); + } + ); + }, + error => + { + Debug.LogError(error); + ConcludeDrive(); + } + ); + }, + error => + { + Debug.LogError(error); + ConcludeDrive(); + } + ); + + return; + + void ConcludeDrive() + { + // Log drive finished. + OutputLog.Log( + new[] + { + "Automation", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "DriveToTargetEntryCoordinate", + ManipulatorID, + "Finish" + } + ); + + // Callback drive end. + onDriveEnd.Invoke(); + } + } + + /// + /// Stop the probe from moving to the target entry coordinate. + /// + /// Will log that movement has stopped. + /// Callback action after movement is stopped. + public void StopDriveToTargetEntryCoordinate(Action onStopped) + { + // Log that movement is stopping. + OutputLog.Log( + new[] + { + "Copilot", + DateTime.Now.ToString(CultureInfo.InvariantCulture), + "MoveToTargetInsertion", + ManipulatorID, + "Stop" + } + ); + + // Stop movement. + CommunicationManager.Instance.Stop(ManipulatorID, onStopped.Invoke, Debug.LogError); + } + + #endregion + + #region Internal Functions + + /// + /// Compute the trajectory to the target insertion entry coordinate. + /// + /// Probe manager of the target insertion to compute the entry coordinate for. + private void ComputeTargetEntryCoordinateTrajectory( + ProbeManager targetInsertionProbeManager + ) + { + // Compute entry coordinate in world space. + var entryCoordinateWorld = + targetInsertionProbeManager.GetSurfaceCoordinateWorldT() + - targetInsertionProbeManager.ProbeController.GetTipWorldU().tipForwardWorldU + * ENTRY_COORDINATE_DURA_DISTANCE; + + // Convert world space to transformed space. + var entryCoordinateAPMLDV = BrainAtlasManager.ActiveAtlasTransform.U2T( + BrainAtlasManager.ActiveReferenceAtlas.World2Atlas(entryCoordinateWorld) + ); + + // Get current probe coordinate. + var currentCoordinate = _probeManager.ProbeController.Insertion.APMLDV; + + // Set first movement (DV). + _trajectoryCoordinates.first = new Vector3( + currentCoordinate.x, + currentCoordinate.y, + entryCoordinateAPMLDV.z + ); + + // Set second movement (AP). + _trajectoryCoordinates.second = new Vector3( + entryCoordinateAPMLDV.x, + currentCoordinate.y, + entryCoordinateAPMLDV.z + ); + + // Set third movement (ML). + _trajectoryCoordinates.third = entryCoordinateAPMLDV; + } + + /// + /// Create the trajectory line game objects and line renderers (if needed). + /// + private void CreateTrajectoryLines() + { + // Shortcut exit if they already exist. + if (_trajectoryLineGameObjects.ap != null) + return; + + // Create the trajectory line game objects. + _trajectoryLineGameObjects = ( + new GameObject("APTrajectoryLine") { layer = 5 }, + new GameObject("MLTrajectoryLine") { layer = 5 }, + new GameObject("DVTrajectoryLine") { layer = 5 } + ); + + // Create the line renderers. + _trajectoryLineLineRenderers = ( + _trajectoryLineGameObjects.ap.AddComponent(), + _trajectoryLineGameObjects.ml.AddComponent(), + _trajectoryLineGameObjects.dv.AddComponent() + ); + + // Apply materials. + var defaultSpriteShader = Shader.Find("Sprites/Default"); + _trajectoryLineLineRenderers.ap.material = new Material(defaultSpriteShader) + { + color = AP_COLOR + }; + _trajectoryLineLineRenderers.ml.material = new Material(defaultSpriteShader) + { + color = ML_COLOR + }; + _trajectoryLineLineRenderers.dv.material = new Material(defaultSpriteShader) + { + color = DV_COLOR + }; + + // Set line widths. + _trajectoryLineLineRenderers.ap.startWidth = _trajectoryLineLineRenderers.ap.endWidth = + LINE_WIDTH; + _trajectoryLineLineRenderers.ml.startWidth = _trajectoryLineLineRenderers.ml.endWidth = + LINE_WIDTH; + _trajectoryLineLineRenderers.dv.startWidth = _trajectoryLineLineRenderers.dv.endWidth = + LINE_WIDTH; + + // Set segment counts. + _trajectoryLineLineRenderers.ap.positionCount = NUM_SEGMENTS; + _trajectoryLineLineRenderers.ml.positionCount = NUM_SEGMENTS; + _trajectoryLineLineRenderers.dv.positionCount = NUM_SEGMENTS; + } + + /// + /// Update the trajectory line positions. + /// + private void UpdateTrajectoryLines() + { + _trajectoryLineLineRenderers.dv.SetPosition(0, _probeController.ProbeTipT.position); + _trajectoryLineLineRenderers.dv.SetPosition( + 1, + BrainAtlasManager.ActiveReferenceAtlas.Atlas2World( + BrainAtlasManager.ActiveAtlasTransform.T2U_Vector(_trajectoryCoordinates.first) + ) + ); + + _trajectoryLineLineRenderers.ap.SetPosition( + 0, + BrainAtlasManager.ActiveReferenceAtlas.Atlas2World( + BrainAtlasManager.ActiveAtlasTransform.T2U_Vector(_trajectoryCoordinates.first) + ) + ); + _trajectoryLineLineRenderers.ap.SetPosition( + 1, + BrainAtlasManager.ActiveReferenceAtlas.Atlas2World( + BrainAtlasManager.ActiveAtlasTransform.T2U_Vector(_trajectoryCoordinates.second) + ) + ); + + _trajectoryLineLineRenderers.ml.SetPosition( + 0, + BrainAtlasManager.ActiveReferenceAtlas.Atlas2World( + BrainAtlasManager.ActiveAtlasTransform.T2U_Vector(_trajectoryCoordinates.second) + ) + ); + _trajectoryLineLineRenderers.ml.SetPosition( + 1, + BrainAtlasManager.ActiveReferenceAtlas.Atlas2World( + BrainAtlasManager.ActiveAtlasTransform.T2U_Vector(_trajectoryCoordinates.third) + ) + ); + } + + /// + /// Destroy the trajectory line game objects and line renderers. Also reset the references. + /// + private void RemoveTrajectoryLines() + { + // Destroy the objects. + Destroy(_trajectoryLineGameObjects.ap); + Destroy(_trajectoryLineGameObjects.ml); + Destroy(_trajectoryLineGameObjects.dv); + + // Reset the references. + _trajectoryLineGameObjects = (null, null, null); + _trajectoryLineLineRenderers = (null, null, null); + } + + #endregion + } +} diff --git a/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs.meta b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs.meta new file mode 100644 index 00000000..afcacff3 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ManipulatorBehaviorController/ManipulatorBehaviorController_Automation_TargetInsertion.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 7ddaf4479f8b1b3479deb22865f7a5da diff --git a/Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs new file mode 100644 index 00000000..4019a0de --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs @@ -0,0 +1,103 @@ +namespace Pinpoint.Probes +{ + /// + /// Drive state in the automation cycle. + /// + public enum ProbeAutomationState + { + /// + /// Initial, uncalibrated state. + /// + IsUncalibrated, + + /// + /// Is calibrated to Bregma. Could be positioned anywhere. + /// + IsCalibrated, + + /// + /// Moving to the target entry coordinate. + /// + DrivingToTargetEntryCoordinate, + + /// + /// At the target entry coordinate. + /// + AtEntryCoordinate, + + /// + /// Calibrated to the Dura; ready for insertion drive. + /// + AtDuraInsert, + + /// + /// Driving to near target depth (insertion drive). + /// + DrivingToNearTarget, + + /// + /// At near target depth (insertion drive). Need to switch to 2/3 speed. + /// + AtNearTargetInsert, + + /// + /// Driving to past target depth (insertion drive). + /// + DrivingToPastTarget, + + /// + /// At past target depth (insertion drive). + /// + AtPastTarget, + + /// + /// Driving back up to target depth (insertion drive). + /// + ReturningToTarget, + + /// + /// At target depth (insertion drive). + /// + AtTarget, + + /// + /// Driving back up to near target depth (exit drive). + /// + ExitingToNearTarget, + + /// + /// At near target depth (exit drive). Can switch back to normal speed. + /// + AtNearTargetExit, + + /// + /// Driving back up to the Dura (exit drive). + /// + ExitingToDura, + + /// + /// At the Dura (exit drive). Should not re-insert. + /// + AtDuraExit, + + /// + /// Driving above the Dura by a safe margin (exit drive). + /// + ExitingToMargin, + + /// + /// At the safe margin above the Dura (exit drive). + /// + AtExitMargin, + + /// + /// Driving back up to the target entry coordinate (exit drive). + /// + ExitingToTargetEntryCoordinate, + + /// + /// Driving back to Bregma. + /// + DrivingToBregma + } +} diff --git a/Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs.meta b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs.meta new file mode 100644 index 00000000..4e2f2421 --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationState.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a883806dd4f7fd74d803c2bab7381b31 \ No newline at end of file diff --git a/Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs new file mode 100644 index 00000000..a3bb8b0b --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs @@ -0,0 +1,225 @@ +using System; + +namespace Pinpoint.Probes +{ + /// + /// Define and manage the automation state of a probe. + /// + public class ProbeAutomationStateManager + { + #region Properties + + /// + /// The state of the probe. + /// + public ProbeAutomationState ProbeAutomationState { get; private set; } = + ProbeAutomationState.IsUncalibrated; + + #endregion + + #region Actions + + /// + /// Set the probe's state to be calibrated. + /// + /// This can be set from any state. This is the reset point. + public void SetCalibrated() + { + ProbeAutomationState = ProbeAutomationState.IsCalibrated; + } + + /// + /// Set the probe's state to be driving to the target entry coordinate. + /// + /// Probe is not calibrated or at entry coordinate. + public void SetDrivingToTargetEntryCoordinate() + { + if (!IsCalibrated() && ProbeAutomationState != ProbeAutomationState.AtEntryCoordinate) + throw new InvalidOperationException( + "Cannot set probe to driving to target entry coordinate if it is not calibrated." + ); + + ProbeAutomationState = ProbeAutomationState.DrivingToTargetEntryCoordinate; + } + + /// + /// Set the probe's state to be at the target entry coordinate. + /// + /// Probe is not driving there or exiting to there. + public void SetAtEntryCoordinate() + { + if ( + ProbeAutomationState != ProbeAutomationState.DrivingToTargetEntryCoordinate + && ProbeAutomationState != ProbeAutomationState.ExitingToTargetEntryCoordinate + ) + throw new InvalidOperationException( + "Cannot set probe to entry coordinate if it was not driving there or exiting to there." + ); + + ProbeAutomationState = ProbeAutomationState.AtEntryCoordinate; + } + + /// + /// Set the probe's state to be at the Dura for insertion. + /// + /// Probe is not at the entry coordinate or exiting to Dura. + public void SetAtDuraInsert() + { + if ( + ProbeAutomationState != ProbeAutomationState.AtEntryCoordinate + && ProbeAutomationState != ProbeAutomationState.ExitingToDura + ) + throw new InvalidOperationException( + "Cannot set probe to dura if it was not at the entry coordinate or exiting to Dura." + ); + ProbeAutomationState = ProbeAutomationState.AtDuraInsert; + } + + /// + /// Increment the state according to the normal loop for the insertion cycle. + /// + /// Probe is not in the insertion cycle. + public void IncrementInsertionCycleState() + { + switch (ProbeAutomationState) + { + // Throw exception if required state is not met. + case < ProbeAutomationState.AtDuraInsert + or > ProbeAutomationState.ExitingToTargetEntryCoordinate: + throw new InvalidOperationException( + "Cannot increment the insertion cycle state if the probe is not in the insertion cycle." + ); + + // If exiting to the target entry coordinate, set to the target entry coordinate (end of cycle). + case ProbeAutomationState.ExitingToTargetEntryCoordinate: + ProbeAutomationState = ProbeAutomationState.AtEntryCoordinate; + return; + + // Otherwise, increment state. + default: + ProbeAutomationState++; + break; + } + } + + /// + /// Set the probe's state to be in the next insertion driving state. + /// + /// Probe is not in a state that can go drive. + public void SetToInsertionDrivingState() + { + // Throw exception if required state is not met. + if (!IsInsertable()) + throw new InvalidOperationException( + "Cannot set probe to insertion driving state if it is not at the Dura or inside the brain." + ); + + // Set state. + ProbeAutomationState = ProbeAutomationState switch + { + // States for driving to near target depth. + ProbeAutomationState.AtDuraInsert + or ProbeAutomationState.ExitingToDura + => ProbeAutomationState.DrivingToNearTarget, + + // States for driving to the target. + ProbeAutomationState.AtNearTargetInsert + or ProbeAutomationState.ExitingToNearTarget + or ProbeAutomationState.AtNearTargetExit + => ProbeAutomationState.DrivingToPastTarget, + + // States for returning to the target. + ProbeAutomationState.AtPastTarget + => ProbeAutomationState.ReturningToTarget, + + // Do nothing for driving states. + _ => ProbeAutomationState + }; + } + + /// + /// Set the probe's state to be in the next exit driving state. + /// + /// Probe is not in a state that can exit. + public void SetToExitingDrivingState() + { + // Throw exception if required state is not met. + if (!IsExitable()) + throw new InvalidOperationException( + "Cannot set probe to exit driving state if it is not past the Dura." + ); + + // Set state. + ProbeAutomationState = ProbeAutomationState switch + { + // States for Exiting to near target depth. + ProbeAutomationState.AtTarget + or ProbeAutomationState.ReturningToTarget + or ProbeAutomationState.DrivingToPastTarget + => ProbeAutomationState.ExitingToNearTarget, + + // States for Exiting to the Dura. + ProbeAutomationState.AtNearTargetExit + or ProbeAutomationState.AtNearTargetInsert + or ProbeAutomationState.DrivingToNearTarget + => ProbeAutomationState.ExitingToDura, + + // States for exiting to margin. + ProbeAutomationState.AtDuraExit + => ProbeAutomationState.ExitingToMargin, + + // States for exiting to target entry coordinate. + ProbeAutomationState.AtExitMargin + => ProbeAutomationState.ExitingToTargetEntryCoordinate, + + // Do nothing for driving states. + _ => ProbeAutomationState + }; + } + + #endregion + + #region Queries + + /// + /// Checks if the probe is past the calibration phase. + /// + /// True if the state is past the calibration phase, false otherwise. + public bool IsCalibrated() + { + return ProbeAutomationState >= ProbeAutomationState.IsCalibrated; + } + + /// + /// Checks if the probe has been to the target entry coordinate. + /// + /// True if the state is past reaching the target entry coordinate, false otherwise. + public bool HasReachedTargetEntryCoordinate() + { + return ProbeAutomationState >= ProbeAutomationState.AtEntryCoordinate; + } + + /// + /// Checks if the probe can be inserted (driven into the brain). + /// + /// Returns true if the probe is calibrated to the Dura and has not exited back out of the Dura. + public bool IsInsertable() + { + return ProbeAutomationState + is >= ProbeAutomationState.AtDuraInsert + and < ProbeAutomationState.AtDuraExit + && ProbeAutomationState != ProbeAutomationState.AtTarget; + } + + /// + /// Checks if the probe can be retracted (drive back out of the brain). + /// + /// Returns true if the probe has gone through/past the Dura. + public bool IsExitable() + { + return ProbeAutomationState > ProbeAutomationState.AtDuraInsert; + } + + #endregion + } +} diff --git a/Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs.meta b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs.meta new file mode 100644 index 00000000..d3d7177b --- /dev/null +++ b/Assets/Scripts/Pinpoint/Probes/ProbeAutomationStateManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9146e7c3759810d4ead53231e19eb641 \ No newline at end of file diff --git a/Assets/Scripts/Pinpoint/Probes/ProbeManager.cs b/Assets/Scripts/Pinpoint/Probes/ProbeManager.cs index ea4cde71..08a45bd9 100644 --- a/Assets/Scripts/Pinpoint/Probes/ProbeManager.cs +++ b/Assets/Scripts/Pinpoint/Probes/ProbeManager.cs @@ -6,6 +6,7 @@ using BrainAtlas; using EphysLink; using Pinpoint.Probes; +using Pinpoint.Probes.ManipulatorBehaviorController; using UnityEngine; using UnityEngine.Events; using UnityEngine.Serialization; @@ -229,7 +230,7 @@ public List GetProbeUIManagers() /// When true, this Probe will be saved and re-loaded in the scene the next time Pinpoint loads /// public bool Saved { get; set; } - + #endregion #region Unity @@ -906,10 +907,11 @@ public void UpdateSurfacePosition() } } + // TODO: Remove useDV and always use depth. /// /// Calculate the entry coordinate on the brain surface, returns coordIdx /// - /// + /// Whether the surface should be found along the DV axis or depth axis. /// (entryCoordAtlasIdx, probeInBrain) public (Vector3 entryCoordAtlasIdx, bool probeInBrain) CalculateEntryCoordinate( bool useDV = false @@ -1276,9 +1278,9 @@ public static ProbeManagerData ProbeManager2ProbeData(ProbeManager probeManager) data.ZeroCoordOffset = probeManager.ManipulatorBehaviorController.ZeroCoordinateOffset; data.Dimensions = probeManager.ManipulatorBehaviorController.Dimensions; data.BrainSurfaceOffset = probeManager.ManipulatorBehaviorController.BrainSurfaceOffset; - data.Drop2SurfaceWithDepth = probeManager - .ManipulatorBehaviorController - .IsSetToDropToSurfaceWithDepth; + // data.Drop2SurfaceWithDepth = probeManager + // .ManipulatorBehaviorController + // .IsSetToDropToSurfaceWithDepth; data.IsRightHanded = probeManager.ManipulatorBehaviorController.IsRightHanded; return data; diff --git a/Assets/Scripts/Pinpoint/TrajectoryPlannerManager.cs b/Assets/Scripts/Pinpoint/TrajectoryPlannerManager.cs index 6bd7e063..80ae13a2 100644 --- a/Assets/Scripts/Pinpoint/TrajectoryPlannerManager.cs +++ b/Assets/Scripts/Pinpoint/TrajectoryPlannerManager.cs @@ -487,8 +487,8 @@ public ProbeManager AddNewProbe(ProbeProperties.ProbeType probeType, ProbeInsert probeManager.ManipulatorBehaviorController.NumAxes = numAxes; probeManager.ManipulatorBehaviorController.ZeroCoordinateOffset = zeroCoordinateOffset; probeManager.ManipulatorBehaviorController.BrainSurfaceOffset = brainSurfaceOffset; - probeManager.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth = dropToSurfaceWithDepth; - probeManager.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth = dropToSurfaceWithDepth; + // probeManager.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth = dropToSurfaceWithDepth; + // probeManager.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth = dropToSurfaceWithDepth; probeManager.ManipulatorBehaviorController.IsRightHanded = isRightHanded; var communicationManager = GameObject.Find("EphysLink").GetComponent(); diff --git a/Assets/Scripts/Pinpoint/UI/EphysCopilot/InsertionSelectionPanelHandler.cs b/Assets/Scripts/Pinpoint/UI/EphysCopilot/InsertionSelectionPanelHandler.cs index 392c1e26..0dcb48a5 100644 --- a/Assets/Scripts/Pinpoint/UI/EphysCopilot/InsertionSelectionPanelHandler.cs +++ b/Assets/Scripts/Pinpoint/UI/EphysCopilot/InsertionSelectionPanelHandler.cs @@ -5,6 +5,7 @@ using BrainAtlas; using EphysLink; using Pinpoint.Probes; +using Pinpoint.Probes.ManipulatorBehaviorController; using TMPro; using UnityEngine; using UnityEngine.Events; diff --git a/Assets/Scripts/Pinpoint/UI/EphysLinkSettings/ManipulatorConnectionPanel.cs b/Assets/Scripts/Pinpoint/UI/EphysLinkSettings/ManipulatorConnectionPanel.cs index a88b5310..6eed14b8 100644 --- a/Assets/Scripts/Pinpoint/UI/EphysLinkSettings/ManipulatorConnectionPanel.cs +++ b/Assets/Scripts/Pinpoint/UI/EphysLinkSettings/ManipulatorConnectionPanel.cs @@ -303,9 +303,9 @@ public void UpdateZeroCoordinateOffsetD(string newValue) public void UpdateDuraDropDirection(int value) { // Set drop direction on attached probe if it exists - if (_attachedProbe) - _attachedProbe.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth = - value == 1; + // if (_attachedProbe) + // _attachedProbe.ManipulatorBehaviorController.IsSetToDropToSurfaceWithDepth = + // value == 1; } private void SetDuraDropInteractable(bool interactable) diff --git a/Assets/Scripts/UI/AutomationStack.meta b/Assets/Scripts/UI/AutomationStack.meta new file mode 100644 index 00000000..246052d4 --- /dev/null +++ b/Assets/Scripts/UI/AutomationStack.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4746c78f687d0a848a5c30aca67a9c44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/UI/AutomationStack/AutomationStackHandler.cs b/Assets/Scripts/UI/AutomationStack/AutomationStackHandler.cs new file mode 100644 index 00000000..c91c9ca7 --- /dev/null +++ b/Assets/Scripts/UI/AutomationStack/AutomationStackHandler.cs @@ -0,0 +1,241 @@ +using System; +using Pinpoint.Probes; +using Pinpoint.Probes.ManipulatorBehaviorController; +using UI.States; +using UnityEngine; +using UnityEngine.UIElements; + +namespace UI.AutomationStack +{ + /// + /// Automation Stack UI origin class. + /// + /// + /// This script handles getting the components, running UI setup functions, and registering callbacks. + /// + public partial class AutomationStackHandler : MonoBehaviour + { + #region Components + + #region State + + [SerializeField] + private AutomationStackState _state; + + #endregion + + #region UI + + // Document. + [SerializeField] + private UIDocument _uiDocument; + private VisualElement _root => _uiDocument.rootVisualElement; + + // Panels. + private VisualElement _automationStackPanel; + + #region Bregma Calibration + + private Button _resetBregmaCalibrationButton; + + #endregion + + #region Target Insertion + + private RadioButtonGroup _targetInsertionRadioButtonGroup; + private Button _driveToTargetEntryCoordinateButton; + + #endregion + + #region Dura Calibration + + private Button _resetDuraCalibrationButton; + + #endregion + + #region Insertion + + private Button _driveToTargetInsertionButton; + private Button _stopButton; + private Button _exitButton; + + #endregion + + #endregion + + + #region Probes + + private static ManipulatorBehaviorController ActiveManipulatorBehaviorController => + ProbeManager.ActiveProbeManager.ManipulatorBehaviorController; + + private static ProbeAutomationStateManager ActiveProbeStateManager => + ActiveManipulatorBehaviorController.ProbeAutomationStateManager; + + #endregion + + #endregion + + + #region Unity + + private void OnEnable() + { + // Get components. + _automationStackPanel = _root.Q("automation-stack-panel"); + _resetBregmaCalibrationButton = _automationStackPanel.Q