void SelectCell(Vector3 position) { HexCoordinates coordinates = HexCoordinates.FromPosition(position); HexCell cell = FindCell(coordinates); //判断点击格是否是当前格的周围且不能是当前格 //if (((Mathf.Abs(NextCell.coordinates.X - CurrentCell.coordinates.X) + Mathf.Abs(NextCell.coordinates.Y - CurrentCell.coordinates.Y) + Mathf.Abs(NextCell.coordinates.Z - CurrentCell.coordinates.Z)) < 3) // && ((NextCell.coordinates.X != CurrentCell.coordinates.X) || (NextCell.coordinates.Z != CurrentCell.coordinates.Z) || (NextCell.coordinates.Y != CurrentCell.coordinates.Y))) //{ //更新当前格 HexCell[] cells = oneArround(cell); List <HexCell> list = new List <HexCell>(); for (int i = 0; i < cells.Length; i++) { if (gridcontent.getcontent(cells[i]) == "Resource" || gridcontent.getcontent(cells[i]) == "Electric" || gridcontent.getcontent(cells[i]) == "FirstAid" || gridcontent.getcontent(cells[i]) == "MResource" || gridcontent.getcontent(cells[i]) == "MElectric" || gridcontent.getcontent(cells[i]) == "MFirstAid") { list.Add(cells[i]); } } cloneAround = list.ToArray(); PrintArround(grid.CellColor[5], list.ToArray()); //} //} }
public void newCoordinatesFromPositionTest() { Vector3 position = new Vector3(); position.x = 2; position.y = 1; position.z = 3; float x = position.x / (HexMetrics.innerRadius * 2f); float y = -x; float offset = position.z / (HexMetrics.outerRadius * 3f); x -= offset; y -= offset; int iX = Mathf.RoundToInt(x); int iY = Mathf.RoundToInt(y); int iZ = Mathf.RoundToInt(-x - y); HexCoordinates coord = HexCoordinates.FromPosition(position); Assert.AreEqual(iX, coord.X); Assert.AreEqual(iY, coord.Y); Assert.AreEqual(iZ, coord.Z); }
void InterferenceCell(Vector3 position) { HexCoordinates coordinates = HexCoordinates.FromPosition(position); HexCell cell = FindCell(coordinates); if (((Mathf.Abs(cell.coordinates.X - CurrentCell.coordinates.X) + Mathf.Abs(cell.coordinates.Y - CurrentCell.coordinates.Y) + Mathf.Abs(cell.coordinates.Z - CurrentCell.coordinates.Z)) < 6) && ((cell.coordinates.X != CurrentCell.coordinates.X) || (cell.coordinates.Z != CurrentCell.coordinates.Z) || (cell.coordinates.Y != CurrentCell.coordinates.Y))) { if (interferenceCells != null) { InterferenceColorReset(); } List <HexCell> cells = new List <HexCell>(oneArround(cell)); cells.Add(cell); for (int i = 0; i < cells.Count; i++) { if (cells[i] == CurrentCell) { cells.Remove(cells[i]); } } PrintArround(grid.CellColor[8], cells.ToArray()); interferenceCells = cells.ToArray(); } if (interferenceCells == null) { Debug.Log("3位置"); } }
public HexCell GetCell(Vector3 position) { position = transform.InverseTransformPoint(position);//Transform from worldspace to localspace HexCoordinates hexPosition = HexCoordinates.FromPosition(position); int index = hexPosition.Z * width + (hexPosition.X + hexPosition.Z / 2);//hexPos Z * w => Z rows of cells | x + z/2 because of X-axis shift return cells[index]; }
public void TouchCell(Vector3 position) { if (HexCoordinates.FromPosition(position) != null) { HexCoordinates coordinates = HexCoordinates.FromPosition(position); GameObject selectedObject; if ((selectedObject = EventManager.selectionManager.SelectedObject) != null) { if (selectedObject.tag == "Unit") { var spaceship = selectedObject.GetComponent <Spaceship>(); if (coordinates != spaceship.Coordinates && !spaceship.Flying && FromCoordinates(coordinates) != null && FromCoordinates(coordinates).IsEmpty()) { spaceship.Destination = coordinates; //DEBUG - after mouse clik unit goes {speed} fields in destination direction, hold mouse down to "see path" StartCoroutine(spaceship.MoveTo(spaceship.Destination)); } } } if (FromCoordinates(coordinates) != null) { EventManager.selectionManager.GridCellSelection = FromCoordinates(coordinates); //it's only one match, First() used to change type } //Debug.Log("touched at " + coordinates); } }
void TouchCell(Vector3 position) { position = transform.InverseTransformDirection(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); Debug.Log("touched at" + position); }
void Start() { gridCanvas = GetComponentInChildren <Canvas>(); hexMesh = GetComponentInChildren <HexMesh>(); //Calculate grid position and scale according to the aspect ratio. Vector3 worldPos = Camera.main.ScreenToWorldPoint(-Camera.main.transform.localPosition); Vector3 outerRadius = new Vector3(HexMetrics.outerRadius, HexMetrics.outerRadius, 0f); transform.localScale = transform.localScale * Camera.main.aspect / (200f / 300f); transform.position = worldPos + Vector3.Scale(outerRadius, transform.lossyScale); //Adapt the grid size to fit the screen. Vector3 maxWorldPos = Camera.main.ViewportToWorldPoint(new Vector3(Camera.main.rect.width - Camera.main.rect.x, Camera.main.rect.height - Camera.main.rect.y, 0f)); Vector3 maxLocalPos = transform.InverseTransformPoint(maxWorldPos); HexCoordinates maxCoordinates = HexCoordinates.FromPosition(maxLocalPos); width = maxCoordinates.X; height = maxCoordinates.Y - 1; //Remove 1 to keep one extra line for the score display. cells = new HexCell[width, height]; for (int y = 0; y < height; ++y) { for (int x = 0; x < width; ++x) { CreateCell(x, y); } } if (Debug.isDebugBuild) { hexMesh.Triangulate(cells); } }
/* Calculates path on change of hovered cell in coroutine, places it in * PathToDraw field and after that executes action given as argument */ private void PathToDrawOnMouseHover(System.Action action) { if ((EventManager.selectionManager.SelectedObject) == null || (EventManager.selectionManager.SelectedObject.tag) != "Unit" || FlyingSpaceshipLock || uiListener.IsUIOverride) { if (PathToDraw != null) { PathToDraw = null; } return; } Ray inputRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(inputRay, out hit)) { HexCoordinates lastCoordinates = MouseHooverCoordinates; MouseHooverCoordinates = HexCoordinates.FromPosition(hit.point); if (lastCoordinates != MouseHooverCoordinates) { PathToDraw = null; StartCoroutine(GetPathToDraw()); action(); } } }
void TouchCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * width + coordinates.Z / 2; HexCell cell = cells[index]; if (cell.playerCellStatus == PlayerCellStatus.NOTHING) { // doublecheck if its neighbor or not (rapid mouse movement could cause issues) for (int i = 0; i < 6; i++) { HexCell neighbor = cell.GetNeighbor((HexDirection)i); if ((neighbor != null) && (neighbor.playerCellStatus != PlayerCellStatus.NOTHING)) { cell.color = touchedColor; cell.playerCellStatus = PlayerCellStatus.PLAYER; RemoveFurthestCell(); if (cell.enemyCellStatus != EnemyCellStatus.NOTHING) { gameState.levelStarter.attack -= gameState.levelStarter.enemyPower; } break; } } } }
public HexCell GetCell(Vector3 worldPosition) { Vector3 position = transform.InverseTransformPoint(worldPosition); HexCoordinates coordinate = HexCoordinates.FromPosition(position); return(GetCell(coordinate.X, coordinate.Z)); }
void TouchCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2; HexCell cell = cells[index]; }
void CreateCell(int x, int z, int i) { Vector3 position; position.x = (x + z * 0.5f - z / 2) * (HexMetrics.innerRadius * 2f); position.y = 0f; position.z = z * (HexMetrics.outerRadius * 1.5f); HexCell cell = cells[i] = Instantiate <HexCell>(cellPrefab); cell.transform.SetParent(transform, false); cell.transform.localPosition = position; cell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); cell.index = cell.coordinates.X + cell.coordinates.Z * width + cell.coordinates.Z / 2; cell.transform.name = HexCoordinates.FromPosition(cell.transform.position).ToString(); cell.cost = Random.Range(0, 6); // random range 0 - 5 (int) // cell.color = Color.magenta /cell.cost; cell.color = Color.grey * 0.1f; Text label = Instantiate <Text>(cellLabelPrefab); label.rectTransform.SetParent(gridCanvas.transform, false); label.rectTransform.anchoredPosition = new Vector2(position.x, position.z); //label.rectTransform.rect.Set(position.x, position.y, 10,15); label.text = cell.coordinates.ToStringOnSeparateLines(); }
public void HighlightMouse(Vector3 position, int radius, HexColor color) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2; if (index >= 0 && index < totalCells && CheckOuterEdges(index, coordinates)) { HexCell cell = cells[index]; currentCell = cell; // if color is red (for targeting) and cell is white if (previousCell != null && currentCell != previousCell) { if ((color == HexColor.RED && cell.GetWhite() == true) || color != HexColor.RED) { HighLightCellsCircle(cell, radius, color); } else if (color == HexColor.RED) { clearHighlightedList(color); } } previousCell = currentCell; } }
public HexCell GetCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); return(GetCell(coordinates)); }
void TouchCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); Debug.Log("touched at " + coordinates.ToString()); }
public HexCoordinates ReturnHexCoords(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); return(coordinates); }
public HexCell ChangeHex(Vector3 position) { HexCoordinates coordinates = HexCoordinates.FromPosition(position, HexOuterRadiusInMeters, HexInnerRadiusInMeters); int index = coordinates.X + coordinates.Y * chunkSizeX + coordinates.Y / 2; return(cells[index]); }
public HexGridChunk GetChunk(Vector3 position) { position = transform.InverseTransformPoint(position);//坐标转换 HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * cellCountWidth + coordinates.Z / 2; return(cells[index].chunkParent); }
public HexCell GetCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * width + coordinates.Z / 2; return(index >= 0 && index < cells.Length ? cells[index] : null); }
/// <summary> /// 得到细胞,根据位置 /// </summary> public HexCell GetCell(Vector3 position) { position = transform.InverseTransformPoint(position); //这里是循环坐标,所以用重新计算coordinates, var coordinates = HexCoordinates.FromPosition(position); return(GetCell(coordinates)); }
//use send position cross function public HexCoordinates getTouchCoordinate() { Ray inputRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; Physics.Raycast(inputRay, out hit); return(HexCoordinates.FromPosition(hit.point)); }
// private void Start() // { // _currentIndex = _startCell; // } public List <Vector3> RoutePositions(Vector3 startPoint) { _currentIndex = HexCoordinates.FromPosition(startPoint).ToIndexIfWith(HexWidth); UpdateOnRequest(); return(_routePosition); }
public HexCell GetCellByPosition(Vector3 position) { //position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * width + coordinates.Z / 2; return(cells[index]); }
public HexCell GetHexcellFromPosition(Vector3 pos) { HexCoordinates coordinates = HexCoordinates.FromPosition(pos); int index = coordinates.X + coordinates.Z * width + coordinates.Z / 2; HexCell cell = cells[index]; return(cell); }
private HexCell GetCellByPosition(Vector3 position) { position = transform.InverseTransformPoint(position); var coordinates = HexCoordinates.FromPosition(position); var index = coordinates.X + coordinates.Z * Width + coordinates.Z / 2; return(index > 0 && index < _cells.Length ? _cells[index] : null); }
/* * returns the hex at a given position */ public HexCell getHex(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * width + coordinates.Z / 2; return(hexGrid[index]); }
public HexCell GetCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2; //convert the cell coordinates to an array index return(cells[index]); }
public int GetCellIndex(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * width + coordinates.Z / 2; return(index); }
public HexCell GetCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinates = HexCoordinates.FromPosition(position); int index = coordinates.X + coordinates.Z * cellCountX + coordinates.Z / 2; return(_cells[index]); }
void TouchCell(Vector3 position) { position = transform.InverseTransformPoint(position); HexCoordinates coordinate = HexCoordinates.FromPosition(position); HexCell cell = GetCell(coordinate.X, coordinate.Z); GameManagerScript.Instance.HandleOnClickCell(cell); }