void IModule.LoadModule()
        {
            CleanupVisuals();

            const float rescanSleepTime = 0.5f;
            const float updateSleepTime = 0.03f;

            m_RescanTask = new EditorSlowTask(ScanEntitiesAndCreateVisuals, rescanSleepTime);
            m_UpdateTask = new EditorSlowTask(UpdateVisuals, updateSleepTime);

            m_SlowTaskModule.AddSlowTask(ScanEntitiesAndCreateVisuals, rescanSleepTime, true);
            m_SlowTaskModule.AddSlowTask(UpdateVisuals, updateSleepTime, true);

            m_Loaded = true;

#if UNITY_EDITOR
            EditorApplication.delayCall += () =>
            {
                if (m_Loaded && !EditorApplication.isPlayingOrWillChangePlaymode)
                {
                    EditorApplication.update += EditorUpdateSlowTask;
                }
            };

            EditorOnlyDelegates.IsGizmosCamera = IsGizmosCamera;
            Selection.selectionChanged        += OnSelectionChanged;
#endif
        }
Exemple #2
0
 void StartSimulatableChangeTask()
 {
     // We only re-evaluate queries if a certain amount of time has passed without any change happening.
     // This keeps us from rapidly re-evaluating queries as, for example, a slider is dragged.
     SimulationSyncedWithScene        = false;
     m_SimulatableChangeFinalizedTask = new EditorSlowTask(OnSimulatableChangeFinalized, SimulationSettings.instance.TimeToFinalizeSceneModification);
 }
        void IModule.UnloadModule()
        {
            m_SlowTaskModule.ClearTasks();
            m_SimulationPollTask = null;
            QueryObjectMapping.Map.Clear();
            EditorApplication.update -= Update;
            SimulationSceneModule.SimulationSceneOpened  -= OnSimulationSceneOpened;
            SimulationSceneModule.SimulationSceneClosing -= OnSimulationSceneClosing;
            EditorOnlyDelegates.IsSimulatingTemporal      = null;
            RestoreOriginalActiveIsland();

            m_SimulationRestartNeeded  = false;
            NextSimModeSelection       = SimulationModeSelection.NoModePreference;
            KeepDataBetweenSimulations = false;
            m_SimulationPollTask       = null;
            m_OriginalActiveIsland     = null;

            CleanupProviders();

            simulating          = false;
            simulatingTemporal  = false;
            functionalityIsland = null;
            providersRoot       = null;

            m_SimulationContext.Clear();
        }
        public void UnloadModule()
        {
            SceneView.duringSceneGui -= OnSceneGUI;
            EditorApplication.update -= Update;

            m_FindAvatarEditor = null;
        }
        public void LoadModule()
        {
            SceneView.duringSceneGui += OnSceneGUI;
            EditorApplication.update += Update;

            m_FindAvatarEditor = new EditorSlowTask(() =>
            {
                CacheAvatarEditor();
                CacheEditorIsInAvatarMuscleEditorMode();
            }, m_PollingInterval);
        }
        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();
        }
        void IModule.LoadModule()
        {
            functionalityIsland       = m_SimulationIsland;
            EditorApplication.update += Update;
            SimulationSceneModule.SimulationSceneOpened  += OnSimulationSceneOpened;
            SimulationSceneModule.SimulationSceneClosing += OnSimulationSceneClosing;
            EditorOnlyDelegates.IsSimulatingTemporal      = () => simulatingTemporal;
            CacheOriginalActiveIsland();

            // do not poll for simulation if we are running tests.  It has caused
            // hard-to-debug test failures from simulation running at unexpected times.
            m_SimulationPollTask = new EditorSlowTask(CheckIfSimulationRestartNeeded, m_SimulationPollTime);

            // Start simulation if any objects are using the sim scene
            RestartSimulationIfNeeded();
        }
        void IModule.UnloadModule()
        {
            CleanupVisuals();

            m_SlowTaskModule.RemoveSlowTask(UpdateVisuals);
            m_SlowTaskModule.RemoveSlowTask(ScanEntitiesAndCreateVisuals);
            m_FaceVisuals.Clear();

#if UNITY_EDITOR
            EditorApplication.update          -= EditorUpdateSlowTask;
            EditorOnlyDelegates.IsGizmosCamera = null;
            Selection.selectionChanged        -= OnSelectionChanged;
#endif

            m_PrefabStageScene = default(Scene);
            simEntitiesRoot    = null;

            m_UpdateTask = null;
            m_RescanTask = null;
            m_Loaded     = false;
        }
 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;
 }
        void OnTimeManuallyChanged(double time)
        {
            if (IsRecordingPlaying)
            {
                PausePlayback();
            }

            // Steppable data providers update their data whenever time changes, even manually. This makes it possible
            // for some tracks to provide feedback in Simulation as the user scrubs through the Timeline.
            m_CurrentSessionDirector.Evaluate();
            foreach (var provider in m_SteppableDataProviders)
            {
                provider.StepRecordedData();
            }

            if (!m_CurrentRecordingInfo.ControlsMarsLifecycle)
            {
                return;
            }

            TimelineSyncState      = SimulationTimeSyncState.OutOfSync;
            SyncEndTime            = time;
            m_ManualTimeChangeTask = new EditorSlowTask(OnManualTimeChangeFinalized, m_TimeToFinalizeTimelineChange);
        }
Exemple #11
0
 void OnOffsetChangeFinalized()
 {
     m_OffsetChangeFinalizedTask = null;
     IsCameraOffsetDirty         = true;
     DirtySimulatableScene();
 }
Exemple #12
0
 void StartOffsetChangeTask()
 {
     SimulationSyncedWithScene   = false;
     m_OffsetChangeFinalizedTask = new EditorSlowTask(OnOffsetChangeFinalized, SimulationSettings.instance.TimeToFinalizeSceneModification);
 }
Exemple #13
0
 void OnSimulatableChangeFinalized()
 {
     m_SimulatableChangeFinalizedTask = null;
     DirtySimulatableScene();
 }