private void UpdateForce(Node node)
        {
            Force     force     = (Force)node;
            string    text      = $"{force.Name}";
            Vector2   sizeText  = Assets.ARJULIAN.MeasureString(text);
            Rectangle resizeBox = new Rectangle(new Point(
                                                    (int)force.Position.X + force.Width - 18,
                                                    (int)force.Position.Y + force.Height - 17),
                                                new Point(18, 17));

            if (Mouse.GetState().LeftButton == ButtonState.Pressed)
            {
                if (resizeBox.Contains(Mouse.GetState().Position))
                {
                    isResizing             = true;
                    currentlySelectedForce = force;

                    Debug.WriteLine($"Resize X: {resizeSize.X}, Resize Y: {resizeSize.Y}");
                }

                if (isResizing && currentlySelectedForce == force)
                {
                    Vector2 sizeCurrentText = Assets.ARJULIAN.MeasureString(currentlySelectedForce.Name);
                    resizeSize = new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y) - currentlySelectedForce.Position;
                    currentlySelectedForce.Width  = Math.Max((int)sizeCurrentText.X, (int)resizeSize.X);
                    currentlySelectedForce.Height = (int)resizeSize.Y;
                }

                if (currentlySelectedForce == null && force.MouseOver() && !isResizing)
                {
                    mouseOffset            = Mouse.GetState().Position.ToVector2() - force.Position;
                    force.Grabbed          = true;
                    currentlySelectedForce = force;

                    Debug.WriteLine($"X: {force.Position.X}, Y: {force.Position.Y}, Force Name: {force.Name}");
                }
            }
            else
            {
                if (Mouse.GetState().RightButton == ButtonState.Pressed && force.GetRectangle().Contains(Mouse.GetState().Position))
                {
                    Program.GameManager.ChangeState(new ForceManagerState(Program.GameManager, Program.GameManager.GraphicsDevice, Program.GameManager.Content, force));
                    return;
                }
                currentlySelectedForce = null;
            }

            if (force.Grabbed && currentlySelectedForce == force && !isResizing && !collided)
            {
                //new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y) - box.Location.ToVector2();
                force.Position = Mouse.GetState().Position.ToVector2() - mouseOffset; // - mouseOffset/2 makes it really smooth;
                if (force.Position.X < 0)
                {
                    force.Position.X = 0;
                }
                if (force.Position.Y < 0)
                {
                    force.Position.Y = 0;
                }
                if (force.GetRectangle().Right > view.viewPortWidth)
                {
                    force.Position.X = view.viewPortWidth - force.Width;
                }
                if (force.GetRectangle().Bottom > view.viewPortHeight)
                {
                    force.Position.Y = view.viewPortHeight - force.Height;
                }
                if (Mouse.GetState().LeftButton == ButtonState.Released)
                {
                    force.Grabbed          = false;
                    currentlySelectedForce = null; // Try commenting this.
                }
            }

            bool justCollided = false;

            void DidCollide(Node node1)
            {
                Force force1 = (Force)node1;

                if (currentlySelectedForce != force1 && currentlySelectedForce.GetRectangle().Intersects(new Rectangle(new Point((int)force1.Position.X, (int)force1.Position.Y), new Point(force1.Width, force1.Height))))
                {
                    justCollided = true;
                }
            }

            if (currentlySelectedForce == force)
            {
                tree.Parent.Traverse(tree.Parent, DidCollide);
            }

            if (isResizing && Mouse.GetState().LeftButton == ButtonState.Released && currentlySelectedForce != null && !justCollided)
            {
                Vector2 sizeCurrentText = Assets.ARJULIAN.MeasureString(currentlySelectedForce.Name);
                isResizing = false;
                resizeSize = Mouse.GetState().Position.ToVector2() - currentlySelectedForce.Position;
                currentlySelectedForce.Width  = Math.Max((int)sizeCurrentText.X, (int)resizeSize.X);
                currentlySelectedForce.Height = (int)resizeSize.Y;
                currentlySelectedForce        = null;

                //Debug.WriteLine("It is the 41st Millennium. For more than a hundred centuries The Emperor has sat immobile on the Golden Throne of Earth. He is the Master of Mankind by the will of the gods, and master of a million worlds by the might of his inexhaustible armies. He is a rotting carcass writhing invisibly with power from the Dark Age of Technology. He is the Carrion Lord of the Imperium for whom a thousand souls are sacrificed every day, so that he may never truly die.");
            }

            Vector2 offset;

            void DoCollisionTest(Node node1)
            {
                Force force1 = (Force)node1;

                if (currentlySelectedForce != force1 && currentlySelectedForce.GetRectangle().Intersects(force1.GetRectangle()))
                {
                    //collided = true;
                    offset = currentlySelectedForce.Position - force1.Position;
                    currentlySelectedForce.Position += offset / ((float)1);
                    if (force1.GetChildren().Contains(currentlySelectedForce) && currentlySelectedForce.Parent != null)
                    {
                        //force1.GetChildren().Remove(currentlySelectedForce);
                        //for (int kid = 0; kid < force1.GetNumberOfChildren(); kid++)
                        //    force1.GetChildren()[kid].Emancipated = true;
                        currentlySelectedForce.Emancipated = true;
                        currentlySelectedForce.Parent      = null;
                    }
                    else
                    {
                        if (force1.Parent != currentlySelectedForce)   // TODO: parent somewhere is stil null, fix that.
                        {
                            if (currentlySelectedForce.Parent != null)
                            {
                                Force copy = new Force(currentlySelectedForce.Name, (int)currentlySelectedForce.Position.X, (int)currentlySelectedForce.Position.Y);
                                for (int i = 0; i < currentlySelectedForce.GetNumberOfChildren(); i++)
                                {
                                    copy.AddChild(currentlySelectedForce.GetChildren()[i]);
                                }
                                copy.Width  = currentlySelectedForce.Width;
                                copy.Height = currentlySelectedForce.Height;
                                copy.Name   = currentlySelectedForce.Name;
                                copy.Parent = null;
                                currentlySelectedForce.Parent.GetChildren().Remove(currentlySelectedForce);
                                currentlySelectedForce = copy;
                            }

                            currentlySelectedForce.Emancipated = false;
                            force1.AddChild(currentlySelectedForce);
                        }
                    }

                    Debug.WriteLine($"Current: {currentlySelectedForce.Name}, {force1.Name}, oX: {offset.X}, oY: {offset.Y}");
                }
            }

            if (currentlySelectedForce == force)
            {
                tree.Parent.Traverse(tree.Parent, DoCollisionTest);
            }

            previousMouseState    = Mouse.GetState().LeftButton;
            previousMousePosition = new Vector2(Mouse.GetState().Position.X, Mouse.GetState().Position.Y);
        }