示例#1
0
 protected GameScene(GameStage stage)
 {
     InternalCascade = true;
     Active = false;
     Enabled = false;
     Visible = false;
 }
示例#2
0
        protected override void Initialize()
        {
            base.Initialize();

            ScreenBounds = GraphicsDevice.Viewport.Bounds;
            _canvas = new XnaCanvas(new SpriteBatch(GraphicsDevice));
            _resourceManager = new ResourceManager(Services, RootPath, Content);

            using (var assets = _resourceManager.CommonContainer.BeginLoad())
                LoadCommonResources(assets);

            var px = new Texture2D(GraphicsDevice, 1, 1);
            px.SetData(new[] { Color.White });
            _resourceManager.AddTexture(px, "$px");

            _processors.AddRange(EnableEventProcessors().OrderBy(p => p.SortOrder));
            Audio = new AudioManager();
            AfterInitialize();

            _loadingScreen = CreateLoadingScreen();

            _currentStage = CreateFirstStage();
            _currentStage.Initialize();
            _currentStage.CreateScenes();
        }
示例#3
0
        private async void DoSwithToStage()
        {
            if (_switchToStage == null)
                return;

            _state = GameState.ShowLoadingScreen;

            await Task.Run(async () =>
            {
                // если это только запуск игры, никакого окна загрузки не надо
                var isGameLoading = (_currentStage == null);

                // останавливаем всю логику и звуки\музыку
                Audio.StopAll();
                SignalManager.Clear();
                ActionManager.RemoveAllActions();

                foreach (var processor in _processors)
                    processor.Reset();

                // инициалзация окна загрузки (создание анимаций и пр.)
                _state = GameState.Loading;
                if (!isGameLoading)
                {
                    _loadingScreen.Init();
                    await _loadingScreen.Show();
                }

                // после того как появилось окно загрузки - очищаем текущий стэйдж и ресурсы
                Camera.Reset();
                _currentStage?.Destroy();
                _currentStage = null;
                _resourceManager.Unload();

                // создаем новый стэйдж и загружаем ресурсы
                using (Text)
                {
                    _switchToStage.Initialize();
                    _switchToStage.LoadResources();
                    _switchToStage.CreateScenes();
                }

                // скрываем окно загрузки и очищаем анимацию этого окна
                _state = GameState.HideLoadingScreen;
                if (!isGameLoading)
                    await _loadingScreen.Hide();

                _currentStage = _switchToStage;
                _switchToStage = null;
                _state = GameState.Normal;
            });
        }
示例#4
0
        public void SwitchToStage(GameStage stage)
        {
            if (stage == null)
                throw new ArgumentNullException(nameof(stage));

            _switchToStage = stage;
            Defer(DoSwithToStage);
        }