public ObjectSelection(Texture2D[] referenceBlocks, 
            Texture2D[] referenceSceneries, 
            Texture2D[] referenceSlopes,
            Texture2D selectionBoxReference, 
            Texture2D[] referenceFiles, 
            SpriteBatch spriteBatch)
            : base("Object Selection")
        {
            tiles = new MenuEntry[(int)MathHelper.Max(
                MathHelper.Max(referenceBlocks.Length, referenceSceneries.Length), referenceSlopes.Length)];
            tileTypes = new MenuEntry[referenceFiles.Length];

            IsPopup = true;

            tileReferenceBlocks = referenceBlocks;
            tileReferenceSceneries = referenceSceneries;
            tileReferenceSlopes = referenceSlopes;
            fileReferences = referenceFiles;

            tileSelectionBox = selectionBoxReference;
            fileSelectionBox = selectionBoxReference;

            SpriteBatch = spriteBatch;

            for (int i = 0; i < tileTypes.Length; i++)
            {
                tileTypes[i] = new MenuEntry(string.Empty);

                tileTypes[i].Selected += TileTypeSelected;

                if (i <= 4)
                {
                    MenuEntries.Add(tileTypes[i]);
                }
                else
                {
                    tileTypes[i].CreateNewColumn = true;
                    MenuEntries.Add(tileTypes[i]);
                }
            }

            for (int i = 0; i < tiles.Length; i++)
            {
                tiles[i] = new MenuEntry(string.Empty);

                tiles[i].Selected += TileSelected;
            }
        }
        public PauseMenuScreen(List<Tile> tilesReference, List<Background> backgroundsReference, string levelName, Vector2 scrollOffset)
            : base("Paused")
        {
            IsPopup = true;

            currentOffSet = scrollOffset;
            LevelName = levelName;
            Tiles = tilesReference;
            Backgrounds = backgroundsReference;

            resumeGameMenuEntry = new MenuEntry("Resume Level Create");
            playTestGameMenuEntry = new MenuEntry("Play Test");
            controlsGameMenuEntry = new MenuEntry("How to Create");
            //saveGameMenuEntry = new MenuEntry("Save");
            saveGameTextMenuEntry = new MenuEntry("Save to Text");
            returnToMainMenu = new MenuEntry("Return To Main Menu");
            quitGameMenuEntry = new MenuEntry("Quit Game");

            resumeGameMenuEntry.Selected += ResumeGameMenuEntrySelected;

            controlsGameMenuEntry.Selected += HowToCreateMenuEntrySelected;

            quitGameMenuEntry.Selected += QuitGameMenuEntrySelected;

            returnToMainMenu.Selected += ReturnToMainMenuSelected;

            playTestGameMenuEntry.Selected += PlayTestGameMenuEntrySelected;

            if (levelName != String.Empty)
            {
                SavedName = levelName;
                saveGameTextMenuEntry.Selected += SaveGameToTextMenuEntrySelected_Named;
            }
            else
            {
                saveGameTextMenuEntry.Selected += SaveGameToTextMenuEntrySelected_Unnamed;
            }

            MenuEntries.Add(resumeGameMenuEntry);
            MenuEntries.Add(playTestGameMenuEntry);
            MenuEntries.Add(controlsGameMenuEntry);
            //MenuEntries.Add(saveGameMenuEntry);
            MenuEntries.Add(saveGameTextMenuEntry);
            MenuEntries.Add(returnToMainMenu);
            MenuEntries.Add(quitGameMenuEntry);
        }
        public ObjectSelectionBackgrounds(Texture2D[] referenceBackgroundsNormal, Texture2D[] referenceBackgroundsOther, Texture2D[] referenceFiles, Texture2D selectionBoxReference, SpriteBatch spriteBatch)
            : base("ObjectSelection")
        {
            IsPopup = true;
            //do Max and Mins to get the ultimate if there are more types later
            backgrounds = new MenuEntry[(int)MathHelper.Max(referenceBackgroundsNormal.Length, referenceBackgroundsOther.Length)];
            backgroundTypes = new MenuEntry[referenceFiles.Length];

            normalBackgroundReferences = referenceBackgroundsNormal;
            otherBackgroundReferences = referenceBackgroundsOther;

            fileReferences = referenceFiles;

            fileSelectionBox = selectionBoxReference;
            tileSelectionBox = selectionBoxReference;

            this.spriteBatch = spriteBatch;

            for (int i = 0; i < backgroundTypes.Length; i++)
            {
                backgroundTypes[i] = new MenuEntry(string.Empty);

                backgroundTypes[i].Selected += BackgroundTypeSelected;

                if (i <= 4)
                {
                    MenuEntries.Add(backgroundTypes[i]);
                }
                else
                {
                    backgroundTypes[i].CreateNewColumn = true;
                    MenuEntries.Add(backgroundTypes[i]);
                }
            }

            for (int i = 0; i < backgrounds.Length; i++)
            {
                backgrounds[i] = new MenuEntry(string.Empty);

                backgrounds[i].Selected += BackgroundSelected;
            }
        }
        public MainMenuScreen()
            : base("Main Menu Screen")
        {
            levelCreateMenuEntry = new MenuEntry("Create Level");
            //levelLoadMenuEntry = new MenuEntry("Load Level");
            loadTextLevelMenuEntry = new MenuEntry("Load Text Level");
            invertTest = new MenuEntry("Invert Test");
            voidTest = new MenuEntry("Void Test");
            helpMenuEntry = new MenuEntry("Help");
            exitMenuEntry = new MenuEntry("Exit");

            levelCreateMenuEntry.Selected += LevelCreateMenuEntrySelected;
            //levelLoadMenuEntry.Selected += LevelLoadMenuEntrySelected;

            loadTextLevelMenuEntry.Selected += LoadTextLevelMenuEntrySelected;

            invertTest.Selected += InvertTestMenuEntrySelected;
            voidTest.Selected += VoidTestMenuEntrySelected;

            helpMenuEntry.Selected += HelpMenuEntrySelected;
            exitMenuEntry.Selected += ExitMenuEntrySelected;
        }
        public LoadTextLevelSelection(List<string> names)
            : base("Text Levels")
        {
            IsPopup = true;

            fileNames = new string[names.Count];

            for (int i = 0; i < names.Count; i++)
            {
                fileNames[i] = names[i];
            }

            fileNameEntries = new MenuEntry[fileNames.Length];

            for (int i = 0; i < fileNames.Length; i++)
            {
                fileNameEntries[i] = new MenuEntry(fileNames[i]);

                fileNameEntries[i].Selected += FileNameMenuEntrySelected;

                MenuEntries.Add(fileNameEntries[i]);
            }
        }
        public LoadLevelSelection(string[] filenames)
            : base("Loaded Levels")
        {
            IsPopup = true;

            fileNameEntries = new MenuEntry[LbKStorageLevelCreation.FileNames.Count];

            for (int i = 0; i < LbKStorageLevelCreation.FileNames.Count; i++)
            {
                fileNameEntries[i] = new MenuEntry(filenames[i]);

                fileNameEntries[i].Selected += FileNameMenuEntrySelected;

                if (i <= 6)
                {
                    MenuEntries.Add(fileNameEntries[i]);
                }
                else if (i > 6 && i <= 12)
                {
                    fileNameEntries[i].CreateNewColumn = true;
                    MenuEntries.Add(fileNameEntries[i]);
                }
            }
        }
        public PauseMenuScreen()
            : base("Paused")
        {
            IsPopup = true;

            resumeGameMenuEntry = new MenuEntry("Resume Game");
            controlsGameMenuEntry = new MenuEntry("How to Play");
            optionsGameMenuEntry = new MenuEntry("Options");
            returnGameMenuEntry = new MenuEntry("Return to Level Create");
            quitGameMenuEntry = new MenuEntry("Quit Game");

            resumeGameMenuEntry.Selected += ResumeGameMenuEntrySelected;
            controlsGameMenuEntry.Selected += ControlsGameMenuEntrySelected;
            optionsGameMenuEntry.Selected += OptionsGameMenuEntrySelected;
            returnGameMenuEntry.Selected += ReturnGameMenuEntrySelected;
            quitGameMenuEntry.Selected += QuitGameMenuEntrySelected;

            MenuEntries.Add(resumeGameMenuEntry);
            MenuEntries.Add(controlsGameMenuEntry);
            MenuEntries.Add(optionsGameMenuEntry);
            MenuEntries.Add(returnGameMenuEntry);
            MenuEntries.Add(quitGameMenuEntry);
        }