/// <summary>
        /// Load a scene.  If the scene is already loaded, the existing instance is returned.  
        /// </summary>
        /// <param name="sceneFileName"></param>
        /// <returns></returns>
        public TorqueSceneData Load(string sceneFileName)
        {
            // already loaded?
            TorqueSceneData scene;

            if (_loadedScenes.TryGetValue(sceneFileName, out scene))
            {
                _lastLoadedScene = scene;
                return scene;
            }

            // no, create new scene
            scene = new TorqueSceneData();
            scene.PreloadMaterials = true;
            scene.Deserializer = Deserializer;

            // we'll intercept content load exceptions, so that we display a (hopefully) helpful message for dealing with them
            try
            {
                // deserialize
                scene.Load(sceneFileName);
            }
            catch (ContentLoadException e)
            {
                string msg = "SceneLoader.Load - Error loading XML file: \'" + sceneFileName + "\', ContentLoadException: \'" + e.Message + "\'  If you are using TXB, make sure that you have saved your project, then rebuild your game in Express.";
                Assert.Fatal(false, msg);
            #if !XBOX
                if (_exitOnFailedLoad)
                    System.Environment.Exit(GameExitCodes.SceneLoaderError); // this is here so that TXB knows we failed due to a content load problem
            #endif
                throw e; // in case we did not exit
            }

            // add scene to loaded list
            _loadedScenes.Add(sceneFileName, scene);
            _lastLoadedScene = scene;

            // call delegate
            if (_onSceneLoaded != null)
                _onSceneLoaded(sceneFileName, scene);

            return scene;
        }
 /// <summary>
 /// Load the named level and return a new TorqueSceneData instance.  In order to customize the Level data load process you must 
 /// create the TorqueSceneData object yourself and call Load on it.
 /// </summary>
 /// <param name="filename">The filename to load</param>
 /// <param name="extraAssemblies">List of assemblies to add to the deserializer's assembly list, for finding new types.  Usually can be null.</param>
 /// <returns>A TorqueSceneData instance</returns>
 public static TorqueSceneData LoadScene(string filename, List<Assembly> extraAssemblies)
 {
     TorqueSceneData ld = new TorqueSceneData();
     return ld.Load(filename, extraAssemblies);
 }