/// <summary>
        /// Sets an optional recording to use with the current environment and triggers simulation restart
        /// </summary>
        /// <param name="optionIndex">Index of the recording to use, where 0 means no recording should be used</param>
        public void SetRecordingOptionAndRestartSimulation(int optionIndex)
        {
            if (optionIndex < 0 || optionIndex > CurrentSyntheticRecordingsCount)
            {
                optionIndex = 0;
            }

            // An optionIndex of 0 means no recording is used, so the index into current recordings is optionIndex - 1
            var useRecording = optionIndex > 0;

            CurrentSyntheticRecordingOptionIndex = optionIndex;
            var simulationSettings = SimulationSettings.instance;

            if (useRecording)
            {
                simulationSettings.UseSyntheticRecording = true;
                simulationSettings.SetRecordingForCurrentSyntheticEnvironment(m_CurrentSyntheticRecordings[optionIndex - 1]);
            }
            else
            {
                simulationSettings.UseSyntheticRecording = false;
            }

            RecordingOptionChanged?.Invoke();

            if (useRecording)
            {
                m_QuerySimulationModule.RequestSimulationModeSelection(SimulationModeSelection.TemporalMode);
            }

            m_QuerySimulationModule.RestartSimulationIfNeeded(true);
        }
        void OnManualTimeChangeFinalized()
        {
            m_ManualTimeChangeTask = null;
            if (m_CurrentSessionDirector == null || !AutoSyncWithTimeChanges)
            {
                return;
            }

            // When time is manually changed we must rerun the simulation to get it in sync with the current time
            m_QuerySimulationModule.RequestSimulationModeSelection(SimulationModeSelection.TemporalMode);
            m_QuerySimulationModule.RestartSimulationIfNeeded();
        }