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; } } }