protected GameScene(GameStage stage) { InternalCascade = true; Active = false; Enabled = false; Visible = false; }
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(); }
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; }); }
public void SwitchToStage(GameStage stage) { if (stage == null) throw new ArgumentNullException(nameof(stage)); _switchToStage = stage; Defer(DoSwithToStage); }