/// <summary> /// Loads a new scene using the specified SceneLoadModes /// </summary> /// <typeparam name="T">Type of scene to load</typeparam> /// <param name="pMode">Mode to load the scene with</param> public static T Load <T>(SceneLoadModes pMode) where T : Scene { var scene = (T)Activator.CreateInstance(typeof(T)); scene._mode = pMode; var startIndex = _gameobjects.StartScene(pMode); scene._start = startIndex; Scene previous = null; if (_scenes.Count > 0) { switch (pMode) { case SceneLoadModes.Replace: var s = _scenes.Pop(); s.Unload(); break; case SceneLoadModes.Additive: previous = _scenes.Peek(); previous._end = startIndex; break; case SceneLoadModes.LoadOver: for (int i = _scenes.Count - 1; i >= 0; i--) { previous = _scenes.PeekAt(i); previous.Suspend(); previous.Active = false; previous._end = startIndex; if (previous._mode != SceneLoadModes.Additive) { break; } } break; } } _scenes.Push(scene); scene.Begin(); return(scene); }
protected Scene(SerializationInfo pInfo, StreamingContext pContext) { _mode = (SceneLoadModes)pInfo.GetInt32("Mode"); _start = _gameobjects.StartScene(_mode); var objects = (IList <IGameObject>)pInfo.GetValue("GameObjects", typeof(IList <IGameObject>)); foreach (var go in objects) { foreach (var c in go.GetComponents()) { c.OnAdded(go); } AddGameObject(go); } _ui = new UIManager(); }
public int StartScene(SceneLoadModes pMode) { switch (pMode) { case SceneLoadModes.Additive: _sceneIndexes.Push(_startIndex); break; case SceneLoadModes.LoadOver: _startIndex = _endIndex; _sceneIndexes.Push(_endIndex); break; case SceneLoadModes.Replace: //We need to clear now because the end index gets reset Clear(_startIndex, _endIndex); _endIndex = _startIndex; break; default: throw new UnknownEnumException(typeof(SceneLoadModes), pMode); } return(_startIndex); }