private void DrawHighlight()
    {
        Ray        inputRay = mainCamera.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(inputRay, out hit))
        {
            point2 = hit;
            //Vector3 position1 = transform.InverseTransformPoint(point1.point);
            //Vector3 position2 = transform.InverseTransformPoint(hit.point);
            Coordnaites coords1 = Coordnaites.FromPosition(point1.point);
            Coordnaites coords2 = Coordnaites.FromPosition(hit.point);


            int highX = (coords1.X < coords2.X ? coords2.X : coords1.X);
            int lowX  = (coords1.X < coords2.X ? coords1.X : coords2.X);
            int highZ = (coords1.Z < coords2.Z ? coords2.Z : coords1.Z);
            int lowZ  = (coords1.Z < coords2.Z ? coords1.Z : coords2.Z);
            //int highY = (coords1.Y < coords2.Y ? coords2.Y : coords1.Y);
            //int lowY = (coords1.Y < coords2.Y ? coords1.Y : coords2.Y);

            int indexH = highX + highZ * grid.width + highZ / 2;
            int index1 = lowX + highZ * grid.width + highZ / 2;
            int indexL = lowX + lowZ * grid.width + lowZ / 2;
            int index2 = highX + lowZ * grid.width + lowZ / 2;

            corners[0] = grid.tiles[index1].transform.position;
            corners[1] = grid.tiles[indexH].transform.position;
            corners[2] = grid.tiles[index2].transform.position;
            corners[3] = grid.tiles[indexL].transform.position;

            DrawBox(corners[0], corners[1], corners[2], corners[3]);
            //LR.SetPosition(4, grid.tiles[index1].transform.position);
        }
    }
    void HandleInput()
    {
        if (SelectedTile != null)
        {
            SelectedTile.color = SelectedTile.savedColor;
        }
        point1     = new RaycastHit();
        point2     = new RaycastHit();
        LR.enabled = false;
        anitLine   = false;
        Ray        inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(inputRay, out hit))
        {
            Coordnaites coords = Coordnaites.FromPosition(hit.point);
            SelectedTile            = grid.tiles[coords.X + coords.Z * grid.width + coords.Z / 2];
            SelectedTile.savedColor = SelectedTile.color;
            SelectedTile.color      = new Color(0, 0, 0);
            UpdateMenu();
        }
        grid.hexMesh.Triangulate(grid.tiles);
    }
    void Update()
    {
        if (Input.GetMouseButtonDown(2) && !EventSystem.current.IsPointerOverGameObject())
        {
            Ray        inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(inputRay, out hit))
            {
                grid.ShowToolTip(hit.point);
            }
        }

        if (Input.GetMouseButtonDown(0) && !EventSystem.current.IsPointerOverGameObject())
        {
            HandleInput();
        }
        if (Input.GetMouseButtonDown(1) && !EventSystem.current.IsPointerOverGameObject())
        {
            LR.enabled = true;
            anitLine   = false;
            Ray        inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(inputRay, out hit))
            {
                point1 = hit;
                down   = true;
            }
        }
        if (Input.GetMouseButtonUp(1) && !EventSystem.current.IsPointerOverGameObject() && down)
        {
            down     = false;
            anitLine = true;
            Ray        inputRay = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(inputRay, out hit))
            {
                MultiTile.Clear();
                SelectedTile = MultiTile;
                UpdateMenu();
                point2 = hit;
                SelectedTiles.Clear();

                //Vector3 position1 = transform.InverseTransformPoint(point1.point);
                //Vector3 position2 = transform.InverseTransformPoint(point2.point);
                Coordnaites coords1 = Coordnaites.FromPosition(point1.point);
                Coordnaites coords2 = Coordnaites.FromPosition(point2.point);

                int highX = (coords1.X < coords2.X ? coords2.X : coords1.X);
                int lowX  = (coords1.X < coords2.X ? coords1.X : coords2.X);
                int highZ = (coords1.Z < coords2.Z ? coords2.Z : coords1.Z);
                int lowZ  = (coords1.Z < coords2.Z ? coords1.Z : coords2.Z);

                foreach (Tile tile in grid.tiles)
                {
                    if (tile.coordinates.X <= highX && tile.coordinates.X >= lowX && tile.coordinates.Z <= highZ && tile.coordinates.Z >= lowZ)
                    {
                        SelectedTiles.Add(tile);
                    }
                }
                Debug.Log(SelectedTiles.Count());
            }
            point1 = new RaycastHit();
        }
        if (down)
        {
            // do line renderer stuff

            DrawHighlight();
        }

        if (anitLine)
        {
            if (swotch)
            {
                DrawBox(corners[0], corners[1], corners[2], corners[3]);
                on++;
            }
            else
            {
                DrawBox(corners[1], corners[2], corners[3], corners[0]);
                on++;
            }
            if (on % 50 == 0)
            {
                swotch = !swotch;
            }
        }
    }