//public void mMouse_Click(string channel, object sender, EventArgs args) { }
        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 (mouseClicked)
            {
                if (mouse_state.LeftButton == ButtonState.Pressed)
                {
                    //mouseClicked = false;
                    return;
                }
                else if (firstLevel == true)
                {
                    mPlayer1InOverWorld.CurrentNode = "Node1";
                    mPlayer1InOverWorld.SpawnTutorial = true;
                    //mouseClicked = false;
                    MapSpawnGameState new_state;
                    if (mPlayer1InOverWorld.TutorialMode == true)
                    {
                        new_state = new TutorialMapSpawnGameState((new FirstMapFactory()).NewInstance());
                    }
                    else
                    {
                        new_state = new MapSpawnGameState((new FirstMapFactory()).NewInstance());
                    }
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (secondLevel == true)
                {
                    mPlayer1InOverWorld.CurrentNode = "Node2";
                    mPlayer1InOverWorld.level2Tutorial = true;
                    //mouseClicked = false;
                    MapSpawnGameState new_state;
                    if (mPlayer1InOverWorld.TutorialMode == true)
                    {
                        new_state = new TutorialMapSpawnGameState((new SecondMapFactory()).NewInstance());
                    }
                    else
                    {
                        new_state = new MapSpawnGameState((new SecondMapFactory()).NewInstance());
                    }
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (thirdLevel == true)
                {
                    mPlayer1InOverWorld.CurrentNode = "Node3";
                    //mouseClicked = false;
                    MapSpawnGameState new_state = new MapSpawnGameState((new ThirdMapFactory()).NewInstance());
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (shop1 == true)
                {
                    //Programs Available in the shop MIGHT NEED TO CHANGE INSTANTIATION LATER
                    List<ProgramFactory> tempShopList = new List<ProgramFactory>();

                    tempShopList.Add(new SniperFactory());
                    tempShopList.Add(new HackerFactory());
                    tempShopList.Add(new MemManFactory());
                    tempShopList.Add(new TrojanFactory());
                    tempShopList.Add(new Sniper2Factory());

                    //mouseClicked = false;

                    ShopState new_state = new ShopState(tempShopList);
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (fourthLevel == true)
                {
                    //mouseClicked = false;
                    mPlayer1InOverWorld.CurrentNode = "Node4";
                    MapSpawnGameState new_state = new MapSpawnGameState((new FourthMapFactory()).NewInstance());
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (fifthLevel == true)
                {
                    //mouseClicked = false;
                    mPlayer1InOverWorld.CurrentNode = "Node5";
                    MapSpawnGameState new_state = new MapSpawnGameState((new FifthMapFactory()).NewInstance());
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (shop2 == true)
                {
                    List<ProgramFactory> tempShopList = new List<ProgramFactory>();

                    tempShopList.Add(new SniperFactory());
                    tempShopList.Add(new HackerFactory());
                    tempShopList.Add(new Hacker2Factory());
                    tempShopList.Add(new MemManFactory());
                    tempShopList.Add(new TrojanFactory());
                    tempShopList.Add(new Trojan2Factory());
                    tempShopList.Add(new Sniper2Factory());

                    //mouseClicked = false;

                    ShopState new_state = new ShopState(tempShopList);
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else if (bossLevel == true)
                {
                    //mouseClicked = false;
                    mPlayer1InOverWorld.CurrentNode = "Node6";
                    MapSpawnGameState new_state = new MapSpawnGameState((new SixthMapFactory()).NewInstance());
                    Mediator.Notify("haxxit.engine.state.push", this, new ChangeStateEventArgs(new_state));
                }
                else
                {
                    mouseClicked = false;
                    //PushState(new MapSpawnGameState((new SpawnMapFactory()).NewInstance()));
                    //ShopState new_state = new ShopState();
                    //MapSpawnGameState new_state = new MapSpawnGameState((new SpawnMapFactory()).NewInstance());
                    //Mediator.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));
                }
            }

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

            for (int i = 0; i < nodeArray.Length; i++)
            {
                if (nodeArray[i].Contains(mouse_position) && mouse_state.LeftButton == ButtonState.Pressed && !mouseClicked && isNodeClickable[i] == true)
                {
                    //Node slection
                    mMouseClickedRectangleIndex = i;
                    //isNodeHacked[i] = true;
                    mouseClicked = true;

                    firstLevel = false;
                    secondLevel = false;
                    thirdLevel = false;
                    fourthLevel = false;
                    fifthLevel = false;
                    bossLevel = false;
                    shop1 = false;
                    shop2 = false;

                    if (i == 0 && mPlayer1InOverWorld.IsNodeHacked("Node1") == false)
                    {
                        firstLevel = true;
                    }
                    else if (i == 1)
                    {
                        shop1 = true;
                    }
                    else if (i == 2)
                    {
                        secondLevel = true;
                    }
                    else if (i == 3)
                    {
                        thirdLevel = true;
                    }
                    else if (i == 4)
                    {
                        fourthLevel = true;
                    }
                    else if (i == 5)
                    {
                        fifthLevel = true;
                    }
                    else if (i == 6)
                    {
                        shop2 = true;
                    }
                    else if (i == 7)
                    {
                        bossLevel = true;
                    }

                    return;
                }
            }
        }
        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 (isContinueButtonClicked)
            {
                if (mouse_state.LeftButton == ButtonState.Released)
                {
                    if (mPlayer1Tutorial.SpawnTutorial == true)
                    {
                        mPlayer1Tutorial.SpawnTutorial = false;
                        TutorialMapSpawnGameState new_state = new TutorialMapSpawnGameState(display_map_state);
                        _mediator_manager.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));
                    }
                    else if (mPlayer1Tutorial.level2Tutorial == true)
                    {
                        mPlayer1Tutorial.level2Tutorial = false;
                        TutorialMapSpawnGameState new_state = new TutorialMapSpawnGameState(display_map_state);
                        _mediator_manager.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));

                    }
                    else
                    {
                        MapPlayGameState new_state = new MapPlayGameState(display_map_state);
                        _mediator_manager.Notify("haxxit.engine.state.change", this, new ChangeStateEventArgs(new_state));
                    }
                }
            }

            //Update for Continue Button
            if (ContinueButtonRect.Contains(mouse_position) && mouse_state.LeftButton == ButtonState.Pressed)
            {
                isContinueButtonClicked = true;
            }
            // if hovering over rectangle
            else if (ContinueButtonRect.Contains(mouse_position))
            {
            }
            else // neither clicking nor hovering over rectangle
            {
                isContinueButtonClicked = false;
            }
        }