Example #1
0
        public void Dispose()
        {
            if (ActiveScene != null)
            {
                ActiveScene.Dispose();
                ActiveScene = null;
            }

            GC.SuppressFinalize(this);
        }
Example #2
0
        internal static void Shutdown()
        {
            // Deal with active scene
            ActiveScene?.QueueChange(false);
            ActiveScene?.Remove();
            ActiveScene?.Dispose();
            ActiveScene = null;

            // Might be a queued scene
            s_queuedScene?.Dispose();
            s_queuedScene = null;

            // Deal with other cached states
            s_isDisposing = true;
            s_scenes.ForEach(scene => scene.Dispose());
            s_scenes.Clear();
            s_isDisposing = false;
        }
Example #3
0
        // Called to perform the actual transition between active scenes
        private static void DoSceneChange()
        {
            // Remove the current scene, and GC collect as there may be many objects released in the disposal
            ActiveScene?.Remove();
            ActiveScene?.Dispose();
            if (ActiveScene != null)
            {
                GC.Collect();
            }

            // Load the new scene, and GC collect to remove the many temporary objects created during loading
            ActiveScene = s_queuedScene;
            ActiveScene?.Start();
            s_queuedScene = null;
            if (ActiveScene != null)
            {
                GC.Collect();
            }

            SceneChanging = false;
        }