/// <summary> /// Sets up the next recording for the current environment and triggers simulation restart /// </summary> public void SetupNextRecordingAndRestartSimulation() { var simulationSettings = SimulationSettings.instance; var recordingsCount = m_CurrentSyntheticRecordings.Count; if (recordingsCount <= 1 || !simulationSettings.UseSyntheticRecording) { return; } if (CurrentSyntheticRecordingOptionIndex >= recordingsCount) { CurrentSyntheticRecordingOptionIndex = 1; } else { CurrentSyntheticRecordingOptionIndex++; } simulationSettings.SetRecordingForCurrentSyntheticEnvironment(m_CurrentSyntheticRecordings[CurrentSyntheticRecordingOptionIndex - 1]); RecordingOptionChanged?.Invoke(); m_QuerySimulationModule.RequestSimulationModeSelection(SimulationModeSelection.TemporalMode); m_QuerySimulationModule.RestartSimulationIfNeeded(true); }
/// <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 SetIndependentRecording(int index) { CurrentIndependentRecordingIndex = index; SimulationSettings.instance.IndependentRecording = m_IndependentRecordings[index]; RecordingOptionChanged?.Invoke(); }
void GetSyntheticRecordings() { m_SyntheticRecordingsMap.Clear(); var recordingGUIDs = AssetDatabase.FindAssets(k_SessionRecordingFilter); foreach (var guid in recordingGUIDs) { k_EnvironmentPrefabs.Clear(); var path = AssetDatabase.GUIDToAssetPath(guid); var recording = AssetDatabase.LoadAssetAtPath <SessionRecordingInfo>(path); recording.GetSyntheticEnvironments(k_EnvironmentPrefabs); foreach (var environmentPrefab in k_EnvironmentPrefabs) { if (m_SyntheticRecordingsMap.TryGetValue(environmentPrefab, out var recordings)) { recordings.Add(recording); } else { m_SyntheticRecordingsMap[environmentPrefab] = new List <SessionRecordingInfo> { recording } }; } } k_EnvironmentPrefabs.Clear(); } void UpdateCurrentSyntheticRecordings() { m_CurrentSyntheticRecordings.Clear(); var simulationSettings = SimulationSettings.instance; if (simulationSettings.EnvironmentMode != EnvironmentMode.Synthetic) { return; } var environmentPrefab = simulationSettings.EnvironmentPrefab; if (environmentPrefab != null && m_SyntheticRecordingsMap.TryGetValue(environmentPrefab, out var recordings)) { m_CurrentSyntheticRecordings.AddRange(recordings); } var recordingsCount = m_CurrentSyntheticRecordings.Count; SyntheticRecordingOptionContents = new GUIContent[recordingsCount + 1]; SyntheticRecordingOptionContents[0] = new GUIContent("No Recording (Manual)"); for (var i = 0; i < recordingsCount; i++) { SyntheticRecordingOptionContents[i + 1] = new GUIContent(m_CurrentSyntheticRecordings[i].DisplayName); } var currentRecording = simulationSettings.GetRecordingForCurrentSyntheticEnvironment(); if (currentRecording == null) { if (recordingsCount > 0) { // The current environment has recordings but it does not have a valid recording assigned // in simulation settings, so assign one now currentRecording = m_CurrentSyntheticRecordings[0]; simulationSettings.SetRecordingForCurrentSyntheticEnvironment(currentRecording); } else if (simulationSettings.UseSyntheticRecording) { // The current environment does not have recordings but the previous environment was using // a recording, so make sure the next simulation is one-shot m_QuerySimulationModule.NextSimModeSelection = SimulationModeSelection.SingleFrameMode; simulationSettings.UseSyntheticRecording = false; } } CurrentSyntheticRecordingOptionIndex = simulationSettings.UseSyntheticRecording ? 1 + m_CurrentSyntheticRecordings.IndexOf(currentRecording) : 0; RecordingOptionChanged?.Invoke(); } void UpdateIndependentRecordings() { m_IndependentRecordings.Clear(); var recordingGUIDs = AssetDatabase.FindAssets(k_SessionRecordingFilter); foreach (var guid in recordingGUIDs) { k_EnvironmentPrefabs.Clear(); var path = AssetDatabase.GUIDToAssetPath(guid); var recording = AssetDatabase.LoadAssetAtPath <SessionRecordingInfo>(path); recording.GetSyntheticEnvironments(k_EnvironmentPrefabs); if (k_EnvironmentPrefabs.Count == 0) { m_IndependentRecordings.Add(recording); } } k_EnvironmentPrefabs.Clear(); m_IndependentRecordings.Sort((a, b) => a.DisplayName.CompareTo(b.DisplayName)); m_IndependentRecordingPaths.Clear(); foreach (var recording in m_IndependentRecordings) { m_IndependentRecordingPaths.Add(AssetDatabase.GetAssetPath(recording)); } var simulationSettings = SimulationSettings.instance; IndependentRecordingContents = m_IndependentRecordings.ConvertAll(recording => new GUIContent(recording.DisplayName)).ToArray(); var currentRecordingAssetPath = AssetDatabase.GetAssetPath(simulationSettings.IndependentRecording); CurrentIndependentRecordingIndex = Mathf.Max(m_IndependentRecordingPaths.IndexOf(currentRecordingAssetPath), 0); if (simulationSettings.IndependentRecording == null && IndependentRecordingsExist) { SetIndependentRecording(0); } }