public override void Update()
        {
            MouseState mouse_state = Mouse.GetState(); // Gets the mouse state object
            Point mouse_position = new Point(mouse_state.X, mouse_state.Y); // creates a point for the mouse's position

            if (isStartButtonClicked)
            {
                if (mouse_state.LeftButton == ButtonState.Released)
                {
                    mStartPlayer = GlobalAccessors.mPlayer1;
                    //mStartPlayer.AddProgram(new HackerFactory());
                    //mStartPlayer.AddProgram(new Hacker2Factory());
                    //mStartPlayer.AddProgram(new MemManFactory());
                    mStartPlayer.AddProgram(new SniperFactory());
                    //mStartPlayer.AddProgram(new Sniper2Factory());
                    if (mStartPlayer.KelvinMode)
                    {
                        mStartPlayer.AddProgram(new KelvinFactory());
                    }
                    //mStartPlayer.AddProgram(new TrojanFactory());
                    //mStartPlayer.AddProgram(new Trojan2Factory());
                    //mStartPlayer.IsHacked = false;
                    StoryTellingGameState new_state = new StoryTellingGameState();
                    Mediator.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));

                    //TODO
                    //DEBUG CODE REMOVE BEFORE RELEASE
                    //mStartPlayer.AddHackedNode("Node1");
                    //mStartPlayer.AddHackedNode("Node2");
                    //-----------------------------------------
                }
            }

            if (isCreditsButtonClicked)
            {
                if (mouse_state.LeftButton == ButtonState.Released)
                {
                    CreditsGameState new_state = new CreditsGameState();
                    Mediator.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));
                }
            }

            if (isOptionsButtonClicked)
            {
                if (mouse_state.LeftButton == ButtonState.Released)
                {
                    OptionsGameState new_state = new OptionsGameState();
                    Mediator.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));
                }
            }

            if (isExitButtonClicked)
            {
                if (mouse_state.LeftButton == ButtonState.Released)
                {
                    GlobalAccessors.mGame.Exit();
                }
            }

            //Update for Start Button
            if (startGameRect.Contains(mouse_position) && mouse_state.LeftButton == ButtonState.Pressed)
            {
                //rectColor = Color.Red;
                isStartButtonClicked = true;
            }
            // if hovering over rectangle
            else if (startGameRect.Contains(mouse_position))
            {
                //rectColor = Color.Yellow;
            }
            else // neither clicking nor hovering over rectangle
            {
                //rectColor = Color.Green;
                isStartButtonClicked = false;
            }

            //Update for Options Button
            if (optionsRect.Contains(mouse_position) && mouse_state.LeftButton == ButtonState.Pressed)
            {
                //rectColor = Color.Red;
                isOptionsButtonClicked = true;
            }
            // if hovering over rectangle
            else if (optionsRect.Contains(mouse_position))
            {
                //rectColor = Color.Yellow;
            }
            else // neither clicking nor hovering over rectangle
            {
                //rectColor = Color.Green;
                isOptionsButtonClicked = false;
            }

            //Update for Credits Button
            if (creditsRect.Contains(mouse_position) && mouse_state.LeftButton == ButtonState.Pressed)
            {
                //rectColor = Color.Red;
                isCreditsButtonClicked = true;
            }
            // if hovering over rectangle
            else if (creditsRect.Contains(mouse_position))
            {
                //rectColor = Color.Yellow;
            }
            else // neither clicking nor hovering over rectangle
            {
                //rectColor = Color.Green;
                isCreditsButtonClicked = false;
            }

            //Update for Credits Button
            if (exitRect.Contains(mouse_position) && mouse_state.LeftButton == ButtonState.Pressed)
            {
                //rectColor = Color.Red;
                isExitButtonClicked = true;
            }
            // if hovering over rectangle
            else if (exitRect.Contains(mouse_position))
            {
                //rectColor = Color.Yellow;
            }
            else // neither clicking nor hovering over rectangle
            {
                //rectColor = Color.Green;
                isExitButtonClicked = false;
            }
        }