private void updateGhost1()
    {
        bool teleportMovement = false;

        if (!tweener.tweenActive())
        {
            Vector2 playerPos = playerController.getGridPos();
            //for some reason x is y and y is x. I screwed up and I will not do this again...
            //wait, but x is y already in the grid pos so since they're already switched I will only need
            //to compare them directly. Don't switch them idiot.
            List <string> validMoves = new List <string>();
            if (surroundLMObjects[0][1].tag == "pellet" || surroundLMObjects[0][1].tag == "powerpellet" || surroundLMObjects[0][1].tag == "empty" || surroundLMObjects[0][1].tag == "teleport")
            {
                if (!isOldDir(0))
                {
                    validMoves.Add("up");
                }
            }
            if (surroundLMObjects[1][0].tag == "pellet" || surroundLMObjects[1][0].tag == "powerpellet" || surroundLMObjects[1][0].tag == "empty" || surroundLMObjects[1][0].tag == "teleport")
            {
                if (!isOldDir(3))
                {
                    validMoves.Add("left");
                }
            }
            if (surroundLMObjects[2][1].tag == "pellet" || surroundLMObjects[2][1].tag == "powerpellet" || surroundLMObjects[2][1].tag == "empty" || surroundLMObjects[2][1].tag == "teleport")
            {
                if (!isOldDir(2))
                {
                    validMoves.Add("down");
                }
            }
            if (surroundLMObjects[1][2].tag == "pellet" || surroundLMObjects[1][2].tag == "powerpellet" || surroundLMObjects[1][2].tag == "empty" || surroundLMObjects[1][2].tag == "teleport")
            {
                if (!isOldDir(1))
                {
                    validMoves.Add("right");
                }
            }

            Vector2    dif           = getDif(playerPos, gridPos);
            List <int> difValidMoves = new List <int>();
            for (int i = 0; i < validMoves.Count; i++)
            {
                switch (validMoves[i])
                {
                case "up":
                    //add the two components of dif and compare the value with the sum of gridPos dif IF up was chosen.
                    //save in a List in the same order as validmoves.
                    Vector2 ifUpDif = getDif(playerPos, gridPos + new Vector2(-1, 0));
                    difValidMoves.Add((int)(ifUpDif.x + ifUpDif.y));
                    break;

                case "left":
                    if (surroundLMObjects[1][0].tag == "teleport")
                    {
                        teleportMovement = true;
                        tweener.AddTween(gameObject.transform,
                                         gameObject.transform.position,
                                         new Vector3(gameObject.transform.position.x + 1.25f, gameObject.transform.position.y, 0),
                                         delayAnim);
                        gridPos += new Vector2(0, 1);
                        lastMove = 1;
                        ghost.setEyeState("right");
                    }
                    else
                    {
                        Vector2 ifLeftDif = getDif(playerPos, gridPos + new Vector2(0, -1));
                        difValidMoves.Add((int)(ifLeftDif.x + ifLeftDif.y));
                    }
                    break;

                case "down":
                    Vector2 ifDownDif = getDif(playerPos, gridPos + new Vector2(1, 0));
                    difValidMoves.Add((int)(ifDownDif.x + ifDownDif.y));
                    break;

                case "right":
                    if (surroundLMObjects[1][2].tag == "teleport")
                    {
                        teleportMovement = true;
                        tweener.AddTween(gameObject.transform,
                                         gameObject.transform.position,
                                         new Vector3(gameObject.transform.position.x - 1.25f, gameObject.transform.position.y, 0),
                                         delayAnim);
                        if (!(gridPos.y - 1 < 0))
                        {
                            gridPos += new Vector2(0, -1);
                            lastMove = 3;
                        }
                        ghost.setEyeState("left");
                    }
                    else
                    {
                        Vector2 ifRightDif = getDif(playerPos, gridPos + new Vector2(0, 1));
                        difValidMoves.Add((int)(ifRightDif.x + ifRightDif.y));
                    }
                    break;
                }
            }

            if (!teleportMovement)
            {
                int minDif      = 0;
                int minDifIndex = 0;
                for (int i = 0; i < difValidMoves.Count; i++)
                {
                    if (difValidMoves[i] > minDif)
                    {
                        minDif      = difValidMoves[i];
                        minDifIndex = i;
                    }
                }
                switch (validMoves[minDifIndex])
                {
                //Move the object.
                case "up":
                    tweener.AddTween(gameObject.transform,
                                     gameObject.transform.position,
                                     new Vector3(gameObject.transform.position.x, gameObject.transform.position.y + 1.25f, 0),
                                     delayAnim);
                    gridPos += new Vector2(-1, 0);
                    lastMove = 0;
                    ghost.setEyeState("up");
                    break;

                case "left":
                    tweener.AddTween(gameObject.transform,
                                     gameObject.transform.position,
                                     new Vector3(gameObject.transform.position.x - 1.25f, gameObject.transform.position.y, 0),
                                     delayAnim);
                    if (!(gridPos.y - 1 < 0))
                    {
                        gridPos += new Vector2(0, -1);
                        lastMove = 3;
                    }
                    ghost.setEyeState("left");
                    break;

                case "down":
                    tweener.AddTween(gameObject.transform,
                                     gameObject.transform.position,
                                     new Vector3(gameObject.transform.position.x, gameObject.transform.position.y - 1.25f, 0),
                                     delayAnim);
                    gridPos += new Vector2(1, 0);
                    lastMove = 2;
                    ghost.setEyeState("down");
                    break;

                case "right":
                    tweener.AddTween(gameObject.transform,
                                     gameObject.transform.position,
                                     new Vector3(gameObject.transform.position.x + 1.25f, gameObject.transform.position.y, 0),
                                     delayAnim);
                    gridPos += new Vector2(0, 1);
                    lastMove = 1;
                    ghost.setEyeState("right");
                    break;
                }
            }
        }
    }