public void SetupFromRecordingInfo(SessionRecordingInfo recordingInfo, List <IFunctionalityProvider> providers) { k_DataRecordings.Clear(); Director = GetComponent <PlayableDirector>(); Director.playableAsset = recordingInfo.Timeline; Director.timeUpdateMode = DirectorUpdateMode.Manual; Director.extrapolationMode = recordingInfo.DefaultExtrapolationMode; m_Duration = Director.duration; m_ControlsMarsLifecycle = recordingInfo.ControlsMarsLifecycle; recordingInfo.GetDataRecordings(k_DataRecordings); foreach (var recording in k_DataRecordings) { recording.SetupDataProviders(Director, providers); } m_RecordedDataProviders.Clear(); foreach (var provider in providers) { var recordedProvider = provider as IRecordedDataProvider; if (recordedProvider != null) { m_RecordedDataProviders.Add(recordedProvider); } } k_DataRecordings.Clear(); }
public void Clear() { SceneSubscriberTypes.Clear(); SceneRequirements.Clear(); m_EnvironmentMode = default; m_EnvironmentPrefab = null; m_SyntheticRecording = null; m_Temporal = false; }
public static SessionRecordingInfo CreateSessionRecordingAsset(string path) { var timeline = ScriptableObject.CreateInstance <TimelineAsset>(); AssetDatabase.CreateAsset(timeline, path); var recordingInfo = SessionRecordingInfo.Create(timeline); AssetDatabase.AddObjectToAsset(recordingInfo, timeline); return(recordingInfo); }
internal bool Update(MARSSession marsSession, List <IFunctionalitySubscriber> subscribers, bool temporal) { k_SubscriberTypes.Clear(); k_TraitRequirements.Clear(); var moduleLoader = ModuleLoaderCore.instance; foreach (var module in moduleLoader.modules) { k_SubscriberTypes.Add(module.GetType()); } foreach (var subscriber in subscribers) { k_SubscriberTypes.Add(subscriber.GetType()); } k_TraitRequirements.UnionWith(marsSession.requirements.TraitRequirements); var simulationSettings = SimulationSettings.instance; var environmentMode = simulationSettings.EnvironmentMode; var environmentPrefab = simulationSettings.EnvironmentPrefab; var independentRecording = simulationSettings.IndependentRecording; var syntheticRecording = simulationSettings.UseSyntheticRecording ? simulationSettings.GetRecordingForCurrentSyntheticEnvironment() : null; var recordingPlaybackModule = moduleLoader.GetModule <MarsRecordingPlaybackModule>(); var disableRecordingPlayback = recordingPlaybackModule != null && recordingPlaybackModule.DisableRecordingPlayback; var changed = !SceneSubscriberTypes.SetEquals(k_SubscriberTypes) || !SceneRequirements.SetEquals(k_TraitRequirements) || m_EnvironmentMode != environmentMode || m_EnvironmentPrefab != environmentPrefab || m_SyntheticRecording != syntheticRecording || m_IndependentRecording != independentRecording || m_Temporal != temporal || m_DisableRecordingPlayback != disableRecordingPlayback; SceneSubscriberTypes.Clear(); SceneSubscriberTypes.UnionWith(k_SubscriberTypes); SceneRequirements.Clear(); SceneRequirements.UnionWith(k_TraitRequirements); m_EnvironmentMode = environmentMode; m_EnvironmentPrefab = environmentPrefab; m_SyntheticRecording = syntheticRecording; m_IndependentRecording = independentRecording; m_Temporal = temporal; m_DisableRecordingPlayback = disableRecordingPlayback; k_SubscriberTypes.Clear(); k_TraitRequirements.Clear(); return(changed); }
public SessionRecordingInfo GetCurrentRecording() { SessionRecordingInfo recordingInfo = null; var recording = _control.CurrentRecording; if (recording != null) { recordingInfo = _mapper.Map <SessionRecordingInfo>(recording); recordingInfo.Id = ApiRoutes.Recording.ConvertToRouteString(recording.OpenedAt); } return(recordingInfo); }
void IModule.UnloadModule() { EditorApplication.update -= EditorUpdate; QuerySimulationModule.BeforeTemporalSimulationRestart -= OnBeforeTemporalSimulationRestart; QuerySimulationModule.addCustomProviders -= OnBeforeSetupDefaultProviders; QuerySimulationModule.onTemporalSimulationStop -= OnTemporalSimulationStop; QuerySimulationModule.BeforeCleanupProviders -= OnBeforeCleanupProviders; QuerySimulationModule.OnOneShotSimulationStart -= OnOneShotSimulationStart; m_MarsSceneModule.BeforeSetupDefaultProviders -= OnBeforeSetupDefaultProviders; m_SimulationRecordingManager.RecordingOptionChanged -= OnRecordingOptionChanged; EditorOnlyDelegates.GetCurrentRecordingDirector = () => null; m_CurrentRecordingInfo = null; m_ManualTimeChangeTask = null; TimelineSyncState = SimulationTimeSyncState.NoTimeline; TimelineSyncProgress = 0f; SyncEndTime = 0d; m_PreviousMasterDirector = null; m_ShouldShowTimelineOnSimStart = false; m_IgnoreTimeChangeFromWindow = false; m_IgnoreTimeChangeFrame = 0; }
/// <summary> /// Adds data from the most recent recording session to the given recording /// </summary> /// <param name="recordingInfo">The session recording to add data to</param> public void AddDataFromRecordingSession(SessionRecordingInfo recordingInfo) { k_DataRecordings.Clear(); k_NewAssets.Clear(); var timeline = recordingInfo.Timeline; m_SessionRecordingModule.CreateDataRecordings(timeline, k_DataRecordings, k_NewAssets); foreach (var dataRecording in k_DataRecordings) { recordingInfo.AddDataRecording(dataRecording); dataRecording.name = dataRecording.GetType().Name; AssetDatabase.AddObjectToAsset(dataRecording, timeline); } foreach (var newAsset in k_NewAssets) { AssetDatabase.AddObjectToAsset(newAsset, timeline); } k_DataRecordings.Clear(); k_NewAssets.Clear(); }
void OnBeforeSetupDefaultProviders(List <IFunctionalityProvider> providers) { var simulationSettings = SimulationSettings.instance; if (DisableRecordingPlayback || !simulationSettings.IsUsingRecording || !MarsEditorUtils.SimulatingDiscovery) { m_CurrentRecordingInfo = null; TimelineSyncState = SimulationTimeSyncState.NoTimeline; return; } var sessionDirectorGO = GameObjectUtils.Create("Session Director"); // Deactivate until we've set up so that the session director does not receive OnEnable immediately sessionDirectorGO.SetActive(false); m_CurrentSessionDirector = sessionDirectorGO.AddComponent <RecordedSessionDirector>(); var recordingInfo = simulationSettings.GetCurrentRecording(); if (recordingInfo != m_CurrentRecordingInfo) { m_CurrentRecordingInfo = recordingInfo; SetStateToSynced(); } k_RecordedDataProviders.Clear(); m_CurrentSessionDirector.SetupFromRecordingInfo(recordingInfo, k_RecordedDataProviders); m_CurrentSessionDirector.TimeUpdated += OnDirectorTimeUpdated; m_CurrentSessionDirector.EndReached += OnDirectorEndReached; var director = m_CurrentSessionDirector.Director; director.played += OnDirectorPlayed; director.paused += OnDirectorPaused; director.stopped += OnDirectorStopped; sessionDirectorGO.SetActive(true); providers.AddRange(k_RecordedDataProviders); m_SteppableDataProviders.Clear(); var hasPlanesProvider = false; var hasPointCloudProvider = false; foreach (var provider in k_RecordedDataProviders) { if (provider is ISteppableRecordedDataProvider steppableDataProvider) { m_SteppableDataProviders.Add(steppableDataProvider); } if (provider is IProvidesPlaneFinding) { hasPlanesProvider = true; } else if (provider is IProvidesPointCloud) { hasPointCloudProvider = true; } } // If there are recorded planes or point cloud providers, we need to set up stub providers to make sure // the simulated discovery provider game object doesn't get created. if (hasPlanesProvider || hasPointCloudProvider) { var stubProvidersObj = GameObjectUtils.Create(k_StubProvidersName); var sessionProvider = stubProvidersObj.AddComponent <StubSessionProvider>(); sessionProvider.SuppressWarnings = true; providers.Add(sessionProvider); if (!hasPlanesProvider) { var planesProvider = stubProvidersObj.AddComponent <StubPlanesProvider>(); planesProvider.SuppressWarnings = true; providers.Add(planesProvider); } else if (!hasPointCloudProvider) { var pointCloudProvider = stubProvidersObj.AddComponent <StubPointCloudProvider>(); pointCloudProvider.SuppressWarnings = true; providers.Add(pointCloudProvider); } } }