/// <inheritdoc/>
        void IModule.LoadModule()
        {
            if (!m_SceneModule.simulateInPlaymode && Application.isPlaying)
            {
                return;
            }

            // TODO: Move environment manager functionality to runtime assembly
            EditorOnlyDelegates.OpenSimulationScene     = OpenSimulation;
            EditorOnlyDelegates.GetSimulatedContentRoot = () => ContentRoot;
            instance = this;

            if (!SimulationSceneUsers.instance)
            {
                m_SimulationSceneUsers = SimulationSceneUsers.CreateSimulationSceneSubscribers();
            }
            else
            {
                m_SimulationSceneUsers = SimulationSceneUsers.instance;
            }

            if (m_SceneModule.simulateInPlaymode && EditorApplication.isPlayingOrWillChangePlaymode)
            {
                m_SimulationSceneUsers.AddSimulationUser(MARSSceneModule.instance);
                m_SceneModuleIsUser = true;
            }

            if (!Application.isPlaying)
            {
                OpenSimulation();
            }

            AssemblyReloadEvents.afterAssemblyReload  += OnAfterAssemblyReload;
            AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload;
        }
 void OnDestroy()
 {
     m_UsingSimulation.Clear();
     if (s_Instance)
     {
         s_Instance = null;
     }
 }
        public static SimulationSceneUsers CreateSimulationSceneSubscribers()
        {
            if (!instance)
            {
                s_Instance = CreateInstance <SimulationSceneUsers>();
            }

            s_Instance.hideFlags = HideFlags.DontSave;

            return(s_Instance);
        }
        void OnAfterAssemblyReload()
        {
            isAssemblyReloading = false;
            if (EditorApplication.isPlayingOrWillChangePlaymode)
            {
                return;
            }

            if (!SimulationSceneUsers.instance)
            {
                m_SimulationSceneUsers = SimulationSceneUsers.CreateSimulationSceneSubscribers();
            }
            else
            {
                m_SimulationSceneUsers = SimulationSceneUsers.instance;
            }

            OpenSimulation();
        }