示例#1
0
        /// <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);
        }
示例#2
0
        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();
        }
示例#3
0
        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);
        }