A general-purpose async task loading screen.
Inheritance: PGCGame.CoreTypes.BaseScreen
        /// <summary>
        /// Load Game Assets and initialize all screens
        /// </summary>
        protected override void LoadContent()
        {
            //Instantiate the singleton class GameContent and load all game assets, done in ctor
            GameContent.InitializeAssets(Content);

            // Create a new SpriteBatch, which can be used to draw textures.
            spriteBatch = new SpriteBatch(GraphicsDevice);

            //Instantiate the singleton class HorizontalMenuBGSprite
            HorizontalMenuBGSprite scrollingBG = new HorizontalMenuBGSprite(GameContent.Assets.Images.Backgrounds.Screens[ScreenBackgrounds.GlobalScrollingBg], spriteBatch);

            //Initialize screens

            availableNetSessions = new AvailableSessionsScreen(spriteBatch);
            availableNetSessions.InitScreen(ScreenType.NetworkSessionsScreen);

            mpShipList = new MPShipsScreen(spriteBatch);
            mpShipList.InitScreen(ScreenType.MPShipsDisplay);

            titleScreen = new Title(spriteBatch);
            titleScreen.InitScreen(ScreenType.Title);

            netMatchCreate = new NetworkMatchTypeSelectionScreen(spriteBatch);
            netMatchCreate.InitScreen(ScreenType.NetworkMatchSelection);

            gameOver = new GameOver(spriteBatch);
            gameOver.InitScreen(ScreenType.GameOver);

            levelCompleteScreen = new LevelCompleteScreen(spriteBatch);
            levelCompleteScreen.InitScreen(ScreenType.LevelCompleteScreen);

            shopScreen = new Shop(spriteBatch);
            shopScreen.InitScreen(ScreenType.Shop);

            controlScreen = new ControlScreen(spriteBatch);
            controlScreen.InitScreen(ScreenType.ControlScreen);

            mainMenuScreen = new MainMenu(spriteBatch);
            mainMenuScreen.InitScreen(ScreenType.MainMenu);

            creditsScreen = new Credits(spriteBatch);
            creditsScreen.InitScreen(ScreenType.Credits);

            gameScreen = new GameScreen(spriteBatch);
            gameScreen.InitScreen(ScreenType.Game);

            optionScreen = new Options(spriteBatch);
            optionScreen.InitScreen(ScreenType.Options);

            pauseScreen = new PauseScreen(spriteBatch);
            pauseScreen.InitScreen(ScreenType.Pause);

            weaponSelectScreen = new WeaponSelectScreen(spriteBatch);
            weaponSelectScreen.InitScreen(ScreenType.WeaponSelect);

            upgradeScreen = new UpgradeScreen(spriteBatch);
            upgradeScreen.InitScreen(ScreenType.UpgradeScreen);

            tierSelectScreen = new TierSelect(spriteBatch);
            tierSelectScreen.InitScreen(ScreenType.TierSelect);

            levelSelectScreen = new LevelSelect(spriteBatch);
            levelSelectScreen.InitScreen(ScreenType.LevelSelect);

            networkScreen = new NetworkSelectScreen(spriteBatch);
            networkScreen.InitScreen(ScreenType.NetworkSelectScreen);

            transitionScreen = new TransitionScreen(spriteBatch);
            transitionScreen.InitScreen(ScreenType.TransitionScreen);

            loadingScreen = new LoadingScreen(spriteBatch, Color.Black);
            loadingScreen.InitScreen(ScreenType.LoadingScreen);

            multiplayerShipSelectScreen = new MulitplayerShipSelectScreen(spriteBatch);
            multiplayerShipSelectScreen.InitScreen(ScreenType.MultiPlayerShipSelect);

            mpWin = new MultiplayerWinScreen(spriteBatch);
            mpWin.InitScreen(ScreenType.MPWinningScreen);

            mpLose = new MultiplayerLoseScreen(spriteBatch);
            mpLose.InitScreen(ScreenType.MPLoseScreen);

            cheatScreen = new CheatEditScreen(spriteBatch);
            cheatScreen.InitScreen(ScreenType.CheatModifyScreen);

            screenManager = new ScreenManager(spriteBatch, Color.White, titleScreen, mainMenuScreen, creditsScreen, gameScreen, optionScreen, shopScreen, pauseScreen, weaponSelectScreen, upgradeScreen, tierSelectScreen, levelSelectScreen, controlScreen, networkScreen, gameOver, transitionScreen, levelCompleteScreen, loadingScreen, availableNetSessions, netMatchCreate, multiplayerShipSelectScreen, mpShipList, mpWin, mpLose, cheatScreen);
            StateManager.AllScreens = screenManager;
            StateManager.ScreenState = ScreenType.Title;
        }
        public override void Update(GameTime gameTime)
        {
            #if WINDOWS
            MouseState currentMs = MouseManager.CurrentMouseState;
            if (lastMs.LeftButton == ButtonState.Released && currentMs.LeftButton == ButtonState.Pressed)
            {
                if (mouseInBackButton)
                {
                    if (StateManager.Options.SFXEnabled)
                    {
                        ButtonClick.Play();
                    }

                    if (lScr == null)
                    {
                        lScr = StateManager.AllScreens[ScreenType.LoadingScreen.ToString()] as LoadingScreen;
                    }
                    lScr.Reset();
                    lScr.ScreenFinished += new EventHandler(lScr_ScreenFinished);
                    lScr.UserCallbackStartsTask = true;
                    lScr.UserCallback = new Delegates.AsyncHandlerMethod(storageDeviceFound);
                    lScr.LoadingText = "Saving data...";
                    StorageDevice.BeginShowSelector(PlayerIndex.One, lScr.Callback, null);
                    StateManager.ScreenState = CoreTypes.ScreenType.LoadingScreen;

                    StateManager.ScreenState = ScreenType.LoadingScreen;

                    //StateManager.GoBack();
                }
                if (MusicVolumeLabel.IsSelected)
                {
                    if (StateManager.Options.SFXEnabled)
                    {
                        ButtonClick.Play();
                    }

                    StateManager.Options.MusicEnabled = !StateManager.Options.MusicEnabled;
                    MusicVolumeLabel.Text = String.Format("Music: {0}", StateManager.Options.MusicEnabled ? "On" : "Off");
                }
                if (SFXLabel.IsSelected)
                {
                    if (StateManager.Options.SFXEnabled)
                    {
                        ButtonClick.Play();
                    }

                    StateManager.Options.SFXEnabled = !StateManager.Options.SFXEnabled;
                    SFXLabel.Text = String.Format("SFX: {0}", StateManager.Options.SFXEnabled ? "On" : "Off");

                }
                if (mouseOnGraphicButton)
                {
                    if (StateManager.Options.SFXEnabled)
                    {
                        ButtonClick.Play();
                    }

                    StateManager.Options.ToggleFullscreen();
                }
                if (ControlLabel.IsSelected)
                {
                    if (StateManager.Options.SFXEnabled)
                    {
                        ButtonClick.Play();
                    }

                    StateManager.ScreenState = ScreenType.ControlScreen;
                }
            }
            lastMs = currentMs;
            #elif XBOX
            currentGamePad = GamePad.GetState(PlayerIndex.One);

            lastGamePad = currentGamePad;

            #endif
            base.Update(gameTime);
        }
        void SinglePlayerLabel_Pressed(object sender, EventArgs e)
        {
            if (!Guide.IsVisible && Visible && elapsedButtonDelay > totalButtonDelay)
            {

                if (StateManager.Options.SFXEnabled)
                {
                    ButtonClick.Play();
                }

                //the if statements were causing errors when loading the game, starting a level, quitting out, then loading again.
                //Previous stats weren't loaded properly.

                // if (StateManager.SelectedStorage == null)
                // {

                // }
                // else if (StateManager.SelectedStorage != null)
                //{
                lScr = StateManager.AllScreens[ScreenType.LoadingScreen.ToString()] as LoadingScreen;
                lScr.Reset();
                lScr.ScreenFinished += new EventHandler(lScr_ScreenFinished);
                lScr.UserCallbackStartsTask = true;
                lScr.UserCallback = new Delegates.AsyncHandlerMethod(onSelectedStorage);
                lScr.LoadingText = "Loading saved data...";
                StorageDevice.BeginShowSelector(PlayerIndex.One, lScr.Callback, null);
                StateManager.ScreenState = CoreTypes.ScreenType.LoadingScreen;
                //}
            }
        }