/// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        private List<KeyValuePair<IGameObject, IGameObject>> spawnSettingsMenu()
        {
            List<KeyValuePair<IGameObject, IGameObject>> gameObjectParentGameObjectPairList = new List<KeyValuePair<IGameObject, IGameObject>>();

            { //difficulty button

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"difficulty.png")));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.difficultyMainButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(0, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //controls button

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"controls.png")));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.controlsMainButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(470, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //graphic button

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"graphics.png")));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.graphicsMainButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(940, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            IGameObject backButton = this.createBackButton();
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(backButton, null));
            #if DEBUG
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(backButton), backButton));
            #endif

            return gameObjectParentGameObjectPairList;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        private List<KeyValuePair<IGameObject, IGameObject>> spawnMainMenu()
        {
            List<KeyValuePair<IGameObject, IGameObject>> gameObjectParentGameObjectPairList = new List<KeyValuePair<IGameObject, IGameObject>>();

            { //new-game button

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"new_game.png")));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.newGameButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(0, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //option button

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"settings.png")));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.settingsButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(470, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //exit button

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"quit.png")));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.quitButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(940, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            return gameObjectParentGameObjectPairList;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        private List<KeyValuePair<IGameObject, IGameObject>> spawnGraphicsMenu()
        {
            List<KeyValuePair<IGameObject, IGameObject>> gameObjectParentGameObjectPairList = new List<KeyValuePair<IGameObject, IGameObject>>();

            { //fruit 1

                String imageName = this.configuration.userFruitImage == Configuration.USER_FRUIT_1_FILENAME ? "user_fruit_button1_selected.png" : "user_fruit_button1.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.fruit1ButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(0, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //fruit 2

                String imageName = this.configuration.userFruitImage == Configuration.USER_FRUIT_2_FILENAME ? "user_fruit_button2_selected.png" : "user_fruit_button2.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.fruit2ButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(470, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //fruit 3

                String imageName = this.configuration.userFruitImage == Configuration.USER_FRUIT_3_FILENAME ? "user_fruit_button3_selected.png" : "user_fruit_button3.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.fruit3ButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(940, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            IGameObject backButton = this.createBackButton();
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(backButton, null));
            #if DEBUG
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(backButton), backButton));
            #endif

            return gameObjectParentGameObjectPairList;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        private List<KeyValuePair<IGameObject, IGameObject>> spawnDifficultyMenu()
        {
            List<KeyValuePair<IGameObject, IGameObject>> gameObjectParentGameObjectPairList = new List<KeyValuePair<IGameObject, IGameObject>>();

            { //difficulty easy

                String imageName = this.configuration.gameDifficulty == Configuration.GameDifficultyEnum.Easy ? "easy_selected.png" : "easy.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.easyLevelButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(0, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //difficulty medium

                String imageName = this.configuration.gameDifficulty == Configuration.GameDifficultyEnum.Medium ? "normal_selected.png" : "normal.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.mediumLevelButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(470, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //difficulty hard

                String imageName = this.configuration.gameDifficulty == Configuration.GameDifficultyEnum.Hard ? "hard_selected.png" : "hard.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.hardLevelButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(940, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            IGameObject backButton = this.createBackButton();
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(backButton, null));
            #if DEBUG
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(backButton), backButton));
            #endif

            return gameObjectParentGameObjectPairList;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        private List<KeyValuePair<IGameObject, IGameObject>> spawnControlsMenu()
        {
            List<KeyValuePair<IGameObject, IGameObject>> gameObjectParentGameObjectPairList = new List<KeyValuePair<IGameObject, IGameObject>>();

            { //hand control

                String imageName = this.configuration.userControlMethod == Configuration.UserControlMethodEnum.Hand ? "hand_control_selected.png" : "hand_control.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.handControlButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(0, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            { //head control

                String imageName = this.configuration.userControlMethod == Configuration.UserControlMethodEnum.Head ? "head_control_selected.png" : "head_control.png";

                Image buttonImage = new Image();
                buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(imageName)));
                buttonImage.Height = 350;
                buttonImage.Width = 420;
                buttonImage.Stretch = Stretch.Fill;
                buttonImage.StretchDirection = StretchDirection.Both;

                Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(420, 350)));
                ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.headControlButtonActivationDelegate);
                ButtonGameObject buttonGameObject = new ButtonGameObject(470, 350 - buttonImage.Height * 0.5, boundingBoxGeometry, buttonImage, true, buttonDelegate);

                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(buttonGameObject, this.menuAreaGameObject));
            #if DEBUG
                gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(buttonGameObject), buttonGameObject));
            #endif
            }

            IGameObject backButton = this.createBackButton();
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(backButton, null));
            #if DEBUG
            gameObjectParentGameObjectPairList.Add(new KeyValuePair<IGameObject, IGameObject>(new BoundingBoxViewerGameObject(backButton), backButton));
            #endif

            return gameObjectParentGameObjectPairList;
        }
        private IGameObject createBackButton()
        {
            ISceneManager sceneManager = GameLoop.getSceneManager();

            Image buttonImage = new Image();
            buttonImage.Source = new BitmapImage(new Uri(BitmapUtility.getImgResourcePath(@"back.png")));
            buttonImage.Height = 100;
            buttonImage.Width = 250;
            buttonImage.Stretch = Stretch.Fill;
            buttonImage.StretchDirection = StretchDirection.Both;

            Geometry boundingBoxGeometry = new RectangleGeometry(new Rect(new Point(0, 0), new Point(250, 100)));
            ButtonGameObject.ActivationDelegate buttonDelegate = new ButtonGameObject.ActivationDelegate(this.backButtonActivationDelegate);

            Point menuAreaButtomRightPoint = this.menuAreaGameObject.getBoundingBoxGeometry().Bounds.BottomRight;
            double xPos = sceneManager.getCanvasWidth() - buttonImage.Width;
            double yPos = sceneManager.getCanvasHeight() - buttonImage.Height;

            ButtonGameObject buttonGameObject = new ButtonGameObject(xPos, yPos, boundingBoxGeometry, buttonImage, true, buttonDelegate);

            return buttonGameObject;
        }