public bool MoveUnit(TileScript source, TileScript dest)
    {
        if(!markedTiles.Contains (dest)) return false;
        if(!source.unit) return false;

        if (source.GetUnitScript().CanMove())
        {

            source.GetUnitScript().timesMoved++;
            Debug.Log("Moved " + source.GetUnitScript().timesMoved + "times.");
            UnitScript unitToMove = source.GetUnitScript();

            //THIS WHOLE WHILE LOOP IS JUST TO FIND WHICH WAY TO GO FIRST.
            //FROM HERE
            TileScript tempSource = dest;
            while (tempSource != source)
            {

                if (tempSource.directionFrom == TileScript.Direction.LEFT)
                {
                    tempSource = tileMap.At(tempSource.x - 1, tempSource.y);
                    tempSource.directionToGo = TileScript.Direction.RIGHT;
                    if (tempSource == source)
                    {
                        source.directionToGo = TileScript.Direction.RIGHT;
                        break;
                    }
                }
                else if (tempSource.directionFrom == TileScript.Direction.RIGHT)
                {
                    tempSource = tileMap.At(tempSource.x + 1, tempSource.y);
                    tempSource.directionToGo = TileScript.Direction.LEFT;
                    if (tempSource == source)
                    {
                        source.directionToGo = TileScript.Direction.LEFT;
                        break;
                    }
                }
                else if (tempSource.directionFrom == TileScript.Direction.DOWN)
                {
                    tempSource = tileMap.At(tempSource.x, tempSource.y - 1);
                    tempSource.directionToGo = TileScript.Direction.UP;
                    if (tempSource == source)
                    {
                        source.directionToGo = TileScript.Direction.UP;
                        Debug.Log("source will go " + source.directionToGo);
                        break;
                    }
                }
                else if (tempSource.directionFrom == TileScript.Direction.UP)
                {
                    tempSource = tileMap.At(tempSource.x, tempSource.y + 1);
                    tempSource.directionToGo = TileScript.Direction.DOWN;
                    if (tempSource == source)
                    {
                        source.directionToGo = TileScript.Direction.DOWN;
                        break;
                    }
                }
            }
            //TO HERE

            // This makes the animations better so the idiot unit doesn't turn left at the end of moving
            if (dest.directionFrom == TileScript.Direction.LEFT)
                dest.directionToGo = TileScript.Direction.RIGHT;
            else if (dest.directionFrom == TileScript.Direction.RIGHT)
                dest.directionToGo = TileScript.Direction.LEFT;
            else if (dest.directionFrom == TileScript.Direction.UP)
                dest.directionToGo = TileScript.Direction.DOWN;
            else if (dest.directionFrom == TileScript.Direction.DOWN)
                dest.directionToGo = TileScript.Direction.UP;

            //THE ACTUAL MOVEMENT.

            List<TileScript> tilesToMoveTo = new List<TileScript>();

            while (source != dest)
            {
                Game.Team team = GetComponent<Game>().GetCurrentTeam();

                team.actionPoints -= source.GetImpedence();
                unitToMove.tilesMovedThisTurn += source.GetImpedence();

                if (source.directionToGo == TileScript.Direction.LEFT)
                {
                    if(!FoundInterruption(tilesToMoveTo, source, -1, 0))
                        source = tileMap.At(source.x - 1, source.y);
                    else
                        break;
                }
                else if (source.directionToGo == TileScript.Direction.RIGHT)
                {
                    if(!FoundInterruption(tilesToMoveTo, source, 1, 0))
                        source = tileMap.At(source.x + 1, source.y);
                    else
                        break;
                }
                else if (source.directionToGo == TileScript.Direction.DOWN)
                {
                    if(!FoundInterruption(tilesToMoveTo, source, 0, -1))
                        source = tileMap.At(source.x, source.y-1);
                    else
                        break;
                }
                else if (source.directionToGo == TileScript.Direction.UP)
                {
                    if(!FoundInterruption(tilesToMoveTo, source, 0, 1))
                        source = tileMap.At(source.x, source.y + 1);
                    else
                        break;
                }
            }

            if(foundWater) {
                foundWater = false;
                if(unitToMove.tilesMovedThisTurn < unitToMove.range) {
                    unitToMove.timesMoved--;
                    unitToMove.tilesMovedThisTurn--;
                }
                Debug.Log ("F**K THIS CODE");
            }

            /*
            foreach(TileScript tile in tilesToMoveTo) {
                foreach(TileScript visTile in visibleTilesFrom(tile)) {
                    Game.getInstance().GetCurrentTeam().foundTiles.Add (visTile);
                }
            }
            */

            // reset soruce to the original
            source = unitToMove.parentTile;

            unitToMove.gameObject.AddComponent<UnitMoveScript>().moveTo(tilesToMoveTo); // animation
            tilesToMoveTo[tilesToMoveTo.Count - 1].AddUnit(source.unit); // sets unit's new location
            source.unit = null;

            if(unitToMove.CanMove())
                unitToMove.tilesMovedThisTurn = 0;

            //Game.getInstance().UnitMovedCallback();
            return true;
        }
        else
            return false;
    }